瀏覽代碼

报销单和工时中增加工作组id和名称的补充策略。

Cyangbin 2 年之前
父節點
當前提交
250a83379f

+ 6 - 0
pom.xml

@@ -124,6 +124,12 @@
             <groupId>com.aliyun</groupId>
             <artifactId>alibaba-dingtalk-service-sdk</artifactId>
             <version>2.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>activation</artifactId>
+                    <groupId>javax.activation</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 1 - 1
src/main/java/com/galaxis/manatee/ManateeApplication.java

@@ -13,7 +13,7 @@ import java.util.TimeZone;
  * @author zcj
  * @version 0.1
  */
-@EnableScheduling
+//@EnableScheduling
 @SpringBootApplication
 @EnableFeignClients
 @MapperScan("com.galaxis.manatee.mapper")

+ 9 - 0
src/main/java/com/galaxis/manatee/controller/TestController.java

@@ -214,6 +214,15 @@ public class TestController {
     public void pullChuanyunLog() {
         logDownloadService.saveChuanyunLogDO(false);
     }
+    /**
+     * 下载工时日志
+     *
+     * @param
+     */
+    @GetMapping("/test/api/pullAllChuanyunLog")
+    public void pullAllChuanyunLog() {
+        logDownloadService.saveAllLog();
+    }
 
     /**
      * 手动更新项目组成员

+ 2 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDayLog.java

@@ -92,4 +92,6 @@ public class ChuanyunDayLog extends BasicSubDO{
 
     @JsonProperty("F0000087")
     private String workGroupId;
+
+    private String workGroupName;
 }

+ 17 - 5
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunGroupProjectDO.java

@@ -27,7 +27,7 @@ public class ChuanyunGroupProjectDO extends BasicDO {
     /**
      * 表名
      */
-    public static final String SCHEMA_CODE ="D001789SProjectbase";
+    public static final String SCHEMA_CODE = "D001789SProjectbase";
 
     /**
      * 是否已经下发过
@@ -50,7 +50,7 @@ public class ChuanyunGroupProjectDO extends BasicDO {
     /**
      * 外部项目名称
      */
-    @JsonProperty(value="F0000038")
+    @JsonProperty(value = "F0000038")
     private String outProjectName;
 
     /**
@@ -67,11 +67,11 @@ public class ChuanyunGroupProjectDO extends BasicDO {
     /**
      * EBG
      */
-    public static final String EBG="EBG";
+    public static final String EBG = "EBG";
     /**
      * IBG
      */
-    public static final String IBG="IBG";
+    public static final String IBG = "IBG";
 
     /**
      * 氚云中项目立项时间
@@ -154,6 +154,18 @@ public class ChuanyunGroupProjectDO extends BasicDO {
     private String projectState;
 
     /**
+     * 事业部名称
+     */
+    @JsonProperty("F0000068")
+    private String businessUnitName;
+
+    /**
+     * 事业部属性
+     */
+    @JsonProperty("F0000069")
+    private String businessUnitProperties;
+
+    /**
      * 项目组成员对象
      */
     @Transient
@@ -183,7 +195,7 @@ public class ChuanyunGroupProjectDO extends BasicDO {
     /**
      * 项目组织信息
      */
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
     @JsonProperty("D001789Fd992bf8fbe114c9babe0f98cf676f8a2")
     private List<ChuanyunGroupProjectDetailDO> detailList;
 

+ 16 - 0
src/main/java/com/galaxis/manatee/service/BuildProjectService.java

@@ -0,0 +1,16 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunBuildProject;
+
+import java.util.List;
+
+public interface BuildProjectService {
+
+    /**
+     * 根据项目号查找项目立项中数据
+     *
+     * @param projectCode
+     * @return
+     */
+    List<ChuanyunBuildProject> findAllByProjectCode(String projectCode);
+}

+ 11 - 0
src/main/java/com/galaxis/manatee/service/GroupProjectService.java

@@ -0,0 +1,11 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+
+import java.util.List;
+
+public interface GroupProjectService {
+
+    List<ChuanyunGroupProjectDO> findAll();
+
+}

+ 58 - 1
src/main/java/com/galaxis/manatee/service/LogDownloadService.java

@@ -12,6 +12,7 @@ import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.util.TimeUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -35,6 +36,9 @@ import java.util.Optional;
 @Service
 public class LogDownloadService {
 
+    @Autowired
+    private WorkGroupService workGroupService;
+
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunLogDao chuanyunLogDao;
     private final ChuanyunUserCompanyDao userCompanyDao;
@@ -152,7 +156,17 @@ public class LogDownloadService {
                     List<ChuanyunWeekLogDO> weekLogList = chuanyunLogDO.getWeekLogList();
                     for (ChuanyunWeekLogDO chuanyunWeekLogDO : weekLogList) {
                         if (Objects.equals(chuanyunDayLog.getProjectId(), chuanyunWeekLogDO.getProjectId())) {
-                            chuanyunDayLog.setWorkGroupId(chuanyunWeekLogDO.getWorkGroupId());
+                            String workGroupId = chuanyunWeekLogDO.getWorkGroupId();
+                            chuanyunDayLog.setWorkGroupId(workGroupId);
+                            ChuanyunWorkGroupDO workGroupDO = workGroupService.findByObjectId(workGroupId);
+                            if (!Objects.isNull(workGroupDO)){
+                                chuanyunDayLog.setWorkGroupName(workGroupDO.getWorkGroupName());
+                            }else {
+                                ChuanyunWorkGroupDO historyWorkGroup = workGroupService.findInHistoryByObjectId(workGroupId);
+                                if (!Objects.isNull(historyWorkGroup)){
+                                    chuanyunDayLog.setWorkGroupName(historyWorkGroup.getWorkGroupName());
+                                }
+                            }
                             break;
                         }
                     }
@@ -252,4 +266,47 @@ public class LogDownloadService {
         }
         log.info("最近一月历史日志信息保存" + totalCount);
     }
+
+    public void saveAllLog(){
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        var pageSize = 100;
+        List<String> matchersString = new ArrayList<>();
+        matchersString.add("Status_6,[1;2;3]");
+        while (flag) {
+            long startTime = Instant.now().getEpochSecond();
+            try {
+                //从氚云查询数据
+                var filter = Filter.instance(start, start + pageSize, true, Filter.AND, matchersString);
+                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+                //转化为POJO
+                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                //处理日志数据
+                result.forEach(this::updateChuanyunLogData);
+                //获取项目总数
+                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunLogDao.saveAll(result);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+            log.info("日志100条保存时间" + (Instant.now().getEpochSecond() - startTime) + "秒");
+        }
+        log.info("最近一月历史日志信息保存" + totalCount);
+    }
+
+
 }

+ 13 - 21
src/main/java/com/galaxis/manatee/service/LogStandardService.java

@@ -39,6 +39,9 @@ public class LogStandardService {
     @Autowired
     private WorkHourMapper workHourMapper;
 
+    @Autowired
+    private  WorkGroupService workGroupService;
+
     private final DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
@@ -369,29 +372,18 @@ public class LogStandardService {
                 // 设置工作组和子工作组
                 String workGroupId = self.getWorkGroupId();
                 if (!Objects.isNull(workGroupId) && !workGroupId.isBlank()) {
-                    // 查询工作组
-                    ObjectMapper objectMapper = new ObjectMapper();
-                    try {
-                        var chuanyunFindAllResponse = chuanYunManager.find(ChuanyunWorkGroupDO.SCHEMA_CODE, workGroupId);
-                        if (chuanyunFindAllResponse.getReturnData() != null) {
-                            Object bizObject = chuanyunFindAllResponse.getReturnData().getBizObject();
-                            if (bizObject != null) {
-                                ChuanyunWorkGroupDO chuanyunWorkGroupDO = objectMapper.convertValue(bizObject, ChuanyunWorkGroupDO.class);
-                                chuanyunSelfWorkHourDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
-                                chuanyunSelfWorkHourDO.setSubWorkGroupName(chuanyunWorkGroupDO.getSubWorkGroup());
-                            }
-                        }
-                        if (!chuanyunFindAllResponse.getSuccessful()) {
-                            // 找不到该工作组,工作组可能已经被删掉了
-                            // 找该用户该项目当前工作组
-                            ArrayList<String> matchers = new ArrayList<>();
 
-                            Filter filter = Filter.instance(0, 10, true, Filter.AND, matchers);
-                            chuanYunManager.findAll(ChuanyunWorkGroupDO.SCHEMA_CODE, filter);
-                        }
-                    } catch (Exception e) {
-                        log.error(e.getMessage());
+                    ChuanyunWorkGroupDO workGroupDO = workGroupService.findByObjectId(workGroupId);
+                    if (!Objects.isNull(workGroupDO)){
+                        chuanyunSelfWorkHourDO.setWorkGroupName(workGroupDO.getWorkGroupName());
+                        chuanyunSelfWorkHourDO.setSubWorkGroupName(workGroupDO.getSubWorkGroup());
+                    }else {
+                        // 从历史数据中查找
+                        ChuanyunWorkGroupDO historyWorkGroup = workGroupService.findInHistoryByObjectId(workGroupId);
+                        chuanyunSelfWorkHourDO.setWorkGroupName(historyWorkGroup.getWorkGroupName());
+                        chuanyunSelfWorkHourDO.setSubWorkGroupName(historyWorkGroup.getSubWorkGroup());
                     }
+
                 }
                 //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
                 try {

+ 16 - 0
src/main/java/com/galaxis/manatee/service/ProjectOrganizationStructureService.java

@@ -0,0 +1,16 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectOrganizationStructureDO;
+
+import java.util.List;
+
+public interface ProjectOrganizationStructureService {
+
+    /**
+     * 根据立项表中的项目id来查询组织架构
+     *
+     * @param projectId
+     * @return
+     */
+    List<ChuanyunProjectOrganizationStructureDO> findAllByProjectId(String projectId);
+}

+ 21 - 252
src/main/java/com/galaxis/manatee/service/WorkGroupService.java

@@ -1,271 +1,40 @@
 package com.galaxis.manatee.service;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.galaxis.manatee.dao.ChuanyunImplCostDao;
-import com.galaxis.manatee.dao.ChuanyunReimbursementDao;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizReturnData;
-import com.galaxis.manatee.entity.chuanyun.dto.Filter;
-import com.galaxis.manatee.event.PushImplCostEvent;
-import com.galaxis.manatee.exception.BigSizeException;
-import com.galaxis.manatee.manager.ChuanYunManager;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.*;
 
 /**
  * 工作组相关操作
  */
-@Slf4j
-@Service
-public class WorkGroupService {
-
-    @Autowired
-    private ChuanYunManager chuanYunManager;
-
-    @Autowired
-    private ChuanyunImplCostDao implCostDao;
-
-    @Autowired
-    private ChuanyunReimbursementDao reimbursementDao;
-
-    @Autowired
-    private ApplicationContext applicationContext;
-
+public interface WorkGroupService {
 
     /**
      * 汇算工作组级别实施费用
      */
-    @Async
-    public void implCost() {
-        // 查询立项表中数据
-        List<ChuanyunBuildProject> buildProjectList = findAll();
-        ObjectMapper objectMapper = new ObjectMapper();
-        // 查询组织架构录入
-        buildProjectList.parallelStream().forEach(chuanyunBuildProject -> {
-            String buildProjectId = chuanyunBuildProject.getObjectId();
-            List<String> m1 = List.of("F0000001_2," + buildProjectId);
-            Filter filter = Filter.instance(0, 10, true, Filter.AND, m1);
-            ChuanyunFindAllBizDTO<Object> projectList = null;
-            try {
-                projectList = chuanYunManager.findAll(ChuanyunProjectOrganizationStructureDO.SCHEMA_CODE, filter);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-            }
-            if (projectList == null || projectList.getReturnData() == null) {
-                return;
-            }
-            List<ChuanyunProjectOrganizationStructureDO> projectOrganizationStructureList = objectMapper.convertValue(projectList.getReturnData().getBizObjectArray(), new TypeReference<>() {
-            });
-            List<String> parentIdList = projectOrganizationStructureList.stream().map(BasicDO::getObjectId).toList();
-            parentIdList.forEach(parentId -> {
-                // 查询工作组信息
-                List<String> m2 = List.of("parentObjectId_2," + parentId);
-                ChuanyunFindAllBizDTO<Object> workGroupResponse = null;
-                try {
-                    workGroupResponse = chuanYunManager.findAll(ChuanyunWorkGroupDO.SCHEMA_CODE, Filter.instance(0, 30, true, Filter.AND, m2));
-                } catch (JsonProcessingException e) {
-                    e.printStackTrace();
-                }
-                if (workGroupResponse == null || !workGroupResponse.getSuccessful()) {
-                    return;
-                }
-                if (workGroupResponse.getReturnData() == null) {
-                    return;
-                }
-                List<ChuanyunWorkGroupDO> workGroupList = objectMapper.convertValue(workGroupResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                });
-                workGroupList.forEach(chuanyunWorkGroupDO -> {
-                    // 查询该项目在总表中的记录
-                    List<String> m3 = List.of("F0000075_5,异常", "F0000002_2," + chuanyunBuildProject.getProjectCode());
-                    Filter instance = Filter.instance(0, 50, true, Filter.AND, m3);
-                    ChuanyunFindAllBizDTO<Object> groupProjectResponse = null;
-                    try {
-                        groupProjectResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE, instance);
-                    } catch (JsonProcessingException e) {
-                        e.printStackTrace();
-                    }
-                    if (!groupProjectResponse.getSuccessful() || groupProjectResponse.getReturnData() == null) {
-                        return;
-                    }
-                    List<Object> bizObjectArray = groupProjectResponse.getReturnData().getBizObjectArray();
-                    List<ChuanyunGroupProjectDO> groupProjectDOList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
-                    });
-                    Optional<ChuanyunGroupProjectDO> groupProjectDO = groupProjectDOList.stream().findFirst();
-                    if (groupProjectDO.isPresent()) {
-                        ChuanyunGroupProjectDO chuanyunGroupProjectDO = groupProjectDO.get();
-                        List<String> userIdList = chuanyunWorkGroupDO.getSubWorkGroupMemberObject().stream().map(BasicSubDO::getObjectId).toList();
-                        // 查询报销单
-                        BigDecimal total = new BigDecimal("0.00");
-                        for (String userId : userIdList) {
-                            // 查询用户在该项目的报销单
-                            List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
-                            BigDecimal totalReim = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
-                            total = total.add(totalReim);
-                            /*Filter f = Filter.instance(0, 10, true, Filter.AND, List.of("F0000093_2," + chuanyunGroupProjectDO.getObjectId(), "F0000001_2," + userId));
-                            ChuanyunFindAllBizDTO<Object> reimbursementResponse = null;
-                            try {
-                                reimbursementResponse = chuanYunManager.findAll(ChuanyunReimbursementDO.SCHEMA_CODE, f);
-                            } catch (JsonProcessingException e) {
-                                e.printStackTrace();
-                            }
-                            if (!reimbursementResponse.getSuccessful() || reimbursementResponse.getReturnData() == null) {
-                                continue;
-                            }
-                            List<ChuanyunReimbursementDO> reimbursementDOList = objectMapper.convertValue(reimbursementResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            BigDecimal totalReim = reimbursementDOList.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
-                            total = total.add(totalReim);*/
-
-                        }
-                        // 统计工作组所有的工时
-                        String projectObjectId = chuanyunGroupProjectDO.getObjectId();
-                        String projectCode = chuanyunGroupProjectDO.getProjectCode();
-                        String workGroupId = chuanyunWorkGroupDO.getObjectId();
-
-                        ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroup(projectObjectId, projectCode, workGroupId);
-                        if (!Objects.isNull(old)) {
-                            BigDecimal oldImplCost = old.getImplCost();
-                            if (Objects.isNull(oldImplCost) || oldImplCost.compareTo(total) != 0) {
-                                old.setImplCost(total);
-                                implCostDao.save(old);
-                            }
-                        } else {
-                            ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
-                            chuanyunImplCostDO.setProjectId(projectObjectId);
-                            chuanyunImplCostDO.setProjectCode(projectCode);
-                            chuanyunImplCostDO.setWorkGroup(workGroupId);
-                            chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
-                            chuanyunImplCostDO.setImplCost(total);
-                            implCostDao.saveAndFlush(chuanyunImplCostDO);
-                        }
-                    }
-                });
-
-            });
-        });
-
-        // 上传至氚云数据库,发布上传事件
-        applicationContext.publishEvent(new PushImplCostEvent(this));
-
-
-    }
-
-    private List<ChuanyunBuildProject> findAll() {
-        ArrayList<ChuanyunBuildProject> buildProjects = new ArrayList<>();
-        int start = 0;
-        long totalCount = 0L;
-        boolean flag = true;
-        int pageSize = 100;
-        while (flag) {
-            try {
-                //从氚云查询数据
-                List<String> m = List.of("status_2,1");
-                var filter = Filter.instance(start, start + pageSize, true, Filter.AND, m);
-                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, filter);
-                if (chuanyunFindAllResponse.getReturnData() == null || chuanyunFindAllResponse.getReturnData().getBizObjectArray() == null) {
-                    flag = false;
-                    continue;
-                }
-                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
-                    start += pageSize;
-                } else {
-                    flag = false;
-                }
-                //获取项目总数
-                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
-                //保存
-                List<Object> bizObjectArray = chuanyunFindAllResponse.getReturnData().getBizObjectArray();
-                ObjectMapper objectMapper = new ObjectMapper();
-                List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
-                });
-                buildProjects.addAll(bpList);
-                flag = false;
-            } catch (Exception e) {
-                log.error(e.getMessage());
-                e.printStackTrace();
-            }
-
-        }
-        return buildProjects;
-    }
+    void implCost();
 
-    @Async
-    public void pushToChuanyun() {
-
-        List<ChuanyunImplCostDO> all = implCostDao.findAll();
-        ObjectMapper objectMapper = new ObjectMapper();
-        all.forEach(implCostDO -> {
-            String projectId = implCostDO.getProjectId();
-            String projectCode = implCostDO.getProjectCode();
-            String workGroup = implCostDO.getWorkGroup();
-            List<String> m = List.of("F0000001_2," + projectId, "F0000002_2," + projectCode, "F0000006_2," + workGroup);
-            Filter filter = Filter.instance(0, 10, true, Filter.AND, m);
-            ChuanyunFindAllBizDTO<Object> implCostResponse = null;
-            try {
-                implCostResponse = chuanYunManager.findAll(ChuanyunImplCostDO.SCHEMA_CODE, filter);
-            } catch (JsonProcessingException e) {
-                log.error(e.getMessage());
-            }
-            assert implCostResponse != null;
-            if (implCostResponse.getSuccessful()) {
-                ChuanyunFindAllBizReturnData<Object> returnData = implCostResponse.getReturnData();
-                if (returnData != null && returnData.getBizObjectArray() != null) {
-                    List<ChuanyunImplCostDO> chuanyunImplCostDOList = objectMapper.convertValue(returnData.getBizObjectArray(), new TypeReference<>() {
-                    });
-                    Optional<ChuanyunImplCostDO> implCostOptional = chuanyunImplCostDOList.stream().findFirst();
-                    if (implCostOptional.isPresent()) {
-                        ChuanyunImplCostDO chuanyunImplCostDO = implCostOptional.get();
-                        if (chuanyunImplCostDO.getImplCost().compareTo(implCostDO.getImplCost()) != 0) {
-                            // 工作组实施费用发生变化
-                            log.info("更新项目工作组实施费用");
-                            ImplCostUpdateDTO implCostUpdateDTO = new ImplCostUpdateDTO(implCostDO.getImplCost());
-                            try {
-                                String updateStr = objectMapper.writeValueAsString(implCostUpdateDTO);
-                                chuanYunManager.update(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId(), updateStr);
-                            } catch (JsonProcessingException | BigSizeException e) {
-                                log.error(e.getMessage());
-                            }
-                        }
-                    }
-
-                } else {
-                    // 直接保存
-                    try {
-                        String implCostStr = objectMapper.writeValueAsString(implCostDO);
-                        chuanYunManager.save(ChuanyunImplCostDO.SCHEMA_CODE, implCostStr, true);
-                    } catch (JsonProcessingException | BigSizeException e) {
-                        log.error(e.getMessage());
-                    }
-
-                }
-
-            }
-
-
-        });
-        log.info("上传项目工作组实施费用完成");
+    /**
+     * 推送工作组实施费用至氚云
+     */
+    void pushToChuanyun();
 
-    }
+    /**
+     * 根据objectId查询
+     *
+     * @param objectId
+     * @return
+     */
+    ChuanyunWorkGroupDO findByObjectId(String objectId);
 
-    @Data
-    static class ImplCostUpdateDTO {
-        @JsonProperty("F0000004")
-        private BigDecimal implCost;
+    /**
+     * 根据父级表单获取工作组集合
+     *
+     * @param parentObjectId
+     * @return
+     */
+    List<ChuanyunWorkGroupDO> findByParentObjectId(String parentObjectId);
 
-        public ImplCostUpdateDTO(BigDecimal implCost) {
-            this.implCost = implCost;
-        }
-    }
+    ChuanyunWorkGroupDO findInHistoryByObjectId(String objectId);
 
 }

+ 51 - 0
src/main/java/com/galaxis/manatee/service/impl/BuildProjectServiceImpl.java

@@ -0,0 +1,51 @@
+package com.galaxis.manatee.service.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunBuildProject;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizReturnData;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.BuildProjectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class BuildProjectServiceImpl implements BuildProjectService {
+
+    @Autowired
+    private ChuanYunManager chuanYunManager;
+
+    @Override
+    public List<ChuanyunBuildProject> findAllByProjectCode(String projectCode) {
+        //从氚云查询数据
+        List<String> m = List.of("status_2,1", "F0000007_2," + projectCode);
+        var filter = Filter.instance(0, 10, true, Filter.AND, m);
+        ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
+        try {
+            chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, filter);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        if (!Objects.isNull(chuanyunFindAllResponse)) {
+            ChuanyunFindAllBizReturnData<Object> returnData = chuanyunFindAllResponse.getReturnData();
+            if (chuanyunFindAllResponse.getSuccessful() && !Objects.isNull(returnData)) {
+                Object bizObject = returnData.getBizObjectArray();
+                ObjectMapper objectMapper = new ObjectMapper();
+                List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObject, new TypeReference<>() {
+                });
+                if (!bpList.isEmpty()) {
+                    return bpList;
+                }
+            }
+        }
+        return null;
+    }
+}

