Переглянути джерело

Merge remote-tracking branch 'origin/master' into master

yangyj 2 роки тому
батько
коміт
d67d422b22
27 змінених файлів з 414 додано та 151 видалено
  1. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java
  2. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetStatsVO.java
  3. 4 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java
  4. 8 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  5. 33 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  6. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 11 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  8. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AttendanceManagerController.java
  9. 22 9
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java
  10. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java
  11. 23 10
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  12. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml
  13. 5 3
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  14. 26 6
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  15. 3 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.xml
  16. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  17. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  18. 33 11
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  19. 10 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java
  20. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  21. 4 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  22. 128 52
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  23. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  24. 15 9
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  25. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  26. 20 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  27. 45 35
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java

@@ -30,4 +30,7 @@ public class DepartmentMonthPlanVO extends DepartmentMonthPlan {
     @ApiModelProperty(value = "未完成计划")
     private Integer beginPlanTotal;
 
+    @ApiModelProperty(value = "计划制定人名称")
+    private String planDesignerName;
+
 }

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetStatsVO.java

@@ -37,4 +37,7 @@ public class ProjectCostBudgetStatsVO extends ProjectCostBudgetStats {
 
     @ApiModelProperty(value = "建设单位预算集合")
     private List<ProjectCostBudget> constructUnit;
+
+    @ApiModelProperty(value = "1显示提交审批,0不显示")
+    private String approveStatus;
 }

+ 4 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java

