Эх сурвалжийг харах

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 жил өмнө
parent
commit
826d750921
48 өөрчлөгдсөн 881 нэмэгдсэн , 81 устгасан
  1. 1 1
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 2 2
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  3. 1 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java
  4. 5 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java
  5. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/CorporationInfo.java
  6. 24 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  7. 48 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/BudgetAndPracticalByDeptVO.java
  8. 36 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/BudgetAndPracticalByMonthVO.java
  9. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPlanInfoVO.java
  10. 2 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserFilesInfoVO.java
  11. 8 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  12. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  13. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  14. 20 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  15. 5 2
      blade-service/blade-control/src/main/java/org/springblade/control/controller/CorporationInfoController.java
  16. 13 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DictInfoController.java
  17. 12 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java
  18. 55 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/UserContractInfoController.java
  19. 22 2
      blade-service/blade-control/src/main/java/org/springblade/control/controller/UserFilesInfoController.java
  20. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.java
  21. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml
  22. 2 4
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/CorporationInfoMapper.xml
  23. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  24. 15 5
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  25. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  26. 0 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  27. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.xml
  28. 5 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserFilesInfoMapper.xml
  29. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java
  30. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java
  31. 10 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  32. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  33. 132 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  34. 42 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java
  35. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  36. 4 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  37. 183 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  38. 30 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  39. 125 23
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  40. 1 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java
  41. 1 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
  42. 14 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java
  43. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  44. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  45. 1 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  46. 13 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  47. 6 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  48. 7 1
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 1 - 1
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -46,7 +46,7 @@ public interface LauncherConstant {
     String APPLICATION_XXLJOB_ADMIN_NAME = APPLICATION_NAME_PREFIX + "xxljob-admin";
 
     /**
-     * nacos dev 地址 172.31.222.127   192.168.0.109 127.0.0.1
+     * nacos dev 地址 172.31.222.127   192.168.0.109     127.0.0.1
      */
     String NACOS_DEV_ADDR = "127.0.0.1:8848";
 

+ 2 - 2
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -504,7 +504,7 @@ public class CommonUtil {
     }
 
     public static String replaceOssUrl(String url) {
-        String osName = System.getProperty("os.name");
+       /* String osName = System.getProperty("os.name");
         if (osName != null && osName.toLowerCase().contains("linux")) {
             // 如果当前操作系统是Linux系统
             Map<String, String> envMap = System.getenv();
@@ -514,7 +514,7 @@ public class CommonUtil {
             }
         }
         //后续删除
-        System.out.println("replaceOssUrl " + url);
+        System.out.println("replaceOssUrl " + url);*/
         return url;
     }
 

+ 1 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -519,6 +519,7 @@ public class LargeFileEndpoint {
                 }
             }
         } catch (IOException e) {
+
         } finally {
             try {
                 if (fileInputStream != null) {

+ 5 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java

@@ -143,6 +143,11 @@ public class ArchivesAutoVO extends ArchivesAuto {
 	 */
 	private Integer cabinetNumber;
 
+	/**
+	 * 柜子内案卷侧面名称
+	 */
+	private String sideNumber;
+
 	/**
 	 * 案卷在柜子里的状态
 	 */

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/CorporationInfo.java

@@ -42,7 +42,7 @@ public class CorporationInfo extends BaseEntity {
      * 制度pdf地址
      */
     @ApiModelProperty(value = "制度pdf地址")
-    private String link;
+    private String linkUrl;
     /**
      * 制度域名
      */

+ 24 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -116,6 +116,9 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "计划天数")
     private BigDecimal planDays;
 
+    @ApiModelProperty(value = "计划人工成本")
+    private BigDecimal planStaffCost;
+
     @ApiModelProperty(value = "任务实际完成天数")
     private BigDecimal practicalTaskDays;
 
@@ -135,4 +138,25 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "任务审批闭环后,实际总金额")
     private BigDecimal actualTotalMoney;
 
+    @ApiModelProperty(value = "实际计划开启时间")
+    private LocalDate realPlanStartTime;
+
+    @ApiModelProperty(value = "实际工作是否跨月,0不跨月,1跨月")
+    private Integer isTwoMonth;
+
+    @ApiModelProperty(value = "实际开始月工资")
+    private BigDecimal practicalStartMoney;
+
+    @ApiModelProperty(value = "实际结束月工资")
+    private BigDecimal practicalEndMoney;
+
+    @ApiModelProperty(value = "计划是否跨月,0不跨月,1跨月")
+    private Integer planIsTwoMonth;
+
+    @ApiModelProperty(value = "计划开始月工资")
+    private BigDecimal planStartMoney;
+
+    @ApiModelProperty(value = "计划结束月工资")
+    private BigDecimal planEndMoney;
+
 }

+ 48 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/BudgetAndPracticalByDeptVO.java

@@ -0,0 +1,48 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/7/24 14:22
+ **/
+@Data
+public class BudgetAndPracticalByDeptVO {
+
+    @ApiModelProperty(value = "时间")
+    private String time;
+
+    @ApiModelProperty(value = "市场预算")
+    private BigDecimal budget1;
+
+    @ApiModelProperty(value = "市场实际")
+    private BigDecimal practical1;
+
+    @ApiModelProperty(value = "研发预算")
+    private BigDecimal budget2;
+
+    @ApiModelProperty(value = "研发实际")
+    private BigDecimal practical2;
+
+    @ApiModelProperty(value = "实施预算")
+    private BigDecimal budget3;
+
+    @ApiModelProperty(value = "实施实际")
+    private BigDecimal practical3;
+
+    @ApiModelProperty(value = "维护预算")
+    private BigDecimal budget4;
+
+    @ApiModelProperty(value = "维护实际")
+    private BigDecimal practical4;
+
+    @ApiModelProperty(value = "管理预算")
+    private BigDecimal budget5;
+
+    @ApiModelProperty(value = "管理实际")
+    private BigDecimal practical5;
+}

+ 36 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/BudgetAndPracticalByMonthVO.java

@@ -0,0 +1,36 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/7/24 14:22
+ **/
+@Data
+public class BudgetAndPracticalByMonthVO {
+
+    @ApiModelProperty(value = "时间")
+    private String time;
+
+    @ApiModelProperty(value = "年初每月收入")
+    private BigDecimal income1;
+
+    @ApiModelProperty(value = "年初每月支出")
+    private BigDecimal disburse1;
+
+    @ApiModelProperty(value = "每月计划收入")
+    private BigDecimal income2;
+
+    @ApiModelProperty(value = "每月计划支出")
+    private BigDecimal disburse2;
+
+    @ApiModelProperty(value = "实际每月收入")
+    private BigDecimal income3;
+
+    @ApiModelProperty(value = "实际每月支出")
+    private BigDecimal disburse3;
+}

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPlanInfoVO.java

@@ -5,6 +5,8 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
 
 
 /**
@@ -46,4 +48,6 @@ public class TaskPlanInfoVO implements Serializable {
     @ApiModelProperty(value = "报销金额")
     private BigDecimal reimbursementAmount;
 
+    private LocalDate endTime;
+
 }

+ 2 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserFilesInfoVO.java

@@ -22,6 +22,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.time.LocalDate;
+import java.util.Date;
 
 /**
  * 档案职工信息表视图实体类
@@ -44,7 +45,7 @@ public class UserFilesInfoVO extends UserFilesInfo {
 	private String carName;
 
 	@ApiModelProperty(value = "性别")
-	private String sex;
+	private Integer sex;
 
 	@ApiModelProperty(value = "性别中文")
 	private String sexName;

+ 8 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -59,6 +59,9 @@ public interface IUserClient {
     String USER_INFO_ALL = API_PREFIX + "/get-users-all";
     String USER_LIST_INFO_BY_IDS = API_PREFIX + "/getUserListByIds";
 
+    // 用户修改
+    String UPDATE_USER_INFO = API_PREFIX + "/updateUserInfo";
+
     /**
      * 获取所有有效用户
      */
@@ -124,6 +127,9 @@ public interface IUserClient {
     @PostMapping(SAVE_USER)
     R<Boolean> saveUser(@RequestBody User user);
 
+    @PostMapping(UPDATE_USER_INFO)
+    R<Boolean> updateUserInfo(@RequestBody User user);
+
     /**
      * 删除用户
      *
@@ -166,4 +172,6 @@ public interface IUserClient {
     @GetMapping(USER_LIST_INFO_BY_IDS)
     List<User> userInfoByIds(@RequestBody List<Long> userIds);
 
+
+
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -610,7 +610,7 @@
     </select>
 
     <select id="pageByArchivesAuto3" resultMap="archivesAutoResultMap">
-        select uaa.id,uaa.name,uaa.file_number,uaa.unit,uaa.storage_time,uaa.secret_level
+        select uaa.id,uaa.name,uaa.file_number,uaa.unit,uaa.storage_time,uaa.secret_level,uaa.start_date,uaa.end_date
         from
         (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
         and  ancestors like concat('%',#{vo.nodeId},'%')

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -252,7 +252,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				//柜子里面侧面编号
 				if (aa.getFileNumber() != null && aa.getFileNumber() != "") {
 					String[] split = aa.getFileNumber().split("_");
-					aa.setFileNumber(split[split.length - 1]);
+					aa.setSideNumber(split[split.length - 1]);
 				}
 				if (StringUtils.isNotBlank(aa.getStorageTime())) {
 					aa.setStorageTimeValue("3".equals(aa.getStorageTime()) ? "永久" : ("2".equals(aa.getStorageTime()) ? "30年" : "10年"));

+ 20 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java

@@ -227,4 +227,24 @@ public class AnnualBudgetController {
 //        return R.data(budgetService.portalRiskPlanDetail());
 //    }
 
+    /**
+     * 预算与实际统计-月度统计
+     */
+    @GetMapping("/budgetAndPracticalByMonth")
+    @ApiOperationSupport(order = 16)
+    @ApiOperation(value = "预算与实际统计-月度统计",notes = "传入年:2023年")
+    public R<List<BudgetAndPracticalByMonthVO>> budgetAndPracticalByMonth(String year) {
+        return R.data(budgetService.budgetAndPracticalByMonth(year));
+    }
+
+    /**
+     * 预算与实际统计-部门支出统计
+     */
+    @GetMapping("/budgetAndPracticalByDept")
+    @ApiOperationSupport(order = 17)
+    @ApiOperation(value = "预算与实际统计-部门支出统计",notes = "传入年:2023年")
+    public R<List<BudgetAndPracticalByDeptVO>> budgetAndPracticalByDept(String year) {
+        return R.data(budgetService.budgetAndPracticalByDept(year));
+    }
+
 }

+ 5 - 2
blade-service/blade-control/src/main/java/org/springblade/control/controller/CorporationInfoController.java

@@ -28,7 +28,9 @@ import org.hibernate.validator.constraints.Length;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.secure.annotation.PreAuth;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.resource.entity.Attach;
@@ -143,6 +145,7 @@ public class CorporationInfoController extends BladeController {
             @ApiImplicitParam(name = "file", value = "文件源", required = true),
             @ApiImplicitParam(name = "id", value = "制度主键Id(重新上传必须传)", required = false)
     })
+    @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
     public R putFileAttach(@RequestParam("file") MultipartFile file, String id) {
         //
         CorporationInfo corporationInfo = new CorporationInfo();
@@ -170,7 +173,7 @@ public class CorporationInfoController extends BladeController {
             corporationInfo.setName(file.getName());
             corporationInfo.setOriginalName(file.getOriginalFilename());
             corporationInfo.setDomainUrl(newBladeFile.getDomain());
-            corporationInfo.setLink(newBladeFile.getPdfUrl());
+            corporationInfo.setLinkUrl(newBladeFile.getPdfUrl());
             corporationInfo.setName(newBladeFile.getName());
 
             corporationInfo.setAttachSize(newBladeFile.getFileSize());
@@ -180,7 +183,7 @@ public class CorporationInfoController extends BladeController {
             corporationInfo.setName(file.getName());
             corporationInfo.setOriginalName(file.getOriginalFilename());
             corporationInfo.setDomainUrl(newBladeFile.getDomain());
-            corporationInfo.setLink(newBladeFile.getPdfUrl());
+            corporationInfo.setLinkUrl(newBladeFile.getPdfUrl());
             corporationInfo.setName(newBladeFile.getName());
             corporationInfo.setAttachSize(newBladeFile.getFileSize());
             corporationInfo.setExtension(fileExtension);

+ 13 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/DictInfoController.java

@@ -16,12 +16,14 @@
  */
 package org.springblade.control.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 
 import javax.validation.Valid;
 
+import org.springblade.control.entity.UserContractInfo;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
@@ -74,12 +76,23 @@ public class DictInfoController extends BladeController {
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "新增或修改", notes = "传入dictInfo")
     public R submit(@Valid @RequestBody DictInfo dictInfo) {
+
         if (ObjectUtil.isNotEmpty(dictInfo.getId())) {
             DictInfo dictInfo1 = dictInfoService.getBaseMapper().selectById(dictInfo.getId());
             if (dictInfo1 != null && dictInfo1.getType().equals(6)) {
                 throw new ServiceException("没有权限,请联系管理员");
             }
         }
+
+        Long userCount = dictInfoService.getBaseMapper().selectCount(
+                Wrappers.<DictInfo>query().lambda()
+                        .eq(DictInfo::getDictName, dictInfo.getDictName())
+                        .eq(DictInfo::getType, dictInfo.getType())
+                        .eq(DictInfo::getIsDeleted, 0));
+        if(userCount>=1){
+            return R.success("数据已存在,请勿重复添加");
+        }
+
         CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
         return R.status(dictInfoService.saveOrUpdate(dictInfo));
 

+ 12 - 4
blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java

@@ -31,9 +31,9 @@ public class LogHistoryController extends BladeController {
     public R<Map<String, List<LogHistoryInfoVO>>> logList(@RequestBody LogHistoryInfoDTO dto) {
         Map<String, List<LogHistoryInfoVO>> stringListMap = logHistoryService.logList(dto);
         if (ObjectUtil.isNotEmpty(stringListMap)) {
-            return R.data(logHistoryService.logList(dto));
+            return R.data(stringListMap);
         }
-        return null;
+        return R.fail(200, "未查询到数据");
     }
 
     @PostMapping("/submit")
@@ -47,7 +47,11 @@ public class LogHistoryController extends BladeController {
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "日志填报详情", notes = "传入日志id")
     public R<LogHistoryInfoVO> logDetail(@RequestParam Long id, BladeUser bladeUser) {
-        return R.data(logHistoryService.logDetail(id, bladeUser));
+        LogHistoryInfoVO logHistoryInfoVO = logHistoryService.logDetail(id, bladeUser);
+        if (logHistoryInfoVO != null) {
+            return R.data(logHistoryInfoVO);
+        }
+        return R.fail(200, "未查询到数据");
     }
 
     @PostMapping("/remove")
@@ -68,7 +72,11 @@ public class LogHistoryController extends BladeController {
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "日志任务列表-获取当前用户当日的任务信息")
     public R<List<TaskPlanInfoVO>> logTaskList() {
-        return R.data(logHistoryService.logTaskList());
+        List<TaskPlanInfoVO> taskPlanInfoVOS = logHistoryService.logTaskList();
+        if (taskPlanInfoVOS.size() > 0) {
+            return R.data(taskPlanInfoVOS);
+        }
+        return R.fail(200, "未查询到数据");
     }
 
 

+ 55 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/UserContractInfoController.java

@@ -16,6 +16,9 @@
  */
 package org.springblade.control.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -24,10 +27,16 @@ import lombok.AllArgsConstructor;
 
 import javax.validation.Valid;
 
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.entity.UserFilesInfo;
+import org.springblade.control.service.IUserFilesInfoService;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.user.entity.User;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -50,6 +59,8 @@ public class UserContractInfoController extends BladeController {
 
     private final IUserContractInfoService userContractInfoService;
 
+    private final IUserFilesInfoService userFilesInfoService;
+
     /**
      * 详情
      */
@@ -79,6 +90,17 @@ public class UserContractInfoController extends BladeController {
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "新增", notes = "传入userContractInfo")
     public R save(@Valid @RequestBody UserContractInfo userContractInfo) {
+        if(userContractInfo.getType()==2){
+            Long userCount = userFilesInfoService.getBaseMapper().selectCount(
+                    Wrappers.<UserFilesInfo>query().lambda()
+                            .eq(UserFilesInfo::getUserId, userContractInfo.getUserId())
+                            .eq(UserFilesInfo::getIsDeleted, 0));
+            if(userCount<=0){
+                UserFilesInfo userFilesInfo = new UserFilesInfo();
+                userFilesInfo.setUserId(userContractInfo.getUserId());
+                userFilesInfoService.saveOrUpdate(userFilesInfo);
+            }
+        }
         return R.status(userContractInfoService.save(userContractInfo));
     }
 
@@ -89,6 +111,17 @@ public class UserContractInfoController extends BladeController {
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "修改", notes = "传入userContractInfo")
     public R update(@Valid @RequestBody UserContractInfo userContractInfo) {
+        if(userContractInfo.getType()==2){
+            Long userCount = userFilesInfoService.getBaseMapper().selectCount(
+                    Wrappers.<UserFilesInfo>query().lambda()
+                            .eq(UserFilesInfo::getUserId, userContractInfo.getUserId())
+                            .eq(UserFilesInfo::getIsDeleted, 0));
+            if(userCount<=0){
+                UserFilesInfo userFilesInfo = new UserFilesInfo();
+                userFilesInfo.setUserId(userContractInfo.getUserId());
+                userFilesInfoService.saveOrUpdate(userFilesInfo);
+            }
+        }
         return R.status(userContractInfoService.updateById(userContractInfo));
     }
 
@@ -98,7 +131,28 @@ public class UserContractInfoController extends BladeController {
     @PostMapping("/submit")
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "新增或修改", notes = "传入userContractInfo")
-    public R submit(@Valid @RequestBody UserContractInfo userContractInfo) {
+    public R submit(@Valid @RequestBody UserContractInfo userContractInfo, BladeUser bladeUser) {
+
+        if(userContractInfo.getType()==2){
+            Long userCount = userFilesInfoService.getBaseMapper().selectCount(
+                    Wrappers.<UserFilesInfo>query().lambda()
+                            .eq(UserFilesInfo::getUserId, userContractInfo.getUserId())
+                            .eq(UserFilesInfo::getIsDeleted, 0));
+            if(userCount<=0){
+                UserFilesInfo userFilesInfo = new UserFilesInfo();
+                userFilesInfo.setUserId(userContractInfo.getUserId());
+                userFilesInfoService.saveOrUpdate(userFilesInfo);
+            }
+        }
+
+        UserContractInfo one = userContractInfoService.getOne( new LambdaQueryWrapper<UserContractInfo>()
+                .eq(UserContractInfo::getUserId, userContractInfo.getUserId())
+                .eq(UserContractInfo::getType, userContractInfo.getType())
+                .eq(UserContractInfo::getIsDeleted, 0));
+
+        if(one !=null && StringUtil.isNotBlank(one.getId()+"")) {
+            userContractInfo.setId(one.getId());
+        }
         return R.status(userContractInfoService.saveOrUpdate(userContractInfo));
     }
 

+ 22 - 2
blade-service/blade-control/src/main/java/org/springblade/control/controller/UserFilesInfoController.java

@@ -16,7 +16,6 @@
  */
 package org.springblade.control.controller;
 
-import com.alibaba.spring.util.BeanUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -24,12 +23,19 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.apache.commons.lang.StringUtils;
 import org.springblade.control.wrapper.UserFilesWrapper;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.DateTimeUtil;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.entity.UserInfo;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -38,6 +44,9 @@ import org.springblade.control.vo.UserFilesInfoVO;
 import org.springblade.control.service.IUserFilesInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.time.LocalDate;
+import java.util.Date;
+
 /**
  * 档案职工信息表 控制器
  *
@@ -51,6 +60,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class UserFilesInfoController extends BladeController {
 
 	private final IUserFilesInfoService userFilesInfoService;
+	private final IUserClient userClient;
 
 /*	*//**
 	 * 详情
@@ -117,6 +127,15 @@ public class UserFilesInfoController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入userFilesInfo")
 	public R submit(@Valid @RequestBody UserFilesInfoVO userFilesInfoVO) {
 		UserFilesInfo userFilesInfo = BeanUtil.copy(userFilesInfoVO,UserFilesInfo.class);
+		User user = BeanUtil.copy(userFilesInfoVO, User.class);
+		if(StringUtils.isNotEmpty(userFilesInfoVO.getBirthday())){
+			String birders = userFilesInfoVO.getBirthday();
+			LocalDate localDate = DateTimeUtil.parseDate(birders);
+			Date date = DateUtil.toDate(localDate);
+			user.setBirthday(date);
+		}
+		user.setId(userFilesInfoVO.getUserId());
+		userClient.updateUserInfo(user);
 		return R.status(userFilesInfoService.saveOrUpdate(userFilesInfo));
 	}
 
@@ -147,7 +166,8 @@ public class UserFilesInfoController extends BladeController {
 	@GetMapping("/get-user-file-page")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "分页档案职工信息表", notes = "传入userFilesInfo")
-	public R<IPage<UserFilesInfoVO>> page(UserFilesInfoVO userFilesInfo,Query query) {
+	public R<IPage<UserFilesInfoVO>> page(UserFilesInfoVO userFilesInfo, Query query, BladeUser bladeUser) {
+		userFilesInfo.setUserTypeName(bladeUser.getTenantId());
 		IPage<UserFilesInfoVO> pages = userFilesInfoService.selectUserFilesInfoPage(Condition.getPage(query),userFilesInfo);
 		return R.data(UserFilesWrapper.build().pageVO(pages));
 	}

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.java

@@ -30,4 +30,6 @@ public interface ContractReturnedInfoMapper extends BaseMapper<ContractReturnedI
     List<ContractReturnedInfo> getProjectReturnedByMonth(@Param("date") String date);
 
     void deleteByContractId(@Param("contractId") Long contractId);
+
+    List<ContractReturnedInfo> getAllMonthReturnedByYear(@Param("year") int y);
 }

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml

@@ -46,4 +46,12 @@
         </if>
         and practical_returned_money is not null
     </select>
+    <select id="getAllMonthReturnedByYear" resultType="org.springblade.control.entity.ContractReturnedInfo">
+        SELECT *
+        from c_contract_returned_info
+        WHERE  is_deleted = 0
+        <if test="year != 0">
+            and DATE_FORMAT(practical_returned_time ,'%Y') = #{year}
+        </if>
+    </select>
 </mapper>

+ 2 - 4
blade-service/blade-control/src/main/java/org/springblade/control/mapper/CorporationInfoMapper.xml

@@ -12,7 +12,7 @@
         <result column="update_time" property="updateTime"/>
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
-        <result column="link" property="link"/>
+        <result column="link_url" property="linkUrl"/>
         <result column="domain_url" property="domainUrl"/>
         <result column="name" property="name"/>
         <result column="original_name" property="originalName"/>
@@ -22,9 +22,7 @@
 
 
     <select id="selectCorporationInfoPage" resultMap="corporationInfoResultMap">
-        select *
-        from c_corporation_info
-        where is_deleted = 0
+        select * from c_corporation_info where is_deleted = 0
     </select>
 
 </mapper>

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -108,4 +108,6 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     Integer getUserMonthLog(@Param("userId") Long userId,@Param("start") LocalDate start,@Param("end") LocalDate end);
 
     List<ProjectCostBudgetVO> getDepartmentTimeOutPlan(@Param("costType") Integer costType,@Param("projectId") Long projectId);
+
+    List<ProjectCostBudget> getAllMonthBudgetByYear(@Param("year") int y);
 }

+ 15 - 5
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -12,7 +12,10 @@
             practical_finish_time = #{budget.practicalFinishTime},
             task_approve = #{budget.taskApprove},
             actual_total_money = #{budget.actualTotalMoney},
-            status = #{budget.status}
+            status = #{budget.status},
+            is_two_month = #{budget.isTwoMonth},
+            practical_start_money = #{budget.practicalStartMoney},
+            practical_end_money = #{budget.practicalEndMoney}
         where
             id = #{budget.id}
     </update>
@@ -187,8 +190,8 @@
         FROM c_project_cost_budget pcb WHERE pcb.project_id = #{id} AND pcb.parent_id > 0
     </select>
     <select id="getBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
-        select id,project_id,practical_finish_time ,actual_total_money  from c_project_cost_budget
-        WHERE is_deleted = 0 and task_approve = 1 and DATE_FORMAT(practical_finish_time ,'%Y') = #{year}
+        select *  from c_project_cost_budget
+        WHERE is_deleted = 0 and task_approve = 1 and DATE_FORMAT(practical_finish_time ,'%Y') = #{year} and DATE_FORMAT(real_plan_start_time ,'%Y') = #{year}
     </select>
     <select id="getPlanByMonth" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
         select pcb.*,
@@ -288,8 +291,8 @@
     </select>
     <select id="getAllMaintainPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
         SELECT *
-        from c_project_cost_budget
-        WHERE plan_task_type > 0 and (SELECT dict_value from c_dict_info cdi WHERE id = plan_task_type) = 2
+        from c_project_cost_budget pcb
+        WHERE pcb.plan_task_type > 0 and (SELECT cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 2
     </select>
     <select id="getAllMaintainPlan2" resultType="org.springblade.control.entity.ProjectCostBudget">
         SELECT *
@@ -346,5 +349,12 @@
         WHERE pcb.cost_type = #{costType} and pcb.is_deleted = 0 and pcb.project_id = #{projectId} and pcb.plan_end_time &lt; pcb.practical_finish_time and pcb.status = 4
     </select>
 
+    <select id="getAllMonthBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select pcb.*
+        from c_project_cost_budget pcb
+        WHERE pcb.is_deleted = 0 and pcb.approve = 1
+            and DATE_FORMAT(pcb.plan_start_time ,'%Y') = #{year}
+    </select>
+
 
 </mapper>

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java

@@ -54,4 +54,5 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     List<ProjectReimburseVO> getProjectReimburse2(@Param("projectId") Long projectId);
     //返回指定项目,指定费用分类对应的进程
     List<ProjectReimburseVO> getProjectReimburse3(@Param("projectId") Long projectId,@Param("costType") Integer costType);
+
 }

+ 0 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -118,5 +118,4 @@
         WHERE fri.is_deleted = 0 and fri.status = 2 and fri.project_id = #{projectId} and and pcb.costType = #{costType} and fri.budget_plan_ids > 0
     </select>
 
-
 </mapper>

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserContractInfoMapper.xml

@@ -41,6 +41,9 @@
         <if test="param2.type!=null and param2.type!=''">
             and type = #{userContractInfo.type}
         </if>
+        <if test="param2.userId!=null and param2.userId!=''">
+            and user_id = #{userContractInfo.userId}
+        </if>
     </select>
 
 </mapper>

+ 5 - 2
blade-service/blade-control/src/main/java/org/springblade/control/mapper/UserFilesInfoMapper.xml

@@ -67,7 +67,10 @@
         (SELECT dict_name from c_dict_info a where a.code='con_type' and parent_id!=0 and dict_value =a.con_type) as conTypeName,
         (SELECT dict_name from c_dict_info a where a.code='user_status' and parent_id!=0 and dict_value =a.user_status) as userStatusName,
         (SELECT dict_name from c_dict_info a where a.code='political_type' and parent_id!=0 and dict_value =a.political_type) as politicalName
-        from c_view_user_files_info a where a.is_deleted = 0
+        from c_view_user_files_info a where a.tenant_id = #{param2.userTypeName} and  is_deleted=0
+        <if test="param2.userId!=null and param2.userId!=''">
+            and user_id = #{param2.userId}
+        </if>
     </select>
 
     <select id="getUserFileDetail" resultMap="userFilesInfoResultVoMap">
@@ -78,6 +81,6 @@
             (SELECT dict_name from c_dict_info a where a.code='con_type' and parent_id!=0 and dict_value =a.con_type) as conTypeName,
             (SELECT dict_name from c_dict_info a where a.code='user_status' and parent_id!=0 and dict_value =a.user_status) as userStatusName,
             (SELECT dict_name from c_dict_info a where a.code='political_type' and parent_id!=0 and dict_value =a.political_type) as politicalName
-        from c_view_user_files_info a where a.is_deleted = 0 and id=#{id}
+        from c_view_user_files_info a where  id=#{id} and  is_deleted=0
     </select>
 </mapper>

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java

@@ -50,4 +50,8 @@ public interface IAnnualBudgetService extends BaseService<AnnualBudget> {
     List<ProjectIncomeCostRatioVO> portalProjectIncomeRatio(String date);
 
     List<ProjectServiceProcessVO> portalProjectProcess(Long projectId);
+
+    List<BudgetAndPracticalByMonthVO> budgetAndPracticalByMonth(String year);
+
+    List<BudgetAndPracticalByDeptVO> budgetAndPracticalByDept(String year);
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java

@@ -40,4 +40,8 @@ public interface IContractReturnedInfoService extends BaseService<ContractReturn
     List<ContractReturnedInfo> getProjectReturnedByMonth(String date);
 
     void deleteByContractId(Long id);
+
+    //获取所有项目当年每月的,1返回应回款,2返回实际回款
+    List<BigDecimal> getAllMonthReturnedByYear(int y,int type);
+
 }

+ 10 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -98,10 +98,10 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     //获取所有项目的截至目前的维护支出
     BigDecimal getAllMaintainCost2();
 
-    //获取所有项目截至当年的维护支出,分月返回
+    //获取所有项目截至当年的维护支出,分月返回,以项目为主键
     Map<Long,List<BigDecimal>> getAllMaintainCost3(int year);
 
-    //获取所有项目截至当年的维护支出,按年返回
+    //获取所有项目截至当年的维护支出,按年返回,以项目为主键
     Map<Long,BigDecimal> getAllMaintainCost4(int year);
 
     //获取所有项目截至目前的的维护支出,按项目返回
@@ -118,4 +118,12 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
 
     //获取项目的维护预算
     Set<Long> getAllMaintainBudgetId(Long projectId);
+
+    //根据年获取已经分配月的计划支出,按12个月返回
+    List<BigDecimal> getAllMonthBudgetByYear(int y);
+
+    //获取每月实际的人工支出
+    List<BigDecimal> getAllMonthStaffCostByYear(int y);
+    //获取每月实际的维护支出
+    List<BigDecimal> getAllMonthMaintainCostByYear(int y);
 }

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java

@@ -63,4 +63,5 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     //根据项目id获取项目截至目前-某个费用分类的的报销支出,按项目环节返回
     Map<Long,BigDecimal> getProjectReimburseByCostType(Long projectId,Integer costType);
 
+    List<BigDecimal> getAllMonthReimburseByYear(int y);
 }

+ 132 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -94,6 +94,39 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
     @Override
     @Transactional
     public void updateAnnualBudget(AnnualBudgetDTO dto) {
+        //收入数据校验
+        List<AnnualBudgetIncome> incomeList = dto.getIncomeList();
+        if (incomeList != null && incomeList.size() > 0){
+            for (AnnualBudgetIncome income : incomeList) {
+                if (income.getProjectId() == null){
+                    throw new ServiceException("请选择项目名称");
+                }
+                if (income.getIncomeType() == null){
+                    throw new ServiceException("请选择收入类别");
+                }
+                if (income.getPredictSignDate() == null){
+                    throw new ServiceException("请选择预计签单时间");
+                }
+                if (income.getPredictContractMoney() == null){
+                    throw new ServiceException("请输入预计新签合同额");
+                }
+                if (income.getPredictAnnualReturned() == null){
+                    throw new ServiceException("请输入预计本年度回款额");
+                }
+            }
+        }
+        //支出数据校验
+        List<AnnualBudgetDisburse> disburseList = dto.getDisburseList();
+        if (disburseList != null && disburseList.size() > 0){
+            for (AnnualBudgetDisburse disburse : disburseList) {
+                if (disburse.getBudgetSubject() == null){
+                    throw new ServiceException("请选择预算科目");
+                }
+                if (disburse.getSecondSubject() == null){
+                    throw new ServiceException("请选择二级科目");
+                }
+            }
+        }
         //统计支出
         Map<String, BigDecimal> map = statisticDisburse(dto);
         BigDecimal disburseTotal = map.get("1");
@@ -941,6 +974,105 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         return vos;
     }
 
+    /**
+     * 预算与实际统计-月度统计
+     */
+    @Override
+    public List<BudgetAndPracticalByMonthVO> budgetAndPracticalByMonth(String year) {
+        int y = Integer.parseInt(year.substring(0, 4));
+        //获取年度预算
+        AnnualBudget budget = baseMapper.getThisYearBudget(y);
+        Boolean isAnnual = true;
+        AnnualBudgetVO2 preview;
+        List<AnnualBudgetVO2.IncomeDetail> monthIncome = new ArrayList<>();
+        List<AnnualBudgetVO2.disburseDetail> monthDisburse = new ArrayList<>();
+        if (budget != null) {
+            preview = this.preview(budget.getId());
+            monthIncome = preview.getMonthIncome();
+            monthDisburse = preview.getMonthDisburse();
+        }else {
+            isAnnual = false;
+        }
+
+        //获取所有项目当年每月的应回款
+        List<BigDecimal> returned1 = returnedInfoService.getAllMonthReturnedByYear(y,1);
+        //获取已经指定年分配月的成本测算
+        List<BigDecimal> budgets = budgetService.getAllMonthBudgetByYear(y);
+        //获取所有项目当年每月的实际回款
+        List<BigDecimal> returned2 = returnedInfoService.getAllMonthReturnedByYear(y,2);
+        //获取每月实际的人工支出
+        List<BigDecimal> staffCost = budgetService.getAllMonthStaffCostByYear(y);
+        //获取每月实际的维护支出
+        List<BigDecimal> maintainCost = budgetService.getAllMonthMaintainCostByYear(y);
+        //获取每月实际的报销支出
+        List<BigDecimal> reimburse = projectInfoService.getAllMonthReimburseByYear(y);
+        //结果集
+        List<BudgetAndPracticalByMonthVO> list = new ArrayList<>();
+
+        //分别计算12个月
+        List<String> months = Arrays.asList("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
+        BigDecimal c1 = new BigDecimal(0);
+        BigDecimal c2 = new BigDecimal(0);
+        BigDecimal c3 = new BigDecimal(0);
+        BigDecimal c4 = new BigDecimal(0);
+        BigDecimal c5 = new BigDecimal(0);
+        BigDecimal c6 = new BigDecimal(0);
+        for (int i = 1; i <= 12; i++) {
+            BudgetAndPracticalByMonthVO vo1 = new BudgetAndPracticalByMonthVO();
+            //月份
+            vo1.setTime(months.get(i-1));
+            //年初月收入
+            if (isAnnual) {
+                vo1.setIncome1(monthIncome.get(i-1).getIncome());
+                c1 = c1.add(monthIncome.get(i-1).getIncome());
+            }else {
+                vo1.setIncome1(new BigDecimal(0));
+                c1 = c1.add(new BigDecimal(0));
+            }
+            //年初月支出
+            if (isAnnual) {
+                vo1.setDisburse1(monthDisburse.get(i-1).getDisburse());
+                c2 = c2.add(monthDisburse.get(i-1).getDisburse());
+            }else {
+                vo1.setDisburse1(new BigDecimal(0));
+                c2 = c2.add(new BigDecimal(0));
+            }
+            //每月计划收入
+            vo1.setIncome2(returned1.get(i-1));
+            c3 = c3.add(returned1.get(i-1));
+            //每月计划支出
+            vo1.setDisburse2(budgets.get(i-1));
+            c4 = c4.add(budgets.get(i-1));
+            //实际每月收入
+            vo1.setIncome3(returned2.get(i-1));
+            c5 = c5.add(returned2.get(i-1));
+            //实际每月支出
+            vo1.setDisburse3(staffCost.get(i-1).add(maintainCost.get(i-1).add(reimburse.get(i-1))));
+            c6 = c6.add(staffCost.get(i-1).add(maintainCost.get(i-1).add(reimburse.get(i-1))));
+
+        list.add(vo1);
+        }
+        BudgetAndPracticalByMonthVO vo2 = new BudgetAndPracticalByMonthVO();
+        vo2.setTime("总计");
+        vo2.setIncome1(c1);
+        vo2.setDisburse1(c2);
+        vo2.setIncome2(c3);
+        vo2.setDisburse2(c4);
+        vo2.setIncome3(c5);
+        vo2.setDisburse3(c6);
+        list.add(vo2);
+        return list;
+    }
+
+    /**
+     * 预算与实际统计-部门支出统计
+     */
+    @Override
+    public List<BudgetAndPracticalByDeptVO> budgetAndPracticalByDept(String year) {
+        //
+        return null;
+    }
+
     /**
      * 统计支出 1支出总和2工资总和
      */

+ 42 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -121,4 +122,45 @@ public class ContractReturnedInfoServiceImpl extends BaseServiceImpl<ContractRet
     public void deleteByContractId(Long contractId) {
         baseMapper.deleteByContractId(contractId);
     }
+
+    /**
+     * 获取所有项目当年每月的回款
+     * @param y
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthReturnedByYear(int y,int type) {
+        //获取当年所有回款
+        List<ContractReturnedInfo> infos = baseMapper.getAllMonthReturnedByYear(y);
+        List<BigDecimal> list = new ArrayList<>();
+        //计算每月回款
+        if (infos != null && infos.size() > 0){
+            if (type == 1){
+                for (int i = 0; i < 12; i++) {
+                    BigDecimal big = new BigDecimal(0);
+                    for (ContractReturnedInfo info : infos) {
+                        if (info.getShouldReturnedTime().getMonthValue() == (i+1)){
+                            big = big.add(info.getShouldReturnedMoney());
+                        }
+                    }
+                    list.add(big);
+                }
+            }else {
+                for (int i = 0; i < 12; i++) {
+                    BigDecimal big = new BigDecimal(0);
+                    for (ContractReturnedInfo info : infos) {
+                        if (info.getPracticalReturnedTime().getMonthValue() == (i+1)){
+                            big = big.add(info.getPracticalReturnedMoney());
+                        }
+                    }
+                    list.add(big);
+                }
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
 }

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -146,6 +146,7 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
                     logService.save(planLog);
                     //修改计划状态为进行中
                     budget.setStatus(2);
+                    budget.setRealPlanStartTime(LocalDate.now());
                     //新增任务通知
                     PlanInform inform = new PlanInform();
                     inform.setInformDetails("《"+budget.getPlanTaskDesc()+"》您有一条新任务");

+ 4 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -564,7 +564,10 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 }
             }
         }
-        return resultList.stream().sorted(Comparator.comparing(TaskPlanInfoVO::getStatus)).collect(Collectors.toList());
+        return resultList.stream()
+                .filter(Objects::nonNull)
+                .sorted(Comparator.comparing(TaskPlanInfoVO::getStatus))
+                .collect(Collectors.toList());
     }
 
 }

+ 183 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -441,6 +441,22 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 list.addAll(constructUnit.get(i));
             }
         }
+        //获取当前所有岗位类型,用于统计计划人工支出
+        List<DictInfo> postType = baseMapper.getAllPostType();
+        if (postType == null || postType.size() <= 0){
+            throw new ServiceException("保存失败,没有配置岗位类型");
+        }
+        //根据岗位id分类
+        Map<Long, List<DictInfo>> map = postType.parallelStream()
+                .collect(Collectors.groupingBy(DictInfo::getId));
+        //获取当前任务类型,如果是临时任务,就不用计算人工成本
+        List<DictInfo> taskInfo = baseMapper.getAllTaskInfo();
+        if (taskInfo == null || taskInfo.size() <= 0){
+            throw new ServiceException("保存失败,没有配置任务类型");
+        }
+        //根据任务类型id分类
+        Map<Long, List<DictInfo>> map2 = taskInfo.parallelStream()
+                .collect(Collectors.groupingBy(DictInfo::getId));
         List<ProjectCostBudget> childrenList = new ArrayList<>();
         List<ProjectCostBudget> parentList = new ArrayList<>();
         //把所有子计划分离出来,并且设置父类id
@@ -448,6 +464,14 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             List<ProjectCostBudgetVO2> vo2ChildrenList = vo2.getChildrenList();
             if (vo2ChildrenList != null && vo2ChildrenList.size() > 0){
                 for (ProjectCostBudget budget : vo2ChildrenList) {
+                    //如果计划正在进行中或者已经完成,则跳过
+                    if (budget.getStatus() != null && budget.getStatus() != 1){
+                        continue;
+                    }
+                    //如果保存太快,没有生成planDays,就查询
+                    if (budget.getPlanDays() == null || budget.getPlanDays().intValue() == 0){
+                        budget.setPlanDays(new BigDecimal( CommonUtil.getWorkDays(budget.getPlanStartTime(),budget.getPlanEndTime())));
+                    }
                     budget.setProjectId(vo.getProjectId());
                     budget.setParentId(vo2.getId());
                     budget.setCostType(vo2.getCostType());
@@ -456,12 +480,57 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     budget.setBudgetType(vo2.getBudgetType());
                     budget.setProjectProcess(vo2.getProjectProcess());
                     budget.setTaskDetail(vo2.getTaskDetail());
+                    budget.setPostType(vo2.getPostType());
+                    //只计算固定计划的人工成本
+                    if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        //计划人工支出
+                        budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue())));
+                        //如果跨月
+                        if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
+                            budget.setPlanIsTwoMonth(1);
+                            //计算开始到月底多少个工作日
+                            int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(vo2.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
+                            if (days > budget.getPlanDays().intValue()){
+                                budget.setPlanStartMoney(budget.getPlanStaffCost());
+                                budget.setPlanEndMoney(new BigDecimal(0));
+                            }else {
+                                budget.setPlanStartMoney(new BigDecimal(days).multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                                budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
+                            }
+                        }
+                    }
                 }
                 childrenList.addAll(vo2ChildrenList);
             }else {
                 //无子计划
                 ProjectCostBudget budget = new ProjectCostBudget();
                 BeanUtils.copyProperties(vo2, budget);
+                //如果主计划被清空,然后把计划金额也清空
+                if (budget.getPlanTaskType() == null){
+                    budget.setPlanIsTwoMonth(0);
+                    budget.setPlanStartMoney(new BigDecimal(0));
+                    budget.setPlanEndMoney(new BigDecimal(0));
+                }else {
+                    //存在数据,则判断是否是固定计划
+                    if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        //计划人工支出
+                        budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                        //如果跨月
+                        if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
+                            budget.setPlanIsTwoMonth(1);
+                            //计算开始到月底多少个工作日
+                            int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(budget.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
+                            if (days > budget.getPlanDays().intValue()){
+                                budget.setPlanStartMoney(budget.getPlanStaffCost());
+                                budget.setPlanEndMoney(new BigDecimal(0));
+                            }else {
+                                budget.setPlanStartMoney(new BigDecimal(days).multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                                budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
+                            }
+                        }
+                    }
+
+                }
                 parentList.add(budget);
             }
         }
@@ -1294,6 +1363,22 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             budget.setPracticalTaskDays(new BigDecimal(realWorkDays));
             //实际人工支出
             budget.setActualTotalMoney(new BigDecimal(realWorkDays).multiply(new BigDecimal(money)));
+            //判断是否跨月
+            if (budget.getRealPlanStartTime().getMonthValue() != budget.getPracticalFinishTime().getMonthValue()){
+                budget.setIsTwoMonth(1);
+                int day = CommonUtil.getWorkDays(budget.getRealPlanStartTime(),LocalDate.of(budget.getRealPlanStartTime().getYear(),budget.getRealPlanStartTime().getMonthValue(),budget.getRealPlanStartTime().getMonth().maxLength()));
+                if (day < realWorkDays){
+                    budget.setPracticalStartMoney(new BigDecimal(day).multiply(new BigDecimal(money)));
+                    budget.setPracticalEndMoney(budget.getActualTotalMoney().subtract(budget.getPracticalStartMoney()));
+                }else {
+                    budget.setPracticalStartMoney(budget.getActualTotalMoney());
+                    budget.setPracticalEndMoney(new BigDecimal(0));
+                }
+            }else {
+                budget.setIsTwoMonth(0);
+            }
+            //如果跨月,则计算开始月人工成本和结束月人工成本
+            //
             baseMapper.updateByBudgetId(budget);
         }
     }
@@ -2050,6 +2135,104 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return null;
     }
 
+    /**
+     * 根据年获取已经分配月的计划支出,按12个月返回
+     * @param y
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthBudgetByYear(int y) {
+        List<ProjectCostBudget> budgets = baseMapper.getAllMonthBudgetByYear(y);
+        List<BigDecimal> list = new ArrayList<>();
+        if (budgets != null && budgets.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (ProjectCostBudget budget : budgets) {
+                    if (budget.getPlanStartTime().getMonthValue() == (i+1)){
+                        big = big.add(budget.getBudgetCountMoney());
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取每月实际的人工支出,
+     * @param y
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthStaffCostByYear(int y) {
+        //获取已经闭环的任务
+        List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear(y);
+        List<BigDecimal> list = new ArrayList<>();
+        if (budgets != null && budgets.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (ProjectCostBudget budget : budgets) {
+                    //如果计划实际开始时间和实际结束时间中有当月
+                    if ((budget.getPracticalFinishTime().getMonthValue() == (i+1) && budget.getPracticalFinishTime().getYear() == y)
+                            || ((budget.getRealPlanStartTime().getMonthValue() == (i+1)) && budget.getRealPlanStartTime().getYear() == y)){
+                        //如果实际结束时间是当月
+                        if ((budget.getPracticalFinishTime().getMonthValue() == (i+1) && budget.getPracticalFinishTime().getYear() == y)) {
+                            if (budget.getIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getActualTotalMoney());
+                            }else {
+                                big = big.add(budget.getPracticalEndMoney());
+                            }
+                            ////如果实际开始时间是当月
+                        }else if ((budget.getRealPlanStartTime().getMonthValue() == (i+1)) && budget.getRealPlanStartTime().getYear() == y){
+                            if (budget.getIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getActualTotalMoney());
+                            }else {
+                                big = big.add(budget.getPracticalStartMoney());
+                            }
+                        }
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取每月实际的维护支出
+     * @param year
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthMaintainCostByYear(int year) {
+        Map<Long, List<BigDecimal>> map = this.getAllMaintainCost3(year);
+        List<BigDecimal> list = new ArrayList<>();
+        if (map != null && map.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (Long aLong : map.keySet()) {
+                    big = big.add(map.get(aLong).get(i));
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 30 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.control.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -290,6 +291,13 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                 vo.setPracticalCost(practicalCost);
                 list.add(vo);
             }
+            if(list.size() > 0){
+                BigDecimal big = new BigDecimal(0);
+                for (AllProjectStatsVO vo : list) {
+                    big = big.add(vo.getPracticalCost());
+                }
+                list.get(0).setTotal(big);
+            }
             return list;
         }else {
             if (isMaintain){
@@ -503,5 +511,27 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return decimalMap;
     }
 
+    @Override
+    public List<BigDecimal> getAllMonthReimburseByYear(int y) {
+        List<EMFinancialReimbursementInfo> reimburse = baseMapper.getYearReimburseByMonth(y);
+        List<BigDecimal> list = new ArrayList<>();
+        if (reimburse != null && reimburse.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (EMFinancialReimbursementInfo info : reimburse) {
+                    if (info.getFrDate().getMonth() == i){
+                        big = big.add(info.getFrMoney());
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
 
 }

+ 125 - 23
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -46,6 +46,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -224,7 +225,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                             MultipartFile convert = ByteArrayToMultipartFileConverter.convert(bytes, SnowFlakeUtil.get() + ".jpg", "text/plain");
                                             R<BladeFile> bladeFileR = iossClient.addFileInfo(convert);
                                             if (ObjectUtil.isNotEmpty(bladeFileR) && ObjectUtil.isNotEmpty(bladeFileR.getData())) {
-                                                jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_electronic_invoice_url_jpg = '" + bladeFileR.getData().getLink() + "' where id = " + voCW.getId());
+                                                jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_attachment_url_jpg = '" + bladeFileR.getData().getLink() + "' where id = " + voCW.getId());
                                                 voCW.setFrAttachmentUrl(bladeFileR.getData().getLink());
                                                 voCW.setFrAttachmentUrlJpg(bladeFileR.getData().getLink());
                                             }
@@ -239,7 +240,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                             MultipartFile convert = ByteArrayToMultipartFileConverter.convert(bytes, SnowFlakeUtil.get() + ".jpg", "text/plain");
                                             R<BladeFile> bladeFileR = iossClient.addFileInfo(convert);
                                             if (ObjectUtil.isNotEmpty(bladeFileR) && ObjectUtil.isNotEmpty(bladeFileR.getData())) {
-                                                jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_attachment_url_jpg = '" + bladeFileR.getData().getLink() + "' where id = " + voCW.getId());
+                                                jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_electronic_invoice_url_jpg = '" + bladeFileR.getData().getLink() + "' where id = " + voCW.getId());
                                                 voCW.setFrElectronicInvoiceUrl(bladeFileR.getData().getLink());
                                                 voCW.setFrElectronicInvoiceUrlJpg(bladeFileR.getData().getLink());
                                             }
@@ -673,6 +674,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 String planStartTimeStr = planStartTime.format(formatter);
                 String planEndTimeStr = planEndTime.format(formatter);
                 vo.setStartAndEndDate(planStartTimeStr + "~" + planEndTimeStr);
+                vo.setEndTime(planEndTime);
             }
 
             if (ObjectUtil.isNotEmpty(obj.getDeptId()) && ObjectUtil.isNotEmpty(obj.getPlanStartTime()) && ObjectUtil.isNotEmpty(obj.getPlanEndTime())) {
@@ -696,6 +698,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             }
             vos.add(vo);
         }
+
+        vos.sort(Comparator.comparing(TaskPlanInfoVO::getEndTime).reversed());
         vosPage.setRecords(vos);
         return vosPage;
     }
@@ -1028,20 +1032,11 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         switch (businessDataType) {
             case 1: //计划任务
                 if (taskStatus == 2) { //通过审批
-                    /*//task_approve = 1 已审批 , status = 4 已完成
-                    jdbcTemplate.execute("update c_project_cost_budget set task_approve = 1,status = 4 where id = " + dataId);
-
-                    //判断是否为转移任务,计划任务转移后,修改计划任务人id
-                    TaskPlanUpdateStatusInfo taskPlanUpdateStatusInfo = jdbcTemplate.query("select * from c_task_plan_update_status_info where update_type = 2 and approve_task_id = " + approveTaskId + " and plan_task_id = " + dataId, new BeanPropertyRowMapper<>(TaskPlanUpdateStatusInfo.class)).stream().findAny().orElse(null);
-                    if (taskPlanUpdateStatusInfo != null) {
-                        jdbcTemplate.execute("update c_project_cost_budget set task_approve = 0,status = 2,task_user = " + taskPlanUpdateStatusInfo.getTransferObject() + " where id = " + taskPlanUpdateStatusInfo.getPlanTaskId());
-                    */
                     //任务转移后,标记关系信息为转移任务
                     jdbcTemplate.execute("update c_expense_task_record set is_transfer = 1 where expense_info_type = 1 and task_id = " + approveTaskId + " and expense_info_id = " + dataId);
 
                     //删除当前计划任务与日志关系信息(如果任务转移,那么就不属于该用户了,就应该在新用户写日志时,与新用户绑定)
                     jdbcTemplate.execute("delete from c_log_history_task_record where task_id = " + dataId);
-                    //}
 
                 } else if (taskStatus == 3) { //驳回审批
                     TaskProcessInfo taskProcessInfo = jdbcTemplate.query("select status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
@@ -1054,27 +1049,67 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
             case 2: //财务
                 jdbcTemplate.execute("update c_expense_financial_reimbursement_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo2 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo2 != null && taskProcessInfo2.getStatus().equals(3)) { //驳回推送
+                    //日志操作信息
+                    planInformService.taskFinishedInform("财务报销申请", taskProcessInfo2.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo2.getStatus());
+                }
                 break;
             case 3: //支付
                 jdbcTemplate.execute("update c_expense_pay_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo3 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo3 != null && taskProcessInfo3.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("支付申请", taskProcessInfo3.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo3.getStatus());
+                }
                 break;
             case 4: //借款
                 jdbcTemplate.execute("update c_expense_loan_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo4 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo4 != null && taskProcessInfo4.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("借款申请", taskProcessInfo4.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo4.getStatus());
+                }
                 break;
             case 5: //采购
                 jdbcTemplate.execute("update c_expense_purchase_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo5 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo5 != null && taskProcessInfo5.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("采购申请", taskProcessInfo5.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo5.getStatus());
+                }
                 break;
             case 6: //用车
                 jdbcTemplate.execute("update c_expense_use_car_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo6 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo6 != null && taskProcessInfo6.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("用车申请", taskProcessInfo6.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo6.getStatus());
+                }
                 break;
             case 7: //发票
                 jdbcTemplate.execute("update c_expense_invoice_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo7 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo7 != null && taskProcessInfo7.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("发票申请", taskProcessInfo7.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo7.getStatus());
+                }
                 break;
             case 8: //外包
                 jdbcTemplate.execute("update c_expense_outsourcing_pay_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo8 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo8 != null && taskProcessInfo8.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("外包支付申请", taskProcessInfo8.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo8.getStatus());
+                }
                 break;
             case 9: //出差
                 jdbcTemplate.execute("update c_attendance_trip_info set status = " + taskStatus + " where id = " + dataId);
+                TaskProcessInfo taskProcessInfo9 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo9 != null && taskProcessInfo9.getStatus().equals(3)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("出差申请", taskProcessInfo9.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo9.getStatus());
+                }
                 break;
             case 10: //成本测算
                 if (taskStatus == 2) {
@@ -1088,7 +1123,11 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 } else if (taskStatus == 3) {
                     //已驳回 = approve = 0
                     jdbcTemplate.execute("update c_project_cost_budget set approve = 0 where id in(" + dataId + ")");
-                    break;
+                    TaskProcessInfo taskProcessInfo10 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                    if (taskProcessInfo10 != null && taskProcessInfo10.getStatus().equals(3)) {
+                        //日志操作信息
+                        planInformService.taskFinishedInform("成本测算申请", taskProcessInfo10.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo10.getStatus());
+                    }
                 }
                 break;
         }
@@ -1105,18 +1144,18 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         switch (businessDataType) {
             case 1:
                 //计划任务
-                TaskProcessInfo taskProcessInfo = jdbcTemplate.query("select status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                TaskProcessInfo taskProcessInfo1 = jdbcTemplate.query("select status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
                 ProjectCostBudget projectCostBudget = jdbcTemplate.query("select plan_task_desc,task_user,id from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
-                if (taskProcessInfo != null && projectCostBudget != null) {
+                if (taskProcessInfo1 != null && projectCostBudget != null) {
                     //获取任务完成时间
                     TaskPlanUpdateStatusInfo taskPlanUpdateStatusInfo = jdbcTemplate.query("select completion_time from c_task_plan_update_status_info where update_type = 1 and approve_task_id = " + approveTaskId + " and plan_task_id = " + dataId, new BeanPropertyRowMapper<>(TaskPlanUpdateStatusInfo.class)).stream().findAny().orElse(null);
-                    if (taskPlanUpdateStatusInfo != null && taskProcessInfo.getStatus().equals(2)) { //已完成的任务才推送
+                    if (taskPlanUpdateStatusInfo != null && taskProcessInfo1.getStatus().equals(2)) { //已完成的任务才推送
                         //修改任务实际完成时间、金额
                         LocalDate localDate = taskPlanUpdateStatusInfo.getCompletionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                         projectCostBudgetService.taskFinishedStats(projectCostBudget.getId(), localDate);
                     }
-                    //计划日志操作信息
-                    planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getUserName(), taskProcessInfo.getStatus());
+                    //日志操作信息
+                    planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getUserName(), taskProcessInfo1.getStatus());
                 }
 
                 break;
@@ -1136,23 +1175,86 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                 BigDecimal difference = frMoney.subtract(loanMoney).abs();
                                 if (ObjectUtil.isNotEmpty(difference)) {
                                     //部分还完frMoney
-                                    jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
-                                    jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
+                                    jdbcTemplate.execute("update c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
+                                    jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
                                 }
                             } else if (result == 0) { //相同,抵扣完成
-                                jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
-                                jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
+                                jdbcTemplate.execute("update c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
+                                jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
                             } else { //如果借款金额小于报销金额,那么抵扣完借款,还要实际放款
                                 BigDecimal difference = frMoney.subtract(loanMoney).abs();
                                 if (ObjectUtil.isNotEmpty(difference)) {
                                     //全部还完loanMoney
-                                    jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + loanMoney + " where id = " + emLoanInfo.getId());
-                                    jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = " + difference + " where id = " + emFinancialReimbursementInfo.getId());
+                                    jdbcTemplate.execute("update c_expense_loan_info set return_money = " + loanMoney + " where id = " + emLoanInfo.getId());
+                                    jdbcTemplate.execute("update c_expense_financial_reimbursement_info set fr_money_actual = " + difference + " where id = " + emFinancialReimbursementInfo.getId());
                                 }
                             }
                         }
                     }
                 }
+                TaskProcessInfo taskProcessInfo2 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo2 != null && taskProcessInfo2.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("财务报销申请", taskProcessInfo2.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo2.getStatus());
+                }
+
+                break;
+
+            case 3:
+                TaskProcessInfo taskProcessInfo3 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo3 != null && taskProcessInfo3.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("支付申请", taskProcessInfo3.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo3.getStatus());
+                }
+                break;
+            case 4:
+                TaskProcessInfo taskProcessInfo4 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo4 != null && taskProcessInfo4.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("借款申请", taskProcessInfo4.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo4.getStatus());
+                }
+                break;
+            case 5:
+                TaskProcessInfo taskProcessInfo5 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo5 != null && taskProcessInfo5.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("采购申请", taskProcessInfo5.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo5.getStatus());
+                }
+                break;
+            case 6:
+                TaskProcessInfo taskProcessInfo6 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo6 != null && taskProcessInfo6.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("用车申请", taskProcessInfo6.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo6.getStatus());
+                }
+                break;
+            case 7:
+                TaskProcessInfo taskProcessInfo7 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo7 != null && taskProcessInfo7.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("发票申请", taskProcessInfo7.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo7.getStatus());
+                }
+                break;
+            case 8:
+                TaskProcessInfo taskProcessInfo8 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo8 != null && taskProcessInfo8.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("外包支付申请", taskProcessInfo8.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo8.getStatus());
+                }
+                break;
+            case 9:
+                TaskProcessInfo taskProcessInfo9 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo9 != null && taskProcessInfo9.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("出差申请", taskProcessInfo9.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo9.getStatus());
+                }
+                break;
+            case 10:
+                TaskProcessInfo taskProcessInfo10 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo10 != null && taskProcessInfo10.getStatus().equals(2)) {
+                    //日志操作信息
+                    planInformService.taskFinishedInform("成本测算申请", taskProcessInfo10.getReportUserId(), SecureUtil.getUserName(), taskProcessInfo10.getStatus());
+                }
                 break;
         }
 

