Просмотр исходного кода

完善工作组人力成本问题

Cyangbin 2 лет назад
Родитель
Сommit
ecb801fa98
30 измененных файлов с 819 добавлено и 1046 удалено
  1. 5 0
      pom.xml
  2. BIN
      src/main/.DS_Store
  3. BIN
      src/main/java/.DS_Store
  4. BIN
      src/main/java/com/.DS_Store
  5. BIN
      src/main/java/com/galaxis/.DS_Store
  6. BIN
      src/main/java/com/galaxis/manatee/.DS_Store
  7. 18 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostWgDTO.java
  8. 0 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostWgPrimaryKey.java
  9. 3 2
      src/main/java/com/galaxis/manatee/manager/ClawFeign.java
  10. 141 109
      src/main/java/com/galaxis/manatee/service/impl/WorkGroupServiceImpl.java
  11. 47 121
      src/main/java/com/galaxis/manatee/task/U9InfoTask.java
  12. 2 2
      src/main/resources/application.yml
  13. BIN
      src/test/.DS_Store
  14. 0 65
      src/test/java/com/galaxis/manatee/Test/GroupProjectTest.java
  15. 0 30
      src/test/java/com/galaxis/manatee/Test/U9Test.java
  16. 0 608
      src/test/java/com/galaxis/manatee/Test/WorkGroupTest.java
  17. 1 1
      src/test/java/com/galaxis/manatee/Test/askLeaveTest.java
  18. 561 92
      src/test/java/com/galaxis/manatee/Test/implCost/WorkGroupImplCostTest.java
  19. 1 1
      src/test/java/com/galaxis/manatee/Test/payRollTest.java
  20. 1 1
      src/test/java/com/galaxis/manatee/Test/GetRepeatProject.java
  21. 30 0
      src/test/java/com/galaxis/manatee/Test/project/GroupProjectTest.java
  22. 1 1
      src/test/java/com/galaxis/manatee/Test/PushProjectChange.java
  23. 1 1
      src/test/java/com/galaxis/manatee/Test/ProjectImplTest.java
  24. 1 1
      src/test/java/com/galaxis/manatee/Test/ReimbursementTest.java
  25. 1 1
      src/test/java/com/galaxis/manatee/Test/UserIdTest.java
  26. 1 1
      src/test/java/com/galaxis/manatee/Test/ChangeHistoryWorkHourTest.java
  27. 1 1
      src/test/java/com/galaxis/manatee/Test/LogTest.java
  28. 1 1
      src/test/java/com/galaxis/manatee/Test/SaveLog.java
  29. 1 1
      src/test/java/com/galaxis/manatee/Test/clearErrorWorkHour.java
  30. 1 1
      src/test/java/com/galaxis/manatee/Test/updateDayWorkHour.java

+ 5 - 0
pom.xml

@@ -164,6 +164,11 @@
             <groupId>wsdl4j</groupId>
             <artifactId>wsdl4j</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.4.3</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

BIN
src/main/.DS_Store


BIN
src/main/java/.DS_Store


BIN
src/main/java/com/.DS_Store


BIN
src/main/java/com/galaxis/.DS_Store


BIN
src/main/java/com/galaxis/manatee/.DS_Store


+ 18 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostWgDTO.java

@@ -1,16 +1,31 @@
 package com.galaxis.manatee.entity.chuanyun.dto;
 
 
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import lombok.Data;
 
-import javax.persistence.EmbeddedId;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 @Data
 public class ChuanyunLaborCostWgDTO {
 
-    @EmbeddedId
-    private ChuanyunLaborCostWgPrimaryKey chuanyunLaborCostWgPrimaryKey;
+    private String projectid;
+
+    protected String projectcode;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    protected LocalDateTime period;
+
+    protected String department;
+
+    protected String workgroupid;
+
+    protected String workgroupname;
 
     private BigDecimal costamount;
 }

+ 0 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostWgPrimaryKey.java

