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);