瀏覽代碼

并发推送材料预算超限与外协预算超限

lw 1 年之前
父節點
當前提交
0f0f0acd39

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/Index/mapper/xml/IndexKpiMapper.xml

@@ -136,4 +136,4 @@
 <!--        GROUP BY-->
 <!--            k.zrbm-->
 <!--    </select>-->
-</mapper>
+</mapper>

+ 1 - 0
module_kzks/src/main/java/org/jeecg/modules/Index/service/impl/IndexZcbServiceImpl.java

@@ -87,6 +87,7 @@ public class IndexZcbServiceImpl implements IndexZcbService {
             role = AuthMark.DEPT_LEADER;
             deptList = departNameList;
         }else {
+            System.out.println(sysUser);
             String[] deptIds = sysUser.getDepartIds().split(",");
             deptList = sysDepartMapper.getDepNameByIds(deptIds);
         }

+ 4 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCost/mapper/ProjectCostMapper.java

@@ -69,4 +69,8 @@ public interface ProjectCostMapper extends BaseMapper<ProjectCost> {
      */
     public List<IndexKpiCompletByDate> getZrbmHteCl(@Param("departList") List<String> departList);
 
+    List<ProjectCost> selectProjectCostListWhereClysGtCLf();
+
+    List<ProjectCost> selectProjectCostListWhereWxysGtWxf();
+
 }

+ 16 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCost/mapper/xml/ProjectCostMapper.xml

@@ -135,5 +135,21 @@
         )
         group by zrbm
     </select>
+    <select id="selectProjectCostListWhereClysGtCLf"
+            resultType="org.jeecg.modules.projectCost.entity.ProjectCost">
+        SELECT c.*
+        FROM kzks_project_cost_ys y,
+             kzks_project_cost c
+        WHERE y.taskno = c.taskno
+          and y.clys >= c.clf
+    </select>
+    <select id="selectProjectCostListWhereWxysGtWxf"
+            resultType="org.jeecg.modules.projectCost.entity.ProjectCost">
+        SELECT c.*
+        FROM kzks_project_cost_ys y,
+             kzks_project_cost c
+        WHERE y.taskno = c.taskno
+          and y.wxys >= c.wxf
+    </select>
 
 </mapper>

+ 4 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCost/service/IProjectCostService.java

@@ -78,4 +78,8 @@ public interface IProjectCostService extends IService<ProjectCost> {
     public List<IndexKpiCompletByDate> getZrbmHteCl(List<String> departList);
 
 
+    List<ProjectCost> selectProjectCostListWhereClysGtCLf();
+
+    List<ProjectCost> selectProjectCostListWhereWxysGtWxf();
+
 }

+ 63 - 33
module_kzks/src/main/java/org/jeecg/modules/projectCost/service/impl/ProjectCostServiceImpl.java

@@ -27,7 +27,7 @@ import java.util.List;
 /**
  * @Description: 项目成本
  * @Author: jeecg-boot
- * @Date:   2023-08-15
+ * @Date: 2023-08-15
  * @Version: V1.0
  */
 @Service
@@ -38,34 +38,41 @@ public class ProjectCostServiceImpl extends ServiceImpl<ProjectCostMapper, Proje
     @SuppressWarnings("all")
     private ProjectCostMapper projectCostMapper;
 
-    /**查询列表*/
+    /**
+     * 查询列表
+     */
     public List<ProjectCost> projectCostlist(Wrapper<ProjectCost> queryWrapper) {
         return this.getBaseMapper().selectList(queryWrapper);
     }
 
