diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java index 274a1d1..41e664f 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java @@ -1,5 +1,6 @@ package com.easy.admin.modules.huzhou.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.easy.admin.auth.model.SysUser; import com.easy.admin.common.api.vo.Result; @@ -52,31 +53,29 @@ public class TestController { } /** - * 金额校验 + * 金额校验测试 * @param contractinfoList * @return * @throws JsonProcessingException */ - @PostMapping("/checkAmount") + @PostMapping("/checkContractAmount") public Result checkAmount( @RequestParam(value = "contractinfoList", required = false) String contractinfoList, - @RequestParam(value = "contractMoneyFieldsValue", required = false) String contractMoneyFieldsValue) throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); + @RequestParam(value = "contractMoneyFieldsValue", required = false) String contractMoneyFieldsValue, + @RequestParam(value = "taskName", required = false)String taskName) throws JsonProcessingException { + ObjectMapper contractInfoMapper = new ObjectMapper(); + Boolean flag = true; + HuzhouProjectinfoMoney huzhouProjectinfoMoney = new HuzhouProjectinfoMoney(); + // 初始化项目资金总额变量 + double totalContractTotalMoney = 0; + double totalContractSelfMoney = 0; + double totalContractCentralMoney = 0; + double totalContractProvincialMoney = 0; + double totalContractCityMoney = 0; + double totalContractCountyMoney = 0; + // 1.需要更新的合同信息集合 - List contractList = mapper.readValue(contractinfoList, new TypeReference>() { + List contractList = contractInfoMapper.readValue(contractinfoList, new TypeReference>() { }); - Boolean flag = false; - String msg = "总金额与其他金额之和不相等,请重新输入!"; - HuzhouProjectinfoMoney huzhouProjectinfoMoney = new HuzhouProjectinfoMoney(); - ObjectMapper mapper2 = new ObjectMapper(); - huzhouProjectinfoMoney = mapper2.readValue(contractMoneyFieldsValue, new TypeReference(){}); - HuzhouProjectinfoMoney projectMoney = projectinfoMoneyMapper.selectById(huzhouProjectinfoMoney.getId()); - Double contractTotalMoney = projectMoney.getContractTotalMoney(); - Double contractSelfMoney = projectMoney.getContractSelfMoney(); - Double contractCentralMoney = projectMoney.getContractCentralMoney(); - Double contractProvincialMoney = projectMoney.getContractProvincialMoney(); - Double contractCityMoney = projectMoney.getContractCityMoney(); - Double contractCountyMoney = projectMoney.getContractCountyMoney(); - Double approvalProvincialMoney = projectMoney.getApprovalProvincialMoney(); // 总金额等于其他金额相加之和 for (HuzhouContractinfo contract : contractList) { @@ -86,19 +85,39 @@ public class TestController { Double cityMoney = contract.getCityMoney() != null ? contract.getCityMoney() : 0.0; Double countyMoney = contract.getCountyMoney() != null ? contract.getCountyMoney() : 0.0; Double selfMoney = contract.getSelfMoney() != null ? contract.getSelfMoney() : 0.0; - // 计算其他资金来源金额之和 double sumOfOtherMoneys = centralMoney + provincialMoney + cityMoney + countyMoney + selfMoney; // 检查总金额是否等于其他资金来源金额之和 if (Double.compare(totalMoney, sumOfOtherMoneys) != 0) { - // 可以在这里抛出异常或者记录错误信息 throw new EasyException("总金额与其他金额之和不相等,请重新输入! " ); - }else { - flag = true; - //msg = "总金额与其他金额之和相等,校验通过!" ; } + + // 累加各项资金总额 + totalContractTotalMoney += totalMoney; + totalContractSelfMoney += selfMoney; + totalContractCentralMoney += centralMoney; + totalContractProvincialMoney += provincialMoney; + totalContractCityMoney += cityMoney; + totalContractCountyMoney += countyMoney; } + + + // 2.如果是合同签订阶段则 检查项目资金总额是否与 contractList 的总和相等(第二层校验) + if (StrUtil.isNotBlank(contractMoneyFieldsValue) && taskName.equals("合同签订")){ + ObjectMapper contractMoneyMapper = new ObjectMapper(); + huzhouProjectinfoMoney = contractMoneyMapper.readValue(contractMoneyFieldsValue, new TypeReference(){}); + 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("总金额与其他金额之和不相等,请重新输入! " ); + } + } + return Result.OK(flag); } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java index c4c82bb..1e0e890 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java @@ -8,6 +8,7 @@ import com.easy.admin.modules.huzhou.entity.HuzhouRegulationlab; import com.easy.admin.modules.huzhou.vo.ContractInfoVo; import com.easy.admin.modules.huzhou.vo.HuzhouContractinfoOV; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; +import com.fasterxml.jackson.core.JsonProcessingException; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @@ -42,4 +43,14 @@ public interface IHuzhouContractinfoService extends IService Boolean hasContractinfoByTaskName(String projectid, String taskName); ContractInfoVo getContractinfoByTaskName(String projectid, String taskName); + + /** + * 校验合同金额 + * @param contractList + * @param contractMoneyFieldsValue + * @param taskName + * @return + * @throws JsonProcessingException + */ + Boolean checkContractAmount(List contractList, String contractMoneyFieldsValue, String taskName) throws JsonProcessingException; } 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 9783393..f8a0299 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 @@ -1,5 +1,6 @@ package com.easy.admin.modules.huzhou.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -9,6 +10,7 @@ import com.easy.admin.common.core.exception.EasyException; import com.easy.admin.common.util.CommonUtils; import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoHistoryMapper; import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoMapper; +import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper; import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.service.*; @@ -17,6 +19,9 @@ import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -61,6 +66,8 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl getContractProjectPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page(pageNo, pageSize); @@ -381,6 +388,10 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl planList = this.getContractinfoByprojectId(projectId); + + planList= planList.stream() + .filter(item -> item.getTaskName().equals(taskName)) + .collect(Collectors.toList()); contractInfoVo.setHasInfo(true); contractInfoVo.setPlanList(planList); return contractInfoVo; @@ -389,7 +400,13 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl planList = this.getContractinfoByprojectId(projectId); + planList= planList.stream() + .filter(item -> item.getTaskName().equals(taskName)) + .collect(Collectors.toList()); List realList = this.getRealContractinfoByprojectId(projectId); + realList= realList.stream() + .filter(item -> item.getTaskName().equals(taskName)) + .collect(Collectors.toList()); contractInfoVo.setHasInfo(true); contractInfoVo.setPlanList(planList); contractInfoVo.setRealList(realList); @@ -402,5 +419,66 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl contractList, String contractMoneyFieldsValue, String taskName) throws JsonProcessingException { + ObjectMapper contractInfoMapper = new ObjectMapper(); + Boolean flag = true; + HuzhouProjectinfoMoney huzhouProjectinfoMoney = new HuzhouProjectinfoMoney(); + // 初始化项目资金总额变量 + double totalContractTotalMoney = 0; + double totalContractSelfMoney = 0; + double totalContractCentralMoney = 0; + double totalContractProvincialMoney = 0; + double totalContractCityMoney = 0; + double totalContractCountyMoney = 0; + + // 1.需要更新的合同信息集合 +// List contractList = contractInfoMapper.readValue(contractinfoList, new TypeReference>() { +// }); + + // 总金额等于其他金额相加之和 + for (HuzhouContractinfo contract : contractList) { + Double totalMoney = contract.getTotalMoney(); + Double centralMoney = contract.getCentralMoney() != null ? contract.getCentralMoney() : 0.0; + Double provincialMoney = contract.getProvincialMoney() != null ? contract.getProvincialMoney() : 0.0; + Double cityMoney = contract.getCityMoney() != null ? contract.getCityMoney() : 0.0; + Double countyMoney = contract.getCountyMoney() != null ? contract.getCountyMoney() : 0.0; + Double selfMoney = contract.getSelfMoney() != null ? contract.getSelfMoney() : 0.0; + // 计算其他资金来源金额之和 + double sumOfOtherMoneys = centralMoney + provincialMoney + cityMoney + countyMoney + selfMoney; + + // 检查总金额是否等于其他资金来源金额之和 + if (Double.compare(totalMoney, sumOfOtherMoneys) != 0) { + throw new EasyException("总金额与其他金额之和不相等,请重新输入! " ); + } + + // 累加各项资金总额 + totalContractTotalMoney += totalMoney; + totalContractSelfMoney += selfMoney; + totalContractCentralMoney += centralMoney; + totalContractProvincialMoney += provincialMoney; + totalContractCityMoney += cityMoney; + totalContractCountyMoney += countyMoney; + } + + + // 2.如果是合同签订阶段则 检查项目资金总额是否与 contractList 的总和相等(第二层校验) + if (StrUtil.isNotBlank(contractMoneyFieldsValue) && taskName.equals("合同签订")){ + ObjectMapper contractMoneyMapper = new ObjectMapper(); + huzhouProjectinfoMoney = contractMoneyMapper.readValue(contractMoneyFieldsValue, new TypeReference(){}); + 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("总金额与其他金额之和不相等,请重新输入! " ); + } + } + + return flag; + } + } 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 a274c3d..3dd7121 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 @@ -112,7 +112,9 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl contractList) throws IOException { // 判断是否为二次上传,是则清楚原有记录 - hasOldContractInfo(contractList); + if (CollectionUtil.isNotEmpty(contractList)){ + hasOldContractInfo(contractList); + } //立项审批和合同签订 金额输入 HuzhouProjectinfoMoney huzhouProjectinfoMoney = new HuzhouProjectinfoMoney(); @@ -356,11 +358,15 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl