From 14169551e8db3bcbfcd37ea1e86b48e13ae32ded Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Tue, 25 Feb 2025 14:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=90=8C=E9=87=91=E9=A2=9D=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HuzhouContractinfoServiceImpl.java | 40 ++++++++++--- .../impl/HuzhouPlaninfofileServiceImpl.java | 58 +++++++++++++------ 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java index e52848b..8514111 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java @@ -30,6 +30,7 @@ import org.activiti.engine.task.Task; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -68,6 +69,10 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf private RuntimeService runtimeService; @Autowired private HuzhouProjectinfoMoneyMapper projectinfoMoneyMapper; + @Autowired + @Lazy + private IHuzhouContractinfoService contractinfoService; + @Override public Page<HuzhouProjectinfoOV> getContractProjectPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page(pageNo, pageSize); @@ -424,7 +429,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf @Override public Boolean checkContractAmount(List<HuzhouContractinfo> contractList, String contractMoneyFieldsValue, String taskName) throws JsonProcessingException { - ObjectMapper contractInfoMapper = new ObjectMapper(); + //ObjectMapper contractInfoMapper = new ObjectMapper(); Boolean flag = true; HuzhouProjectinfoMoney huzhouProjectinfoMoney = new HuzhouProjectinfoMoney(); // 初始化项目资金总额变量 @@ -435,10 +440,6 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf double totalContractCityMoney = 0; double totalContractCountyMoney = 0; - // 1.需要更新的合同信息集合 -// List<HuzhouContractinfo> contractList = contractInfoMapper.readValue(contractinfoList, new TypeReference<List<HuzhouContractinfo>>() { -// }); - // 总金额等于其他金额相加之和 for (HuzhouContractinfo contract : contractList) { Double totalMoney = contract.getTotalMoney(); @@ -466,17 +467,42 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf // 2.如果是合同签订阶段则 检查项目资金总额是否与 contractList 的总和相等(第二层校验) - if (StrUtil.isNotBlank(contractMoneyFieldsValue) && taskName.equals("合同签订")){ + if (StrUtil.isNotBlank(contractMoneyFieldsValue) && taskName.equals("合同签订")) { ObjectMapper contractMoneyMapper = new ObjectMapper(); huzhouProjectinfoMoney = contractMoneyMapper.readValue(contractMoneyFieldsValue, new TypeReference<HuzhouProjectinfoMoney>(){}); HuzhouProjectinfoMoney projectMoney = projectinfoMoneyMapper.selectById(huzhouProjectinfoMoney.getId()); + if (Double.compare(projectMoney.getContractTotalMoney(), totalContractTotalMoney) != 0 || Double.compare(projectMoney.getContractSelfMoney(), totalContractSelfMoney) != 0 || Double.compare(projectMoney.getContractCentralMoney(), totalContractCentralMoney) != 0 || Double.compare(projectMoney.getContractProvincialMoney(), totalContractProvincialMoney) != 0 || Double.compare(projectMoney.getContractCityMoney(), totalContractCityMoney) != 0 || Double.compare(projectMoney.getContractCountyMoney(), totalContractCountyMoney) != 0) { - throw new EasyException("总金额与其他金额之和不相等,请重新输入! " ); + throw new EasyException("总金额与其他金额之和不相等,请重新输入! "); + } + } + + // 3.如果 taskName 不等于 "合同签订" 阶段,则实际金额需要小于等于 计划金额 + if ( !"合同签订".equals(taskName)) { + HuzhouContractinfo contractInfo = contractList.get(0); + // 查询合同计划金额 + List<HuzhouContractinfo> planContractInfoList = contractinfoService.getContractinfoByprojectId(contractInfo.getProjectId()); + // 合同实际金额(contractList) <= 计划金额 (planContractInfoList) + // [{"projectId":"1828610662885105665","payDate":"2025-02-13","taskName":"首付支付","totalMoney":600,"centralMoney":600,"provincialMoney":0,"cityMoney":0,"countyMoney":0,"selfMoney":0}] + if (planContractInfoList.size() > 0){ + // 存在计划金额则比较实际金额 + Map<String, HuzhouContractinfo> realContractMap = new HashMap<>(); + for (HuzhouContractinfo realContract : contractList) { + realContractMap.put(realContract.getTaskName(), realContract); + } + + for (HuzhouContractinfo planContractInfo : planContractInfoList) { + HuzhouContractinfo realContract = realContractMap.get(planContractInfo.getTaskName()); + if ( realContract.getTotalMoney() >planContractInfo.getTotalMoney() ) { + throw new EasyException("合同实际金额大于计划金额!请重新填写合同信息 "); + } + } + } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java index 3dd7121..cf3e7f9 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java @@ -111,6 +111,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil public void submitPlanUploadFile(MultipartFile[] files, String planinfoid,String approvalMoneyFieldsValue, String contractMoneyFieldsValue, List<HuzhouContractinfo> contractList) throws IOException { + // 判断是否为二次上传,是则清楚原有记录 if (CollectionUtil.isNotEmpty(contractList)){ hasOldContractInfo(contractList); @@ -144,6 +145,17 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil //根据项目计划id获取项目信息 String taskName = planinfo.getTaskName(); taskName=StrUtil.trim(taskName); + + if (CollectionUtil.isEmpty(contractList) && taskName.equals("合同签订")){ + throw new EasyException("合同信息不能为空!"); + } + // 校验合同金额 + if (CollectionUtil.isNotEmpty(contractList)) { + if (contractinfoService.checkContractAmount(contractList, contractMoneyFieldsValue, taskName)) { + log.info("金额校验成功!"); + } + } + String projectId = planinfoService.getById(planinfoid).getProjectId(); HuzhouProjectinfo huzhouProjectinfo = projectinfoService.getById(projectId); @@ -357,16 +369,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil if(list.size()==0){ projectinfoService.modifyStageById(pid,"6"); } - - if (CollectionUtil.isEmpty(contractList) && taskName.equals("合同签订")){ - throw new EasyException("合同信息不能为空!"); - } - // 校验合同金额 - if (CollectionUtil.isNotEmpty(contractList)) { - if (contractinfoService.checkContractAmount(contractList, contractMoneyFieldsValue, taskName)) { - contractinfoService.addContractinfo(files, contractList); - } - } + // 增加合同信息 + contractinfoService.addContractinfo(files, contractList); } /** @@ -382,7 +386,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil .eq(HuzhouContractinfo::getFlag,"实际"); List<HuzhouContractinfo> tmp = contractinfoService.list(qw); if (tmp.size()>0){ - // 清楚原有合同信息(实际) + // 清除原有合同信息(实际) LambdaQueryWrapper<HuzhouContractinfo> deleteWrapper = new LambdaQueryWrapper<>(); deleteWrapper.eq(HuzhouContractinfo::getProjectId, contractinfo.getProjectId()) .eq(HuzhouContractinfo::getTaskName, contractinfo.getTaskName()) @@ -470,7 +474,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil huzhouPlaninfo.setId(planinfoid); // 判断是否更新合同信息 - updateContractInfo(files, flag, contractinfoList, taskName); + updateContractInfo(files, flag, contractinfoList,contractMoneyFieldsValue, taskName); if("3".equals(flag)){ huzhouPlaninfo.setIsfinish("0"); @@ -574,14 +578,30 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil planinfoService.updateById(huzhouPlaninfo1); } } + ObjectMapper mapper = new ObjectMapper(); + + } - private void updateContractInfo(MultipartFile[] files, String flag, String contractinfoList, String taskName) throws IOException { + /** + * 修改合同信息 + * @param files + * @param flag + * @param contractinfoList + * @param contractMoneyFieldsValue + * @param taskName + * @throws IOException + */ + private void updateContractInfo(MultipartFile[] files, String flag, String contractinfoList, String contractMoneyFieldsValue, String taskName) throws IOException { if (StrUtil.isNotBlank(contractinfoList) && "1".equals(flag)) { ObjectMapper mapper = new ObjectMapper(); // 1.需要更新的合同信息集合 List<HuzhouContractinfo> contractList = mapper.readValue(contractinfoList, new TypeReference<List<HuzhouContractinfo>>() { }); + if (contractinfoService.checkContractAmount(contractList, contractMoneyFieldsValue, taskName)) { + log.info("金额校验成功!"); + } + // 2.封装条件 LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>(); qw.eq(HuzhouContractinfo::getProjectId, contractList.get(0).getProjectId()) @@ -599,11 +619,11 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil HuzhouProjectinfo huzhouProjectinfo = projectinfoService.getById(projectid); String superLeader = ""; //如果项目信息为空说明是子项目 - if(huzhouProjectinfo==null){ + if (huzhouProjectinfo == null) { HuzhouSubProjectinfo bySubId = subProjectinfoService.getById(projectid); superLeader = bySubId.getSuperLeader(); - }else { - superLeader=huzhouProjectinfo.getSuperLeader(); + } else { + superLeader = huzhouProjectinfo.getSuperLeader(); } //获取上级指导室中文名称 SysDict dict = sysDictService.getDictByCode("superLeader", superLeader); @@ -611,11 +631,11 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil //上级指导室中文名称查询角色有哪些人 List<HashMap<String, String>> userDictByRoles = userService.getUserDictByRoles(dictName); ArrayList<String> userIdlist = new ArrayList<>(); - if(userDictByRoles==null||userDictByRoles.size()==0){ - String error = "任务牵头处室"+dictName+"负责人未找到"; + if (userDictByRoles == null || userDictByRoles.size() == 0) { + String error = "任务牵头处室" + dictName + "负责人未找到"; throw new EasyException(error); } - for (HashMap<String, String> map:userDictByRoles + for (HashMap<String, String> map : userDictByRoles ) { String userid = map.get("value"); userIdlist.add(userid);