-    /**根据批产任务号查询项目成本(批产主任务和批产子任务)*/
-    public ProjectCostListVO getPCRWList(String pccode){
+    /**
+     * 根据批产任务号查询项目成本(批产主任务和批产子任务)
+     */
+    public ProjectCostListVO getPCRWList(String pccode) {
         QueryWrapper<ProjectCost> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("taskno",pccode);
-        queryWrapper.eq("status","0");
+        queryWrapper.eq("taskno", pccode);
+        queryWrapper.eq("status", "0");
         ProjectCost cost = projectCostMapper.selectOne(queryWrapper);
 
         queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("reftaskno",pccode);
+        queryWrapper.eq("reftaskno", pccode);
         List<ProjectCost> children = projectCostMapper.selectList(queryWrapper);
 
-        ProjectCostListVO vo = ProjectCostConvert.INSTANCE.toProjectCostListVO(cost,children);
+        ProjectCostListVO vo = ProjectCostConvert.INSTANCE.toProjectCostListVO(cost, children);
         return vo;
     }
 
-    /**根据任务号查询项目成本的主任务及组批后的主任务
-     * */
-    public List<ProjectCostVO> costListByTaskNoMain(String taskno){
+    /**
+     * 根据任务号查询项目成本的主任务及组批后的主任务
+     */
+    public List<ProjectCostVO> costListByTaskNoMain(String taskno) {
         return projectCostMapper.costListByTaskNoMain(taskno);
     }
 
-    /**根据任务号查询项目成本的子任务及组批后的子任务*/
-    public List<ProjectCostVO> costListByTaskNoSub(String taskno){
+    /**
+     * 根据任务号查询项目成本的子任务及组批后的子任务
+     */
+    public List<ProjectCostVO> costListByTaskNoSub(String taskno) {
         return projectCostMapper.costListByTaskNoSub(taskno);
     }
 
@@ -76,27 +83,38 @@ public class ProjectCostServiceImpl extends ServiceImpl<ProjectCostMapper, Proje
 //        return projectCostMapper.compareListByIds(ids);
 //    }
     //sl修改添加每台的对比
-    public ProjectCostCompare compareListByIds(List<String> ids){
+    public ProjectCostCompare compareListByIds(List<String> ids) {
         ProjectCostCompare projectCostCompare = new ProjectCostCompare();
         List<ProjectCost> listAll = projectCostMapper.compareListByIds(ids);
         List<ProjectCost> listOne = new ArrayList<>();
-        for(ProjectCost projectCost:listAll){
-            ProjectCost projectCost1 = (ProjectCost)projectCost.clone();
-            if(projectCost1.getYzsl() != null && projectCost1.getYzsl() != 0){
+        for (ProjectCost projectCost : listAll) {
+            ProjectCost projectCost1 = (ProjectCost) projectCost.clone();
+            if (projectCost1.getYzsl() != null && projectCost1.getYzsl() != 0) {
                 int yzsl = projectCost1.getYzsl();//获取研制数量
                 BigDecimal yzslBigDec = BigDecimal.valueOf(yzsl);
-                if(projectCost1.getGlf() != null) projectCost1.setGlf(projectCost1.getGlf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//管理费
-                if(projectCost1.getSwf() != null) projectCost1.setSwf(projectCost1.getSwf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//事务费
-                if(projectCost1.getWxf() != null) projectCost1.setWxf(projectCost1.getWxf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//外协费
-                if(projectCost1.getZyf() != null) projectCost1.setZyf(projectCost1.getZyf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//专用费
-                if(projectCost1.getGzjlwf() != null) projectCost1.setGzjlwf(projectCost1.getGzjlwf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//工资费
-                if(projectCost1.getGdzczj() != null) projectCost1.setGdzczj(projectCost1.getGdzczj().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//固资费
-                if(projectCost1.getClf() != null) projectCost1.setClf(projectCost1.getClf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//材料费
-                if(projectCost1.getRldlf() != null) projectCost1.setRldlf(projectCost1.getRldlf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//燃动费
-
-                if(projectCost1.getZjcb() != null) projectCost1.setZjcb(projectCost1.getZjcb().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//装机成本
-                if(projectCost1.getLbsy() != null) projectCost1.setLbsy(projectCost1.getLbsy().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//内部试验
-                if(projectCost1.getWorkhour() != null) projectCost1.setWorkhour(projectCost1.getWorkhour().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//工时
+                if (projectCost1.getGlf() != null)
+                    projectCost1.setGlf(projectCost1.getGlf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//管理费
+                if (projectCost1.getSwf() != null)
+                    projectCost1.setSwf(projectCost1.getSwf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//事务费
+                if (projectCost1.getWxf() != null)
+                    projectCost1.setWxf(projectCost1.getWxf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//外协费
+                if (projectCost1.getZyf() != null)
+                    projectCost1.setZyf(projectCost1.getZyf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//专用费
+                if (projectCost1.getGzjlwf() != null)
+                    projectCost1.setGzjlwf(projectCost1.getGzjlwf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//工资费
+                if (projectCost1.getGdzczj() != null)
+                    projectCost1.setGdzczj(projectCost1.getGdzczj().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//固资费
+                if (projectCost1.getClf() != null)
+                    projectCost1.setClf(projectCost1.getClf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//材料费
+                if (projectCost1.getRldlf() != null)
+                    projectCost1.setRldlf(projectCost1.getRldlf().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//燃动费
+
+                if (projectCost1.getZjcb() != null)
+                    projectCost1.setZjcb(projectCost1.getZjcb().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//装机成本
+                if (projectCost1.getLbsy() != null)
+                    projectCost1.setLbsy(projectCost1.getLbsy().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//内部试验
+                if (projectCost1.getWorkhour() != null)
+                    projectCost1.setWorkhour(projectCost1.getWorkhour().divide(yzslBigDec, 2, RoundingMode.HALF_UP));//工时
             }
             listOne.add(projectCost1);
 
@@ -107,19 +125,21 @@ public class ProjectCostServiceImpl extends ServiceImpl<ProjectCostMapper, Proje
         return projectCostCompare;
     }
 
-    /**根据任务号查询项目成本中的相应数据*/
-    public List<ProjectCost> costListByTaskNo(String taskno){
+    /**
+     * 根据任务号查询项目成本中的相应数据
+     */
+    public List<ProjectCost> costListByTaskNo(String taskno) {
         return projectCostMapper.costListByTaskNo(taskno);
     }
 
     @Override
     public Page<ProjectCost> getCostListPage(Page<ProjectCost> page1, QueryWrapper<ProjectCost> query) {
-        return projectCostMapper.selectPage(page1,query);
+        return projectCostMapper.selectPage(page1, query);
     }
 
     @Override
     public List<String> getTaskNoListByRefTaskNo(List<String> taskNos) {
-        return projectCostMapper.getTaskNoListByRefTaskNo(taskNos) ;
+        return projectCostMapper.getTaskNoListByRefTaskNo(taskNos);
     }
 
     @Override
@@ -141,4 +161,14 @@ public class ProjectCostServiceImpl extends ServiceImpl<ProjectCostMapper, Proje
     public List<IndexKpiCompletByDate> getZrbmHteCl(List<String> departList) {
         return projectCostMapper.getZrbmHteCl(departList);
     }
+
+    @Override
+    public List<ProjectCost> selectProjectCostListWhereClysGtCLf() {
+        return projectCostMapper.selectProjectCostListWhereClysGtCLf();
+    }
+
+    @Override
+    public List<ProjectCost> selectProjectCostListWhereWxysGtWxf() {
+        return projectCostMapper.selectProjectCostListWhereWxysGtWxf();
+    }
 }

+ 8 - 2
module_kzks/src/main/java/org/jeecg/modules/projectPushList/controller/ProjectPushListController.java

@@ -6,11 +6,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.aspect.annotation.PermissionData;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.Index.util.AuthMark;
+import org.jeecg.modules.Index.util.CommonMethod;
 import org.jeecg.modules.kyTaskInfo.entity.KyTaskInfo;
 import org.jeecg.modules.kyTaskInfo.service.IKyTaskInfoService;
 import org.jeecg.modules.projectCost.entity.ProjectCost;
@@ -34,6 +38,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
 /**
@@ -49,7 +54,8 @@ import java.util.stream.Collectors;
 public class ProjectPushListController extends JeecgController<ProjectPushList, IProjectPushListService> {
 	@Autowired
 	private IProjectPushListService projectPushListService;
-
+	@Autowired
+	private CommonMethod commonMethod;
 
 	/**
 	 *   项目成本——查找并更新推送
@@ -57,7 +63,7 @@ public class ProjectPushListController extends JeecgController<ProjectPushList,
 	@AutoLog(value = "项目成本——查找并更新推送")
 	@ApiOperation(value="项目成本——查找并更新推送", notes="项目成本——查找并更新推送")
 	@PostMapping(value = "/addAll")
-	public Result<String> addAll() {
+	public Result<String> addAll() throws ExecutionException, InterruptedException {
 		return projectPushListService.addAll();
 	}
 

+ 1 - 1
module_kzks/src/main/java/org/jeecg/modules/projectPushList/convert/ProjectPushListConvert.java

@@ -17,5 +17,5 @@ public interface ProjectPushListConvert {
     ProjectPushListConvert INSTANCE = Mappers.getMapper(ProjectPushListConvert .class);
 
     @Mapping(target = "sysOrgCode",source = "sysOrgCode")
-    ProjectPushList toProjectPushList(String taskno, String taskname,String pushSetId, String pushTo,String content,String sysOrgCode);
+    ProjectPushList toProjectPushList(String taskno, String taskname,String pushSetId, String pushTo,String content,String sysOrgCode,Integer pushType);
 }

+ 2 - 1
module_kzks/src/main/java/org/jeecg/modules/projectPushList/entity/ProjectPushList.java

@@ -80,5 +80,6 @@ public class ProjectPushList implements Serializable {
 	/**所属部门*/
     @ApiModelProperty(value = "所属部门")
     private java.lang.String sysOrgCode;
-
+    @ApiModelProperty(value = "推送类型")
+    private java.lang.Integer pushType;
 }

+ 2 - 1
module_kzks/src/main/java/org/jeecg/modules/projectPushList/service/IProjectPushListService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.projectPushList.vo.UserNameIDVO;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 
 /**
  * @Description: 推送列表
@@ -16,7 +17,7 @@ import java.util.List;
 public interface IProjectPushListService extends IService<ProjectPushList> {
 
     /**项目成本——查找并更新推送*/
-    public Result<String> addAll();
+    public Result<String> addAll() throws ExecutionException, InterruptedException;
 
     /**清空推送列表*/
     public void truncateTable();

+ 294 - 165
module_kzks/src/main/java/org/jeecg/modules/projectPushList/service/impl/ProjectPushListServiceImpl.java

@@ -23,11 +23,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static com.fasterxml.jackson.databind.type.LogicalType.Collection;
 
 /**
  * @Description: 推送列表
@@ -57,190 +59,317 @@ public class ProjectPushListServiceImpl extends ServiceImpl<ProjectPushListMappe
 
 
     /**项目成本——查找并更新推送*/
-    public Result<String> addAll(){
+    public Result<String> addAll() throws ExecutionException, InterruptedException {
         this.truncateTable();//清空原来的数据
 
         QueryWrapper<ProjectPushSet> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("cost_type","0");// 0材料费
-        List<ProjectPushSet> list1 = projectPushSetService.list(queryWrapper);
-        queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("cost_type","1");// 1外协费
         List<ProjectPushSet> list2 = projectPushSetService.list(queryWrapper);
-        queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("cost_type","2");// 2人工费
-        List<ProjectPushSet> list3 = projectPushSetService.list(queryWrapper);
-
-        List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
-
-        // 0材料费
-        if(list1!=null && !list1.isEmpty()){
-            QueryWrapper<ProjectCost> projectCostQueryWrapper;
-            for(ProjectPushSet set : list1){
-                String stage = set.getStage();
-                projectCostQueryWrapper = new QueryWrapper<>();
-                projectCostQueryWrapper.eq("clf",new BigDecimal(0));
-                projectCostQueryWrapper.eq("processPercent",stage);//
-                List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
-
-                List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
-                List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
-
-                for (ProjectCost cost:projectCostList1){
-                    for (UserNameIDVO vo: userNameIdList){
-                        //根据用户id查其所属部门的部门编码
-                        List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
-                        String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
-
-                        //判断是否为组批任务、是组批前还是组批后的任务
-                        String remark = null;
-                        if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"1")) remark = "(组批之后)";//组批之后
-                        else if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"0")) remark = "(组批之前)";//组批之前
-                        if (remark == null) remark = "";
-                        //组推送对象
-                        ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
-                                cost.getTaskno(),cost.getTaskname(),set.getId(), vo.getUsername(), set.getContent()+remark,sysOrgCodes);
-                        pushList.add(push);
+
+
+        CompletableFuture<List<ProjectPushList>> t1 = CompletableFuture.supplyAsync(() -> {
+            // 0材料费
+            QueryWrapper<ProjectPushSet> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("cost_type", "0");// 0材料费
+            List<ProjectPushSet> list = projectPushSetService.list(queryWrapper1);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            if (list != null && !list.isEmpty()) {
+                QueryWrapper<ProjectCost> projectCostQueryWrapper;
+                for (ProjectPushSet set : list) {
+                    String stage = set.getStage();
+                    projectCostQueryWrapper = new QueryWrapper<>();
+                    projectCostQueryWrapper.eq("clf", new BigDecimal(0));
+                    projectCostQueryWrapper.ge("processPercent", stage);//
+                    List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
+
+                    List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
+                    List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
+
+                    for (ProjectCost cost : projectCostList1) {
+                        for (UserNameIDVO vo : userNameIdList) {
+                            //根据用户id查其所属部门的部门编码
+                            List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
+                            String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
+
+                            //判断是否为组批任务、是组批前还是组批后的任务
+                            String remark = null;
+                            if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1"))
+                                remark = "(组批之后)";//组批之后
+                            else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0"))
+                                remark = "(组批之前)";//组批之前
+                            if (remark == null) remark = "";
+                            //组推送对象
+                            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                                    cost.getTaskno(), cost.getTaskname(), set.getId(), vo.getUsername(), set.getContent() + remark, sysOrgCodes, 0);
+                            pushList.add(push);
+                        }
                     }
                 }
             }
-        }
-
-        // 1外协费
-        if(list2!=null && !list2.isEmpty()){
-            QueryWrapper<ProjectCost> projectCostQueryWrapper;
-            for(ProjectPushSet set : list2){
-                String stage = set.getStage();
-                projectCostQueryWrapper = new QueryWrapper<>();
-                projectCostQueryWrapper.eq("wxf",new BigDecimal(0));
-                projectCostQueryWrapper.eq("processPercent",stage);
-                List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
-
-                List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
-                List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
-
-                for (ProjectCost cost:projectCostList1){
-                    for (UserNameIDVO vo: userNameIdList){
-                        //根据用户id查其所属部门的部门编码
-                        List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
-                        String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
-
-                        //判断是否为组批任务、是组批前还是组批后的任务
-                        String remark = null;
-                        if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"1")) remark = "(组批之后)";//组批之后
-                        else if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"0")) remark = "(组批之前)";//组批之前
-                        if (remark == null) remark = "";
-                        //组推送对象
-                        ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
-                                cost.getTaskno(),cost.getTaskname(),set.getId(), vo.getUsername(), set.getContent()+remark,sysOrgCodes);
-                        pushList.add(push);
+            return pushList;
+        });
+
+
+        CompletableFuture<List<ProjectPushList>> t2 = CompletableFuture.supplyAsync(() -> {
+            // 1外协费
+            QueryWrapper<ProjectPushSet> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("cost_type", "1");// 1外协费
+            List<ProjectPushSet> list = projectPushSetService.list(queryWrapper1);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            if (list != null && !list.isEmpty()) {
+                QueryWrapper<ProjectCost> projectCostQueryWrapper;
+                for (ProjectPushSet set : list) {
+                    String stage = set.getStage();
+                    projectCostQueryWrapper = new QueryWrapper<>();
+                    projectCostQueryWrapper.eq("wxf", new BigDecimal(0));
+                    projectCostQueryWrapper.ge("processPercent", stage);
+                    List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
+
+                    List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
+                    List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
+
+                    for (ProjectCost cost : projectCostList1) {
+                        for (UserNameIDVO vo : userNameIdList) {
+                            //根据用户id查其所属部门的部门编码
+                            List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
+                            String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
+
+                            //判断是否为组批任务、是组批前还是组批后的任务
+                            String remark = null;
+                            if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1"))
+                                remark = "(组批之后)";//组批之后
+                            else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0"))
+                                remark = "(组批之前)";//组批之前
+                            if (remark == null) remark = "";
+                            //组推送对象
+                            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                                    cost.getTaskno(), cost.getTaskname(), set.getId(), vo.getUsername(), set.getContent() + remark, sysOrgCodes, 0);
+                            pushList.add(push);
+                        }
                     }
                 }
             }
-        }
-        // 2人工费(工资及劳务费)
-        if(list3!=null && !list3.isEmpty()){
-            QueryWrapper<ProjectCost> projectCostQueryWrapper;
-            for(ProjectPushSet set : list3){
-                String stage = set.getStage();
-                projectCostQueryWrapper = new QueryWrapper<>();
-                projectCostQueryWrapper.eq("gzjlwf",new BigDecimal(0));
-                projectCostQueryWrapper.eq("processPercent",stage);
-                List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
-                List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
-                List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
-
-                for (ProjectCost cost:projectCostList1){
-                    for (UserNameIDVO vo: userNameIdList){
-                        //根据用户id查其所属部门的部门编码
-                        List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
-                        String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
-
-                        //判断是否为组批任务、是组批前还是组批后的任务
-                        String remark = null;
-                        if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"1")) remark = "(组批之后)";//组批之后
-                        else if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"0")) remark = "(组批之前)";//组批之前
-                        if (remark == null) remark = "";
-                        //组推送对象
-                        ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
-                                cost.getTaskno(),cost.getTaskname(),set.getId(), vo.getUsername(), set.getContent()+remark,sysOrgCodes);
-                        pushList.add(push);
+            return pushList;
+        });
+
+
+        CompletableFuture<List<ProjectPushList>> t3 = CompletableFuture.supplyAsync(() -> {
+            // 2人工费(工资及劳务费)
+            QueryWrapper<ProjectPushSet> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("cost_type", "2");// 2人工费
+            List<ProjectPushSet> list = projectPushSetService.list(queryWrapper1);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            if (list != null && !list.isEmpty()) {
+                QueryWrapper<ProjectCost> projectCostQueryWrapper;
+                for (ProjectPushSet set : list) {
+                    String stage = set.getStage();
+                    projectCostQueryWrapper = new QueryWrapper<>();
+                    projectCostQueryWrapper.eq("gzjlwf", new BigDecimal(0));
+                    projectCostQueryWrapper.ge("processPercent", stage);
+                    List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
+
+                    List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
+                    List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
+
+                    for (ProjectCost cost : projectCostList1) {
+                        for (UserNameIDVO vo : userNameIdList) {
+                            //根据用户id查其所属部门的部门编码
+                            List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
+                            String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
+
+                            //判断是否为组批任务、是组批前还是组批后的任务
+                            String remark = null;
+                            if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1"))
+                                remark = "(组批之后)";//组批之后
+                            else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0"))
+                                remark = "(组批之前)";//组批之前
+                            if (remark == null) remark = "";
+                            //组推送对象
+                            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                                    cost.getTaskno(), cost.getTaskname(), set.getId(), vo.getUsername(), set.getContent() + remark, sysOrgCodes, 0);
+                            pushList.add(push);
+                        }
                     }
                 }
             }
-        }
-        //3合同额
-        String stage = "100";
-        QueryWrapper<ProjectCost> projectCostQueryWrapper= new QueryWrapper<>();
-        projectCostQueryWrapper.eq("contractfpe",new BigDecimal(0));
-        projectCostQueryWrapper.eq("processPercent",stage);
-        List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
-
-        for (ProjectCost cost:projectCostList1){
-            String taskno = cost.getTaskno();
-            String orgcode = null;
-            String username = null;
-            if(taskno!=null){
-                KyTaskInfo kyTaskInfo = kyTaskInfoService.getKyTaskInfoByTaskno(taskno);
-                if(kyTaskInfo!=null){
-                    if(kyTaskInfo.getJycsid()!=null){//下达部门id
-                        SysDepart sysDepart = departService.getById(kyTaskInfo.getJycsid());
-                        if(sysDepart!=null) orgcode = sysDepart.getOrgCode();
+            return pushList;
+        });
+
+
+        CompletableFuture<List<ProjectPushList>> t4 = CompletableFuture.supplyAsync(() -> {
+            // 3外协预算超限
+            QueryWrapper<ProjectPushSet> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("cost_type", "3");// 3外协预算超限
+            List<ProjectPushSet> list = projectPushSetService.list(queryWrapper1);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            if (list != null && !list.isEmpty()) {
+                QueryWrapper<ProjectCost> projectCostQueryWrapper;
+                for (ProjectPushSet set : list) {
+                    List<ProjectCost> projectCostList1 = costService.selectProjectCostListWhereWxysGtWxf();
+
+                    List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
+                    List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
+
+                    for (ProjectCost cost : projectCostList1) {
+                        for (UserNameIDVO vo : userNameIdList) {
+                            //根据用户id查其所属部门的部门编码
+                            List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
+                            String sysOrgCodes = String.join(",", sysOrgCodeList);
+
+                            //判断是否为组批任务、是组批前还是组批后的任务
+                            String remark = null;
+                            if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1"))
+                                remark = "(组批之后)";//组批之后
+                            else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0"))
+                                remark = "(组批之前)";//组批之前
+                            if (remark == null) remark = "";
+                            //组推送对象
+                            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                                    cost.getTaskno(), cost.getTaskname(), set.getId(), vo.getUsername(), set.getContent() + remark, sysOrgCodes, 0);
+                            pushList.add(push);
+                        }
                     }
-                    if(kyTaskInfo.getBusinessman()!=null){
-                        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
-                        wrapper.eq("realname",kyTaskInfo.getBusinessman());
-                        SysUser user = sysUserService.getOne(wrapper);
-                        if(user!=null) username=user.getUsername();
+                }
+            }
+            return pushList;
+        });
+
+
+        CompletableFuture<List<ProjectPushList>> t5 = CompletableFuture.supplyAsync(() -> {
+            // 4材料预算超限
+            QueryWrapper<ProjectPushSet> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.eq("cost_type", "3");// 4材料预算超限
+            List<ProjectPushSet> list = projectPushSetService.list(queryWrapper1);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            if (list != null && !list.isEmpty()) {
+                QueryWrapper<ProjectCost> projectCostQueryWrapper;
+                for (ProjectPushSet set : list) {
+                    List<ProjectCost> projectCostList1 = costService.selectProjectCostListWhereClysGtCLf();
+
+                    List<String> roleIds = Arrays.asList(set.getPushTo().split(","));
+                    List<UserNameIDVO> userNameIdList = this.userNamesByRoleIds(roleIds);
+
+                    for (ProjectCost cost : projectCostList1) {
+                        for (UserNameIDVO vo : userNameIdList) {
+                            //根据用户id查其所属部门的部门编码
+                            List<String> sysOrgCodeList = this.selectDeptCodeByUserId(vo.getUserId());
+                            String sysOrgCodes = sysOrgCodeList.stream().collect(Collectors.joining(","));
+
+                            //判断是否为组批任务、是组批前还是组批后的任务
+                            String remark = null;
+                            if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1"))
+                                remark = "(组批之后)";//组批之后
+                            else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0"))
+                                remark = "(组批之前)";//组批之前
+                            if (remark == null) remark = "";
+                            //组推送对象
+                            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                                    cost.getTaskno(), cost.getTaskname(), set.getId(), vo.getUsername(), set.getContent() + remark, sysOrgCodes, 1);
+                            pushList.add(push);
+                        }
                     }
                 }
             }
+            return pushList;
+        });
+
+        CompletableFuture<List<ProjectPushList>> t6 = CompletableFuture.supplyAsync(() -> {
+            //5合同额
+            String stage = "100";
+            QueryWrapper<ProjectCost> projectCostQueryWrapper = new QueryWrapper<>();
+            projectCostQueryWrapper.eq("contractfpe", new BigDecimal(0));
+            projectCostQueryWrapper.eq("processPercent", stage);
 
-            //判断是否为组批任务、是组批前还是组批后的任务
-            String remark = null;
-            if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"1")) remark = "(组批之后)";//组批之后
-            else if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"0")) remark = "(组批之前)";//组批之前
-            if (remark == null) remark = "";
-            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
-                    cost.getTaskno(),cost.getTaskname(),"", username, "请及时处理合同额"+remark,orgcode);
-            pushList.add(push);
-        }
-
-        //4收款额
-        projectCostQueryWrapper = new QueryWrapper<>();
-        projectCostQueryWrapper.eq("TaskMoney",new BigDecimal(0));
-        projectCostQueryWrapper.eq("processPercent",stage);
-        List<ProjectCost> projectCostList2 = costService.projectCostlist(projectCostQueryWrapper);
-
-        for (ProjectCost cost:projectCostList2){
-            String taskno = cost.getTaskno();
-            String orgcode = null;
-            String username = null;
-            if(taskno!=null){
-                KyTaskInfo kyTaskInfo = kyTaskInfoService.getKyTaskInfoByTaskno(taskno);
-                if(kyTaskInfo!=null){
-                    if(kyTaskInfo.getJycsid()!=null){//下达部门id
-                        SysDepart sysDepart = departService.getById(kyTaskInfo.getJycsid());
-                        if(sysDepart!=null) orgcode = sysDepart.getOrgCode();
+            List<ProjectCost> projectCostList1 = costService.projectCostlist(projectCostQueryWrapper);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            for (ProjectCost cost : projectCostList1) {
+                String taskno = cost.getTaskno();
+                String orgcode = null;
+                String username = null;
+                if (taskno != null) {
+                    KyTaskInfo kyTaskInfo = kyTaskInfoService.getKyTaskInfoByTaskno(taskno);
+                    if (kyTaskInfo != null) {
+                        if (kyTaskInfo.getJycsid() != null) {//下达部门id
+                            SysDepart sysDepart = departService.getById(kyTaskInfo.getJycsid());
+                            if (sysDepart != null) orgcode = sysDepart.getOrgCode();
+                        }
+                        if (kyTaskInfo.getBusinessmanname() != null) {
+                            QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+                            wrapper.eq("realname", kyTaskInfo.getBusinessmanname());
+                            SysUser user = sysUserService.getOne(wrapper);
+                            if (user != null) username = user.getUsername();
+                        }
                     }
-                    if(kyTaskInfo.getBusinessman()!=null){
-                        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
-                        wrapper.eq("realname",kyTaskInfo.getBusinessman());
-                        SysUser user = sysUserService.getOne(wrapper);
-                        if(user!=null) username=user.getUsername();
+                }
+
+                //判断是否为组批任务、是组批前还是组批后的任务
+                String remark = null;
+                if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1")) remark = "(组批之后)";//组批之后
+                else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0")) remark = "(组批之前)";//组批之前
+                if (remark == null) remark = "";
+                ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                        cost.getTaskno(), cost.getTaskname(), "", username, "请及时处理合同额" + remark, orgcode, 0);
+                pushList.add(push);
+            }
+            return pushList;
+        });
+
+
+        CompletableFuture<List<ProjectPushList>> t7 = CompletableFuture.supplyAsync(() -> {
+            //6收款额
+            String stage = "100";
+            QueryWrapper<ProjectCost> projectCostQueryWrapper = new QueryWrapper<>();
+            projectCostQueryWrapper.eq("TaskMoney", new BigDecimal(0));
+            projectCostQueryWrapper.eq("processPercent", stage);
+            List<ProjectCost> projectCostList2 = costService.projectCostlist(projectCostQueryWrapper);
+            List<ProjectPushList> pushList = new ArrayList<>();//所有的推送列表
+            for (ProjectCost cost : projectCostList2) {
+                String taskno = cost.getTaskno();
+                String orgcode = null;
+                String username = null;
+                if (taskno != null) {
+                    KyTaskInfo kyTaskInfo = kyTaskInfoService.getKyTaskInfoByTaskno(taskno);
+                    if (kyTaskInfo != null) {
+                        if (kyTaskInfo.getJycsid() != null) {//下达部门id
+                            SysDepart sysDepart = departService.getById(kyTaskInfo.getJycsid());
+                            if (sysDepart != null) orgcode = sysDepart.getOrgCode();
+                        }
+                        if (kyTaskInfo.getBusinessmanname()!= null) {
+                            QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+                            wrapper.eq("realname", kyTaskInfo.getBusinessmanname());
+                            SysUser user = sysUserService.getOne(wrapper);
+                            if (user != null) username = user.getUsername();
+                        }
                     }
                 }
+
+                //判断是否为组批任务、是组批前还是组批后的任务
+                String remark = null;
+                if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "1")) remark = "(组批之后)";//组批之后
+                else if (cost.getPccode() != null && Objects.equals(cost.getStatus(), "0")) remark = "(组批之前)";//组批之前
+                if (remark == null) remark = "";
+                ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
+                        cost.getTaskno(), cost.getTaskname(), "", username, "请及时处理已收款" + remark, orgcode, 0);
+                pushList.add(push);
             }
+            return pushList;
+        });
+
+        CompletableFuture<Void> future = CompletableFuture.allOf(t1, t2, t3, t4, t5, t6, t7);
+        future.get();
+        List<ProjectPushList> projectPushLists = t1.get();
+        List<ProjectPushList> projectPushLists1 = t2.get();
+        List<ProjectPushList> projectPushLists2 = t3.get();
+        List<ProjectPushList> projectPushLists3 = t4.get();
+        List<ProjectPushList> projectPushLists4 = t5.get();
+        List<ProjectPushList> projectPushLists5 = t6.get();
+        List<ProjectPushList> projectPushLists6 = t7.get();
+        List<ProjectPushList> mergedList = Stream.of(projectPushLists, projectPushLists1, projectPushLists2, projectPushLists3, projectPushLists4, projectPushLists5, projectPushLists6)
+                .flatMap(java.util.Collection::stream)
+                .collect(Collectors.toList());
 
-            //判断是否为组批任务、是组批前还是组批后的任务
-            String remark = null;
-            if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"1")) remark = "(组批之后)";//组批之后
-            else if(cost.getPccode()!=null && Objects.equals(cost.getStatus(),"0")) remark = "(组批之前)";//组批之前
-            if (remark == null) remark = "";
-            ProjectPushList push = ProjectPushListConvert.INSTANCE.toProjectPushList(
-                    cost.getTaskno(),cost.getTaskname(),"", username, "请及时处理已收款"+remark,orgcode);
-            pushList.add(push);
-        }
-        this.saveBatch(pushList);
+        this.saveBatch(mergedList);
         return Result.OK("添加成功!");
     }
 

+ 19 - 6
module_kzks/src/main/java/org/jeecg/modules/projectPushSet/controller/ProjectPushSetController.java

@@ -9,6 +9,8 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
@@ -49,7 +51,7 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 public class ProjectPushSetController extends JeecgController<ProjectPushSet, IProjectPushSetService> {
 	@Autowired
 	private IProjectPushSetService projectPushSetService;
-	
+
 	/**
 	 * 分页列表查询
 	 *
@@ -71,7 +73,7 @@ public class ProjectPushSetController extends JeecgController<ProjectPushSet, IP
 		IPage<ProjectPushSet> pageList = projectPushSetService.page(page, queryWrapper);
 		return Result.OK(pageList);
 	}
-	
+
 	/**
 	 *   添加
 	 *
@@ -83,10 +85,21 @@ public class ProjectPushSetController extends JeecgController<ProjectPushSet, IP
 	//@RequiresPermissions("org.jeecg.modules:kzks_project_push_set:add")
 	@PostMapping(value = "/add")
 	public Result<String> add(@RequestBody ProjectPushSet projectPushSet) {
+		LambdaQueryWrapper<ProjectPushSet> wrapper = new LambdaQueryWrapper<>();
+		wrapper.eq(ProjectPushSet::getCostType,projectPushSet.getCostType());
+		wrapper.eq(ProjectPushSet::getStage,projectPushSet.getStage());
+		wrapper.eq(ProjectPushSet::getContent,projectPushSet.getContent());
+		ProjectPushSet one = projectPushSetService.getOne(wrapper);
+		if (one != null){
+			projectPushSet.setId(one.getId());
+			projectPushSetService.updateById(projectPushSet);
+			return Result.OK("您添加的内容已存在,执行修改操作");
+		}
+
 		projectPushSetService.save(projectPushSet);
 		return Result.OK("添加成功!");
 	}
-	
+
 	/**
 	 *  编辑
 	 *
@@ -101,7 +114,7 @@ public class ProjectPushSetController extends JeecgController<ProjectPushSet, IP
 		projectPushSetService.updateById(projectPushSet);
 		return Result.OK("编辑成功!");
 	}
-	
+
 	/**
 	 *   通过id删除
 	 *
@@ -116,7 +129,7 @@ public class ProjectPushSetController extends JeecgController<ProjectPushSet, IP
 		projectPushSetService.removeById(id);
 		return Result.OK("删除成功!");
 	}
-	
+
 	/**
 	 *  批量删除
 	 *
@@ -131,7 +144,7 @@ public class ProjectPushSetController extends JeecgController<ProjectPushSet, IP
 		this.projectPushSetService.removeByIds(Arrays.asList(ids.split(",")));
 		return Result.OK("批量删除成功!");
 	}
-	
+
 	/**
 	 * 通过id查询
 	 *