瀏覽代碼

Merge branch 'master' of http://114.55.67.98:8070/Natural_p1/zjugis_OA

qiny 1 年之前
父節點
當前提交
306cca945c

+ 15 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/dto/ParentDto.java

@@ -0,0 +1,15 @@
+package com.zjugis.business.bean.dto;
+
+import lombok.Data;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/5/8 18:35
+ */
+@Data
+public class ParentDto {
+    private String id;
+
+    private String pid;
+}

+ 5 - 1
zjugis-business/src/main/java/com/zjugis/business/bean/entity/Contract.java

@@ -186,21 +186,25 @@ public class Contract extends BaseEntity {
     /**
      * 已回款金额
      */
-    private BigDecimal receivedAmount;
+    @TableField(exist = false)
+    private BigDecimal returnAmount;
 
     /**
      * 已开票金额
      */
+    @TableField(exist = false)
     private BigDecimal invoicedAmount;
 
     /**
      * 应收账款
      */
+    @TableField(exist = false)
     private BigDecimal receivableAmount;
 
     /**
      * 合同余额
      */
+    @TableField(exist = false)
     private BigDecimal contractBalance;
 
     /**

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/entity/ProjectAmount.java

@@ -19,6 +19,8 @@ public class ProjectAmount {
     @TableId
     private String projectId;
 
+    private String mainProjectId;
+
     private BigDecimal contractAmount;
 
     private BigDecimal virtualAmount;

+ 85 - 36
zjugis-business/src/main/java/com/zjugis/business/job/ProjectAmountJob.java

@@ -1,6 +1,8 @@
 package com.zjugis.business.job;
 
+import com.alibaba.excel.util.StringUtils;
 import com.xxl.job.core.handler.annotation.XxlJob;
+import com.zjugis.business.bean.dto.ParentDto;
 import com.zjugis.business.bean.dto.ProjectCostDto;
 import com.zjugis.business.bean.entity.ProjectAmount;
 import com.zjugis.business.bean.response.ProjectCostResponse;
@@ -37,12 +39,12 @@ public class ProjectAmountJob {
 
     @XxlJob("projectAmountJob")
     public void calcAllProject() {
-        List<String> insertIds = projectAmountService.selectInsertIds();
+        List<ParentDto> insertIds = projectAmountService.selectInsertIds();
         List<String> updateIds = projectAmountService.check();
         ForkJoinPool forkJoinPool= new ForkJoinPool();
         try {
-            ProjectAmountTask insertTask = new ProjectAmountTask(insertIds,true);
-            ProjectAmountTask updateTask = new ProjectAmountTask(updateIds,false);
+            ProjectAmountInsertTask insertTask = new ProjectAmountInsertTask(insertIds);
+            ProjectAmountUpdateTask updateTask = new ProjectAmountUpdateTask(updateIds);
             forkJoinPool.invoke(insertTask);
             forkJoinPool.invoke(updateTask);
             forkJoinPool.awaitTermination(2L, TimeUnit.HOURS);
@@ -53,13 +55,75 @@ public class ProjectAmountJob {
         }
     }
 
-    static class ProjectAmountTask extends RecursiveAction {
+    static class ProjectAmountInsertTask extends RecursiveAction {
+        private final int THRESHOLD = 800;
+
+        private final List<ParentDto> items;
+
+
+        ProjectService projectService;
+
+        ProjectAmountService projectAmountService;
+
+        ContractService contractService;
+
+        ProjectCostService projectCostService;
+
+
+        public ProjectAmountInsertTask(List<ParentDto> ids){
+            this.items = ids;
+            this.projectService = SpringUtils.getBean(ProjectService.class);
+            this.projectAmountService = SpringUtils.getBean(ProjectAmountService.class);
+            this.contractService = SpringUtils.getBean(ContractService.class);
+            this.projectCostService = SpringUtils.getBean(ProjectCostService.class);
+        }
+
+        @Override
+        protected void compute() {
+            if(items.size() < THRESHOLD){
+                if(items.isEmpty()){
+                    return;
+                }
+                List<String> ids = items.stream().map(ParentDto::getId).collect(Collectors.toList());
+                List<ProjectAmount> batch = projectAmountService.selectAmountList(ids);
+                ProjectCostDto costDto = new ProjectCostDto();
+                costDto.setProjectIds(ids);
+                Map<String, ProjectCostResponse> costMap = projectCostService.calculateCostMap(costDto);
+                LocalDateTime now = LocalDateTime.now();
+                for (ProjectAmount entity : batch) {
+                    fillCost(entity, costMap);
+                    entity.setUpdateTime(now);
+                }
+
+                List<String> exist = batch.stream().map(ProjectAmount::getProjectId).collect(Collectors.toList());
+                for (ParentDto item : items) {
+                    if(!exist.contains(item.getId())) {
+                        ProjectAmount projectAmount = new ProjectAmount();
+                        projectAmount.setProjectId(item.getId());
+                        projectAmount.setMainProjectId(StringUtils.isBlank(item.getPid())?item.getId():item.getPid());
+                        projectAmount.setUpdateTime(now);
+                        fillCost(projectAmount, costMap);
+                        batch.add(projectAmount);
+                    }
+                }
+                projectAmountService.insertBatch(batch);
+
+            } else {
+                int half = items.size()/2;
+                List<ParentDto> leftList = items.subList(0, half);
+                List<ParentDto> rightList = items.subList(half,items.size());
+                ProjectAmountInsertTask left = new ProjectAmountInsertTask(leftList);
+                ProjectAmountInsertTask right = new ProjectAmountInsertTask(rightList);
+                invokeAll(left,right);
+            }
+        }
+    }
+
+    static class ProjectAmountUpdateTask extends RecursiveAction {
         private final int THRESHOLD = 800;
 
         private final List<String> ids;
 
-        // 1-插入,0-更新
-        private final boolean insert;
 
         ProjectService projectService;
 
@@ -70,9 +134,8 @@ public class ProjectAmountJob {
         ProjectCostService projectCostService;
 
 
-        public ProjectAmountTask(List<String> ids,boolean insert){
+        public ProjectAmountUpdateTask(List<String> ids){
             this.ids = ids;
-            this.insert = insert;
             this.projectService = SpringUtils.getBean(ProjectService.class);
             this.projectAmountService = SpringUtils.getBean(ProjectAmountService.class);
             this.contractService = SpringUtils.getBean(ContractService.class);
@@ -94,41 +157,27 @@ public class ProjectAmountJob {
                     fillCost(entity, costMap);
                     entity.setUpdateTime(now);
                 }
-                if(insert){
-                    List<String> exist = batch.stream().map(ProjectAmount::getProjectId).collect(Collectors.toList());
-                    for (String id : ids) {
-                        if(!exist.contains(id)) {
-                            ProjectAmount projectAmount = new ProjectAmount();
-                            projectAmount.setProjectId(id);
-                            projectAmount.setUpdateTime(now);
-                            fillCost(projectAmount, costMap);
-                            batch.add(projectAmount);
-                        }
-                    }
-                    projectAmountService.insertBatch(batch);
-                } else {
-                    projectAmountService.updateBatch(batch);
-                }
+
+                projectAmountService.updateBatch(batch);
             } else {
                 int half = ids.size()/2;
                 List<String> leftList = ids.subList(0, half);
                 List<String> rightList = ids.subList(half,ids.size());
-                ProjectAmountTask left = new ProjectAmountTask(leftList,insert);
-                ProjectAmountTask right = new ProjectAmountTask(rightList,insert);
+                ProjectAmountUpdateTask left = new ProjectAmountUpdateTask(leftList);
+                ProjectAmountUpdateTask right = new ProjectAmountUpdateTask(rightList);
                 invokeAll(left,right);
             }
         }
-
-        private void fillCost(ProjectAmount entity, Map<String, ProjectCostResponse> costMap) {
-            ProjectCostResponse projectCostResponse = costMap.get(entity.getProjectId());
-            if(projectCostResponse != null){
-                entity.setProjectCost(projectCostResponse.getCost());
-                entity.setReimbursementCost(projectCostResponse.getReimbursementCost());
-                entity.setTravelCost(projectCostResponse.getTravelCost());
-                entity.setSubcontractCost(projectCostResponse.getSubcontractCost());
-                entity.setOutsourceCost(projectCostResponse.getOutsourceCost());
-                entity.setPaymentCost(projectCostResponse.getPaymentCost());
-            }
+    }
+    private static void fillCost(ProjectAmount entity, Map<String, ProjectCostResponse> costMap) {
+        ProjectCostResponse projectCostResponse = costMap.get(entity.getProjectId());
+        if(projectCostResponse != null){
+            entity.setProjectCost(projectCostResponse.getCost());
+            entity.setReimbursementCost(projectCostResponse.getReimbursementCost());
+            entity.setTravelCost(projectCostResponse.getTravelCost());
+            entity.setSubcontractCost(projectCostResponse.getSubcontractCost());
+            entity.setOutsourceCost(projectCostResponse.getOutsourceCost());
+            entity.setPaymentCost(projectCostResponse.getPaymentCost());
         }
     }
 }

+ 2 - 1
zjugis-business/src/main/java/com/zjugis/business/mapper/ProjectAmountMapper.java

@@ -1,5 +1,6 @@
 package com.zjugis.business.mapper;
 
+import com.zjugis.business.bean.dto.ParentDto;
 import com.zjugis.business.bean.entity.ProjectAmount;
 import com.zjugis.framework.mybatis.core.mapper.BaseMapperX;
 import org.apache.ibatis.annotations.Param;
@@ -15,7 +16,7 @@ import java.util.List;
 public interface ProjectAmountMapper extends BaseMapperX<ProjectAmount> {
     List<String> check(LocalDateTime oneDayBefore);
 
-    List<String> selectInsertIds();
+    List<ParentDto> selectInsertIds();
 
     List<ProjectAmount> selectAmountList(@Param("ids") List<String> projectIds);
 }

+ 2 - 1
zjugis-business/src/main/java/com/zjugis/business/service/ProjectAmountService.java

@@ -1,5 +1,6 @@
 package com.zjugis.business.service;
 
+import com.zjugis.business.bean.dto.ParentDto;
 import com.zjugis.business.bean.entity.ProjectAmount;
 
 import java.util.List;
@@ -26,7 +27,7 @@ public interface ProjectAmountService {
 
     List<String> check();
 
-    List<String> selectInsertIds();
+    List<ParentDto> selectInsertIds();
 
     List<ProjectAmount> selectAmountList(List<String> projectIds);
 }

+ 6 - 1
zjugis-business/src/main/java/com/zjugis/business/service/impl/ProjectAmountServiceImpl.java

@@ -1,11 +1,13 @@
 package com.zjugis.business.service.impl;
 
+import com.zjugis.business.bean.dto.ParentDto;
 import com.zjugis.business.bean.entity.ContractInvoiceRelation;
 import com.zjugis.business.bean.entity.ProjectAmount;
 import com.zjugis.business.mapper.ProjectAmountMapper;
 import com.zjugis.business.service.ContractInvoiceRelationService;
 import com.zjugis.business.service.ContractService;
 import com.zjugis.business.service.ProjectAmountService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -80,7 +82,7 @@ public class ProjectAmountServiceImpl implements ProjectAmountService {
      * @return
      */
     @Override
-    public List<String> selectInsertIds() {
+    public List<ParentDto> selectInsertIds() {
         return projectAmountMapper.selectInsertIds();
     }
 
@@ -99,6 +101,9 @@ public class ProjectAmountServiceImpl implements ProjectAmountService {
                     returnAmount = returnAmount.add(relation.getReturnAmount());
                 }
             }
+            if(StringUtils.isBlank(item.getMainProjectId())){
+                item.setMainProjectId(item.getProjectId());
+            }
             item.setInvoiceAmount(invoiceAmount);
             item.setReturnAmount(returnAmount);
             item.setReceivableAmount(item.getInvoiceAmount().subtract(item.getReturnAmount()));

+ 2 - 2
zjugis-business/src/main/resources/mapper/oracle/ContractInvoiceMapper.xml

@@ -58,8 +58,8 @@
             </if>
         </where>
         ORDER BY
-        APPLY_DATE
-        DESC nulls last
+        FLOW_FINISHTIME desc nulls last,
+        APPLY_DATE DESC nulls last
     </select>
     <select id="getStatics" resultType="com.zjugis.business.bean.response.ContractInvoiceStaticsRespense">
         SELECT

+ 9 - 1
zjugis-business/src/main/resources/mapper/oracle/ContractMapper.xml

@@ -16,7 +16,15 @@
     </select>
 
     <select id="page" resultType="com.zjugis.business.bean.entity.Contract">
-        SELECT c.* FROM CONTRACT c
+        SELECT c.*,PA.invoiceAmount,PA.returnAmount,PA.receivableAmount,PA.contractBalance FROM CONTRACT c
+        LEFT JOIN (
+        SELECT MAIN_PROJECT_ID,
+        COALESCE(SUM(COALESCE(INVOICE_AMOUNT,0)),0) as invoiceAmount,
+        COALESCE(SUM(COALESCE(RETURN_AMOUNT,0)),0) as returnAmount,
+        COALESCE(SUM(COALESCE(RECEIVABLE_AMOUNT,0)),0) as receivableAmount,
+        COALESCE(SUM(COALESCE(CONTRACT_BALANCE,0)),0) as contractBalance
+        FROM PROJECT_AMOUNT GROUP BY MAIN_PROJECT_ID
+        ) PA on PA.MAIN_PROJECT_ID = c.PROJECT_ID
         <if test="params != null and params.deptId != null and params.deptId != ''">
         RIGHT JOIN PROJECT pr ON pr.ID = c.PROJECT_ID
         </if>

+ 10 - 11
zjugis-business/src/main/resources/mapper/oracle/ProjectAmountMapper.xml

@@ -6,18 +6,14 @@
         select PROJECT_ID FROM PROJECT_AMOUNT WHERE UPDATE_TIME &gt;= #{oneDayBefore,jdbcType=TIMESTAMP}
     </select>
 
-    <select id="selectInsertIds" resultType="java.lang.String">
-        SELECT ID FROM PROJECT WHERE ISVALID = 1 AND FLOW_STATUS IN (90,99) AND ID NOT IN (SELECT PROJECT_ID FROM PROJECT_AMOUNT)
-    </select>
 
     <select id="selectAmountList" resultType="com.zjugis.business.bean.entity.ProjectAmount">
         SELECT
-        t1.PROJECT_ID,
+        t1.PROJECT_ID,max(t2.PID) as mainProjectId,
         NVL(SUM(NVL(t1.VIRTUAL_AMOUNT,0)),0) as virtualAmount,
         NVL(SUM(NVL(t1.CONTRACT_AMOUNT,0)),0) as contractAmount
-        FROM
-        CONTRACT_INVOICE t
-        RIGHT JOIN CONTRACT t1 on t.CONTRACT_ID = t1.ID AND t.ISVALID = 1 AND t.FLOW_STATUS &gt;= 90
+        FROM CONTRACT t1
+        LEFT JOIN PROJECT t2 on t1.PROJECT_ID = t2.ID
         WHERE t1.ISVALID = 1 and COALESCE(t1.CONTRACT_TYPE,1) != 4 and t1.PROJECT_ID IN
         <foreach item="id" index="index" collection="ids" open="(" separator="," close=")">
             #{id}
@@ -25,16 +21,19 @@
         GROUP BY t1.PROJECT_ID
         UNION ALL
         SELECT
-        t1.PROJECT_ID,
+        t1.PROJECT_ID,max(t2.PID) as mainProjectId,
         max(NVL(t1.VIRTUAL_AMOUNT,0)) as virtualAmount,
         max(NVL(t1.CONTRACT_AMOUNT,0)) as contractAmount
-        FROM
-        CONTRACT_INVOICE t
-        RIGHT JOIN CONTRACT t1 on t.CONTRACT_ID = t1.ID AND t.ISVALID = 1 AND t.FLOW_STATUS &gt;= 90
+        FROM CONTRACT t1
+        LEFT JOIN PROJECT t2 on t1.PROJECT_ID = t2.ID
         WHERE t1.ISVALID = 1 and COALESCE(t1.CONTRACT_TYPE,1) = 4 and t1.PROJECT_ID IN
         <foreach item="id" index="index" collection="ids" open="(" separator="," close=")">
             #{id}
         </foreach>
         GROUP BY t1.PROJECT_ID
     </select>
+
+    <select id="selectInsertIds" resultType="com.zjugis.business.bean.dto.ParentDto">
+        SELECT ID,PID FROM PROJECT WHERE ISVALID = 1 AND FLOW_STATUS IN (90,99) AND ID NOT IN (SELECT PROJECT_ID FROM PROJECT_AMOUNT)
+    </select>
 </mapper>

+ 1 - 1
zjugis-business/src/main/resources/templates/FlowContract/js/apply.js

@@ -263,7 +263,7 @@
                     description: mealName.description,
                     id: mealName.id,
                     contractId: contractId,
-                    sortnum: lists.length - 1
+                    sortnum: lists.length
                 }
                 lists.push(dataObj);
             }

+ 1 - 1
zjugis-business/src/main/resources/templates/FlowProject/js/apply.js

@@ -281,7 +281,7 @@
           planFinishTime: mealName.planFinishTime,
           id: mealName.id,
           projectId: projectId,
-          sortnum: lists.length - 1
+          sortnum: lists.length
         }
         lists.push(dataObj);
       }

+ 0 - 4
zjugis-framework/zjugis-spring-boot-starter-workflow/src/main/java/com/zjugis/framework/workflow/utils/Constant.java

@@ -1,13 +1,9 @@
 package com.zjugis.framework.workflow.utils;
 
 import com.zjugis.framework.security.core.util.SecurityFrameworkUtils;
-import org.apache.commons.lang3.StringUtils;
 
 import java.util.concurrent.Future;
 
-import static com.zjugis.framework.common.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED;
-import static com.zjugis.framework.common.exception.util.ServiceExceptionUtil.exception;
-
 public class Constant {
 
 	/**