+ 1 - 1
blade-service/blade-desk/src/main/java/org/springblade/desk/controller/LeaveController.java

@@ -39,7 +39,7 @@ import springfox.documentation.annotations.ApiIgnore;
 @AllArgsConstructor
 public class LeaveController extends BladeController implements CacheNames {
 
-   // private final ILeaveService leaveService;
+    private final ILeaveService leaveService;
 
     /**
      * 详情

+ 1 - 1
blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml

@@ -43,7 +43,7 @@
         LEFT JOIN ( SELECT * FROM blade_dict WHERE CODE = 'notice' ) d ON n.category = d.dict_key
         WHERE
         n.is_deleted = 0 and n.tenant_id = #{notice.tenantId}
-         test="notice.title!=null">
+         <if test="notice.title!=null">
             and n.title like concat(concat('%', #{notice.title}), '%')
         </if>
         <if test="notice.category!=null">

+ 14 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -183,33 +183,34 @@ public class WbsTreeContractController extends BladeController {
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "客户端懒加载获取合同段树(统计颜色、填报数量)", notes = "传入父级parentId、合同段contractId、关联contractIdRelation")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "primaryKeyId", value = "监理合同前端要的"),
+            @ApiImplicitParam(name = "primaryKeyId"),
             @ApiImplicitParam(name = "parentId", value = "父节点id,为空则查询第一级节点"),
             @ApiImplicitParam(name = "contractId", value = "合同段id"),
             @ApiImplicitParam(name = "contractIdRelation", value = "合同段关联id(监理、业主合同关联施工合同id)"),
-            @ApiImplicitParam(name = "classifyType", value = "所属方,监理、总监办的资料查询使用,=1施工数据(默认),=2监理数据")
+            @ApiImplicitParam(name = "classifyType", value = "合同段区分,施工合同段=1,监理合同段=2"),
+            @ApiImplicitParam(name = "tableOwner", value = "所属方节点权限,施工=1,监理=2,区分节点的数量、颜色")
     })
-    public R<List<WbsTreeContractLazyVO>> lazyQueryContractWbsTree(@RequestParam String primaryKeyId, @RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation, @RequestParam String classifyType) {
-        List<WbsTreeContractLazyVO> vos;
-        String dataInfoId;
+    public R<List<WbsTreeContractLazyVO>> lazyQueryContractWbsTree(@RequestParam String primaryKeyId, @RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation, @RequestParam String classifyType, @RequestParam String tableOwner) {
         if (StringUtils.isNotEmpty(primaryKeyId)) {
             parentId = primaryKeyId;
         }
-        if (("1").equals(classifyType)) { //质检
-            dataInfoId = contractId + "_" + parentId + "_" + classifyType;
-        } else { //监理
-            dataInfoId = contractIdRelation + "_" + parentId + "_" + classifyType;
+        List<WbsTreeContractLazyVO> vos;
+        /*String dataInfoId;
+        if (("1").equals(classifyType)) {
+            dataInfoId = contractId + "_" + parentId + "_" + classifyType + "_" + tableOwner;
+        } else {
+            dataInfoId = contractIdRelation + "_" + parentId + "_" + classifyType + "_" + tableOwner;
         }
         Object data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + dataInfoId);
         if (data != null) {
             vos = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
-        } else {
-            vos = iWbsTreeContractService.lazyQueryContractWbsTree(parentId, contractId, contractIdRelation);
-            if (vos != null) {
+        } else {*/
+        vos = iWbsTreeContractService.lazyQueryContractWbsTree(parentId, contractId, contractIdRelation, tableOwner);
+            /*if (vos != null) {
                 JSONArray array = JSONArray.parseArray(JSON.toJSONString(vos));
                 redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + dataInfoId, JSON.toJSON(array).toString());
             }
-        }
+        }*/
         return R.data(vos);
     }
 

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -448,12 +448,12 @@
     </select>
     <select id="getFirstNodeByTreeCode" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select * from m_archive_tree_contract