@@ -366,7 +366,10 @@ public class ArchiveFileController extends BladeController {
     @ApiOperation(value = "文件收集-上传文件责任者")
     public R getDutyUser(Long contractId, Long projectId) {
         ContractInfo contractById = null;
-        if (contractId == -1) {
+        if (contractId == null || contractId == -1) {
+            if(projectId == null || projectId == -1){
+                return R.data(null);
+            }
             List<Long> longs = new ArrayList<>();
             longs.add(projectId);
             List<ContractInfo> contractInfos = contractClient.queryContractListByIds(longs);

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

@@ -474,7 +474,10 @@
     <select id="pageByArchivesAuto11" resultMap="archivesAutoResultMap">
         select uaa.*
         from m_archive_tree_contract matc left join u_archives_auto uaa on matc.id = uaa.node_id
-        where uaa.is_deleted = 0 and uaa.is_archive = 1 and uaa.name like concat('%',#{vo.queryValue},'%')
+        where uaa.is_deleted = 0 and uaa.is_archive = 1
+        <if test="vo.queryValue != null and vo.queryValue != ''">
+            and uaa.name like concat('%',#{vo.queryValue},'%') or uaa.file_number like concat('%',#{vo.queryValue},'%')
+        </if>
         <if test="vo.projectId != null and vo.projectId != ''">
             and matc.project_id = #{vo.projectId}
         </if>
@@ -576,7 +579,10 @@
             or ancestors like concat('%',#{nodeId},'%') or id = #{nodeId}
         </foreach>
         ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
-        where uaa.is_deleted = 0 and uaa.is_archive = 1 and uaa.name like concat('%',#{vo.queryValue},'%')
+        where uaa.is_deleted = 0 and uaa.is_archive = 1
+        <if test="vo.queryValue != null and vo.queryValue != ''">
+            and uaa.name like concat('%',#{vo.queryValue},'%') or uaa.file_number like concat('%',#{vo.queryValue},'%')
+        </if>
         <if test="vo.contractId != null and vo.contractId != ''">
             and uaa.contract_id = #{vo.contractId}
         </if>

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

@@ -41,6 +41,8 @@ import org.springblade.archive.mapper.ArchivesAutoMapper;
 import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
+import org.springblade.business.feign.MetadataClassificationClient;
+import org.springblade.business.vo.ArchiveFileVO;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
@@ -111,6 +113,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	private final IArchiveProjectConfigService archiveProjectConfigService;
 
+	private final MetadataClassificationClient metadataClassificationClient;
+
 
 	@Override
 	public IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto) {
@@ -1023,7 +1027,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		String projectName = projectInfo.getProjectName();
 		String contractName="";
 		Long contractId = node.getContractId();
-		if(contractId!=null){
+		if(contractId!=null && contractId != -1){
 			ContractInfo contract = contractClient.getContractById(contractId);
 			contractName=contract.getContractName();
 		}
@@ -1101,6 +1105,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		}
 		archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
+		try {
+			for (ArchiveFile saveVo : waitArchiveFiles) {
+				metadataClassificationClient.createMetadataFile(saveVo.getId(), 0);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -1148,6 +1159,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			file.setIsArchive(1);
 		}
 		archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
+		try {
+			for (ArchiveFile saveVo : waitArchiveFiles) {
+				metadataClassificationClient.createMetadataFile(saveVo.getId(), 0);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -1189,6 +1207,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			file.setIsArchive(1);
 		}
 		archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
+		try {
+			for (ArchiveFile saveVo : waitArchiveFiles) {
+				metadataClassificationClient.createMetadataFile(saveVo.getId(), 0);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	private void createArchiveBox(String boxName,List<ArchiveFile> waitArchiveFiles){
@@ -1237,6 +1262,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			file.setIsArchive(1);
 		}
 		archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
+		try {
+			for (ArchiveFile saveVo : waitArchiveFiles) {
+				metadataClassificationClient.createMetadataFile(saveVo.getId(), 0);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -3224,7 +3224,7 @@ public class InformationWriteQueryController extends BladeController {
             node = this.wbsTreeContractClient.getContractWbsTreeByContractIdAndId(vo.getWbsId(), Long.parseLong(vo.getContractIdRelation()));
         }
         List<QueryProcessDataVO> queryDataResult = new ArrayList<>();
-        if (!new Integer("6").equals(node.getNodeType()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType().toString())) {
+        if (!new Integer("6").equals(node.getNodeType()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType() + "")) {
             //不是工序,则查询当前节点下的所有填报节点
             if (node.getParentId() == 0) {
                 queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());

+ 11 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -985,6 +985,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             return;
         }
 
+        ContractInfo contractIndfo = contractClient.getContractById(contractId);
+
         ArchiveFile archiveFile = this.archiveFileService.getOne(Wrappers.<ArchiveFile>lambdaQuery()
                 .eq(ArchiveFile::getNodeId, nodeId.toString())
                 .eq(ArchiveFile::getNodeExtId, keyId)
@@ -1001,12 +1003,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             this.archiveFileService.updateById(archiveFile);
 
         } else {
-            archiveFile = getArchiveFile(query,nodeId,keyId,fileSize);
+            archiveFile = getArchiveFile(query,nodeId,keyId,fileSize,contractIndfo.archivesUnit());
             this.archiveFileService.save(archiveFile);
         }
     }
 
-    public ArchiveFile getArchiveFile(InformationQuery query,Long nodeId,Long keyId,Long fileSize) {
+    public ArchiveFile getArchiveFile(InformationQuery query,Long nodeId,Long keyId,Long fileSize,String unit) {
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setNodeId(nodeId.toString());
         archiveFile.setNodeExtId(keyId);
@@ -1014,10 +1016,16 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
         //TODO 文件题名规则,待补充
         fillFileNameAndTime(archiveFile,query);
-        archiveFile.setFileSize(fileSize);
+
         archiveFile.setSourceType(1);
 
         //责任人怎么取
+        archiveFile.setDutyUser(unit);
+
+        //文件大小
+        archiveFile.setFileSize(query.getEVisaPdfSize());
+        archiveFile.setFilePage(query.getEVisaPdfPage());
+        archiveFile.setFileSize(fileSize);
 
         //
         archiveFile.setEVisaFile(query.getEVisaPdfUrl());

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

@@ -41,7 +41,7 @@ public class AttendanceManagerController extends BladeController {
 
     @GetMapping("/trip/draft/detail")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "财务报销草稿箱编辑详情", notes = "传入当前草稿的eMDraftIds")
+    @ApiOperation(value = "出差信息草稿箱编辑详情", notes = "传入当前草稿的eMDraftIds")
     public R<List<AttendanceTripInfoVO>> financialDraftDetail(@RequestParam String eMDraftIds) {
         return R.data(attendanceTripService.financialDraftDetail(eMDraftIds));
     }

+ 22 - 9
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java

@@ -10,10 +10,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.business.vo.TrialContainerClassificationVO;
 import org.springblade.control.entity.*;
-import org.springblade.control.service.impl.ContractReturnedInfoServiceImpl;
-import org.springblade.control.service.impl.EMLoanServiceImpl;
-import org.springblade.control.service.impl.ProjectCostBudgetServiceImpl;
-import org.springblade.control.service.impl.ProjectInfoServiceImpl;
+import org.springblade.control.service.impl.*;
 import org.springblade.control.utils.NumberToChinese;
 import org.springblade.control.vo.*;
 import org.springblade.core.boot.ctrl.BladeController;
@@ -48,6 +45,7 @@ public class ExMaTwoController extends BladeController {
     private final ProjectCostBudgetServiceImpl projectCostBudgetService;
     private final EMLoanServiceImpl emLoanService;
     private final ContractReturnedInfoServiceImpl contractReturnedInfoService;
+    private final EMPurchaseServiceImpl emPurchaseService;
 
     @GetMapping("/project/list")
     @ApiOperationSupport(order = 1)
@@ -93,9 +91,9 @@ public class ExMaTwoController extends BladeController {
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "获取我的借款列表")
     public R<List<ExMaByLoanVO>> getLoanList() {
-        /*if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("未获取到当前用户信息,请联系管理员");
-        }*/
+        }
         LambdaQueryWrapper<EMLoanInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMLoanInfo::getIsTemp, 1); //已提交
         queryWrapper.eq(EMLoanInfo::getStatus, 2); //已审批
@@ -150,9 +148,12 @@ public class ExMaTwoController extends BladeController {
 
     @GetMapping("/getUserList")
     @ApiOperationSupport(order = 6)
-    @ApiOperation(value = "获取管控系统用户列表", notes = "(财务报销-归属人、发票管理-开票人、支付-申请人)")
+    @ApiOperation(value = "获取管控系统用户列表", notes = "(财务报销-归属人、发票管理-开票人、支付-申请人、日志-选择人员)")
     public R<List<UserControlVO>> getUserList() {
-        List<User> query = jdbcTemplate.query("select id,name,real_name from blade_user where tenant_id = 003077 and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        List<User> query = jdbcTemplate.query("select id,name,real_name from blade_user where tenant_id = " + SecureUtil.getUser().getTenantId() + " and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
         List<UserControlVO> result = new ArrayList<>();
         for (User user : query) {
             UserControlVO vo = new UserControlVO();
@@ -189,7 +190,10 @@ public class ExMaTwoController extends BladeController {
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "获取用车部门列表")
     public R<List<UseCarDeptVO>> getUseCarDeptList() {
-        List<Dept> query = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        List<Dept> query = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
         List<UseCarDeptVO> result = new ArrayList<>();
         if (query.size() > 0) {
             for (Dept dept : query) {
@@ -263,4 +267,13 @@ public class ExMaTwoController extends BladeController {
         return R.data(result);
     }
 
+    @GetMapping("/getUseOrgNameList")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "获取采购使用单位列表")
+    public R<List<String>> getUseOrgNameList() {
+        List<EMPurchaseInfo> emPurchaseInfos = emPurchaseService.getBaseMapper().selectList(Wrappers.<EMPurchaseInfo>lambdaQuery().select(EMPurchaseInfo::getUseOrgName).eq(EMPurchaseInfo::getIsTemp, 1));
+        List<String> collect = emPurchaseInfos.stream().map(EMPurchaseInfo::getUseOrgName).collect(Collectors.toList());
+        return R.data(collect);
+    }
+
 }

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

@@ -54,7 +54,7 @@ public class LogHistoryController extends BladeController {
 
     @PostMapping("/task/complete")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "日志任务完成", notes = "传入日志logId、任务taskId")
+    @ApiOperation(value = "日志任务完成", notes = "传入日志logId(编辑时完成要传日志logId)、任务taskId")
     public R<Object> logTaskComplete(Long logId, @RequestParam Long taskId) {
         return R.status(logHistoryService.logTaskComplete(logId, taskId));
     }

+ 23 - 10
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml

@@ -21,18 +21,31 @@
                (select dict_name  from c_dict_info WHERE code = 'contract_type' AND dict_value= cci.contract_type) as contractTypeValue
         from c_control_project_info cpi left join c_control_contract_info cci on cpi.id = cci.project_id
     </select>
+<!--    <select id="getReturnedByAnnualBudgetId" resultType="org.springblade.control.vo.AnnualBudgetIncomeVO">-->
+<!--        SELECT-->
+<!--                (select name from c_control_project_info WHERE id = abi.project_id ) as projectName,-->
+<!--                (select dict_name  from c_dict_info WHERE code = 'project_income_type' AND dict_value = abi.income_type) as incomeTypeValue,-->
+<!--                abi.project_type_value ,-->
+<!--               abi.contract_type_value,-->
+<!--               cri.practical_returned_time as returnTime,-->
+<!--               cri.practical_returned_money as returnMoney-->
+<!--        FROM c_annual_budget_income abi left join c_contract_returned_info cri on abi.project_id = cri.project_id-->
+<!--        WHERE cri.practical_returned_time is not null and cri.practical_returned_money is not NULL-->
+<!--          AND abi.annual_budget_id = #{id}-->
+<!--    </select>-->
+
     <select id="getReturnedByAnnualBudgetId" resultType="org.springblade.control.vo.AnnualBudgetIncomeVO">
-        SELECT
+        SELECT  abi.predict_contract_money,
                 (select name from c_control_project_info WHERE id = abi.project_id ) as projectName,
                 (select dict_name  from c_dict_info WHERE code = 'project_income_type' AND dict_value = abi.income_type) as incomeTypeValue,
                 abi.project_type_value ,
-               abi.contract_type_value,
-               cri.practical_returned_time as returnTime,
-               cri.practical_returned_money as returnMoney
-        FROM c_annual_budget_income abi left join c_contract_returned_info cri on abi.project_id = cri.project_id
-        WHERE cri.practical_returned_time is not null and cri.practical_returned_money is not NULL
-          AND abi.annual_budget_id = #{id}
+                abi.contract_type_value,
+                abi.predict_sign_date as returnTime,
+                abi.predict_annual_returned as returnMoney
+        FROM c_annual_budget_income abi
+        WHERE abi.annual_budget_id = #{id}
     </select>
+
     <select id="getDisburseByAnnualBudgetId" resultType="org.springblade.control.vo.AnnualBudgetDisburseVO">
         select abd.*,
                (select dict_name  from c_dict_info WHERE `type` = 1 AND dict_value = abd.budget_subject AND parent_id = 0) as budgetSubjectValue,
@@ -43,11 +56,11 @@
     </select>
     <select id="getAllBudgetSubject" resultType="org.springblade.control.vo.DictInfoVO">
         select *
-        from c_dict_info di WHERE di.`type` = 1 AND di.parent_id = 0 ORDER BY sort
+        from c_dict_info di WHERE di.`type` = 1 AND di.parent_id = 0 and di.is_deleted = 0 ORDER BY sort
     </select>
     <select id="getAllSecondSubject" resultType="org.springblade.control.vo.DictInfoVO">
         select *
-        from c_dict_info di WHERE di.`type` = 1 AND di.parent_id > 0
+        from c_dict_info di WHERE di.`type` = 1 AND di.is_deleted = 0 and di.parent_id > 0
     </select>
     <select id="getThisYearBudget" resultType="org.springblade.control.entity.AnnualBudget">
         select   <include refid="budget_column" />
@@ -61,7 +74,7 @@
     <select id="yearList" resultType="java.lang.Integer">
         select DATE_FORMAT(start_time,'%Y')
         from c_control_project_info cpi
-        WHERE is_deleted = 0 order by start_time
+        WHERE is_deleted = 0 and start_time is not null order by start_time
             limit 1
     </select>
 

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

@@ -34,7 +34,7 @@
         select * from c_contract_returned_info
         WHERE is_deleted = 0
         <if test="date != null and date != ''">
-            and DATE_FORMAT(practical_returned_time ,'%Y-%m') = #{date}
+            and DATE_FORMAT(practical_returned_time ,'%Y') = #{date}
         </if>
         and practical_returned_money is not null
     </select>

+ 5 - 3
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml

@@ -18,14 +18,16 @@
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'planTotal',
                 (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
-                                                                   and pcb.status = 4
+                                                                   and pcb.task_approve = 1
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'finishPlanTotal',
                 (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
-                                                                   and pcb.status != 4
+                                                                   and pcb.task_approve = 0
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
-                    or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'beginPlanTotal'
+                    or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'beginPlanTotal',
+                (select bu.name from blade_user bu WHERE bu.id = dmp.plan_designer) as 'planDesignerName'
         FROM c_department_month_plan dmp
+        order by dmp.plan_start_date desc
     </select>
     <select id="getDepartmentUserDict" resultType="org.springblade.core.secure.BladeUser">
 

+ 26 - 6
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -94,28 +94,48 @@
     <select id="getUserALLPlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO3">
         SELECT
             (select COUNT(1) FROM c_project_cost_budget pcb WHERE pcb.task_user = #{user}) as 'totalPlan',
-            (select COUNT(1) FROM c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.status = 4 ) as 'finishedPlan'
+            (select COUNT(1) FROM c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.status = 4 ) as 'finishedPlan',
+            (SELECT COUNT(1) from c_project_cost_budget pcb
+             WHERE pcb.task_user = #{user} and  date_add(NOW() , interval '3' DAY) > plan_end_time and  pcb.status in (2,3)) as 'riskPlan',
+            ( SELECT SUM(a) from (
+                SELECT COUNT(1) as a from c_project_cost_budget pcb
+                    WHERE pcb.task_user = #{user} and  NOW() > plan_end_time and  pcb.status in (2,3)
+                UNION ALL
+                SELECT COUNT(1) as a from c_project_cost_budget pcb
+                    WHERE pcb.task_user = #{user} and  practical_finish_time > plan_end_time and  pcb.task_approve = 1) xc) as 'postponePlan'
+
     </select>
     <select id="MonthPlanOverview" resultType="org.springblade.control.vo.ProjectCostBudgetVO3">
         select
             (select count(1) from c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.is_deleted = 0
                 and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}
                 or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})) as 'totalPlan',
-            (select count(1) from c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.is_deleted = 0 and pcb.status in (1,2,3)
+            (select count(1) from c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.is_deleted = 0 and pcb.status in (2,3)
+                and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}
+                or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})) as 'unfinishedPlan',
+            (select count(1) from c_project_cost_budget pcb WHERE pcb.task_user = #{user} and pcb.is_deleted = 0 and pcb.status in (3)
                 and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}
-                or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})) as 'unfinishedPlan'
+                or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})) as 'cancelPlan',
+            ( SELECT SUM(a) from (
+                     SELECT COUNT(1) as a from c_project_cost_budget pcb
+                     WHERE pcb.task_user = #{user} and  NOW() > plan_end_time and  pcb.status in (2,3)
+                     and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate} or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})
+                     UNION ALL
+                     SELECT COUNT(1) as a from c_project_cost_budget pcb
+                     WHERE pcb.task_user = #{user} and  practical_finish_time > plan_end_time and  pcb.task_approve = 1
+                     and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate} or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})) xc) as 'postponePlan'
 
     </select>
     <select id="postponePlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO3">
         select pcb.id,pcb.plan_task_desc,pcb.plan_end_time,
                (select cpi.name from c_control_project_info cpi WHERE cpi.id = pcb.project_id) as "projectName"
-        from c_project_cost_budget pcb where pcb.task_user = #{user} and pcb.is_deleted = 0 and pcb.plan_end_time &lt;= NOW() and pcb.status in (1,2,3)
+        from c_project_cost_budget pcb where pcb.task_user = #{user} and pcb.is_deleted = 0 and date_add(NOW() , interval '3' DAY) > pcb.plan_end_time and pcb.status in (2,3)
     </select>
     <select id="MonthOfYearPlanOverview" resultType="org.springblade.control.entity.ProjectCostBudget">
         select pcb.*
         from c_project_cost_budget pcb
         where pcb.task_user = #{user} and pcb.is_deleted = 0
-            and DATE_FORMAT(pcb.plan_start_time,'%Y') = #{year} or DATE_FORMAT(pcb.plan_end_time,'%Y') = #{year}
+            and (DATE_FORMAT(pcb.plan_start_time,'%Y') = #{year} or DATE_FORMAT(pcb.plan_end_time,'%Y') = #{year})
     </select>
     <select id="getPostMoney" resultType="java.lang.Integer">
         select dict_value
@@ -188,7 +208,7 @@
         from c_project_cost_budget pcb
         WHERE pcb.is_deleted = 0 and pcb.task_approve = 1
         <if test="date != null and date != ''">
-            and DATE_FORMAT(pcb.plan_start_time ,'%Y-%m') = #{date}
+            and DATE_FORMAT(pcb.plan_start_time ,'%Y') = #{date}
         </if>
     </select>
     <select id="getPlanByDeptOrUserOrTime" resultType="org.springblade.control.entity.ProjectCostBudget">

+ 3 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.xml

@@ -14,7 +14,9 @@
     </select>
 
     <select id="page" resultType="org.springblade.control.vo.ProjectCostBudgetStatsVO">
-        SELECT cbs.*,cpi.name as projectName,CASE cbs.status WHEN '0' THEN '未上报' WHEN '1' THEN '已上报' WHEN '2' THEN '已审批' ELSE '已驳回' END as statusValue
+        SELECT cbs.*,cpi.name as projectName,
+--                CASE cbs.status WHEN '0' THEN '未上报' WHEN '1' THEN '已上报' WHEN '2' THEN '已审批' ELSE '已驳回' END as statusValue
+        IF ((select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.project_id = cbs.project_id and pcb.approve = 0)=0,0,1) as 'approveStatus'
         from c_project_cost_budget_stats cbs left join bladex.c_control_project_info cpi on cbs.project_id = cpi.id
         where cbs.is_deleted = 0
         <if test="queryValue != null and queryValue != ''">

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

@@ -23,7 +23,7 @@
             and pi.implement_principal = #{dto.implementPrincipal}
         </if>
         <if test="dto.queryDate != null and dto.queryDate != ''">
-            and #{dto.queryDate} BETWEEN pi.start_time AND pi.end_time
+            and #{dto.queryDate} between DATE_FORMAT(pi.start_time ,'%Y-%m') and DATE_FORMAT(pi.end_time ,'%Y-%m')
         </if>
         <if test="dto.queryValue != null and dto.queryValue != ''">
             and pi.name like concat('%', #{dto.queryValue}, '%')

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

@@ -42,4 +42,5 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     List<ControlProjectInfo> listByYear(int year);
 
     List<User> getImplementUser();
+
 }

+ 33 - 11
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -339,13 +339,27 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         if (vo3.getAnnualContractTarget() == null || vo3.getAnnualContractTarget().compareTo(BigDecimal.ZERO) == 0 || vo3.getYearReturned().compareTo(BigDecimal.ZERO) == 0){
             vo3.setContractSchedule(0);
         }else {
-            vo3.setContractSchedule(vo3.getYearReturned().divide(vo3.getAnnualContractTarget(),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+            int value = vo3.getYearReturned().divide(vo3.getAnnualContractTarget(), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue();
+            if (value < 0){
+                value = 0;
+            }
+            if (value > 100){
+                value = 100;
+            }
+            vo3.setContractSchedule(value);
         }
         //利润进度统计
         if (vo3.getAnnualProfitTarget() == null || vo3.getAnnualProfitTarget().compareTo(BigDecimal.ZERO) == 0 || vo3.getYearProfit().compareTo(BigDecimal.ZERO) == 0){
             vo3.setProfitSchedule(0);
         }else {
-            vo3.setProfitSchedule(vo3.getYearProfit().divide(vo3.getAnnualProfitTarget(),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+            int value = vo3.getYearProfit().divide(vo3.getAnnualProfitTarget(), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue();
+            if (value < 0){
+                value = 0;
+            }
+            if (value > 100){
+                value = 100;
+            }
+            vo3.setProfitSchedule(value);
         }
         return vo3;
     }
@@ -458,6 +472,8 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         //获取当月所有计划,和计划工资
         List<ProjectCostBudgetVO2> planByMonth = budgetService.getPlanByMonth(date);
+        planByMonth = planByMonth.stream().filter(l->l.getPlanCountMoney() != null).collect(Collectors.toList());
+        planByMonth = planByMonth.stream().filter(l->new BigDecimal(0).compareTo(l.getPlanCountMoney()) != 0).collect(Collectors.toList());
         if (planByMonth != null && planByMonth.size() > 0) {
             List<DeptMonthPlanRatioVO> vos = new ArrayList<>();
             //月计划包含的项目
@@ -500,12 +516,18 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                 //设置投入比
                 if (new BigDecimal(0).compareTo(businessCount) != 0){
                     vo.setBusinessRatio(business.divide(businessCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }else {
+                    vo.setBusinessRatio("0%");
                 }
                 if (new BigDecimal(0).compareTo(devCount) != 0) {
                     vo.setDevRatio(dev.divide(devCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }else {
+                    vo.setDevRatio("0%");
                 }
                 if (new BigDecimal(0).compareTo(maintainCount) != 0) {
                     vo.setMaintainRatio(maintain.divide(maintainCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }else {
+                    vo.setMaintainRatio("0%");
                 }
                 //插入结果集
                 vos.add(vo);
@@ -571,17 +593,17 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
      */
     @Override
     public List<ProjectIncomeCostRatioVO> portalProjectCostRatio(String date) {
-        if ("汇总所有".equals(date)){
-            date = "";
-        }
+//        if ("汇总所有".equals(date)){
+//            date = "";
+//        }
         //获取项目列表
-        List<ControlProjectInfo> list = projectInfoService.list();
+        List<ControlProjectInfo> list = projectInfoService.listByYear(Integer.parseInt(date.substring(0,4)));
         if (list == null || list.size() <= 0){
             return null;
         }
         List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
-        //按获取闭环任务,根据项目分组
-        List<ProjectCostBudget> costByMonth = budgetService.getPlanPracticalCostByMonth(date);
+        //按获取闭环任务,根据项目分组
+        List<ProjectCostBudget> costByMonth = budgetService.getPlanPracticalCostByMonth(date.substring(0,4));
         if (costByMonth == null || costByMonth.size() <= 0){
             //没有闭环任务,为每个项目设置为0
             for (ControlProjectInfo info : list) {
@@ -617,13 +639,13 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             date = "";
         }
         //获取项目列表
-        List<ControlProjectInfo> list = projectInfoService.list();
+        List<ControlProjectInfo> list = projectInfoService.listByYear(Integer.parseInt(date.substring(0,4)));
         if (list == null || list.size() <= 0){
             return null;
         }
         //获取所有回款,根据项目分组
         List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
-        List<ContractReturnedInfo> returnedByMonth = returnedInfoService.getProjectReturnedByMonth(date);
+        List<ContractReturnedInfo> returnedByMonth = returnedInfoService.getProjectReturnedByMonth(date.substring(0,4));
         if (returnedByMonth == null || returnedByMonth.size() <= 0){
             //没有闭环任务,为每个项目设置为0
             for (ControlProjectInfo info : list) {
@@ -647,7 +669,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     big = big.add(returnedInfo.getPracticalReturnedMoney());
                 }
             }
-            vo.setProjectCost(big.intValue());
+            vo.setProjectIncome(big.intValue());
             vos.add(vo);
         }
         return vos;

+ 10 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java

@@ -22,6 +22,8 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -39,6 +41,8 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
     private final IContractReturnedInfoService returnedInfoService;
 
+    private final JdbcTemplate jdbcTemplate;
+
     /**
      * 添加合同信息
      */
@@ -48,6 +52,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         Long id = SnowFlakeUtil.getId();
         dto.setId(id);
         BeanUtils.copyProperties(dto,contractInfo);
+        if (dto.getStartTime() != null && dto.getEndTime() != null){
+            jdbcTemplate.execute("update c_control_project_info set start_time = '"+dto.getStartTime() + "', end_time = '"+ dto.getEndTime() +"' where id = "+ dto.getProjectId());
+        }
         baseMapper.insert(contractInfo);
         returnedInfoService.saveOrUpdateBatchReturned(dto);
 
@@ -94,6 +101,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     public void updateContractInfo(ControlContractInfoDTO dto) {
         ControlContractInfo contractInfo = new ControlContractInfo();
         BeanUtils.copyProperties(dto,contractInfo);
+        if (dto.getStartTime() != null && dto.getEndTime() != null){
+            jdbcTemplate.execute("update c_control_project_info set start_time = '"+dto.getStartTime() + "', end_time = '"+ dto.getEndTime() +"' where id = "+ dto.getProjectId());
+        }
         this.updateById(contractInfo);
         returnedInfoService.saveOrUpdateBatchReturned(dto);
     }

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

@@ -19,6 +19,7 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -67,6 +68,8 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
         //获取部门名称
         String departmentName = baseMapper.getDepartmentName(plan.getDepartmentType());
         //新增部门月计划,并且设置名称和起止日期,制定人
+        Long userId = SecureUtil.getUserId();
+        plan.setPlanDesigner(userId);
         String planDate = plan.getPlanDate();
         String[] date = planDate.split("-");
         plan.setPlanName(date[0]+"年"+date[1]+"月"+departmentName+"预算计划");

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

@@ -43,11 +43,14 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
 
     @Override
     public IPage<EMUseCarInfoVO> carPage(IPage<EMUseCarInfo> page, EMUseCarInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
         QueryWrapper<EMUseCarInfo> queryWrapper = Condition.getQueryWrapper(dto);
         queryWrapper.lambda().eq(EMUseCarInfo::getIsTemp, 1);
         IPage<EMUseCarInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMUseCarInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
-        List<Dept> deptList = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
+        List<Dept> deptList = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
         return pages.convert(obj -> {
             EMUseCarInfoVO vo = new EMUseCarInfoVO();
             BeanUtils.copyProperties(obj, vo);

+ 128 - 52
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -22,6 +22,7 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 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.feign.IUserClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
@@ -33,6 +34,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -85,6 +87,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
             for (LogHistoryInfoReadVO readVO : infoReadVOS) {
                 readMap.put(readVO.getUserId() + readVO.getLogId() + "", readVO);
             }
+            Map<Long, List<LogHistoryInfoReadVO>> logRecords = infoReadVOS.stream().collect(Collectors.groupingBy(LogHistoryInfoReadVO::getLogId));
 
             for (LogHistoryInfoVO vo : voList) {
                 User user = userMap.get(vo.getUserId());
@@ -92,6 +95,8 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                     vo.setLogTitle(user.getRealName() + "的日志");
                     vo.setHeadPicture(StringUtils.isNotEmpty(user.getAvatar()) ? user.getAvatar() : "");
                 }
+
+                //当前用户是否已读
                 String readIndex = SecureUtil.getUserId() + vo.getId() + "";
                 LogHistoryInfoReadVO readVO = readMap.get(readIndex);
                 if (readVO != null) {
@@ -99,6 +104,17 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 } else {
                     vo.setIsRead(0);
                 }
+
+                //所有已读人
+                List<LogHistoryInfoReadVO> readVOList = logRecords.getOrDefault(vo.getId(), null);
+                if (readVOList != null && readVOList.size() > 0) {
+                    List<LogHistoryInfoVO.ReadUser> readUserList = new LinkedList<>();
+                    for (LogHistoryInfoReadVO readUsers : readVOList) {
+                        LogHistoryInfoVO.ReadUser readUser = new LogHistoryInfoVO.ReadUser(userMap.get(readUsers.getUserId()).getAvatar(), userMap.get(readUsers.getUserId()).getName());
+                        readUserList.add(readUser);
+                    }
+                    vo.setReadUsers(readUserList);
+                }
             }
 
             return voList.stream()
@@ -135,28 +151,36 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
-
-        //判断今日是否已填写日志信息
-        LocalDate currentDate = LocalDate.now();
-        String formattedDate = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        LogHistoryInfo logOne = baseMapper.selectOne(Wrappers.<LogHistoryInfo>lambdaQuery()
-                .select(LogHistoryInfo::getId)
-                .eq(LogHistoryInfo::getUserId, SecureUtil.getUserId())
-                .like(LogHistoryInfo::getCreateTime, formattedDate));
-        if (logOne != null) {
-            throw new ServiceException("当前用户今日已填写过日志信息,请勿重复提交");
+        if (ObjectUtil.isEmpty(SecureUtil.getDeptId())) {
+            throw new ServiceException("获取部门信息失败,请联系管理员");
         }
-
-        dto.setUserId(SecureUtil.getUserId());
-
-        //新增
         if (ObjectUtil.isEmpty(dto.getId())) {
+            //判断今日是否已填写日志信息
+            LocalDate currentDate = LocalDate.now();
+            String formattedDate = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            List<LogHistoryInfo> logHistoryInfos = baseMapper.selectList(Wrappers.<LogHistoryInfo>lambdaQuery()
+                    .select(LogHistoryInfo::getId)
+                    .eq(LogHistoryInfo::getUserId, SecureUtil.getUserId())
+                    .like(LogHistoryInfo::getCreateTime, formattedDate));
+            if (logHistoryInfos != null && logHistoryInfos.size() > 0) {
+                throw new ServiceException("当前用户今日已填写过日志信息,请勿重复提交");
+            }
+            dto.setUserId(SecureUtil.getUserId());
+            String deptIds = SecureUtil.getDeptId();
+            List<String> strings = Func.toStrList(deptIds);
+            if (strings.size() > 0) {
+                dto.setOrgDept(Long.parseLong(strings.get(0))); //默认选择第一个部门
+            }
+            //新增
             if (this.save(dto)) {
-                //获取当天,当前用户所有的计划任务信息
+
+                //获取当天,当前用户所有的计划任务信息,新增关联信息
                 List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
-                jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId());
-                for (TaskPlanInfoVO task : taskPlanInfoVOS) {
-                    jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + task.getId() + ")");
+                if (taskPlanInfoVOS.size() > 0) {
+                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId());
+                    for (TaskPlanInfoVO task : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + task.getId() + ")");
+                    }
                 }
 
                 //报销金额不为空,在财务报销里新增一条草稿内容
@@ -177,9 +201,24 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 return true;
             }
 
-            //编辑
         } else {
+            //判断是否是本人操作
+            LogHistoryInfo logHistoryInfo = baseMapper.selectById(dto.getId());
+            if (logHistoryInfo != null && !logHistoryInfo.getCreateUser().equals(SecureUtil.getUserId())) {
+                throw new ServiceException("暂无权限,不能编辑别人的日志信息");
+            }
+            //编辑
             if (baseMapper.updateById(dto) > 0) {
+
+                //获取当天,当前用户所有的计划任务信息,新增关联信息
+                List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
+                if (taskPlanInfoVOS.size() > 0) {
+                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId());
+                    for (TaskPlanInfoVO task : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + task.getId() + ")");
+                    }
+                }
+
                 //报销金额不为空,修改财务报销信息
                 if (ObjectUtil.isNotEmpty(dto.getExpenseReimbursementAmount()) && ObjectUtil.isNotEmpty(dto.getTaskId())) {
                     ProjectCostBudget projectCostBudget = projectCostBudgetServiceImpl.getBaseMapper().selectOne(Wrappers.<ProjectCostBudget>lambdaQuery().select(ProjectCostBudget::getProjectId).eq(ProjectCostBudget::getId, dto.getTaskId()));
@@ -244,8 +283,13 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 //获取当前日志关联的任务信息
                 List<LogHistoryAndTaskVO> taskVOList = jdbcTemplate.query("select * from c_log_history_task_record where log_id = " + id, new BeanPropertyRowMapper<>(LogHistoryAndTaskVO.class));
                 List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
-                List<Long> taskIds = taskVOList.stream().map(LogHistoryAndTaskVO::getTaskId).collect(Collectors.toList());
+                List<String> taskIds = taskVOList.stream().map(LogHistoryAndTaskVO::getTaskId).map(String::valueOf).collect(Collectors.toList());
                 if (taskIds.size() > 0) {
+                    //获取所有审批任务与计划任务关系
+                    List<ExpenseTaskRecord> expenseTaskRecords = jdbcTemplate.query("select task_id,expense_info_id from c_expense_task_record where expense_info_type = 1 and expense_info_id in(" + StringUtils.join(taskIds, ",") + ")", new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+                    Map<String, ExpenseTaskRecord> taskRecordMaps = expenseTaskRecords.stream().collect(Collectors.toMap(ExpenseTaskRecord::getExpenseInfoId, Function.identity()));
+
+                    //预算任务集合
                     List<ProjectCostBudget> taskObjs = projectCostBudgetServiceImpl.listByIds(taskIds);
                     List<TaskPlanInfoVO> resultList = new ArrayList<>();
                     for (ProjectCostBudget taskObj : taskObjs) {
@@ -257,7 +301,20 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                                 break;
                             }
                         }
-                        vos.setStatusName(taskObj.getStatus().equals(4) ? "已完成" : "未完成");
+
+                        ExpenseTaskRecord record = taskRecordMaps.getOrDefault(String.valueOf(taskObj.getId()), null);
+                        if (record != null) {
+                            TaskProcessInfo task = jdbcTemplate.query("select status from c_task_process_info where id = " + record.getTaskId(), new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                            if (task != null) {
+                                vos.setStatus(task.getStatus().equals(1) ? 1 : (task.getStatus().equals(2) ? 2 : (task.getStatus().equals(3) ? 3 : 0)));
+                                vos.setStatusName(task.getStatus().equals(1) ? "待审批" : (task.getStatus().equals(2) ? "已审批" : (task.getStatus().equals(3) ? "已驳回" : "未提交审批")));
+                            }
+                        }
+                        if (StringUtils.isEmpty(vos.getStatusName())) {
+                            vos.setStatus(0);
+                            vos.setStatusName("未提交审批");
+                        }
+
                         vos.setTaskDesc(ObjectUtil.isNotEmpty(taskObj.getPlanTaskDesc()) ? taskObj.getPlanTaskDesc() : "");
                         if (ObjectUtil.isNotEmpty(taskObj.getPlanStartTime()) && ObjectUtil.isNotEmpty(taskObj.getPlanEndTime())) {
                             LocalDate planStartTime = taskObj.getPlanStartTime();
@@ -300,6 +357,10 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
 
     @Override
     public boolean logTaskComplete(Long logId, Long taskId) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+
         ProjectCostBudget task = projectCostBudgetServiceImpl.getBaseMapper().selectById(taskId);
         if (ObjectUtil.isEmpty(task.getDeptId())) {
             throw new ServiceException("获取部门信息失败,请联系管理员");
@@ -309,43 +370,58 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
         User departmentHead = taskProcessService.getDepartmentHead(task.getDeptId());
         if (departmentHead != null) {
             //修改计划任务的状态为已完成
-            boolean updated = projectCostBudgetServiceImpl.update(Wrappers.<ProjectCostBudget>lambdaUpdate().set(ProjectCostBudget::getStatus, 4).eq(ProjectCostBudget::getId, taskId));
-            if (updated) {
-                //新增审批任务
-                TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
-                taskProcessInfo.setId(SnowFlakeUtil.getId());
-                taskProcessInfo.setStatus(1); //待审批
-                taskProcessInfo.setReportDate(new Date());
-                taskProcessInfo.setTaskType(1); //任务审批
-                taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【任务审批】审批");
-
-                //上报人
-                taskProcessInfo.setReportUserId(SecureUtil.getUserId());
-
-                //审批人
-                List<String> auditUserIds = new LinkedList<>();
-                auditUserIds.add(departmentHead.getId() + "");
-
-                List<String> nonEmptyAuditUserIds = new LinkedList<>();
-                for (String userId : auditUserIds) {
-                    if (StringUtils.isNotEmpty(userId)) {
-                        nonEmptyAuditUserIds.add(userId);
+            ProjectCostBudget obj = projectCostBudgetServiceImpl.getById(taskId);
+            if (obj != null && !obj.getTaskUser().equals(SecureUtil.getUserId())) {
+                throw new ServiceException("该任务不属于当前用户,操作失败");
+            }
+
+            //获取当天,当前用户所有的计划任务信息,新增关联信息
+            if (ObjectUtil.isNotEmpty(logId)) { //编辑时,点完成,那么重塑关系信息
+                List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
+                if (taskPlanInfoVOS.size() > 0) {
+                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + logId);
+                    for (TaskPlanInfoVO taskPlanInfoVO : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + logId + "," + taskPlanInfoVO.getId() + ")");
                     }
                 }
-                if (nonEmptyAuditUserIds.size() == 0) {
-                    taskProcessInfo.setAuditUserIds(null);
-                } else {
-                    taskProcessInfo.setAuditUserIds(StringUtils.join(nonEmptyAuditUserIds, ","));
+            }
+
+            //新增审批任务
+            TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
+            taskProcessInfo.setId(SnowFlakeUtil.getId());
+            taskProcessInfo.setStatus(1); //待审批
+            taskProcessInfo.setReportDate(new Date());
+            taskProcessInfo.setTaskType(1); //任务审批
+            taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【任务审批】审批");
+
+            //上报人
+            taskProcessInfo.setReportUserId(SecureUtil.getUserId());
+
+            //审批人
+            List<String> auditUserIds = new LinkedList<>();
+            auditUserIds.add(departmentHead.getId() + "");
+
+            List<String> nonEmptyAuditUserIds = new LinkedList<>();
+            for (String userId : auditUserIds) {
+                if (StringUtils.isNotEmpty(userId)) {
+                    nonEmptyAuditUserIds.add(userId);
                 }
+            }
+            if (nonEmptyAuditUserIds.size() == 0) {
+                taskProcessInfo.setAuditUserIds(null);
+            } else {
+                taskProcessInfo.setAuditUserIds(StringUtils.join(nonEmptyAuditUserIds, ","));
+            }
 
-                taskProcessService.save(taskProcessInfo);
+            taskProcessService.save(taskProcessInfo);
 
-                //新增审批任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + task.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + task.getId() + ",1)");
-                return true;
-            }
+            //新增审批任务关联信息
+            jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + task.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + task.getId() + ",1)");
+            return true;
+            //}
+        } else {
+            throw new ServiceException("获取部门负责人失败,请联系管理员");
         }
-        return false;
     }
 
     @Override

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

@@ -107,6 +107,10 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         if (one1 != null){
             throw new ServiceException("项目存在合同,不能删除");
         }
+        List<ProjectCostBudget> list = budgetService.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId, id));
+        if (list != null || list.size() > 0){
+            throw new ServiceException("项目已经做了预算,不能删除");
+        }
         baseMapper.deleteById(id);
         processService.removeProjectProcess(id);
     }
@@ -202,6 +206,10 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return null;
     }
 
+    /**
+     * 获取当年的项目
+     * @return
+     */
     @Override
     public List<ControlProjectInfo> listByYear(int year) {
         return baseMapper.listByYear(year);

+ 15 - 9
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -530,7 +530,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                 "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1,'" + completionTimeStr + "',null,null,null)");
 
                         //新增审批任务关联信息
-                        jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
+                        jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + planTaskInfo.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
 
                     } else if (departmentHead != null && dto.getUpdateType().equals("2")) {
                         //任务转移
@@ -563,7 +563,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                 "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",2,'" + completionTimeStr + "'," + SecureUtil.getUserId() + "," + dto.getTransferObject() + "," + dto.getTransferReason() + ")");
 
                         //新增审批任务关联信息
-                        jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
+                        jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + planTaskInfo.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
                     }
                 }
             }
@@ -624,6 +624,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
     @Override
     public boolean approveCostBudgetSubmit(String id) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
         ProjectCostBudgetStats projectCostBudgetStats = projectCostBudgetStatsService.getBaseMapper().selectById(id);
         if (projectCostBudgetStats != null) {
             List<ProjectCostBudget> projectCostBudgetList = projectCostBudgetService.getBaseMapper().selectList(Wrappers.<ProjectCostBudget>lambdaQuery()
@@ -632,10 +635,10 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             if (projectCostBudgetList.size() > 0) {
                 //审批人(总经理)
                 List<String> auditUserIds = new LinkedList<>();
-                List<Dept> query = jdbcTemplate.query("select id from blade_dept where dept_name = '总经理' and tenant_id = 003077 and dept_type = 3", new BeanPropertyRowMapper<>(Dept.class));
+                List<Dept> query = jdbcTemplate.query("select id from blade_dept where dept_name = '总经理' and tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 3", new BeanPropertyRowMapper<>(Dept.class));
                 if (query.size() == 1) {
                     Dept dept = query.get(0);
-                    List<User> users = jdbcTemplate.query("select id from blade_user where dept_id like '%" + dept.getId() + "%' and tenant_id = 003077 and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
+                    List<User> users = jdbcTemplate.query("select id from blade_user where dept_id like '%" + dept.getId() + "%' and tenant_id = " + SecureUtil.getUser().getTenantId() + " and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
                     if (users.size() > 0) {
                         List<Long> ids = users.stream().map(User::getId).collect(Collectors.toList());
                         auditUserIds.add(StringUtils.join(ids, ","));
@@ -669,7 +672,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 //新增审批任务关联信息
                 List<String> ids = projectCostBudgetList.stream().map(ProjectCostBudget::getId).map(String::valueOf).collect(Collectors.toList());
                 String budgetIds = StringUtils.join(ids, ",");
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + budgetIds + ",10)");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + budgetIds + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + budgetIds + ",10)");
                 return true;
             }
         }
@@ -934,8 +937,11 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
      * @return
      */
     public Map<String, List<User>> getApproveUserMaps(int type) {
-        //tenant_id = 003077(管控平台) dept_type = 3(最底层为岗位信息)
-        List<Dept> deptListControl = jdbcTemplate.query("select * from blade_dept where tenant_id = 003077 and dept_type = 3", new BeanPropertyRowMapper<>(Dept.class));
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        //tenant_id = SecureUtil.getUser().getTenantId()(管控平台) dept_type = 3(最底层为岗位信息)
+        List<Dept> deptListControl = jdbcTemplate.query("select * from blade_dept where tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 3", new BeanPropertyRowMapper<>(Dept.class));
         Map<String, List<User>> resultMaps = new LinkedHashMap<>();
         List<String> spPostIds = new LinkedList<>();
         List<String> zcPostIds = new LinkedList<>();
@@ -997,7 +1003,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         if (spPostIds.size() > 0) {
             List<User> spUserListAll = new LinkedList<>();
             for (String spPostId : spPostIds) {
-                List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id =" + spPostId, new BeanPropertyRowMapper<>(User.class));
+                List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_id =" + spPostId, new BeanPropertyRowMapper<>(User.class));
                 spUserListAll.addAll(spUserList);
             }
             if (spUserListAll.size() > 0) {
@@ -1005,7 +1011,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             }
         }
         if (zcPostIds.size() > 0) {
-            List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
+            List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
             if (zcUserList.size() > 0) {
                 resultMaps.put("ZC", zcUserList);
             }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -489,7 +489,7 @@
         <if test="contractId!=null and contractId!=''">
             and contract_id = #{contractId}
         </if>
-        ORDER BY d.sort
+        ORDER BY d.sort, title, d.create_time
     </select>
 
     <select id="trialRelationTree" resultType="org.springblade.manager.vo.TrialRecordZJTreeVO">

+ 20 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -6,11 +6,15 @@ import org.springblade.business.entity.InformationQuery;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
+import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.common.utils.ForestNodeMergerEx;
+import org.springblade.manager.utils.ForestNodeMerger;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.vo.ArchiveTreeVO2;
+import org.springblade.manager.vo.WbsTreeContractVO6;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -27,6 +31,8 @@ public class ArchiveTreeContractSyncImpl {
 
     private final ArchiveAutoRuleSyncImpl archiveAutoRuleSync;
 
+    private final IContractInfoService contractInfoService;
+
     /**
      * 普通同步
      *
@@ -215,7 +221,7 @@ public class ArchiveTreeContractSyncImpl {
     }
 
 
-    public void  syncBusinessData(Long contractId) {
+    public void  syncBusinessData(Long projectId,Long contractId) {
         //获取某个合同段所有的电签完成的文件题名,取 id wbsid name,eVisaPdfUrl
         List<InformationQuery> informationQueryList = getInformationQuerys(contractId);
 
@@ -242,6 +248,19 @@ public class ArchiveTreeContractSyncImpl {
             }
         }
 
+        ProjectInfo projectInfo = projectInfoService.getOne(projectId);
+
+        Long lWbsId = projectInfo.getReferenceWbsTemplateId();
+
+        List<WbsTreeContractVO6> wbsTrees = contractInfoService.tree8(lWbsId.toString(), projectId.toString(), contractId.toString());
+        if (wbsTrees == null || wbsTrees.size() == 0) {
+            return ;
+        }
+
+        List<WbsTreeContractVO6> wbsTreeContractVO6s = new ArrayList<>();
+        ForestNodeMerger.getTreeList(wbsTrees.get(0), wbsTreeContractVO6s);
+
+
         //对于newInformationQueryList。生成,需提供对应的nodeid
 
         //对于updateInformationQueryList,需要找出更新文件和文件大小

+ 45 - 35
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -845,10 +845,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     List<Map<String, Object>> mapsList = jdbcTemplate.queryForList("select * from " + initTabName + " where p_key_id = " + pKeyId);
                     if (mapsList.size() > 0) {
                         LinkedCaseInsensitiveMap<Object> maps = (LinkedCaseInsensitiveMap<Object>) mapsList.get(0);
+                        maps.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().toString().trim().isEmpty()); //排除空串
                         LinkedHashMap<String, Object> resultMaps = new LinkedHashMap<>(maps);
-                        resultMaps.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().toString().trim().isEmpty()); //排除空串
-
                         for (Map.Entry<String, Object> obj : resultMaps.entrySet()) {
+                            List<String> values = new ArrayList<>();
+
                             String key = obj.getKey();
                             Object value = obj.getValue();
 
@@ -928,25 +929,37 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                 //下拉框
                                                 tdJL = docJL.select("el-select[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                             }
-
-                                            if (tdJL.size() >= 1) {
+                                            if (tdJL.size() == 1) {
+                                                Element element = tdJL.get(0);
+                                                String keyname = element.attr("keyname");
+                                                if (StringUtils.isNotEmpty(keyname)) {
+                                                    String[] keynameJL = keyname.split("__");
+                                                    String keyJL = keynameJL[0];
+                                                    String keyJLIndex = keynameJL[1];
+
+                                                    InsertDataVO vo = new InsertDataVO();
+                                                    vo.setPKeyId(pKeyIdJL);
+                                                    vo.setInitTabName(initTabNameJL);
+                                                    if (keyJL.length() > 3) { //排除key=key的时候,也就是找不到key值,正常为key_X
+                                                        vo.setKey(keyJL);
+                                                        vo.setData(data + "_^_" + keyJLIndex);
+                                                        resultData.add(vo);
+                                                    }
+                                                }
+                                            } else if (tdJL.size() > 1) { //存在跨单元格,但是数据是100.2391_^_28_4这个格式的,也就是一列只填了一个值,那么不存在☆符号,就会到这里 "非跨单元格(一个单元格)"判断中
                                                 for (Element element : tdJL) {
                                                     String keyname = element.attr("keyname");
                                                     if (StringUtils.isNotEmpty(keyname)) {
                                                         String[] keynameJL = keyname.split("__");
                                                         String keyJL = keynameJL[0];
-                                                        String keyJLIndex = keynameJL[1];
-
-                                                        InsertDataVO vo = new InsertDataVO();
-                                                        vo.setPKeyId(pKeyIdJL);
-                                                        vo.setInitTabName(initTabNameJL);
                                                         if (keyJL.length() > 3) { //排除key=key的时候,也就是找不到key值,正常为key_X
-                                                            vo.setKey(keyJL);
-                                                            vo.setData(data + "_^_" + keyJLIndex);
-                                                            resultData.add(vo);
+                                                            String keyJLIndex = keynameJL[1];
+                                                            if (keyJLIndex.equals(index)) { //位置相同才复制
+                                                                values.add(data + "_^_" + keyJLIndex + "---" + keyJL + "---" + placeholderValue + "tabId:" + pKeyId);
+                                                                break;
+                                                            }
                                                         }
                                                     }
-                                                    break;
                                                 }
                                             }
                                         }
@@ -956,9 +969,6 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                 //跨单元格(多个单元格)
                             } else if (value.toString().contains("_^_") && value.toString().contains("☆")) {
                                 String[] oneCells = value.toString().split("☆"); //一个单元格
-
-                                List<String> values = new ArrayList<>();
-
                                 for (String cell : oneCells) {
                                     String[] fieldArr = cell.split("_\\^_");
                                     String data = fieldArr[0];
@@ -1056,26 +1066,26 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                         }
                                     }
                                 }
+                            }
 
-                                Set<String> dataResult = new HashSet<>();
-                                Set<String> keyResult = new HashSet<>();
-                                Set<String> nameResult = new HashSet<>();
-                                for (String v : values) {
-                                    String[] split1 = v.split("---");
-                                    dataResult.add(split1[0]);
-                                    keyResult.add(split1[1]);
-                                    nameResult.add(split1[2]);
-                                }
-                                if (dataResult.size() > 0 && keyResult.size() > 0) {
-                                    InsertDataVO vo = new InsertDataVO();
-                                    vo.setPKeyId(pKeyIdJL);
-                                    vo.setInitTabName(initTabNameJL);
-                                    vo.setKey(keyResult.stream().findAny().orElse(null));
-                                    vo.setData(StringUtils.join(dataResult, "☆"));
-                                    vo.setDataLength(vo.getData().length());
-                                    vo.setName(nameResult.stream().findAny().orElse(null));
-                                    resultData.add(vo);
-                                }
+                            Set<String> dataResult = new HashSet<>();
+                            Set<String> keyResult = new HashSet<>();
+                            Set<String> nameResult = new HashSet<>();
+                            for (String v : values) {
+                                String[] split1 = v.split("---");
+                                dataResult.add(split1[0]);
+                                keyResult.add(split1[1]);
+                                nameResult.add(split1[2]);
+                            }
+                            if (dataResult.size() > 0 && keyResult.size() > 0) {
+                                InsertDataVO vo = new InsertDataVO();
+                                vo.setPKeyId(pKeyIdJL);
+                                vo.setInitTabName(initTabNameJL);
+                                vo.setKey(keyResult.stream().findAny().orElse(null));
+                                vo.setData(StringUtils.join(dataResult, "☆"));
+                                vo.setDataLength(vo.getData().length());
+                                vo.setName(nameResult.stream().findAny().orElse(null));
+                                resultData.add(vo);
                             }
                         }
                     }