+ 31 - 0
src/main/java/com/galaxis/manatee/service/impl/GroupProjectServiceImpl.java

@@ -0,0 +1,31 @@
+package com.galaxis.manatee.service.impl;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.GroupProjectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class GroupProjectServiceImpl implements GroupProjectService {
+
+    @Autowired
+    private ChuanYunManager chuanYunManager;
+
+    @Autowired
+    private ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+
+    @Override
+    public List<ChuanyunGroupProjectDO> findAll() {
+        return null;
+    }
+}

+ 53 - 0
src/main/java/com/galaxis/manatee/service/impl/ProjectOrganizationStructureServiceImpl.java

@@ -0,0 +1,53 @@
+package com.galaxis.manatee.service.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.entity.chuanyun.data.object.BasicDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunBuildProject;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectOrganizationStructureDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizReturnData;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.ProjectOrganizationStructureService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class ProjectOrganizationStructureServiceImpl implements ProjectOrganizationStructureService {
+
+    @Autowired
+    private ChuanYunManager chuanYunManager;
+
+    @Override
+    public List<ChuanyunProjectOrganizationStructureDO> findAllByProjectId(String projectId) {
+        // projectId 为立项表中的主键id
+        List<String> m1 = List.of("F0000001_2," + projectId);
+        Filter filter = Filter.instance(0, 10, true, Filter.AND, m1);
+        ChuanyunFindAllBizDTO<Object> projectList = null;
+        try {
+            projectList = chuanYunManager.findAll(ChuanyunProjectOrganizationStructureDO.SCHEMA_CODE, filter);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        if (!Objects.isNull(projectList)) {
+            ChuanyunFindAllBizReturnData<Object> returnData = projectList.getReturnData();
+            if (projectList.getSuccessful() && !Objects.isNull(returnData)) {
+                Object bizObject = returnData.getBizObjectArray();
+                ObjectMapper objectMapper = new ObjectMapper();
+                List<ChuanyunProjectOrganizationStructureDO> posList = objectMapper.convertValue(bizObject, new TypeReference<>() {
+                });
+                if (!posList.isEmpty()) {
+                    return posList;
+                }
+            }
+        }
+        return null;
+    }
+}

+ 335 - 0
src/main/java/com/galaxis/manatee/service/impl/WorkGroupServiceImpl.java

@@ -0,0 +1,335 @@
+package com.galaxis.manatee.service.impl;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunImplCostDao;
+import com.galaxis.manatee.dao.ChuanyunReimbursementDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.event.PushImplCostEvent;
+import com.galaxis.manatee.exception.BigSizeException;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.WorkGroupService;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 工作组相关操作
+ */
+@Slf4j
+@Service
+public class WorkGroupServiceImpl implements WorkGroupService {
+
+    @Autowired
+    private ChuanYunManager chuanYunManager;
+
+    @Autowired
+    private ChuanyunImplCostDao implCostDao;
+
+    @Autowired
+    private ChuanyunReimbursementDao reimbursementDao;
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+
+    /**
+     * 汇算工作组级别实施费用
+     */
+    @Override
+    @Async
+    public void implCost() {
+        // 查询立项表中数据
+        List<ChuanyunBuildProject> buildProjectList = findAll();
+        ObjectMapper objectMapper = new ObjectMapper();
+        // 查询组织架构录入
+        buildProjectList.parallelStream().forEach(chuanyunBuildProject -> {
+            String buildProjectId = chuanyunBuildProject.getObjectId();
+            List<String> m1 = List.of("F0000001_2," + buildProjectId);
+            Filter filter = Filter.instance(0, 10, true, Filter.AND, m1);
+            ChuanyunFindAllBizDTO<Object> projectList = null;
+            try {
+                projectList = chuanYunManager.findAll(ChuanyunProjectOrganizationStructureDO.SCHEMA_CODE, filter);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+            if (projectList == null || projectList.getReturnData() == null) {
+                return;
+            }
+            List<ChuanyunProjectOrganizationStructureDO> projectOrganizationStructureList = objectMapper.convertValue(projectList.getReturnData().getBizObjectArray(), new TypeReference<>() {
+            });
+            List<String> parentIdList = projectOrganizationStructureList.stream().map(BasicDO::getObjectId).toList();
+            parentIdList.forEach(parentId -> {
+                // 查询工作组信息
+                List<String> m2 = List.of("parentObjectId_2," + parentId);
+                ChuanyunFindAllBizDTO<Object> workGroupResponse = null;
+                try {
+                    workGroupResponse = chuanYunManager.findAll(ChuanyunWorkGroupDO.SCHEMA_CODE, Filter.instance(0, 30, true, Filter.AND, m2));
+                } catch (JsonProcessingException e) {
+                    e.printStackTrace();
+                }
+                if (workGroupResponse == null || !workGroupResponse.getSuccessful()) {
+                    return;
+                }
+                if (workGroupResponse.getReturnData() == null) {
+                    return;
+                }
+                List<ChuanyunWorkGroupDO> workGroupList = objectMapper.convertValue(workGroupResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                workGroupList.forEach(chuanyunWorkGroupDO -> {
+                    // 查询该项目在总表中的记录
+                    List<String> m3 = List.of("F0000075_5,异常", "F0000002_2," + chuanyunBuildProject.getProjectCode());
+                    Filter instance = Filter.instance(0, 50, true, Filter.AND, m3);
+                    ChuanyunFindAllBizDTO<Object> groupProjectResponse = null;
+                    try {
+                        groupProjectResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE, instance);
+                    } catch (JsonProcessingException e) {
+                        e.printStackTrace();
+                    }
+                    if (!groupProjectResponse.getSuccessful() || groupProjectResponse.getReturnData() == null) {
+                        return;
+                    }
+                    List<Object> bizObjectArray = groupProjectResponse.getReturnData().getBizObjectArray();
+                    List<ChuanyunGroupProjectDO> groupProjectDOList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
+                    });
+                    Optional<ChuanyunGroupProjectDO> groupProjectDO = groupProjectDOList.stream().findFirst();
+                    if (groupProjectDO.isPresent()) {
+                        ChuanyunGroupProjectDO chuanyunGroupProjectDO = groupProjectDO.get();
+                        List<String> userIdList = chuanyunWorkGroupDO.getSubWorkGroupMemberObject().stream().map(BasicSubDO::getObjectId).toList();
+                        // 查询报销单
+                        BigDecimal total = new BigDecimal("0.00");
+                        for (String userId : userIdList) {
+                            // 查询用户在该项目的报销单
+                            List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
+                            BigDecimal totalReim = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
+                            total = total.add(totalReim);
+                            /*Filter f = Filter.instance(0, 10, true, Filter.AND, List.of("F0000093_2," + chuanyunGroupProjectDO.getObjectId(), "F0000001_2," + userId));
+                            ChuanyunFindAllBizDTO<Object> reimbursementResponse = null;
+                            try {
+                                reimbursementResponse = chuanYunManager.findAll(ChuanyunReimbursementDO.SCHEMA_CODE, f);
+                            } catch (JsonProcessingException e) {
+                                e.printStackTrace();
+                            }
+                            if (!reimbursementResponse.getSuccessful() || reimbursementResponse.getReturnData() == null) {
+                                continue;
+                            }
+                            List<ChuanyunReimbursementDO> reimbursementDOList = objectMapper.convertValue(reimbursementResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
+                            BigDecimal totalReim = reimbursementDOList.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
+                            total = total.add(totalReim);*/
+
+                        }
+                        // 统计工作组所有的工时
+                        String projectObjectId = chuanyunGroupProjectDO.getObjectId();
+                        String projectCode = chuanyunGroupProjectDO.getProjectCode();
+                        String workGroupId = chuanyunWorkGroupDO.getObjectId();
+
+                        ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroup(projectObjectId, projectCode, workGroupId);
+                        if (!Objects.isNull(old)) {
+                            BigDecimal oldImplCost = old.getImplCost();
+                            if (Objects.isNull(oldImplCost) || oldImplCost.compareTo(total) != 0) {
+                                old.setImplCost(total);
+                                implCostDao.save(old);
+                            }
+                        } else {
+                            ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
+                            chuanyunImplCostDO.setProjectId(projectObjectId);
+                            chuanyunImplCostDO.setProjectCode(projectCode);
+                            chuanyunImplCostDO.setWorkGroup(workGroupId);
+                            chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
+                            chuanyunImplCostDO.setImplCost(total);
+                            implCostDao.saveAndFlush(chuanyunImplCostDO);
+                        }
+                    }
+                });
+
+            });
+        });
+
+        // 上传至氚云数据库,发布上传事件
+        applicationContext.publishEvent(new PushImplCostEvent(this));
+
+
+    }
+
+    private List<ChuanyunBuildProject> findAll() {
+        ArrayList<ChuanyunBuildProject> buildProjects = new ArrayList<>();
+        int start = 0;
+        long totalCount = 0L;
+        boolean flag = true;
+        int pageSize = 100;
+        while (flag) {
+            try {
+                //从氚云查询数据
+                List<String> m = List.of("status_2,1");
+                var filter = Filter.instance(start, start + pageSize, true, Filter.AND, m);
+                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null || chuanyunFindAllResponse.getReturnData().getBizObjectArray() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+                //获取项目总数
+                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                List<Object> bizObjectArray = chuanyunFindAllResponse.getReturnData().getBizObjectArray();
+                ObjectMapper objectMapper = new ObjectMapper();
+                List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
+                });
+                buildProjects.addAll(bpList);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+
+        }
+        return buildProjects;
+    }
+
+    @Override
+    @Async
+    public void pushToChuanyun() {
+
+        List<ChuanyunImplCostDO> all = implCostDao.findAll();
+        ObjectMapper objectMapper = new ObjectMapper();
+        all.forEach(implCostDO -> {
+            String projectId = implCostDO.getProjectId();
+            String projectCode = implCostDO.getProjectCode();
+            String workGroup = implCostDO.getWorkGroup();
+            List<String> m = List.of("F0000001_2," + projectId, "F0000002_2," + projectCode, "F0000006_2," + workGroup);
+            Filter filter = Filter.instance(0, 10, true, Filter.AND, m);
+            ChuanyunFindAllBizDTO<Object> implCostResponse = null;
+            try {
+                implCostResponse = chuanYunManager.findAll(ChuanyunImplCostDO.SCHEMA_CODE, filter);
+            } catch (JsonProcessingException e) {
+                log.error(e.getMessage());
+            }
+            assert implCostResponse != null;
+            if (implCostResponse.getSuccessful()) {
+                ChuanyunFindAllBizReturnData<Object> returnData = implCostResponse.getReturnData();
+                if (returnData != null && returnData.getBizObjectArray() != null) {
+                    List<ChuanyunImplCostDO> chuanyunImplCostDOList = objectMapper.convertValue(returnData.getBizObjectArray(), new TypeReference<>() {
+                    });
+                    Optional<ChuanyunImplCostDO> implCostOptional = chuanyunImplCostDOList.stream().findFirst();
+                    if (implCostOptional.isPresent()) {
+                        ChuanyunImplCostDO chuanyunImplCostDO = implCostOptional.get();
+                        if (chuanyunImplCostDO.getImplCost().compareTo(implCostDO.getImplCost()) != 0) {
+                            // 工作组实施费用发生变化
+                            log.info("更新项目工作组实施费用");
+                            ImplCostUpdateDTO implCostUpdateDTO = new ImplCostUpdateDTO(implCostDO.getImplCost());
+                            try {
+                                String updateStr = objectMapper.writeValueAsString(implCostUpdateDTO);
+                                chuanYunManager.update(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId(), updateStr);
+                            } catch (JsonProcessingException | BigSizeException e) {
+                                log.error(e.getMessage());
+                            }
+                        }
+                    }
+
+                } else {
+                    // 直接保存
+                    try {
+                        String implCostStr = objectMapper.writeValueAsString(implCostDO);
+                        chuanYunManager.save(ChuanyunImplCostDO.SCHEMA_CODE, implCostStr, true);
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        log.error(e.getMessage());
+                    }
+
+                }
+
+            }
+
+
+        });
+        log.info("上传项目工作组实施费用完成");
+
+    }
+
+    @Data
+    static class ImplCostUpdateDTO {
+        @JsonProperty("F0000004")
+        private BigDecimal implCost;
+
+        public ImplCostUpdateDTO(BigDecimal implCost) {
+            this.implCost = implCost;
+        }
+    }
+
+    @Override
+    public ChuanyunWorkGroupDO findByObjectId(String objectId) {
+        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = chuanYunManager.find(ChuanyunWorkGroupDO.SCHEMA_CODE, objectId);
+        if (!Objects.isNull(objectChuanyunFindBizDTO)) {
+            ChuanyunFindBizReturnData<Object> returnData = objectChuanyunFindBizDTO.getReturnData();
+            if (objectChuanyunFindBizDTO.getSuccessful() && !Objects.isNull(returnData)) {
+                Object bizObject = returnData.getBizObject();
+                ObjectMapper objectMapper = new ObjectMapper();
+                ChuanyunWorkGroupDO chuanyunWorkGroupDO = objectMapper.convertValue(bizObject, ChuanyunWorkGroupDO.class);
+                if (chuanyunWorkGroupDO != null) {
+                    return chuanyunWorkGroupDO;
+                }
+            }
+        }
+        log.warn("无该工作组");
+        return null;
+    }
+
+    @Override
+    public List<ChuanyunWorkGroupDO> findByParentObjectId(String parentObjectId) {
+        List<String> m = List.of("parentObjectId_2," + parentObjectId);
+        Filter filter = Filter.instance(0, 50, true, Filter.AND, m);
+        ChuanyunFindAllBizDTO<Object> response = null;
+        try {
+            response = chuanYunManager.findAll(ChuanyunWorkGroupDO.SCHEMA_CODE, filter);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        if (!Objects.isNull(response)) {
+            ChuanyunFindAllBizReturnData<Object> returnData = response.getReturnData();
+            if (response.getSuccessful() && !Objects.isNull(returnData)) {
+                List<Object> bizObjectArray = returnData.getBizObjectArray();
+                ObjectMapper objectMapper = new ObjectMapper();
+                List<ChuanyunWorkGroupDO> workGroupList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
+                });
+                if (!workGroupList.isEmpty()) {
+                    return workGroupList;
+                }
+            }
+        }
+        log.warn("无该工作组");
+        return null;
+    }
+
+    @Override
+    public ChuanyunWorkGroupDO findInHistoryByObjectId(String objectId) {
+        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = chuanYunManager.find("D001789f1de93b6cb324bb5a35290e7c59a0ebc", objectId);
+        if (!Objects.isNull(objectChuanyunFindBizDTO)) {
+            ChuanyunFindBizReturnData<Object> returnData = objectChuanyunFindBizDTO.getReturnData();
+            if (objectChuanyunFindBizDTO.getSuccessful() && !Objects.isNull(returnData)) {
+                Object bizObject = returnData.getBizObject();
+                ObjectMapper objectMapper = new ObjectMapper();
+                ChuanyunWorkGroupDO chuanyunWorkGroupDO = objectMapper.convertValue(bizObject, ChuanyunWorkGroupDO.class);
+                if (chuanyunWorkGroupDO != null) {
+                    return chuanyunWorkGroupDO;
+                }
+            }
+        }
+        log.warn("组织架构查询中无该工作组");
+        return null;
+    }
+}

