Browse Source

1.修改项目成员工时汇总

WoNiu 4 years ago
parent
commit
d83838026f

+ 1 - 109
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

@@ -36,16 +36,14 @@ public class ChuanyunProjectScheduledTask {
     private final ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao;
     private final ChuanyunPurCostDao chuanyunPurCostDao;
     private final ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao;
-    private final ChuanyunMemberCostDao chuanyunMemberCostDao;
     private final ChuanyunMonthLaborCostDao chuanyunMonthLaborCostDao;
 
-    public ChuanyunProjectScheduledTask(ChuanYunManager chuanYunManager, ChuanyunSaleContractDao chuanyunSaleContractDao, ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao, ChuanyunPurCostDao chuanyunPurCostDao, ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao, ChuanyunMemberCostDao chuanyunMemberCostDao, ChuanyunMonthLaborCostDao chuanyunMonthLaborCostDao) {
+    public ChuanyunProjectScheduledTask(ChuanYunManager chuanYunManager, ChuanyunSaleContractDao chuanyunSaleContractDao, ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao, ChuanyunPurCostDao chuanyunPurCostDao, ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao, ChuanyunMonthLaborCostDao chuanyunMonthLaborCostDao) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunSaleContractDao = chuanyunSaleContractDao;
         this.chuanyunPaymentReceiveDao = chuanyunPaymentReceiveDao;
         this.chuanyunPurCostDao = chuanyunPurCostDao;
         this.chuanyunProjectCashFlowDao = chuanyunProjectCashFlowDao;
-        this.chuanyunMemberCostDao = chuanyunMemberCostDao;
         this.chuanyunMonthLaborCostDao = chuanyunMonthLaborCostDao;
     }
 
@@ -244,116 +242,10 @@ public class ChuanyunProjectScheduledTask {
         log.info("项目销售合同回款信息保存保存"+totalCount);
     }
 
-//
-//    /**
-//     * 人员项目工时汇总
-//     */
-////    @Scheduled(fixedDelay = 3600000L)
-//    private void projectTotalHour() {
-//        List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
-////        deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE,"F0000007");
-//        chuanyunMemberCostDao.deleteAllByStatus("2");
-//        list.forEach(chuanyunMemberCostDO -> {
-//            if(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
-//                log.info("########"+chuanyunMemberCostDO+"");
-//            }else{
-//                BigDecimal standard = new BigDecimal(8);
-//                ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
-//                memberCostDO.setCost(chuanyunMemberCostDO.getCost());
-//                memberCostDO.setProjectType(chuanyunMemberCostDO.getProjectType());
-//                memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
-//                memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
-//                memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
-//                memberCostDO.setStatus(chuanyunMemberCostDO.getStatus());
-//                memberCostDO.setPersonDays(chuanyunMemberCostDO.getTotalHour().divide(standard,2,RoundingMode.HALF_UP));
-//                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndStatus(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getStatus());
-//                if (oldCostDO !=null) {
-//                    chuanyunMemberCostDao.delete(oldCostDO);
-//                }
-//                chuanyunMemberCostDao.save(memberCostDO);
-//
-//                //更新氚云数据
-//                try {
-//                    ChuanyunProjectMemberCostDTO chuanyunProjectMemberCostDTO = new ChuanyunProjectMemberCostDTO();
-//                    chuanyunProjectMemberCostDTO.setProjectId(chuanyunMemberCostDO.getProjectId());
-//                    chuanyunProjectMemberCostDTO.setUserId(chuanyunMemberCostDO.getUserId());
-//                    chuanyunProjectMemberCostDTO.setCost(chuanyunMemberCostDO.getCost());
-//                    chuanyunProjectMemberCostDTO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
-//                    chuanyunProjectMemberCostDTO.setProjectType(chuanyunMemberCostDO.getProjectType());
-//                    chuanyunProjectMemberCostDTO.setStatus(chuanyunMemberCostDO.getStatus());
-//                    chuanyunProjectMemberCostDTO.setPersonDays(chuanyunMemberCostDO.getTotalHour().divide(standard,2,RoundingMode.HALF_UP));
-//                    List<String> matchers = new ArrayList<>();
-//                    matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
-//                    matchers.add("F0000007_2,"+chuanyunMemberCostDO.getStatus());
-//                    matchers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
-//                    var filter= Filter.instance(0,1,true,"And",matchers);
-//                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
-//                    var projectMemberString =objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
-//                    ChuanyunSaveDTO chuanyunSaveDTO;
-//                    if (chuanyunFindAllResponse.getReturnData()!=null) {
-//                        List<ChuanyunProjectMemberCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-//                        ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
-//                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE,oldProjectMemberCostDO.getObjectId(), projectMemberString);
-//                    }else {
-//                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
-//                    }
-//                    if(!chuanyunSaveDTO.getSuccessful()){
-//                        log.warn("新增项目成员成本汇总失败");
-//                    }
-//                } catch (JsonProcessingException | BigSizeException e) {
-//                    e.printStackTrace();
-//                    log.warn("########"+chuanyunMemberCostDO+"");
-//                }
-//            }
-//        });
-//    }
 
-    @Data
-    static
-    class ChuanyunProjectMemberCostDTO {
-
-        /**
-         * 项目ID
-         */
-        @JsonProperty("F0000001")
-        private String projectId;
-
-        /**
-         * 项目类型
-         */
-        @JsonProperty("F0000005")
-        private String projectType;
-
-        /**
-         * 用户ID
-         */
-        @JsonProperty("F0000002")
-        private String userId;
-
-        /**
-         * 工时
-         */
-        @JsonProperty("F0000003")
-        private BigDecimal workHour;
 
-        /**
-         * 成本
-         */
-        @JsonProperty("F0000004")
-        private BigDecimal cost;
 
-        /**
-         * 总人天
-         */
-        @JsonProperty("F0000006")
-        private BigDecimal personDays;
 
-        /**
-         * 工时状态
-         */
-        @JsonProperty("F0000007")
-        private String status;
-    }
 
 
     /**

+ 160 - 35
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -48,8 +48,9 @@ public class WorkHourStatistics {
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunProjectCostDao chuanyunProjectCostDao;
+    private final ChuanyunMemberCostDao chuanyunMemberCostDao;
 
-    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunProjectCostDao chuanyunProjectCostDao) {
+    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunProjectCostDao chuanyunProjectCostDao, ChuanyunMemberCostDao chuanyunMemberCostDao) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
@@ -57,6 +58,7 @@ public class WorkHourStatistics {
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunProjectCostDao = chuanyunProjectCostDao;
+        this.chuanyunMemberCostDao = chuanyunMemberCostDao;
     }
 
 
@@ -66,6 +68,7 @@ public class WorkHourStatistics {
         standardWeeklyWorkHour();
         standardMonthlyWorkHour();
         projectHour();
+        projectMemberHour();
         quitStandradHour();
     }
 
@@ -103,43 +106,45 @@ public class WorkHourStatistics {
      * @param chuanyunUserCompanyDO 员工信息
      */
     private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        BigDecimal standard = new BigDecimal(8);
-        //每人每个项目每天工时
-        List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
-        selfList.forEach(self->{
-            try{
-                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
-                chuanyunSelfWorkHourDO.setStatus(self.getStatus());
-                chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
-                chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
-                if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
-                    chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
-                }else{
-                    chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
-                }
-                chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
-                //每人每天工时
-                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
-                //工时标准化
-                if (chuanyunWorkHourDO != null) {
-                    if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<=0) {
-                        chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
-                    }else {
-                        BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
-                        chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+        if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())){
+            //每人每个项目每天工时
+            List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+            selfList.forEach(self->{
+                try{
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                    chuanyunSelfWorkHourDO.setStatus(self.getStatus());
+                    chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
+                    chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
+                    if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
+                        chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+                    }else{
+                        chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
                     }
-                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate(),self.getProjectType());
-                    if (chuanyunSelfWorkHourDO1!=null) {
-                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                    chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
+                    //每人每天工时
+                    ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
+                    //工时标准化
+                    if (chuanyunWorkHourDO != null) {
+                        BigDecimal standard = new BigDecimal(8);
+                        if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<=0) {
+                            chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
+                        }else {
+                            BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                            chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+                        }
+                        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate(),self.getProjectType());
+                        if (chuanyunSelfWorkHourDO1!=null) {
+                            chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                        }
+                        chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
                     }
-                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                }catch (Exception e){
+                    log.error(e.getMessage());
+                    log.error(""+self);
+                    e.printStackTrace();
                 }
-            }catch (Exception e){
-                log.error(e.getMessage());
-                log.error(""+self);
-                e.printStackTrace();
-            }
-        });
+            });
+        }
     }
 
     /**
@@ -455,6 +460,85 @@ public class WorkHourStatistics {
         log.info("月工时更新花费"+(Instant.now().getEpochSecond()-startTime));
     }
 
+//
+//    private void projectHistoryHour(){
+//        List<ChuanyunProjectCostDO> list = chuanyunProjectCostDao.getHistoryProjectHour();
+//        list.forEach(chuanyunProjectCostDO -> {
+//            ChuanyunProjectScheduledTask.ProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectScheduledTask.ProjectTotalCostDTO();
+//            chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
+//            chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
+//            chuanyunProjectTotalCostDTO.setStatus(chuanyunProjectCostDO.getStatus());
+//            chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
+//            chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
+//            try {
+//                var projectTotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDTO);
+//                ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
+//                if(chuanyunSaveDTO.getSuccessful()){
+//                    log.warn("新增项目成本汇总成功");
+//                }
+//            } catch (BigSizeException | JsonProcessingException e) {
+//                e.printStackTrace();
+//            }
+//        });
+//    }
+
+    /**
+     * 人员项目工时汇总
+     */
+    private void projectMemberHour() {
+        List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
+        list.forEach(chuanyunMemberCostDO -> {
+            if (StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())) {
+                BigDecimal standard = new BigDecimal(8);
+                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getProjectType(),chuanyunMemberCostDO.getStatus());
+                if (oldCostDO !=null) {
+                    chuanyunMemberCostDao.delete(oldCostDO);
+                }
+                chuanyunMemberCostDao.save(chuanyunMemberCostDO);
+                //搜索是否有审批中数据
+                ChuanyunMemberCostDO processdo = chuanyunMemberCostDao.getProcessProjectMemberCost(chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getProjectType(),chuanyunMemberCostDO.getUserId());
+                if (processdo==null){
+                    chuanyunMemberCostDao.deleteByProjectIdAndUserIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectType(),"2");
+                    deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunMemberCostDO.getProjectId(),"F0000002",chuanyunMemberCostDO.getUserId(),"","","","","","","F0000005",chuanyunMemberCostDO.getProjectType());
+                }
+                //更新氚云数据
+                try {
+                    ChuanyunProjectMemberCostDTO chuanyunProjectMemberCostDTO = new ChuanyunProjectMemberCostDTO();
+                    chuanyunProjectMemberCostDTO.setProjectId(chuanyunMemberCostDO.getProjectId());
+                    chuanyunProjectMemberCostDTO.setUserId(chuanyunMemberCostDO.getUserId());
+                    chuanyunProjectMemberCostDTO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
+                    chuanyunProjectMemberCostDTO.setProjectType(chuanyunMemberCostDO.getProjectType());
+                    chuanyunProjectMemberCostDTO.setStatus(chuanyunMemberCostDO.getStatus());
+                    chuanyunProjectMemberCostDTO.setPersonDays(chuanyunMemberCostDO.getPersonDays());
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
+                    matchers.add("F0000005_2,"+chuanyunMemberCostDO.getProjectType());
+                    matchers.add("F0000007_2,"+chuanyunMemberCostDO.getStatus());
+                    matchers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
+                    var filter= Filter.instance(0,1,true,"And",matchers);
+                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
+                    var projectMemberString =objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData()!=null) {
+                        List<ChuanyunProjectMemberCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
+                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE,oldProjectMemberCostDO.getObjectId(), projectMemberString);
+                    }else {
+                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
+                    }
+                    if(!chuanyunSaveDTO.getSuccessful()){
+                        log.warn("新增项目成员工时汇总失败");
+                    }else {
+                        log.info("新增项目成员工时汇总成功");
+                    }
+                } catch (JsonProcessingException | BigSizeException e) {
+                    e.printStackTrace();
+                    log.warn("########"+chuanyunMemberCostDO+"");
+                }
+            }
+        });
+    }
+
     /**
      * 项目工时汇总
      */
@@ -596,6 +680,47 @@ public class WorkHourStatistics {
         }
     }
 
+    @Data
+    static
+    class ChuanyunProjectMemberCostDTO {
+
+        /**
+         * 项目ID
+         */
+        @JsonProperty("F0000001")
+        private String projectId;
+
+        /**
+         * 项目类型
+         */
+        @JsonProperty("F0000005")
+        private String projectType;
+
+        /**
+         * 用户ID
+         */
+        @JsonProperty("F0000002")
+        private String userId;
+
+        /**
+         * 工时
+         */
+        @JsonProperty("F0000003")
+        private BigDecimal workHour;
+
+        /**
+         * 总人天
+         */
+        @JsonProperty("F0000006")
+        private BigDecimal personDays;
+
+        /**
+         * 工时状态
+         */
+        @JsonProperty("F0000007")
+        private String status;
+    }
+
     /**
      * 人员项目周度工时
      */