-        WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
+        WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId} and is_deleted = 0)
           and is_deleted = 0 and tree_code is NULL
     </select>
     <select id="getFirstNodeByTreeCode2" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select * from m_archive_tree_contract
-        WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
+        WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId} and is_deleted = 0)
           and is_deleted = 0 and tree_code = #{type}
     </select>
 

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -61,6 +61,6 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     void syncCurrentFormToAllContract(WbsTreePrivate wbsTreePrivate);
 
-    List<WbsTreeContractLazyVO> lazyQueryContractWbsTree(String id, String contractId, String contractIdRelation);
+    List<WbsTreeContractLazyVO> lazyQueryContractWbsTree(String id, String contractId, String contractIdRelation, String tableOwner);
 
 }

+ 1 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -309,7 +309,6 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
     @Override
     public R getTreeNodeByValueAndContractId(String queryValue, String contractId) {
-        List<WbsTreeContractTreeAllVO> resultList = new ArrayList<>();
         Map<Long, List<WbsTreeContractTreeAllVO>> resultMaps = new LinkedHashMap<>();
         if (StringUtils.isNotEmpty(queryValue) && StringUtils.isNotEmpty(contractId)) {
             ContractInfo contractInfo = contractInfoMapper.selectById(contractId);
@@ -364,10 +363,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
                     //处理父级节点计数、颜色问题
                     this.reSetSubmitCountsAndColorStatus(resultNodesAll);
-
-                    //返回结果集
-                    resultList.addAll(reNodes);
-                    return R.data(resultList);
+                    return R.data(reNodes);
 
                 } else if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                     //监理、指挥部

+ 13 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -558,7 +558,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     }
 
     @Override