+ 58 - 8
src/main/java/com/galaxis/manatee/task/ChuanyunFinancialScheduledTask.java

@@ -2,11 +2,15 @@ package com.galaxis.manatee.task;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.dao.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.event.ImplCostEvent;
 import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.BuildProjectService;
+import com.galaxis.manatee.service.ProjectOrganizationStructureService;
+import com.galaxis.manatee.service.WorkGroupService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
@@ -18,6 +22,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Objects;
 
 /**
  * @author zcj
@@ -30,6 +35,12 @@ public class ChuanyunFinancialScheduledTask {
 
     @Autowired
     private ApplicationContext applicationContext;
+    @Autowired
+    private WorkGroupService workGroupService;
+    @Autowired
+    private BuildProjectService buildProjectService;
+    @Autowired
+    private ProjectOrganizationStructureService projectOrganizationStructureService;
 
     private final Integer pageSize = 100;
     private final ChuanYunManager chuanYunManager;
@@ -63,12 +74,12 @@ public class ChuanyunFinancialScheduledTask {
     /**
      * 获取报销单
      */
-    protected void getReimbursementFromChuanyun(){
-        var objectMapper=new ObjectMapper();
-        var start=0;
-        var totalCount=0L;
-        var flag=true;
-        List<String> matchersString=new ArrayList<>();
+    protected void getReimbursementFromChuanyun() {
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        List<String> matchersString = new ArrayList<>();
 //        matchersString.add("Status_2,1");
         matchersString.add("Status_6,[1;2;3]");
         while (flag) {
@@ -140,6 +151,46 @@ public class ChuanyunFinancialScheduledTask {
                             chuanyunReimbursementDetailDO.setGroupProjectCode(chuanyunGroupProjectCode.toString());
 //                            chuanyunReimbursementDetailDO.setReimburseUserCostCode(chuanyunCostDO.getCostCode());
                         });
+                        if (ChuanYunConstant.NEED_WORK_GROUP_PROJECT_TYPE.contains(chuanyunReimbursementDO.getPrintingProjectType())) {
+                            // 设置工作组名称
+                            String workGroupId = chuanyunReimbursementDO.getWorkGroupId();
+                            if (!Objects.isNull(workGroupId) && StringUtils.hasLength(workGroupId)) {
+                                ChuanyunWorkGroupDO workGroupDO = workGroupService.findByObjectId(workGroupId);
+                                if (workGroupDO != null) {
+                                    chuanyunReimbursementDO.setWorkGroupName(workGroupDO.getWorkGroupName());
+                                } else {
+                                    // 查询历史数据中是否存在工作组
+                                    ChuanyunWorkGroupDO inHistoryWorkGroup = workGroupService.findInHistoryByObjectId(workGroupId);
+                                    chuanyunReimbursementDO.setWorkGroupName(inHistoryWorkGroup.getWorkGroupName());
+                                }
+                            } else {
+                                // 没有填写工作组信息则任意选择该成员所在工作组
+                                // 通过项目号查询组织架构中的工作组
+                                List<ChuanyunBuildProject> allBuildProjectList = buildProjectService.findAllByProjectCode(chuanyunReimbursementDO.getGroupProjectCode());
+                                if (!Objects.isNull(allBuildProjectList)) {
+                                    allBuildProjectList.forEach(chuanyunBuildProject -> {
+                                        List<ChuanyunProjectOrganizationStructureDO> posList = projectOrganizationStructureService.findAllByProjectId(chuanyunBuildProject.getObjectId());
+                                        if (!posList.isEmpty()) {
+                                            for (ChuanyunProjectOrganizationStructureDO chuanyunProjectOrganizationStructureDO : posList) {
+                                                // 查询工作组
+                                                List<ChuanyunWorkGroupDO> workGroupList = workGroupService.findByParentObjectId(chuanyunProjectOrganizationStructureDO.getObjectId());
+                                                if (!Objects.isNull(workGroupList)) {
+                                                    for (ChuanyunWorkGroupDO workGroupDO : workGroupList) {
+                                                        List<String> workGroupMamberUserIdList = workGroupDO.getSubWorkGroupMemberObject().stream().map(ChuanyunWorkGroupMemberDO::getUserId).toList();
+                                                        if (workGroupMamberUserIdList.contains(chuanyunReimbursementDO.getReimburseUserId())) {
+                                                            chuanyunReimbursementDO.setWorkGroupName(workGroupDO.getWorkGroupName());
+                                                            chuanyunReimbursementDO.setWorkGroupId(workGroupDO.getObjectId());
+                                                            break;
+                                                        }
+
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    });
+                                }
+                            }
+                        }
                     } catch (Exception e) {
                         log.warn(e.getMessage());
                         e.printStackTrace();
@@ -152,11 +203,10 @@ public class ChuanyunFinancialScheduledTask {
                 e.printStackTrace();
             }
         }
-        log.info("报销信息保存保存" + totalCount);
+        log.info("报销信息保存" + totalCount);
         // 发布事件汇总工作组实施费用
         applicationContext.publishEvent(new ImplCostEvent(this));
     }
 
 
-
 }