@@ -13,8 +13,6 @@ import java.time.LocalDateTime;
 @Data
 public class ChuanyunLaborCostWgPrimaryKey {
 
-    protected String projectid;
-
     protected String projectcode;
 
     @JsonSerialize(using = LocalDateTimeSerializer.class)

+ 3 - 2
src/main/java/com/galaxis/manatee/manager/ClawFeign.java

@@ -6,6 +6,7 @@ import com.galaxis.manatee.capsule.dto.PageDTO;
 import com.galaxis.manatee.capsule.dto.U9ResponseDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.*;
 import com.galaxis.manatee.entity.chuanyun.dto.MaterialDTO;
+import com.github.pagehelper.PageInfo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -200,7 +201,7 @@ public interface ClawFeign {
      * @param map 分页参数
      * @return 保存结果
      */
-    @GetMapping("/laborcostwg/findAllByParameters")
-    PageDTO<ChuanyunLaborCostWgDTO> findChuanyunLaborCostWg(@RequestParam Map<String, String> map);
+    @GetMapping("/laborCostWgAll/findAllByParameters")
+    PageInfo<ChuanyunLaborCostWgDTO> findChuanyunLaborCostWg(@RequestParam Map<String, String> map);
 
 }

+ 141 - 109
src/main/java/com/galaxis/manatee/service/impl/WorkGroupServiceImpl.java

@@ -373,7 +373,22 @@ public class WorkGroupServiceImpl implements WorkGroupService {
 
     @Override
     public ChuanyunWorkGroupDO findByObjectId(String objectId) {
-        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = chuanYunManager.find(ChuanyunWorkGroupDO.SCHEMA_CODE, objectId);
+
+        if (Objects.equals(ChuanYunConstant.DEFAULT_WORK_GROUP, objectId)) {
+            ChuanyunWorkGroupDO workGroupDO = new ChuanyunWorkGroupDO();
+            workGroupDO.setWorkGroupName(ChuanYunConstant.DEFAULT_WORK_GROUP_NAME);
+            workGroupDO.setSubWorkGroup(ChuanYunConstant.DEFAULT_WORK_GROUP_NAME);
+            workGroupDO.setObjectId(objectId);
+            return workGroupDO;
+        }
+
+        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = null;
+        try {
+            objectChuanyunFindBizDTO = chuanYunManager.find(ChuanyunWorkGroupDO.SCHEMA_CODE, objectId);
+        } catch (Exception e) {
+            log.error("查询异常: {}", e.toString());
+            return null;
+        }
         if (!Objects.isNull(objectChuanyunFindBizDTO)) {
             ChuanyunFindBizReturnData<Object> returnData = objectChuanyunFindBizDTO.getReturnData();
             if (objectChuanyunFindBizDTO.getSuccessful() && !Objects.isNull(returnData)) {
@@ -385,13 +400,7 @@ public class WorkGroupServiceImpl implements WorkGroupService {
                 }
             }
         }
-        if (Objects.equals(ChuanYunConstant.DEFAULT_WORK_GROUP, objectId)) {
-            ChuanyunWorkGroupDO workGroupDO = new ChuanyunWorkGroupDO();
-            workGroupDO.setWorkGroupName(ChuanYunConstant.DEFAULT_WORK_GROUP_NAME);
-            workGroupDO.setSubWorkGroup(ChuanYunConstant.DEFAULT_WORK_GROUP_NAME);
-            workGroupDO.setObjectId(objectId);
-            return workGroupDO;
-        }
+
         log.warn("无该工作组");
         return null;
     }
@@ -403,8 +412,9 @@ public class WorkGroupServiceImpl implements WorkGroupService {
         ChuanyunFindAllBizDTO<Object> response = null;
         try {
             response = chuanYunManager.findAll(ChuanyunWorkGroupDO.SCHEMA_CODE, filter);
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
+        } catch (Exception e) {
+            log.error("查询异常: {}", e.toString());
+            return null;
         }
         if (!Objects.isNull(response)) {
             ChuanyunFindAllBizReturnData<Object> returnData = response.getReturnData();
@@ -424,7 +434,13 @@ public class WorkGroupServiceImpl implements WorkGroupService {
 
     @Override
     public ChuanyunHistoryWorkGroupDO findInHistoryByObjectId(String objectId) {
-        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = chuanYunManager.find(ChuanyunHistoryWorkGroupDO.SCHEMA_CODE, objectId);
+        ChuanyunFindBizDTO<Object> objectChuanyunFindBizDTO = null;
+        try {
+            objectChuanyunFindBizDTO = chuanYunManager.find(ChuanyunHistoryWorkGroupDO.SCHEMA_CODE, objectId);
+        } catch (Exception e) {
+            log.error("查询异常: {}", e.toString());
+            return null;
+        }
         if (!Objects.isNull(objectChuanyunFindBizDTO)) {
             ChuanyunFindBizReturnData<Object> returnData = objectChuanyunFindBizDTO.getReturnData();
             if (objectChuanyunFindBizDTO.getSuccessful() && !Objects.isNull(returnData)) {
@@ -452,7 +468,6 @@ public class WorkGroupServiceImpl implements WorkGroupService {
     public void implAllCost() {
         // 查询立项表中数据
         List<ChuanyunBuildProject> buildProjectList = findAll();
-        ObjectMapper objectMapper = new ObjectMapper();
         // 查询组织架构录入
         final Object monitor = new Object();
         buildProjectList.parallelStream().forEach(chuanyunBuildProject -> {
@@ -544,119 +559,87 @@ public class WorkGroupServiceImpl implements WorkGroupService {
 
                         Set<LocalDate> collections = CollectionsUtils.mergeCollections(localDates1, localDates2);
                         Set<LocalDate> mergeCollections = CollectionsUtils.mergeCollections(collections, localDates3);
-
                         mergeCollections.forEach(localDate -> {
+                            // 判断日期是否为8月份之前的数据
                             List<ChuanyunReimbursementDO> reimbursementList = reimbursementMap.getOrDefault(localDate, Collections.emptyList());
                             List<ChuanyunSelfWorkHourDO> selfWorkHourList = workHoursMap.getOrDefault(localDate, Collections.emptyList());
                             List<ChuanyunMonthLaborCostWgDTO> laborCostWgList = laborCostMap.getOrDefault(localDate, Collections.emptyList());
+                            if (!localDate.isBefore(LocalDate.of(2022, 8, 1))) {
+                                Map<String, List<ChuanyunReimbursementDO>> workGroupIdReimbursementMap = reimbursementList.stream().collect(Collectors.groupingBy(chuanyunReimbursementDO -> {
+                                    if (Objects.isNull(chuanyunReimbursementDO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunReimbursementDO.getWorkGroupId())) {
+                                        return ChuanYunConstant.DEFAULT_WORK_GROUP;
+                                    } else {
+                                        return chuanyunReimbursementDO.getWorkGroupId();
+                                    }
+                                }));
+                                Map<String, List<ChuanyunSelfWorkHourDO>> workGroupIdSelfWorkHourMap = selfWorkHourList.stream().collect(Collectors.groupingBy(chuanyunSelfWorkHourDO -> {
+                                    if (Objects.isNull(chuanyunSelfWorkHourDO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunSelfWorkHourDO.getWorkGroupId())) {
+                                        return ChuanYunConstant.DEFAULT_WORK_GROUP;
+                                    } else {
+                                        return chuanyunSelfWorkHourDO.getWorkGroupId();
+                                    }
+                                }));
+                                Map<String, List<ChuanyunMonthLaborCostWgDTO>> workGroupIdLaborCostMap = laborCostWgList.stream().collect(Collectors.groupingBy(chuanyunMonthLaborCostWgDTO -> {
+                                    if (Objects.isNull(chuanyunMonthLaborCostWgDTO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunMonthLaborCostWgDTO.getWorkGroupId())) {
+                                        return ChuanYunConstant.DEFAULT_WORK_GROUP;
+                                    } else {
+                                        return chuanyunMonthLaborCostWgDTO.getWorkGroupId();
+                                    }
+                                }));
 
-                            Map<String, List<ChuanyunReimbursementDO>> workGroupIdReimbursementMap = reimbursementList.stream().collect(Collectors.groupingBy(chuanyunReimbursementDO -> {
-                                if (Objects.isNull(chuanyunReimbursementDO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunReimbursementDO.getWorkGroupId())) {
-                                    return ChuanYunConstant.DEFAULT_WORK_GROUP;
-                                } else {
-                                    return chuanyunReimbursementDO.getWorkGroupId();
-                                }
-                            }));
-                            Map<String, List<ChuanyunSelfWorkHourDO>> workGroupIdSelfWorkHourMap = selfWorkHourList.stream().collect(Collectors.groupingBy(chuanyunSelfWorkHourDO -> {
-                                if (Objects.isNull(chuanyunSelfWorkHourDO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunSelfWorkHourDO.getWorkGroupId())) {
-                                    return ChuanYunConstant.DEFAULT_WORK_GROUP;
-                                } else {
-                                    return chuanyunSelfWorkHourDO.getWorkGroupId();
-                                }
-                            }));
-                            Map<String, List<ChuanyunMonthLaborCostWgDTO>> workGroupIdLaborCostMap = laborCostWgList.stream().collect(Collectors.groupingBy(chuanyunMonthLaborCostWgDTO -> {
-                                if (Objects.isNull(chuanyunMonthLaborCostWgDTO.getWorkGroupId()) || !StringUtils.hasLength(chuanyunMonthLaborCostWgDTO.getWorkGroupId())) {
-                                    return ChuanYunConstant.DEFAULT_WORK_GROUP;
-                                } else {
-                                    return chuanyunMonthLaborCostWgDTO.getWorkGroupId();
-                                }
-                            }));
-
-                            Set<String> workGroup1 = workGroupIdReimbursementMap.keySet();
-                            Set<String> workGroup2 = workGroupIdSelfWorkHourMap.keySet();
-                            Set<String> workGroup3 = workGroupIdLaborCostMap.keySet();
-
+                                Set<String> workGroup1 = workGroupIdReimbursementMap.keySet();
+                                Set<String> workGroup2 = workGroupIdSelfWorkHourMap.keySet();
+                                Set<String> workGroup3 = workGroupIdLaborCostMap.keySet();
 
-                            Set<String> workGroupMergeCollections = CollectionsUtils.mergeStringCollections(workGroup1, workGroup2, workGroup3);
-                            // 避免默认工作与实际工作组数据重复,可能会存在历史数据没有工作组,后面标准化的时候又补充了工作组信息。
-                            workGroupMergeCollections.add(ChuanYunConstant.DEFAULT_WORK_GROUP);
 
-                            workGroupMergeCollections.forEach(workGroupId -> {
-                                List<ChuanyunReimbursementDO> reimbursementDOList = workGroupIdReimbursementMap.getOrDefault(workGroupId, Collections.emptyList());
-                                List<ChuanyunSelfWorkHourDO> selfWorkHourDOS = workGroupIdSelfWorkHourMap.getOrDefault(workGroupId, Collections.emptyList());
-                                List<ChuanyunMonthLaborCostWgDTO> monthLaborCostWgDTOS = workGroupIdLaborCostMap.getOrDefault(workGroupId, Collections.emptyList());
+                                Set<String> workGroupMergeCollections = CollectionsUtils.mergeStringCollections(workGroup1, workGroup2, workGroup3);
+                                // 避免默认工作与实际工作组数据重复,可能会存在历史数据没有工作组,后面标准化的时候又补充了工作组信息。
+                                workGroupMergeCollections.add(ChuanYunConstant.DEFAULT_WORK_GROUP);
 
-                                BigDecimal totalReimbursement;
-                                BigDecimal totalManDay;
-                                BigDecimal totalLaborCost;
+                                workGroupMergeCollections.forEach(workGroupId -> {
+                                    List<ChuanyunReimbursementDO> reimbursementDOList = workGroupIdReimbursementMap.getOrDefault(workGroupId, Collections.emptyList());
+                                    List<ChuanyunSelfWorkHourDO> selfWorkHourDOS = workGroupIdSelfWorkHourMap.getOrDefault(workGroupId, Collections.emptyList());
+                                    List<ChuanyunMonthLaborCostWgDTO> monthLaborCostWgDTOS = workGroupIdLaborCostMap.getOrDefault(workGroupId, Collections.emptyList());
 
-                                if (reimbursementDOList.isEmpty()) {
-                                    totalReimbursement = new BigDecimal("0.00");
-                                } else {
-                                    totalReimbursement = reimbursementDOList.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                }
+                                    BigDecimal totalReimbursement;
+                                    BigDecimal totalManDay;
+                                    BigDecimal totalLaborCost;
 
-                                if (selfWorkHourDOS.isEmpty()) {
-                                    totalManDay = new BigDecimal("0.00");
-                                } else {
-                                    BigDecimal totalWorkHours = selfWorkHourDOS.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                    totalManDay = totalWorkHours.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
-                                }
-
-                                if (monthLaborCostWgDTOS.isEmpty()) {
-                                    totalLaborCost = new BigDecimal("0.00");
-                                } else {
-                                    totalLaborCost = monthLaborCostWgDTOS.stream().map(ChuanyunMonthLaborCostWgDTO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                }
-
-                                ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroupAndLocalDate(groupProjectObjectId, groupProjectCode, workGroupId, localDate.atStartOfDay());
-                                if (!Objects.isNull(old)) {
-                                    BigDecimal oldImplCost = old.getImplCost();
-                                    BigDecimal oldManDay = old.getManDay();
-                                    BigDecimal oldLaborCost = old.getLaborCost();
-                                    if (Objects.isNull(old.getLocalDate()) ||
-                                            Objects.isNull(oldImplCost) ||
-                                            Objects.isNull(oldManDay) ||
-                                            Objects.isNull(oldLaborCost) ||
-                                            oldImplCost.compareTo(totalReimbursement) != 0 ||
-                                            oldManDay.compareTo(totalManDay) != 0 || oldLaborCost.compareTo(totalLaborCost) != 0) {
-                                        old.setImplCost(totalReimbursement);
-                                        old.setManDay(totalManDay);
-                                        old.setLaborCost(totalLaborCost);
-                                        if (!StringUtils.hasLength(old.getOwnerId()) && !Objects.isNull(chuanyunGroupProjectDO.getEbgProjectManagerObject())) {
-                                            old.setOwnerId(chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId());
-                                        }
-                                        implCostDao.saveAndFlush(old);
+                                    if (reimbursementDOList.isEmpty()) {
+                                        totalReimbursement = new BigDecimal("0.00");
+                                    } else {
+                                        totalReimbursement = reimbursementDOList.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
                                     }
-                                } else {
-                                    // 判断默认工作组数据
-                                    String defaultWorkGroupName = ChuanYunConstant.DEFAULT_WORK_GROUP_NAME;
-                                    ChuanyunWorkGroupDO workGroupDO = this.findByObjectId(workGroupId);
-                                    if (!Objects.isNull(workGroupDO)) {
-                                        defaultWorkGroupName = workGroupDO.getWorkGroupName();
+
+                                    if (selfWorkHourDOS.isEmpty()) {
+                                        totalManDay = new BigDecimal("0.00");
                                     } else {
-                                        ChuanyunHistoryWorkGroupDO historyWorkGroupDO = this.findInHistoryByObjectId(workGroupId);
-                                        if (!Objects.isNull(historyWorkGroupDO)) {
-                                            defaultWorkGroupName = historyWorkGroupDO.getWorkGroupName();
-                                        }
+                                        BigDecimal totalWorkHours = selfWorkHourDOS.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                        totalManDay = totalWorkHours.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
                                     }
-                                    ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
-                                    chuanyunImplCostDO.setProjectId(chuanyunGroupProjectDO.getObjectId());
-                                    chuanyunImplCostDO.setProjectCode(groupProjectCode);
-                                    chuanyunImplCostDO.setLocalDate(localDate.atStartOfDay());
-                                    chuanyunImplCostDO.setWorkGroup(workGroupId);
-                                    chuanyunImplCostDO.setWorkGroupName(defaultWorkGroupName);
-                                    chuanyunImplCostDO.setImplCost(totalReimbursement);
-                                    chuanyunImplCostDO.setManDay(totalManDay);
-                                    chuanyunImplCostDO.setLaborCost(totalLaborCost);
-                                    if (!Objects.isNull(chuanyunGroupProjectDO.getEbgProjectManagerObject())) {
 
-                                        chuanyunImplCostDO.setOwnerId(chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId());
+                                    if (monthLaborCostWgDTOS.isEmpty()) {
+                                        totalLaborCost = new BigDecimal("0.00");
+                                    } else {
+                                        totalLaborCost = monthLaborCostWgDTOS.stream().map(ChuanyunMonthLaborCostWgDTO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
                                     }
-                                    implCostDao.saveAndFlush(chuanyunImplCostDO);
-                                }
 
-                            });
+                                    ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroupAndLocalDate(groupProjectObjectId, groupProjectCode, workGroupId, localDate.atStartOfDay());
+                                    checkDataChange(chuanyunGroupProjectDO, groupProjectCode, localDate, workGroupId, totalReimbursement, totalManDay, totalLaborCost, old);
+
+                                });
+                            } else {
+                                // 为2022年8月之前的数据,数据汇总到一个组内
+                                BigDecimal totalReimbursement = reimbursementList.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                BigDecimal totalWorkHours = selfWorkHourList.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                BigDecimal totalManDay = totalWorkHours.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
+                                BigDecimal totalLaborCost = laborCostWgList.stream().map(ChuanyunMonthLaborCostWgDTO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                // 统一汇总到默认组内
+                                String workGroupId = ChuanYunConstant.DEFAULT_WORK_GROUP;
+                                ChuanyunImplCostDO old = implCostDao.findByProjectCodeAndWorkGroupAndLocalDate(groupProjectCode, workGroupId, localDate.atStartOfDay());
+                                checkDataChange(chuanyunGroupProjectDO, groupProjectCode, localDate, workGroupId, totalReimbursement, totalManDay, totalLaborCost, old);
+
+                            }
 
                         });
 
@@ -672,4 +655,53 @@ public class WorkGroupServiceImpl implements WorkGroupService {
 
     }
 
+    private void checkDataChange(ChuanyunGroupProjectDO chuanyunGroupProjectDO, String groupProjectCode, LocalDate localDate, String workGroupId, BigDecimal totalReimbursement, BigDecimal totalManDay, BigDecimal totalLaborCost, ChuanyunImplCostDO old) {
+        if (!Objects.isNull(old)) {
+            BigDecimal oldImplCost = old.getImplCost();
+            BigDecimal oldManDay = old.getManDay();
+            BigDecimal oldLaborCost = old.getLaborCost();
+            if (Objects.isNull(old.getLocalDate()) ||
+                    Objects.isNull(oldImplCost) ||
+                    Objects.isNull(oldManDay) ||
+                    Objects.isNull(oldLaborCost) ||
+                    oldImplCost.compareTo(totalReimbursement) != 0 ||
+                    oldManDay.compareTo(totalManDay) != 0 || oldLaborCost.compareTo(totalLaborCost) != 0) {
+                old.setImplCost(totalReimbursement);
+                old.setManDay(totalManDay);
+                old.setLaborCost(totalLaborCost);
+                if (!StringUtils.hasLength(old.getOwnerId()) && !Objects.isNull(chuanyunGroupProjectDO.getEbgProjectManagerObject())) {
+                    old.setOwnerId(chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId());
+                }
+                log.info("工作组数据发生变化更新数据 oldImplCost: {}, oldManDay: {}, oldLaborCost: {}, newImplCost: {}, newManDay: {}, newLaborCost: {}", oldImplCost, oldManDay, oldLaborCost, totalReimbursement, totalManDay, totalLaborCost);
+                implCostDao.saveAndFlush(old);
+            }
+        } else {
+            // 判断默认工作组数据
+            String defaultWorkGroupName = ChuanYunConstant.DEFAULT_WORK_GROUP_NAME;
+            ChuanyunWorkGroupDO workGroupDO = this.findByObjectId(workGroupId);
+            if (!Objects.isNull(workGroupDO)) {
+                defaultWorkGroupName = workGroupDO.getWorkGroupName();
+            } else {
+                ChuanyunHistoryWorkGroupDO historyWorkGroupDO = this.findInHistoryByObjectId(workGroupId);
+                if (!Objects.isNull(historyWorkGroupDO)) {
+                    defaultWorkGroupName = historyWorkGroupDO.getWorkGroupName();
+                }
+            }
+            ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
+            chuanyunImplCostDO.setProjectId(chuanyunGroupProjectDO.getObjectId());
+            chuanyunImplCostDO.setProjectCode(groupProjectCode);
+            chuanyunImplCostDO.setLocalDate(localDate.atStartOfDay());
+            chuanyunImplCostDO.setWorkGroup(workGroupId);
+            chuanyunImplCostDO.setWorkGroupName(defaultWorkGroupName);
+            chuanyunImplCostDO.setImplCost(totalReimbursement);
+            chuanyunImplCostDO.setManDay(totalManDay);
+            chuanyunImplCostDO.setLaborCost(totalLaborCost);
+            if (!Objects.isNull(chuanyunGroupProjectDO.getEbgProjectManagerObject())) {
+
+                chuanyunImplCostDO.setOwnerId(chuanyunGroupProjectDO.getEbgProjectManagerObject().getObjectId());
+            }
+            implCostDao.saveAndFlush(chuanyunImplCostDO);
+        }
+    }
+
 }

+ 47 - 121
src/main/java/com/galaxis/manatee/task/U9InfoTask.java

@@ -15,7 +15,7 @@ import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.manager.ClawFeign;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
-import com.galaxis.manatee.util.TimeUtil;
+import com.github.pagehelper.PageInfo;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -600,136 +600,61 @@ public class U9InfoTask {
         saveDbLaborCostWg();
     }
 
-    /**
-     * 新增项目工作组人力成本
-     */
-    private void saveLaborCostWg() {
-        log.info("开始更新项目工作组人力成本");
-        var objectMapper = new ObjectMapper();
-        var page = 1;
-        var size = 20;
-        var flag = true;
-        while (flag) {
-            Map<String, String> map = new HashMap<>(1);
-            map.put("page", String.valueOf(page));
-            map.put("size", String.valueOf(size));
-            //获取物料成本
-            PageDTO<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
-            if (page <= pageInfo.getTotalPages()) {
-                page += 1;
-            } else {
-                flag = false;
-                break;
-            }
-            List<ChuanyunLaborCostWgDTO> list = pageInfo.getContent();
-            list.parallelStream().forEach(laborCostWgDTO -> {
-                try {
-                    if (!Objects.isNull(laborCostWgDTO)) {
-                        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
-                        String newDate = dateTimeFormatter.format(laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod());
-                        LocalDateTime dt = LocalDateTime.parse(newDate, dateTimeFormatter);
-                        laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().setPeriod(dt);
-                        String[] department = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment().split("/");
-
-                        LaborCostWgDTO costWgDTO = new LaborCostWgDTO(laborCostWgDTO);
-                        if (department.length > 1 && (department[1].equals("EBG") || department[1].equals("IBG"))) {
-                            costWgDTO.setBg(department[1]);
-                        }
-                        costWgDTO.setDataType("U9");
-                        var purcostString = objectMapper.writeValueAsString(costWgDTO);
-                        log.info(purcostString);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        //根据项目号判断是否存在
-                        List<String> matchers = new ArrayList<>();
-                        matchers.add("F0000005_2," + laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode());
-                        matchers.add("F0000002_2," + TimeUtil.formatDateTime(laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod()));
-                        if (StringUtils.hasLength(laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment())) {
-                            matchers.add("F0000018_2," + laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment());
-                        }
-                        var filter = Filter.instance(0, 1, true, "And", matchers);
-                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, filter);
-                        if (chuanyunFindAllResponse.getReturnData() == null) {
-                            //新增
-                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, purcostString, true);
-                            log.info("工作组人力成本新增成功");
-                        } else {
-                            List<ChuanyunMonthLaborCostWgDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            if (result.size() == 1) {
-//                                result.forEach(chuanyunMonthLaborCostWgDO -> chuanYunManager.delete(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, chuanyunMonthLaborCostWgDO.getObjectId()));
-//                                chuanyunSaveDTO = chuanYunManager.save(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, purcostString, true);
-//                                log.info("工作组人力成本删除并新增成功");
-                                ChuanyunMonthLaborCostWgDO chuanyunMonthLaborCostWgDO = result.get(0);
-                                //更新
-                                if (chuanyunMonthLaborCostWgDO.getAmount().compareTo(laborCostWgDTO.getCostamount()) != 0) {
-                                    chuanyunSaveDTO = chuanYunManager.update(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, chuanyunMonthLaborCostWgDO.getObjectId(), purcostString);
-                                    log.info("工作组人力成本更新成功");
-                                }
-                            } else if (result.size() > 1) {
-                                result.forEach(chuanyunMonthLaborCostWgDO -> chuanYunManager.delete(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, chuanyunMonthLaborCostWgDO.getObjectId()));
-                                chuanyunSaveDTO = chuanYunManager.save(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, purcostString, true);
-                                log.info("工作组人力成本删除并新增成功");
-                            }
-                        }
-                    }
-                } catch (JsonProcessingException | BigSizeException e) {
-                    e.printStackTrace();
-                }
-            });
-        }
-    }
 
     /**
      * 新增项目工作组人力成本
      */
     private void saveDbLaborCostWg() {
+        chuanyunMonthLaborCostWgDao.deleteAllInBatch();
         log.info("开始保存项目工作组人力成本");
         var page = 1;
-        var size = 200;
+        var size = 100;
         var flag = true;
         while (flag) {
             Map<String, String> map = new HashMap<>(1);
             map.put("page", String.valueOf(page));
             map.put("size", String.valueOf(size));
             //获取物料成本
-            PageDTO<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
-            if (page <= pageInfo.getTotalPages()) {
+            PageInfo<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
+            if (page <= pageInfo.getPages()) {
                 page += 1;
             } else {
                 flag = false;
                 break;
             }
-            List<ChuanyunLaborCostWgDTO> list = pageInfo.getContent();
+            List<ChuanyunLaborCostWgDTO> list = pageInfo.getList();
             list.forEach(laborCostWgDTO -> {
                 if (!Objects.isNull(laborCostWgDTO)) {
                     // 保存至数据库
                     // 查询数据库比较数据
-                    String projectCode = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode();
-                    LocalDateTime time = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod();
-                    String department = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment();
-                    String workGroupId = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupid();
-                    List<ChuanyunMonthLaborCostWgDTO> laborCostWg = chuanyunMonthLaborCostWgDao.findAllByProjectCodeAndLogDateAndWorkGroupIdAndDepartment(projectCode, time, workGroupId, department);
-
-                    if (laborCostWg.isEmpty()) {
-                        //新增
-                        SaveMonthLaborCostWg(laborCostWgDTO, projectCode, time, workGroupId, department);
-                    } else {
-                        if (laborCostWg.size() > 1) {
-                            chuanyunMonthLaborCostWgDao.deleteAll(laborCostWg);
-                            //新增
-                            SaveMonthLaborCostWg(laborCostWgDTO, projectCode, time, workGroupId, department);
-                        } else if (laborCostWg.size() == 1) {
-                            Optional<ChuanyunMonthLaborCostWgDTO> first = laborCostWg.stream().findFirst();
-                            ChuanyunMonthLaborCostWgDTO chuanyunMonthLaborCostWgDTO = first.get();
-                            BigDecimal amount = chuanyunMonthLaborCostWgDTO.getAmount();
-                            BigDecimal costAmount = laborCostWgDTO.getCostamount();
-                            if (amount.compareTo(costAmount) != 0) {
-                                chuanyunMonthLaborCostWgDTO.setAmount(amount);
-                                chuanyunMonthLaborCostWgDao.save(chuanyunMonthLaborCostWgDTO);
-                                log.info("人力成本发生变化,更新人力成本: {}", chuanyunMonthLaborCostWgDTO);
-                            }
-                        }
-                    }
+                    String projectCode = laborCostWgDTO.getProjectcode();
+                    LocalDateTime time = laborCostWgDTO.getPeriod();
+                    String department = laborCostWgDTO.getDepartment();
+                    String workGroupId = laborCostWgDTO.getWorkgroupid();
+                    // @fixme 避免默认工作组相同项目号相同时间相同部门数据相互影响,所以直接删除全表数据,重新全部保存。
+                    SaveMonthLaborCostWg(laborCostWgDTO, projectCode, time, workGroupId, department);
+//                    List<ChuanyunMonthLaborCostWgDTO> laborCostWg = chuanyunMonthLaborCostWgDao.findAllByProjectCodeAndLogDateAndWorkGroupIdAndDepartment(projectCode, time, workGroupId, department);
+//
+//                    if (laborCostWg.isEmpty()) {
+//                        //新增
+//                        SaveMonthLaborCostWg(laborCostWgDTO, projectCode, time, workGroupId, department);
+//                    } else {
+//                        if (laborCostWg.size() > 1) {
+//                            chuanyunMonthLaborCostWgDao.deleteAll(laborCostWg);
+//                            //新增
+//                            SaveMonthLaborCostWg(laborCostWgDTO, projectCode, time, workGroupId, department);
+//                        } else if (laborCostWg.size() == 1) {
+//                            Optional<ChuanyunMonthLaborCostWgDTO> first = laborCostWg.stream().findFirst();
+//                            ChuanyunMonthLaborCostWgDTO chuanyunMonthLaborCostWgDTO = first.get();
+//                            BigDecimal amount = chuanyunMonthLaborCostWgDTO.getAmount();
+//                            BigDecimal costAmount = laborCostWgDTO.getCostamount();
+//                            if (amount.compareTo(costAmount) != 0) {
+//                                chuanyunMonthLaborCostWgDTO.setAmount(amount);
+//                                chuanyunMonthLaborCostWgDao.save(chuanyunMonthLaborCostWgDTO);
+//                                log.info("人力成本发生变化,更新人力成本: {}", chuanyunMonthLaborCostWgDTO);
+//                            }
+//                        }
+//                    }
                 }
 
             });
@@ -740,9 +665,10 @@ public class U9InfoTask {
     private void SaveMonthLaborCostWg(ChuanyunLaborCostWgDTO laborCostWgDTO, String projectCode, LocalDateTime time, String workGroupId, String department) {
         ChuanyunMonthLaborCostWgDTO monthLaborCostWgDTO = new ChuanyunMonthLaborCostWgDTO();
         monthLaborCostWgDTO.setProjectCode(projectCode);
+        monthLaborCostWgDTO.setProjectId(laborCostWgDTO.getProjectid());
         monthLaborCostWgDTO.setWorkGroupId(workGroupId);
-        monthLaborCostWgDTO.setWorkGroupName(laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupname());
-        monthLaborCostWgDTO.setAmount(laborCostWgDTO.getCostamount());
+        monthLaborCostWgDTO.setWorkGroupName(laborCostWgDTO.getWorkgroupname());
+        monthLaborCostWgDTO.setAmount(laborCostWgDTO.getCostamount() == null ? new BigDecimal("0.00") : laborCostWgDTO.getCostamount());
         monthLaborCostWgDTO.setLogDate(time);
         monthLaborCostWgDTO.setDepartment(department);
         monthLaborCostWgDTO.setDataType("U9");
@@ -1030,21 +956,21 @@ public class U9InfoTask {
                 if (null != chuanyunMonthLaborCostWgDTO.getCostamount()) {
                     this.amount = chuanyunMonthLaborCostWgDTO.getCostamount();
                 }
-                if (null != chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode()) {
-                    this.projectCode = chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode();
+                if (null != chuanyunMonthLaborCostWgDTO.getProjectcode()) {
+                    this.projectCode = chuanyunMonthLaborCostWgDTO.getProjectcode();
                 }
-                if (null != chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod()) {
-                    this.logDate = chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod();
+                if (null != chuanyunMonthLaborCostWgDTO.getPeriod()) {
+                    this.logDate = chuanyunMonthLaborCostWgDTO.getPeriod();
                 }
-                if (null != chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment()) {
-                    this.departmentName = chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment();
+                if (null != chuanyunMonthLaborCostWgDTO.getDepartment()) {
+                    this.departmentName = chuanyunMonthLaborCostWgDTO.getDepartment();
                 }
-                if (!Objects.isNull(chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupid())) {
-                    this.workGroupId = chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupid();
+                if (!Objects.isNull(chuanyunMonthLaborCostWgDTO.getWorkgroupid())) {
+                    this.workGroupId = chuanyunMonthLaborCostWgDTO.getWorkgroupid();
                 }
 
-                if (!Objects.isNull(chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupname())) {
-                    this.workGroupName = chuanyunMonthLaborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupname();
+                if (!Objects.isNull(chuanyunMonthLaborCostWgDTO.getWorkgroupname())) {
+                    this.workGroupName = chuanyunMonthLaborCostWgDTO.getWorkgroupname();
                 }
 
             }

+ 2 - 2
src/main/resources/application.yml

@@ -50,9 +50,9 @@ spring:
         size: 500
       thread-name-prefix: scheduled-task-
   datasource:
-    url: jdbc:mysql://10.2.5.35:3306/manatee?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://10.1.6.49:3306/manatee?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
     username: root
-    password: j$%rW-GRu$H#pj%V2M-B
+    password: root
     hikari:
       maximum-pool-size: 128
   jpa:

BIN
src/test/.DS_Store


+ 0 - 65
src/test/java/com/galaxis/manatee/Test/GroupProjectTest.java

@@ -1,65 +0,0 @@
-package com.galaxis.manatee.Test;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-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.ChuanyunFindAllBizDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.Filter;
-import com.galaxis.manatee.manager.ChuanYunManager;
-import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.List;
-import java.util.Objects;
-
-@SpringBootTest
-public class GroupProjectTest {
-
-    @Autowired
-    private ChuanyunBasicDataScheduledTask basicDataScheduledTask;
-
-    @Autowired
-    private ChuanYunManager chuanYunManager;
-
-    @Autowired
-    private ChuanyunGroupProjectDao chuanyunGroupProjectDao;
-
-    @Test
-    public void saveGroupProject() {
-        basicDataScheduledTask.getGroupProjectManually();
-    }
-
-    @Test
-    public void getGroupProject() {
-        ObjectMapper objectMapper = new ObjectMapper();
-        //从氚云查询数据
-        var filter = Filter.instance(0, 20, true);
-        ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
-        try {
-            chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE, filter);
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        }
-        if (!Objects.isNull(chuanyunFindAllResponse)) {
-            //转化为POJO
-            List<ChuanyunGroupProjectDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-            });
-            //保存
-            result.forEach(chuanyunGroupProjectDO -> {
-                var tmpGroupProjectDO = chuanyunGroupProjectDao.findById(chuanyunGroupProjectDO.getObjectId());
-                tmpGroupProjectDO.ifPresent(projectDO -> {
-                    chuanyunGroupProjectDO.setIsCreate(projectDO.getIsCreate());
-                    chuanyunGroupProjectDao.delete(tmpGroupProjectDO.get());
-                });
-                chuanyunGroupProjectDao.save(chuanyunGroupProjectDO);
-            });
-        }
-
-
-    }
-
-}

+ 0 - 30
src/test/java/com/galaxis/manatee/Test/U9Test.java

@@ -1,30 +0,0 @@
-package com.galaxis.manatee.Test;
-
-
-import com.galaxis.manatee.capsule.dto.PageDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunLaborCostWgDTO;
-import com.galaxis.manatee.manager.ClawFeign;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@SpringBootTest
-public class U9Test {
-
-    @Autowired
-    private ClawFeign clawFeign;
-
-    @Test
-    void test1() {
-
-        Map<String, String> map = new HashMap<>(1);
-        map.put("page", String.valueOf(1));
-        map.put("size", String.valueOf(20));
-        //获取物料成本
-        //@TODO这个方法找不到实现,代码可能未提交
-        PageDTO<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
-    }
-}

+ 0 - 608
src/test/java/com/galaxis/manatee/Test/WorkGroupTest.java

@@ -1,608 +0,0 @@
-package com.galaxis.manatee.Test;
-
-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.dao.ChuanyunSelfWorkHourDao;
-import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.*;
-import com.galaxis.manatee.exception.BigSizeException;
-import com.galaxis.manatee.manager.ChuanYunManager;
-import com.galaxis.manatee.service.WorkGroupService;
-import com.galaxis.manatee.task.ChuanyunFinancialScheduledTask;
-import com.galaxis.manatee.task.U9InfoTask;
-import com.galaxis.manatee.util.CollectionsUtils;
-import com.galaxis.manatee.util.TimeUtil;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Slf4j
-@SpringBootTest
-public class WorkGroupTest {
-
-    @Autowired
-    private WorkGroupService workGroupService;
-    @Autowired
-    private ChuanYunManager chuanYunManager;
-    @Autowired
-    private ChuanyunFinancialScheduledTask financialScheduledTask;
-
-    @Autowired
-    private ChuanyunImplCostDao implCostDao;
-
-    @Autowired
-    private ChuanyunReimbursementDao reimbursementDao;
-
-    @Autowired
-    private ChuanyunSelfWorkHourDao selfWorkHourDao;
-
-    @Autowired
-    private U9InfoTask infoTask;
-
-
-    @Test
-    public void findTest() {
-        boolean flag = true;
-        List<String> m = List.of("status_2,1", "F0000003_2,D21389");
-        Filter filter = Filter.instance(0, 10, true, Filter.AND, m);
-        ChuanyunFindAllBizDTO<ChuanyunBuildProject> buildResponse = null;
-        try {
-            buildResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, filter);
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        }
-
-        if (buildResponse == null || !buildResponse.getSuccessful()) {
-            flag = false;
-        }
-        ChuanyunFindAllBizReturnData<ChuanyunBuildProject> returnData = buildResponse.getReturnData();
-        if (returnData == null) {
-            flag = false;
-
-        }
-
-        List<ChuanyunBuildProject> bizObjectArray = returnData.getBizObjectArray();
-        ObjectMapper objectMapper = new ObjectMapper();
-        List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
-        });
-    }
-
-    @Test
-    public void findTest1() {
-        List<String> m = List.of("status_2,1", "F0000003_2,D21389");
-        Filter f = Filter.instance(0, 10, true, Filter.AND, m);
-
-        ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
-        try {
-            chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, f);
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        }
-        //保存
-        List<Object> buildBizObjectArray = chuanyunFindAllResponse.getReturnData().getBizObjectArray();
-        ObjectMapper objectMapper = new ObjectMapper();
-        List<ChuanyunBuildProject> bpList = objectMapper.convertValue(buildBizObjectArray, new TypeReference<>() {
-        });
-        final Object monitor = new Object();
-        bpList.forEach(chuanyunBuildProject -> {
-            synchronized (monitor) {
-                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");
-                            BigDecimal totalManDay = new BigDecimal("0.000");
-                            // 查询项目工作组人天
-                            for (String userId : userIdList) {
-                                // 查询用户在该项目的报销单
-                                List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
-                                BigDecimal totalReimburse = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                total = total.add(totalReimburse);
-                                List<ChuanyunSelfWorkHourDO> workHours = selfWorkHourDao.findAllByProjectIdAndUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of("1", "2"));
-                                BigDecimal totalWorkHour = workHours.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                // 人天
-                                BigDecimal manDay = totalWorkHour.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
-                                totalManDay = totalManDay.add(manDay);
-
-                            }
-                            // 统计工作组所有的工时
-                            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();
-                                BigDecimal oldManDay = old.getManDay();
-                                if (Objects.isNull(oldImplCost) || Objects.isNull(oldManDay) || oldImplCost.compareTo(total) != 0 || oldManDay.compareTo(totalManDay) != 0) {
-                                    old.setImplCost(total);
-                                    old.setManDay(totalManDay);
-                                    implCostDao.save(old);
-                                }
-                            } else {
-                                ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
-                                chuanyunImplCostDO.setProjectId(projectObjectId);
-                                chuanyunImplCostDO.setProjectCode(projectCode);
-                                chuanyunImplCostDO.setWorkGroup(workGroupId);
-                                chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
-                                chuanyunImplCostDO.setImplCost(total);
-                                chuanyunImplCostDO.setManDay(totalManDay);
-                                implCostDao.saveAndFlush(chuanyunImplCostDO);
-                            }
-                        }
-                    });
-
-                });
-            }
-        });
-
-
-    }
-
-    @Test
-    public void findOneTest() {
-
-        ChuanyunFindBizDTO<Object> buildResponse = null;
-
-        buildResponse = chuanYunManager.find(ChuanyunBuildProject.SCHEMA_CODE, "9cdcf0d7-c8db-41b5-a03c-4caf2a2eb1f8");
-
-        if (buildResponse == null || !buildResponse.getSuccessful()) {
-            return;
-        }
-        ChuanyunFindBizReturnData<Object> returnData = buildResponse.getReturnData();
-
-        Object bizObject = returnData.getBizObject();
-        ObjectMapper objectMapper = new ObjectMapper();
-        ChuanyunBuildProject chuanyunBuildProject = objectMapper.convertValue(bizObject, new TypeReference<>() {
-        });
-    }
-
-    @Test
-    public void reimburseTest() {
-        workGroupService.implCost();
-    }
-
-    @Test
-    public void pushToChuanyun() {
-        workGroupService.pushToChuanyun();
-    }
-
-    @Test
-    public void test1() {
-        infoTask.saveLaborCostWgTest();
-    }
-
-    @Test
-    public void workGroupMonthTest() {
-        // 查询立项表中数据
-        List<ChuanyunBuildProject> buildProjectList = findAll();
-        ObjectMapper objectMapper = new ObjectMapper();
-        // 查询组织架构录入
-        final Object monitor = new Object();
-        buildProjectList.parallelStream().forEach(chuanyunBuildProject -> {
-            synchronized (monitor) {
-                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();
-                            // 查询报销单
-                            // 查询项目工作组人天
-                            Map<LocalDate, List<ChuanyunReimbursementDO>> reimbursementMap = new HashMap<>();
-                            Map<LocalDate, List<ChuanyunSelfWorkHourDO>> workHoursMap = new HashMap<>();
-
-                            for (String userId : userIdList) {
-                                // 查询用户在该项目的报销单
-                                List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
-                                // 报销单按日期分组
-                                Map<LocalDate, List<ChuanyunReimbursementDO>> map1 = reimbursements.stream().collect(Collectors.groupingBy(chuanyunReimbursementDO -> LocalDate.of(chuanyunReimbursementDO.getBusinessDate().getYear(), chuanyunReimbursementDO.getBusinessDate().getMonthValue(), 1)));
-                                map1.forEach((localDate, chuanyunReimbursementDOS) -> {
-                                    boolean containsKey = reimbursementMap.containsKey(localDate);
-                                    if (containsKey) {
-                                        // 表示已经存在该key
-                                        List<ChuanyunReimbursementDO> reimbursementDOList = reimbursementMap.get(localDate);
-                                        reimbursementDOList.addAll(chuanyunReimbursementDOS);
-                                        reimbursementMap.put(localDate, reimbursementDOList);
-                                    } else {
-                                        reimbursementMap.put(localDate, chuanyunReimbursementDOS);
-                                    }
-                                });
-                                List<ChuanyunSelfWorkHourDO> workHours = selfWorkHourDao.findAllByProjectIdAndUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of("1", "2"));
-                                Map<LocalDate, List<ChuanyunSelfWorkHourDO>> map2 = workHours.stream().collect(Collectors.groupingBy(chuanyunSelfWorkHourDO -> LocalDate.of(chuanyunSelfWorkHourDO.getDayLogDate().getYear(), chuanyunSelfWorkHourDO.getDayLogDate().getMonthValue(), 1)));
-                                map2.forEach((localDate, chuanyunSelfWorkHourDOS) -> {
-                                    boolean containsKey = workHoursMap.containsKey(localDate);
-                                    if (containsKey) {
-                                        // 表示已经存在该key
-                                        List<ChuanyunSelfWorkHourDO> selfWorkHours = workHoursMap.get(localDate);
-                                        selfWorkHours.addAll(chuanyunSelfWorkHourDOS);
-                                        workHoursMap.put(localDate, selfWorkHours);
-                                    } else {
-                                        workHoursMap.put(localDate, chuanyunSelfWorkHourDOS);
-                                    }
-                                });
-                            }
-
-                            Set<LocalDate> localDates = reimbursementMap.keySet();
-                            Set<LocalDate> localDates1 = workHoursMap.keySet();
-                            Set<LocalDate> mergeCollections = CollectionsUtils.mergeCollections(localDates, localDates1);
-
-                            mergeCollections.forEach(localDate -> {
-                                BigDecimal totalReimbursement;
-                                BigDecimal totalManDay;
-                                List<ChuanyunReimbursementDO> reimbursements = reimbursementMap.getOrDefault(localDate, Collections.emptyList());
-                                if (reimbursements.isEmpty()) {
-                                    totalReimbursement = new BigDecimal("0.00");
-                                } else {
-                                    totalReimbursement = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                }
-                                List<ChuanyunSelfWorkHourDO> selfWorkHours = workHoursMap.getOrDefault(localDate, Collections.emptyList());
-                                if (selfWorkHours.isEmpty()) {
-                                    totalManDay = new BigDecimal("0.00");
-                                } else {
-                                    BigDecimal totalWorkHours = selfWorkHours.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                    totalManDay = totalWorkHours.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
-                                }
-                                // 统计工作组所有的工时
-                                String projectObjectId = chuanyunGroupProjectDO.getObjectId();
-                                String projectCode = chuanyunGroupProjectDO.getProjectCode();
-                                String workGroupId = chuanyunWorkGroupDO.getObjectId();
-
-                                ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroupAndLocalDate(projectObjectId, projectCode, workGroupId, localDate.atStartOfDay());
-                                if (!Objects.isNull(old)) {
-                                    BigDecimal oldImplCost = old.getImplCost();
-                                    BigDecimal oldManDay = old.getManDay();
-                                    if (Objects.isNull(old.getLocalDate())) {
-                                        old.setLocalDate(localDate.atStartOfDay());
-                                    }
-                                    if (Objects.isNull(oldImplCost) || Objects.isNull(oldManDay) || oldImplCost.compareTo(totalReimbursement) != 0 || oldManDay.compareTo(totalManDay) != 0) {
-                                        old.setImplCost(totalReimbursement);
-                                        old.setManDay(totalManDay);
-                                        implCostDao.saveAndFlush(old);
-                                    }
-                                } else {
-                                    ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
-                                    chuanyunImplCostDO.setProjectId(projectObjectId);
-                                    chuanyunImplCostDO.setProjectCode(projectCode);
-                                    chuanyunImplCostDO.setLocalDate(localDate.atStartOfDay());
-                                    chuanyunImplCostDO.setWorkGroup(workGroupId);
-                                    chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
-                                    chuanyunImplCostDO.setImplCost(totalReimbursement);
-                                    chuanyunImplCostDO.setManDay(totalManDay);
-                                    implCostDao.saveAndFlush(chuanyunImplCostDO);
-                                }
-
-                            });
-
-
-                        }
-                    });
-
-                });
-            }
-        });
-    }
-
-    @Test
-    public void pushToChuanyunTest() {
-        List<ChuanyunImplCostDO> all = implCostDao.findAll();
-        ObjectMapper objectMapper = new ObjectMapper();
-        all.forEach(implCostDO -> {
-            String projectId = implCostDO.getProjectId();
-            String projectCode = implCostDO.getProjectCode();
-            String workGroup = implCostDO.getWorkGroup();
-            LocalDateTime localDate = implCostDO.getLocalDate();
-            List<String> m = List.of("F0000001_2," + projectId, "F0000002_2," + projectCode, "F0000006_2," + workGroup, "F0000008_2," + localDate);
-            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 (Objects.isNull(chuanyunImplCostDO.getImplCost()) || Objects.isNull(chuanyunImplCostDO.getManDay()) ||
-                                chuanyunImplCostDO.getImplCost().compareTo(implCostDO.getImplCost()) != 0 ||
-                                chuanyunImplCostDO.getManDay().compareTo(implCostDO.getManDay()) != 0) {
-                            // 工作组实施费用发生变化
-                            log.info("更新项目工作组实施费用");
-                            ImplCostUpdateDTO implCostUpdateDTO = new ImplCostUpdateDTO(implCostDO.getImplCost(), implCostDO.getManDay());
-                            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("上传项目工作组实施费用完成");
-    }
-
-    @Test
-    public void delImplCostTest() {
-        ObjectMapper objectMapper = new ObjectMapper();
-        boolean flag = true;
-        int start = 0;
-        int pageSize = 200;
-        while (flag) {
-            Filter filter = Filter.instance(start, start + pageSize, true);
-            ChuanyunFindAllBizDTO<Object> delAll = null;
-            try {
-                delAll = chuanYunManager.findAll(ChuanyunImplCostDO.SCHEMA_CODE, filter);
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-            }
-            if (Objects.isNull(delAll) || delAll.getReturnData() == null || delAll.getReturnData().getBizObjectArray() == null) {
-                flag = false;
-                continue;
-            }
-            if (delAll.getReturnData().getTotalCount() >= start + pageSize) {
-                start += pageSize;
-            } else {
-                flag = false;
-            }
-
-            List<Object> bizObjectArray = delAll.getReturnData().getBizObjectArray();
-            List<ChuanyunImplCostDO> ic = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
-            });
-            ic.forEach(chuanyunImplCostDO -> {
-                ChuanyunSaveDTO delete = chuanYunManager.delete(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId());
-                log.info("删除: {}", delete.getSuccessful());
-            });
-
-        }
-    }
-
-    @Data
-    static class ImplCostUpdateDTO {
-        @JsonProperty("F0000004")
-        private BigDecimal implCost;
-
-        @JsonProperty("F0000007")
-        private BigDecimal manDay;
-
-        public ImplCostUpdateDTO(BigDecimal implCost, BigDecimal manDay) {
-            this.implCost = implCost;
-            this.manDay = manDay;
-
-        }
-    }
-
-
-    private List<ChuanyunBuildProject> findAll() {
-        ArrayList<ChuanyunBuildProject> buildProjects = new ArrayList<>();
-        ObjectMapper objectMapper = new ObjectMapper();
-        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();
-                List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
-                });
-                buildProjects.addAll(bpList);
-            } catch (Exception e) {
-                log.error(e.getMessage());
-                e.printStackTrace();
-            }
-
-        }
-        return buildProjects;
-    }
-
-
-    @Test
-    public void LocalDateTimeTest() {
-        LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
-
-    }
-
-    @Test
-    public void testFind() throws JsonProcessingException {
-        List<String> matchers = new ArrayList<>();
-        matchers.add("F0000005_2," + "AS20042");
-        matchers.add("F0000002_2," + TimeUtil.formatDateTime(LocalDateTime.of(2020, 5, 1, 0, 0, 0)));
-        matchers.add("F0000018_2," + "浙江凯乐士科技有限公司/项目交付/项目实施(集成项目交付)/项目实施/系统售后");
-        var filter = Filter.instance(0, 1, true, "And", matchers);
-        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, filter);
-
-    }
-
-    @Test
-    public void deleteAll() {
-        var objectMapper = new ObjectMapper();
-        var start = 0;
-        var totalCount = 0L;
-        var flag = true;
-        var pageSize = 100;
-
-        while (flag) {
-
-            //从氚云查询数据
-            var filter = Filter.instance(start, start + pageSize, true);
-            ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
-            try {
-                chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, filter);
-                if (chuanyunFindAllResponse.getReturnData() == null) {
-                    flag = false;
-                    continue;
-                }
-                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
-                    start += pageSize;
-                } else {
-                    flag = false;
-                }
-
-                List<ChuanyunMonthLaborCostWgDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                });
-                if (result.size() > 0) {
-                    result.forEach(chuanyunMonthLaborCostWgDO -> chuanYunManager.delete(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, chuanyunMonthLaborCostWgDO.getObjectId()));
-                }
-                log.info("完成");
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-
-    @Test
-    public void implCostTest() {
-        workGroupService.implAllCost();
-    }
-
-    @Test
-    public void push() {
-        workGroupService.pushToChuanyun();
-    }
-
-}

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/askLeaveTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.askLeave;
 
 import com.galaxis.manatee.dao.ChuanyunAskForLeaveDao;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAskForLeaveDO;

+ 561 - 92
src/test/java/com/galaxis/manatee/Test/implCost/WorkGroupImplCostTest.java

@@ -1,20 +1,26 @@
 package com.galaxis.manatee.Test.implCost;
 
-import com.galaxis.manatee.capsule.dto.PageDTO;
+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.constant.ChuanYunConstant;
 import com.galaxis.manatee.dao.ChuanyunImplCostDao;
 import com.galaxis.manatee.dao.ChuanyunMonthLaborCostWgDao;
 import com.galaxis.manatee.dao.ChuanyunReimbursementDao;
 import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunLaborCostWgDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunMonthLaborCostWgDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.manager.ClawFeign;
 import com.galaxis.manatee.service.GroupProjectService;
 import com.galaxis.manatee.service.ImplCostService;
 import com.galaxis.manatee.service.WorkGroupService;
+import com.galaxis.manatee.task.U9InfoTask;
 import com.galaxis.manatee.util.CollectionsUtils;
+import com.galaxis.manatee.util.TimeUtil;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,8 +45,9 @@ public class WorkGroupImplCostTest {
     private ChuanyunSelfWorkHourDao selfWorkHourDao;
     private ChuanyunMonthLaborCostWgDao chuanyunMonthLaborCostWgDao;
     private ImplCostService implCostService;
-    private ChuanYunManager chuanyunManager;
+    private ChuanYunManager chuanYunManager;
     private ClawFeign clawFeign;
+    private U9InfoTask infoTask;
 
     @Autowired
     public void setWorkGroupService(WorkGroupService workGroupService, GroupProjectService groupProjectService, ChuanyunImplCostDao implCostDao, ChuanyunReimbursementDao reimbursementDao, ChuanyunSelfWorkHourDao selfWorkHourDao, ChuanyunMonthLaborCostWgDao chuanyunMonthLaborCostWgDao) {
@@ -58,8 +65,8 @@ public class WorkGroupImplCostTest {
     }
 
     @Autowired
-    public void setChuanyunManager(ChuanYunManager chuanyunManager) {
-        this.chuanyunManager = chuanyunManager;
+    public void setChuanYunManager(ChuanYunManager chuanYunManager) {
+        this.chuanYunManager = chuanYunManager;
     }
 
     @Autowired
@@ -67,11 +74,23 @@ public class WorkGroupImplCostTest {
         this.clawFeign = clawFeign;
     }
 
+    @Autowired
+    public void setInfoTask(U9InfoTask infoTask) {
+        this.infoTask = infoTask;
+    }
+
+    @Test
+    public void saveU9LaborCostWg() {
+        infoTask.saveLaborCostWgTest();
+    }
+
     @Test
     void test1() {
-        Optional<ChuanyunGroupProjectDO> chuanyunGroupProjectDOOptional = groupProjectService.findByProjectCode("D22218").stream().findFirst();
-        if (chuanyunGroupProjectDOOptional.isPresent()) {
-            ChuanyunGroupProjectDO chuanyunGroupProjectDO = chuanyunGroupProjectDOOptional.get();
+        List<ChuanyunGroupProjectDO> groupProjects = groupProjectService.findByProjectCode("D18002");
+        if (Objects.isNull(groupProjects)) {
+            return;
+        }
+        groupProjects.forEach(chuanyunGroupProjectDO -> {
 
             String groupProjectObjectId = chuanyunGroupProjectDO.getObjectId();
             String groupProjectCode = chuanyunGroupProjectDO.getProjectCode();
@@ -150,7 +169,10 @@ public class WorkGroupImplCostTest {
             Set<LocalDate> collections = CollectionsUtils.mergeCollections(localDates1, localDates2);
             Set<LocalDate> mergeCollections = CollectionsUtils.mergeCollections(collections, localDates3);
 
-            mergeCollections.forEach(localDate -> {
+            List<LocalDate> localDates = mergeCollections.stream().filter(localDate -> localDate.isAfter(LocalDate.of(2022, 7, 1))).toList();
+
+//            mergeCollections.forEach(localDate -> {
+            localDates.forEach(localDate -> {
                 List<ChuanyunReimbursementDO> reimbursementList = reimbursementMap.getOrDefault(localDate, Collections.emptyList());
                 List<ChuanyunSelfWorkHourDO> selfWorkHourList = workHoursMap.getOrDefault(localDate, Collections.emptyList());
                 List<ChuanyunMonthLaborCostWgDTO> laborCostWgList = laborCostMap.getOrDefault(localDate, Collections.emptyList());
@@ -213,7 +235,7 @@ public class WorkGroupImplCostTest {
                         totalLaborCost = monthLaborCostWgDTOS.stream().map(ChuanyunMonthLaborCostWgDTO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }
 
-                    ChuanyunImplCostDO old = implCostDao.findByProjectCodeAndWorkGroupAndLocalDate(groupProjectCode, workGroupId, localDate.atStartOfDay());
+                    ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroupAndLocalDate(groupProjectObjectId, groupProjectCode, workGroupId, localDate.atStartOfDay());
                     if (!Objects.isNull(old)) {
                         BigDecimal oldImplCost = old.getImplCost();
                         BigDecimal oldManDay = old.getManDay();
@@ -254,7 +276,9 @@ public class WorkGroupImplCostTest {
 
                 });
             });
-        }
+
+        });
+
     }
 
 
@@ -262,7 +286,7 @@ public class WorkGroupImplCostTest {
     void test2() {
         List<ChuanyunImplCostDO> all = implCostService.findAllInChuanyun();
         all.forEach(chuanyunImplCostDO -> {
-            chuanyunManager.delete(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId());
+            chuanYunManager.delete(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId());
             log.info("删除: {}", chuanyunImplCostDO);
         });
 
@@ -276,109 +300,554 @@ public class WorkGroupImplCostTest {
 
     }
 
+
     @Test
-    void test4() {
-        log.info("开始保存项目工作组人力成本");
-        var page = 352;
-        var size = 100;
-        var flag = true;
-        while (flag) {
-            Map<String, String> map = new HashMap<>(2);
-            map.put("page", String.valueOf(page));
-            map.put("size", String.valueOf(size));
-            //获取物料成本
-            PageDTO<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
-            if (page <= pageInfo.getTotalPages()) {
-                page += 1;
-            } else {
-                flag = false;
-                break;
-            }
-            List<ChuanyunLaborCostWgDTO> list = pageInfo.getContent();
-            list.forEach(laborCostWgDTO -> {
-                if (!Objects.isNull(laborCostWgDTO)) {
-                    // 保存至数据库
-                    // 查询数据库比较数据
-                    String projectCode = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode();
-                    if (Objects.equals(projectCode, "D22218")) {
-                        System.out.println(laborCostWgDTO);
-                    }
-                }
+    void test7(){
+        workGroupService.implAllCost();
+    }
 
-            });
+    @Test
+    public void findTest() {
+        boolean flag = true;
+        List<String> m = List.of("status_2,1", "F0000003_2,D21389");
+        Filter filter = Filter.instance(0, 10, true, Filter.AND, m);
+        ChuanyunFindAllBizDTO<ChuanyunBuildProject> buildResponse = null;
+        try {
+            buildResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, filter);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
+        if (buildResponse == null || !buildResponse.getSuccessful()) {
+            flag = false;
         }
+        ChuanyunFindAllBizReturnData<ChuanyunBuildProject> returnData = buildResponse.getReturnData();
+        if (returnData == null) {
+            flag = false;
 
+        }
 
+        List<ChuanyunBuildProject> bizObjectArray = returnData.getBizObjectArray();
+        ObjectMapper objectMapper = new ObjectMapper();
+        List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
+        });
     }
 
     @Test
-    void test5() {
-        log.info("开始保存项目工作组人力成本");
-        var page = 37;
-        var size = 1000;
-        var flag = true;
-        while (flag) {
-            Map<String, String> map = new HashMap<>(1);
-            map.put("page", String.valueOf(page));
-            map.put("size", String.valueOf(size));
-            //获取物料成本
-            PageDTO<ChuanyunLaborCostWgDTO> pageInfo = clawFeign.findChuanyunLaborCostWg(map);
-            if (page <= pageInfo.getTotalPages()) {
-                page += 1;
-            } else {
-                flag = false;
-                break;
+    public void findTest1() {
+        List<String> m = List.of("status_2,1", "F0000003_2,D21389");
+        Filter f = Filter.instance(0, 10, true, Filter.AND, m);
+
+        ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
+        try {
+            chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBuildProject.SCHEMA_CODE, f);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        //保存
+        List<Object> buildBizObjectArray = chuanyunFindAllResponse.getReturnData().getBizObjectArray();
+        ObjectMapper objectMapper = new ObjectMapper();
+        List<ChuanyunBuildProject> bpList = objectMapper.convertValue(buildBizObjectArray, new TypeReference<>() {
+        });
+        final Object monitor = new Object();
+        bpList.forEach(chuanyunBuildProject -> {
+            synchronized (monitor) {
+                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");
+                            BigDecimal totalManDay = new BigDecimal("0.000");
+                            // 查询项目工作组人天
+                            for (String userId : userIdList) {
+                                // 查询用户在该项目的报销单
+                                List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
+                                BigDecimal totalReimburse = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                total = total.add(totalReimburse);
+                                List<ChuanyunSelfWorkHourDO> workHours = selfWorkHourDao.findAllByProjectIdAndUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of("1", "2"));
+                                BigDecimal totalWorkHour = workHours.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                // 人天
+                                BigDecimal manDay = totalWorkHour.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
+                                totalManDay = totalManDay.add(manDay);
+
+                            }
+                            // 统计工作组所有的工时
+                            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();
+                                BigDecimal oldManDay = old.getManDay();
+                                if (Objects.isNull(oldImplCost) || Objects.isNull(oldManDay) || oldImplCost.compareTo(total) != 0 || oldManDay.compareTo(totalManDay) != 0) {
+                                    old.setImplCost(total);
+                                    old.setManDay(totalManDay);
+                                    implCostDao.save(old);
+                                }
+                            } else {
+                                ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
+                                chuanyunImplCostDO.setProjectId(projectObjectId);
+                                chuanyunImplCostDO.setProjectCode(projectCode);
+                                chuanyunImplCostDO.setWorkGroup(workGroupId);
+                                chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
+                                chuanyunImplCostDO.setImplCost(total);
+                                chuanyunImplCostDO.setManDay(totalManDay);
+                                implCostDao.saveAndFlush(chuanyunImplCostDO);
+                            }
+                        }
+                    });
+
+                });
             }
-            List<ChuanyunLaborCostWgDTO> list = pageInfo.getContent();
-            list.forEach(laborCostWgDTO -> {
-                if (!Objects.isNull(laborCostWgDTO)) {
-                    // 保存至数据库
-                    // 查询数据库比较数据
-                    String projectCode = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getProjectcode();
-                    if (projectCode.equals("D22218")) {
-                        log.info("...");
+        });
+
+
+    }
+
+    @Test
+    public void findOneTest() {
+
+        ChuanyunFindBizDTO<Object> buildResponse = null;
+
+        buildResponse = chuanYunManager.find(ChuanyunBuildProject.SCHEMA_CODE, "9cdcf0d7-c8db-41b5-a03c-4caf2a2eb1f8");
+
+        if (buildResponse == null || !buildResponse.getSuccessful()) {
+            return;
+        }
+        ChuanyunFindBizReturnData<Object> returnData = buildResponse.getReturnData();
+
+        Object bizObject = returnData.getBizObject();
+        ObjectMapper objectMapper = new ObjectMapper();
+        ChuanyunBuildProject chuanyunBuildProject = objectMapper.convertValue(bizObject, new TypeReference<>() {
+        });
+    }
+
+    @Test
+    public void reimburseTest() {
+        workGroupService.implCost();
+    }
+
+    @Test
+    public void pushToChuanyun() {
+        workGroupService.pushToChuanyun();
+    }
+
+
+    @Test
+    public void workGroupMonthTest() {
+        // 查询立项表中数据
+        List<ChuanyunBuildProject> buildProjectList = findAll();
+        ObjectMapper objectMapper = new ObjectMapper();
+        // 查询组织架构录入
+        final Object monitor = new Object();
+        buildProjectList.parallelStream().forEach(chuanyunBuildProject -> {
+            synchronized (monitor) {
+                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();
                     }
-                    LocalDateTime time = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getPeriod();
-                    String department = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getDepartment();
-                    String workGroupId = laborCostWgDTO.getChuanyunLaborCostWgPrimaryKey().getWorkgroupid();
-                    List<ChuanyunMonthLaborCostWgDTO> laborCostWg = chuanyunMonthLaborCostWgDao.findAllByProjectCodeAndLogDateAndWorkGroupIdAndDepartment(projectCode, time, workGroupId, department);
-
-                    if (laborCostWg.isEmpty()) {
-                        //新增
-                        log.info("{},{},{},{},{}", laborCostWgDTO, projectCode, time, workGroupId, department);
-                    } else {
-                        if (laborCostWg.size() > 1) {
-                            chuanyunMonthLaborCostWgDao.deleteAll(laborCostWg);
-                            //新增
-                            log.info("{},{},{},{},{}", laborCostWgDTO, projectCode, time, workGroupId, department);
-                        } else if (laborCostWg.size() == 1) {
-                            Optional<ChuanyunMonthLaborCostWgDTO> first = laborCostWg.stream().findFirst();
-                            ChuanyunMonthLaborCostWgDTO chuanyunMonthLaborCostWgDTO = first.get();
-                            BigDecimal amount = chuanyunMonthLaborCostWgDTO.getAmount();
-                            BigDecimal costAmount = laborCostWgDTO.getCostamount();
-                            if (amount.compareTo(costAmount) != 0) {
-                                chuanyunMonthLaborCostWgDTO.setAmount(amount);
-                                log.info("人力成本发生变化,更新人力成本: {}", chuanyunMonthLaborCostWgDTO);
+                    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();
+                            // 查询报销单
+                            // 查询项目工作组人天
+                            Map<LocalDate, List<ChuanyunReimbursementDO>> reimbursementMap = new HashMap<>();
+                            Map<LocalDate, List<ChuanyunSelfWorkHourDO>> workHoursMap = new HashMap<>();
+
+                            for (String userId : userIdList) {
+                                // 查询用户在该项目的报销单
+                                List<ChuanyunReimbursementDO> reimbursements = reimbursementDao.findAllByGroupProjectIdAndReimburseUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of(1, 2));
+                                // 报销单按日期分组
+                                Map<LocalDate, List<ChuanyunReimbursementDO>> map1 = reimbursements.stream().collect(Collectors.groupingBy(chuanyunReimbursementDO -> LocalDate.of(chuanyunReimbursementDO.getBusinessDate().getYear(), chuanyunReimbursementDO.getBusinessDate().getMonthValue(), 1)));
+                                map1.forEach((localDate, chuanyunReimbursementDOS) -> {
+                                    boolean containsKey = reimbursementMap.containsKey(localDate);
+                                    if (containsKey) {
+                                        // 表示已经存在该key
+                                        List<ChuanyunReimbursementDO> reimbursementDOList = reimbursementMap.get(localDate);
+                                        reimbursementDOList.addAll(chuanyunReimbursementDOS);
+                                        reimbursementMap.put(localDate, reimbursementDOList);
+                                    } else {
+                                        reimbursementMap.put(localDate, chuanyunReimbursementDOS);
+                                    }
+                                });
+                                List<ChuanyunSelfWorkHourDO> workHours = selfWorkHourDao.findAllByProjectIdAndUserIdAndStatusIn(chuanyunGroupProjectDO.getObjectId(), userId, List.of("1", "2"));
+                                Map<LocalDate, List<ChuanyunSelfWorkHourDO>> map2 = workHours.stream().collect(Collectors.groupingBy(chuanyunSelfWorkHourDO -> LocalDate.of(chuanyunSelfWorkHourDO.getDayLogDate().getYear(), chuanyunSelfWorkHourDO.getDayLogDate().getMonthValue(), 1)));
+                                map2.forEach((localDate, chuanyunSelfWorkHourDOS) -> {
+                                    boolean containsKey = workHoursMap.containsKey(localDate);
+                                    if (containsKey) {
+                                        // 表示已经存在该key
+                                        List<ChuanyunSelfWorkHourDO> selfWorkHours = workHoursMap.get(localDate);
+                                        selfWorkHours.addAll(chuanyunSelfWorkHourDOS);
+                                        workHoursMap.put(localDate, selfWorkHours);
+                                    } else {
+                                        workHoursMap.put(localDate, chuanyunSelfWorkHourDOS);
+                                    }
+                                });
+                            }
+
+                            Set<LocalDate> localDates = reimbursementMap.keySet();
+                            Set<LocalDate> localDates1 = workHoursMap.keySet();
+                            Set<LocalDate> mergeCollections = CollectionsUtils.mergeCollections(localDates, localDates1);
+
+                            mergeCollections.forEach(localDate -> {
+                                BigDecimal totalReimbursement;
+                                BigDecimal totalManDay;
+                                List<ChuanyunReimbursementDO> reimbursements = reimbursementMap.getOrDefault(localDate, Collections.emptyList());
+                                if (reimbursements.isEmpty()) {
+                                    totalReimbursement = new BigDecimal("0.00");
+                                } else {
+                                    totalReimbursement = reimbursements.stream().map(ChuanyunReimbursementDO::getTotalAmountNotTaxed).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                }
+                                List<ChuanyunSelfWorkHourDO> selfWorkHours = workHoursMap.getOrDefault(localDate, Collections.emptyList());
+                                if (selfWorkHours.isEmpty()) {
+                                    totalManDay = new BigDecimal("0.00");
+                                } else {
+                                    BigDecimal totalWorkHours = selfWorkHours.stream().map(ChuanyunSelfWorkHourDO::getStandardWorkHour).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                    totalManDay = totalWorkHours.divide(BigDecimal.valueOf(8), 3, RoundingMode.UP);
+                                }
+                                // 统计工作组所有的工时
+                                String projectObjectId = chuanyunGroupProjectDO.getObjectId();
+                                String projectCode = chuanyunGroupProjectDO.getProjectCode();
+                                String workGroupId = chuanyunWorkGroupDO.getObjectId();
+
+                                ChuanyunImplCostDO old = implCostDao.findByProjectIdAndProjectCodeAndWorkGroupAndLocalDate(projectObjectId, projectCode, workGroupId, localDate.atStartOfDay());
+                                if (!Objects.isNull(old)) {
+                                    BigDecimal oldImplCost = old.getImplCost();
+                                    BigDecimal oldManDay = old.getManDay();
+                                    if (Objects.isNull(old.getLocalDate())) {
+                                        old.setLocalDate(localDate.atStartOfDay());
+                                    }
+                                    if (Objects.isNull(oldImplCost) || Objects.isNull(oldManDay) || oldImplCost.compareTo(totalReimbursement) != 0 || oldManDay.compareTo(totalManDay) != 0) {
+                                        old.setImplCost(totalReimbursement);
+                                        old.setManDay(totalManDay);
+                                        implCostDao.saveAndFlush(old);
+                                    }
+                                } else {
+                                    ChuanyunImplCostDO chuanyunImplCostDO = new ChuanyunImplCostDO();
+                                    chuanyunImplCostDO.setProjectId(projectObjectId);
+                                    chuanyunImplCostDO.setProjectCode(projectCode);
+                                    chuanyunImplCostDO.setLocalDate(localDate.atStartOfDay());
+                                    chuanyunImplCostDO.setWorkGroup(workGroupId);
+                                    chuanyunImplCostDO.setWorkGroupName(chuanyunWorkGroupDO.getWorkGroupName());
+                                    chuanyunImplCostDO.setImplCost(totalReimbursement);
+                                    chuanyunImplCostDO.setManDay(totalManDay);
+                                    implCostDao.saveAndFlush(chuanyunImplCostDO);
+                                }
+
+                            });
+
+
+                        }
+                    });
+
+                });
+            }
+        });
+    }
+
+    @Test
+    public void pushToChuanyunTest() {
+        List<ChuanyunImplCostDO> all = implCostDao.findAll();
+        ObjectMapper objectMapper = new ObjectMapper();
+        all.forEach(implCostDO -> {
+            String projectId = implCostDO.getProjectId();
+            String projectCode = implCostDO.getProjectCode();
+            String workGroup = implCostDO.getWorkGroup();
+            LocalDateTime localDate = implCostDO.getLocalDate();
+            List<String> m = List.of("F0000001_2," + projectId, "F0000002_2," + projectCode, "F0000006_2," + workGroup, "F0000008_2," + localDate);
+            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 (Objects.isNull(chuanyunImplCostDO.getImplCost()) || Objects.isNull(chuanyunImplCostDO.getManDay()) ||
+                                chuanyunImplCostDO.getImplCost().compareTo(implCostDO.getImplCost()) != 0 ||
+                                chuanyunImplCostDO.getManDay().compareTo(implCostDO.getManDay()) != 0) {
+                            // 工作组实施费用发生变化
+                            log.info("更新项目工作组实施费用");
+                            ImplCostUpdateDTO implCostUpdateDTO = new ImplCostUpdateDTO(implCostDO.getImplCost(), implCostDO.getManDay());
+                            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("上传项目工作组实施费用完成");
+    }
+
+    @Test
+    public void delImplCostTest() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        boolean flag = true;
+        int start = 0;
+        int pageSize = 200;
+        while (flag) {
+            Filter filter = Filter.instance(start, start + pageSize, true);
+            ChuanyunFindAllBizDTO<Object> delAll = null;
+            try {
+                delAll = chuanYunManager.findAll(ChuanyunImplCostDO.SCHEMA_CODE, filter);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+            if (Objects.isNull(delAll) || delAll.getReturnData() == null || delAll.getReturnData().getBizObjectArray() == null) {
+                flag = false;
+                continue;
+            }
+            if (delAll.getReturnData().getTotalCount() >= start + pageSize) {
+                start += pageSize;
+            } else {
+                flag = false;
+            }
+
+            List<Object> bizObjectArray = delAll.getReturnData().getBizObjectArray();
+            List<ChuanyunImplCostDO> ic = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
             });
+            ic.forEach(chuanyunImplCostDO -> {
+                ChuanyunSaveDTO delete = chuanYunManager.delete(ChuanyunImplCostDO.SCHEMA_CODE, chuanyunImplCostDO.getObjectId());
+                log.info("删除: {}", delete.getSuccessful());
+            });
+
         }
+    }
+
+    @Data
+    static class ImplCostUpdateDTO {
+        @JsonProperty("F0000004")
+        private BigDecimal implCost;
 
+        @JsonProperty("F0000007")
+        private BigDecimal manDay;
 
+        public ImplCostUpdateDTO(BigDecimal implCost, BigDecimal manDay) {
+            this.implCost = implCost;
+            this.manDay = manDay;
+
+        }
     }
 
+
+    private List<ChuanyunBuildProject> findAll() {
+        ArrayList<ChuanyunBuildProject> buildProjects = new ArrayList<>();
+        ObjectMapper objectMapper = new ObjectMapper();
+        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();
+                List<ChuanyunBuildProject> bpList = objectMapper.convertValue(bizObjectArray, new TypeReference<>() {
+                });
+                buildProjects.addAll(bpList);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+
+        }
+        return buildProjects;
+    }
+
+
     @Test
-    void test6() {
-        Map<String, String> map = new HashMap<>(1);
-        map.put("workgroupid_eq", "f2049d31-155f-4405-89db-495949bb47a0");
-        PageDTO<ChuanyunLaborCostWgDTO> chuanyunLaborCostWg = clawFeign.findChuanyunLaborCostWg(map);
-        List<ChuanyunLaborCostWgDTO> content = chuanyunLaborCostWg.getContent();
-        content.forEach(System.out::println);
+    public void LocalDateTimeTest() {
+        LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
 
     }
 
+    @Test
+    public void testFind() throws JsonProcessingException {
+        List<String> matchers = new ArrayList<>();
+        matchers.add("F0000005_2," + "AS20042");
+        matchers.add("F0000002_2," + TimeUtil.formatDateTime(LocalDateTime.of(2020, 5, 1, 0, 0, 0)));
+        matchers.add("F0000018_2," + "浙江凯乐士科技有限公司/项目交付/项目实施(集成项目交付)/项目实施/系统售后");
+        var filter = Filter.instance(0, 1, true, "And", matchers);
+        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, filter);
+
+    }
+
+    @Test
+    public void deleteAll() {
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        var pageSize = 100;
+
+        while (flag) {
+
+            //从氚云查询数据
+            var filter = Filter.instance(start, start + pageSize, true);
+            ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
+            try {
+                chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+
+                List<ChuanyunMonthLaborCostWgDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                if (result.size() > 0) {
+                    result.forEach(chuanyunMonthLaborCostWgDO -> chuanYunManager.delete(ChuanyunMonthLaborCostWgDO.SCHEMA_CODE, chuanyunMonthLaborCostWgDO.getObjectId()));
+                }
+                log.info("完成");
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    @Test
+    public void push() {
+        workGroupService.pushToChuanyun();
+    }
+
 
 }

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/payRollTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.payRoll;
 
 import com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
 import org.junit.jupiter.api.Test;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/GetRepeatProject.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.project;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;

+ 30 - 0
src/test/java/com/galaxis/manatee/Test/project/GroupProjectTest.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.util.List;
+import java.util.Objects;
 
 @SpringBootTest
 public class GroupProjectTest {
@@ -62,4 +63,33 @@ public class GroupProjectTest {
     void syncGroupProject(){
         basicDataScheduledTask.getGroupProjectManually();
     }
+
+    @Test
+    public void getGroupProject() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //从氚云查询数据
+        var filter = Filter.instance(0, 20, true);
+        ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = null;
+        try {
+            chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE, filter);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        if (!Objects.isNull(chuanyunFindAllResponse)) {
+            //转化为POJO
+            List<ChuanyunGroupProjectDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+            });
+            //保存
+            result.forEach(chuanyunGroupProjectDO -> {
+                var tmpGroupProjectDO = chuanyunGroupProjectDao.findById(chuanyunGroupProjectDO.getObjectId());
+                tmpGroupProjectDO.ifPresent(projectDO -> {
+                    chuanyunGroupProjectDO.setIsCreate(projectDO.getIsCreate());
+                    chuanyunGroupProjectDao.delete(tmpGroupProjectDO.get());
+                });
+                chuanyunGroupProjectDao.save(chuanyunGroupProjectDO);
+            });
+        }
+
+
+    }
 }

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/PushProjectChange.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.project;
 
 import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
 import org.junit.jupiter.api.Test;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/ProjectImplTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.reimbursement;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/ReimbursementTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.reimbursement;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/UserIdTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.user;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/ChangeHistoryWorkHourTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.workHour;
 
 
 import com.fasterxml.jackson.core.JsonProcessingException;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/LogTest.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.workHour;
 
 import com.galaxis.manatee.service.LogService;
 import com.galaxis.manatee.service.LogStandardService;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/SaveLog.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.workHour;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/clearErrorWorkHour.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.workHour;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;

+ 1 - 1
src/test/java/com/galaxis/manatee/Test/updateDayWorkHour.java

@@ -1,4 +1,4 @@
-package com.galaxis.manatee.Test;
+package com.galaxis.manatee.Test.workHour;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;