-    public List<WbsTreeContractLazyVO> lazyQueryContractWbsTree(String id, String contractId, String contractIdRelation) {
+    public List<WbsTreeContractLazyVO> lazyQueryContractWbsTree(String id, String contractId, String contractIdRelation, String tableOwner) {
         if (ObjectUtil.isNotEmpty(contractId)) {
             ContractInfo contractInfo = jdbcTemplate.query("select contract_name,contract_type from m_contract_info where id = " + contractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
             if (contractInfo != null) {
@@ -595,7 +595,12 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         ));
 
                         //获取当前合同段所有填报资料信息
-                        List<WbsTreeContractLazyQueryInfoVO> queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                        List<WbsTreeContractLazyQueryInfoVO> queryInfoList;
+                        if (ObjectUtil.isEmpty(tableOwner)) {
+                            queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                        } else {
+                            queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + contractId + " and classify = " + tableOwner, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                        }
                         Map<Long, Integer> queryInfoMaps = queryInfoList.stream()
                                 .collect(Collectors.toMap(WbsTreeContractLazyQueryInfoVO::getWbsId, WbsTreeContractLazyQueryInfoVO::getStatus, (existingValue, newValue) -> existingValue));
                         List<Long> pKeyIdList = new ArrayList<>(queryInfoMaps.keySet());
@@ -717,7 +722,12 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                 ));
 
                                 //获取当前合同段所有填报资料信息
-                                List<WbsTreeContractLazyQueryInfoVO> queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + sgContractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                                List<WbsTreeContractLazyQueryInfoVO> queryInfoList;
+                                if (ObjectUtil.isEmpty(tableOwner)) {
+                                    queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + sgContractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                                } else {
+                                    queryInfoList = jdbcTemplate.query("select wbs_id,status from u_information_query where type = 1 and contract_id = " + sgContractId + " and classify = " + tableOwner, new BeanPropertyRowMapper<>(WbsTreeContractLazyQueryInfoVO.class));
+                                }
                                 Map<Long, Integer> queryInfoMaps = queryInfoList.stream()
                                         .collect(Collectors.toMap(WbsTreeContractLazyQueryInfoVO::getWbsId, WbsTreeContractLazyQueryInfoVO::getStatus, (existingValue, newValue) -> existingValue));
                                 List<Long> pKeyIdList = new ArrayList<>(queryInfoMaps.keySet());

+ 6 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -87,6 +87,11 @@ public class UserClient implements IUserClient {
         return R.data(service.submit(user));
     }
 
+    @Override
+    public R<Boolean> updateUserInfo(User user) {
+        return R.data(service.saveOrUpdate(user));
+    }
+
     @Override
     @PostMapping(REMOVE_USER)
     public R<Boolean> removeUser(String tenantIds) {
@@ -124,4 +129,5 @@ public class UserClient implements IUserClient {
         return service.getBaseMapper().selectBatchIds(userIds);
     }
 
+
 }

+ 7 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -267,7 +267,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 
     @Override
     public boolean updateUserInfo(User user) {
-        user.setPassword(null);
+
+        // 当为内控是 可以修改密码
+        if(user.getUserType().equals("5") && StringUtil.isNotBlank(user.getPassword())){
+            user.setPassword(DigestUtil.encrypt(user.getPassword()));
+        }else{
+            user.setPassword(null);
+        }
         return updateById(user);
     }