|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 人员项目周度工时
|
|
|
*/
|