|
@@ -1,18 +1,26 @@
|
|
package com.galaxis.manatee.task;
|
|
package com.galaxis.manatee.task;
|
|
|
|
|
|
|
|
+import com.fasterxml.jackson.annotation.JsonProperty;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
|
|
|
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
|
|
|
+import com.galaxis.manatee.constant.ChuanYunConstant;
|
|
import com.galaxis.manatee.dao.*;
|
|
import com.galaxis.manatee.dao.*;
|
|
import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
|
|
import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
|
|
import com.galaxis.manatee.entity.chuanyun.dto.Filter;
|
|
import com.galaxis.manatee.entity.chuanyun.dto.Filter;
|
|
import com.galaxis.manatee.exception.BigSizeException;
|
|
import com.galaxis.manatee.exception.BigSizeException;
|
|
import com.galaxis.manatee.manager.ChuanYunManager;
|
|
import com.galaxis.manatee.manager.ChuanYunManager;
|
|
|
|
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
|
|
|
|
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
|
|
|
|
+import lombok.Data;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.data.domain.PageRequest;
|
|
import org.springframework.data.domain.PageRequest;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
@@ -223,9 +231,9 @@ public class ChuanyunProjectScheduledTask {
|
|
//新增
|
|
//新增
|
|
if (chuanyunAdjustAccountDO.getPersonDays().intValue()>0){
|
|
if (chuanyunAdjustAccountDO.getPersonDays().intValue()>0){
|
|
try {
|
|
try {
|
|
- List<String> macthers = new ArrayList<>();
|
|
|
|
- macthers.add("F0000002_2,"+chuanyunProjectDO.getProjectCode());
|
|
|
|
- var filter= Filter.instance(0,1,true,"And",macthers);
|
|
|
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
|
+ matchers.add("F0000002_2,"+chuanyunProjectDO.getProjectCode());
|
|
|
|
+ var filter= Filter.instance(0,1,true,"And",matchers);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunAdjustAccountDO.SCHEMA_CODE,filter);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunAdjustAccountDO.SCHEMA_CODE,filter);
|
|
var adjustString=objectMapper.writeValueAsString(chuanyunAdjustAccountDO);
|
|
var adjustString=objectMapper.writeValueAsString(chuanyunAdjustAccountDO);
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
@@ -291,8 +299,8 @@ public class ChuanyunProjectScheduledTask {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 计算人天
|
|
* 计算人天
|
|
- * @param projectId
|
|
|
|
- * @return
|
|
|
|
|
|
+ * @param projectId 项目Id
|
|
|
|
+ * @return 计算人天
|
|
*/
|
|
*/
|
|
private BigDecimal personDays(String projectId){
|
|
private BigDecimal personDays(String projectId){
|
|
BigDecimal standard = new BigDecimal(8);
|
|
BigDecimal standard = new BigDecimal(8);
|
|
@@ -314,7 +322,7 @@ public class ChuanyunProjectScheduledTask {
|
|
* 人力成本
|
|
* 人力成本
|
|
*/
|
|
*/
|
|
@Scheduled(fixedDelay = 3600000L)
|
|
@Scheduled(fixedDelay = 3600000L)
|
|
- private void laborcost() {
|
|
|
|
|
|
+ private void laborCost() {
|
|
var objectMapper=new ObjectMapper();
|
|
var objectMapper=new ObjectMapper();
|
|
var flag = true;
|
|
var flag = true;
|
|
var pageSize = 20;
|
|
var pageSize = 20;
|
|
@@ -328,56 +336,64 @@ public class ChuanyunProjectScheduledTask {
|
|
flag = false;
|
|
flag = false;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ //逐个将员工每天工时进行统计汇总
|
|
List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyDOS.getContent();
|
|
List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyDOS.getContent();
|
|
userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
|
|
userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
|
|
//工时标准化
|
|
//工时标准化
|
|
-// standardHour(chuanyunUserCompanyDO);
|
|
|
|
|
|
+ standardHour(chuanyunUserCompanyDO);
|
|
//单项目单人单月成本
|
|
//单项目单人单月成本
|
|
-// selfCost(chuanyunUserCompanyDO);
|
|
|
|
|
|
+ standardMonthlyHour(chuanyunUserCompanyDO);
|
|
});
|
|
});
|
|
- //每人月度汇总
|
|
|
|
|
|
+ //按项目汇总用户工时
|
|
List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
|
|
List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
|
|
list.forEach(chuanyunMemberCostDO -> {
|
|
list.forEach(chuanyunMemberCostDO -> {
|
|
- ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
|
|
|
|
- memberCostDO.setCost(chuanyunMemberCostDO.getCost());
|
|
|
|
- memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
|
|
|
|
- memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
|
|
|
|
- memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
|
|
|
|
- ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectId(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId());
|
|
|
|
- if (oldCostDO !=null) {
|
|
|
|
- chuanyunMemberCostDao.delete(oldCostDO);
|
|
|
|
- }
|
|
|
|
- chuanyunMemberCostDao.save(memberCostDO);
|
|
|
|
- //更新氚云数据
|
|
|
|
- try {
|
|
|
|
- ChuanyunProjectMemberCostDO chuanyunProjectMemberCostDO = new ChuanyunProjectMemberCostDO();
|
|
|
|
- chuanyunProjectMemberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
|
|
|
|
- chuanyunProjectMemberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
|
|
|
|
- chuanyunProjectMemberCostDO.setCost(chuanyunMemberCostDO.getCost());
|
|
|
|
- chuanyunProjectMemberCostDO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
|
|
|
|
- List<String> macthers = new ArrayList<>();
|
|
|
|
- macthers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
|
|
|
|
- macthers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
|
|
|
|
- var filter= Filter.instance(0,1,true,"And",macthers);
|
|
|
|
- var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
|
|
|
|
- var projectmemberString=objectMapper.writeValueAsString(chuanyunProjectMemberCostDO);
|
|
|
|
- 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(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
|
|
|
|
+ log.info("########"+chuanyunMemberCostDO+"");
|
|
|
|
+ }else{
|
|
|
|
+ ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
|
|
|
|
+ memberCostDO.setCost(chuanyunMemberCostDO.getCost());
|
|
|
|
+ memberCostDO.setProjectType(chuanyunMemberCostDO.getProjectType());
|
|
|
|
+ memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
|
|
|
|
+ memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
|
|
|
|
+ memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
|
|
|
|
+ ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectId(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId());
|
|
|
|
+ if (oldCostDO !=null) {
|
|
|
|
+ chuanyunMemberCostDao.delete(oldCostDO);
|
|
}
|
|
}
|
|
- if(chuanyunSaveDTO.getSuccessful()){
|
|
|
|
- log.info("新增项目成员成本汇总成功");
|
|
|
|
- }else{
|
|
|
|
- log.warn("新增项目成员成本汇总失败");
|
|
|
|
|
|
+ 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());
|
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
|
+ matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
|
|
|
|
+ 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.info("新增项目成员成本汇总成功");
|
|
|
|
+ }else{
|
|
|
|
+ log.warn("新增项目成员成本汇总失败");
|
|
|
|
+ }
|
|
|
|
+ } catch (JsonProcessingException | BigSizeException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ log.warn("########"+chuanyunMemberCostDO+"");
|
|
}
|
|
}
|
|
- } catch (JsonProcessingException | BigSizeException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
});
|
|
});
|
|
//项目汇总
|
|
//项目汇总
|
|
List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
|
|
List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
|
|
@@ -386,32 +402,33 @@ public class ChuanyunProjectScheduledTask {
|
|
projectCostDO.setCost(chuanyunProjectCostDO.getCost());
|
|
projectCostDO.setCost(chuanyunProjectCostDO.getCost());
|
|
projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
|
|
projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
|
|
- ChuanyunProjectCostDO oldPeojectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
|
- if (oldPeojectDO !=null) {
|
|
|
|
- chuanyunProjectCostDao.delete(oldPeojectDO);
|
|
|
|
|
|
+ ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
|
+ if (oldProjectDO !=null) {
|
|
|
|
+ chuanyunProjectCostDao.delete(oldProjectDO);
|
|
}
|
|
}
|
|
chuanyunProjectCostDao.save(projectCostDO);
|
|
chuanyunProjectCostDao.save(projectCostDO);
|
|
try {
|
|
try {
|
|
- ChuanyunProjectTotalCostDO chuanyunProjectTotalCostDO = new ChuanyunProjectTotalCostDO();
|
|
|
|
- chuanyunProjectTotalCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
|
- chuanyunProjectTotalCostDO.setCost(chuanyunProjectCostDO.getCost());
|
|
|
|
- chuanyunProjectTotalCostDO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
|
- List<String> macthers = new ArrayList<>();
|
|
|
|
- macthers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
|
|
|
|
- var filter= Filter.instance(0,1,true,"And",macthers);
|
|
|
|
|
|
+ ChuanyunProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectTotalCostDTO();
|
|
|
|
+ chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
|
|
|
|
+ chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
|
+ chuanyunProjectTotalCostDTO.setCost(chuanyunProjectCostDO.getCost());
|
|
|
|
+ chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
|
+ matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
|
|
|
|
+ var filter= Filter.instance(0,1,true,"And",matchers);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectTotalCostDO.SCHEMA_CODE,filter);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectTotalCostDO.SCHEMA_CODE,filter);
|
|
- var projecttotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDO);
|
|
|
|
|
|
+ var projectTotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDTO);
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
if (chuanyunFindAllResponse.getReturnData()!=null) {
|
|
if (chuanyunFindAllResponse.getReturnData()!=null) {
|
|
List<ChuanyunProjectTotalCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
List<ChuanyunProjectTotalCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
- ChuanyunProjectTotalCostDO chuanyunProjectTotalCostDO1 = result.get(0);
|
|
|
|
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectTotalCostDO.SCHEMA_CODE,chuanyunProjectTotalCostDO1.getObjectId(),projecttotalString);
|
|
|
|
|
|
+ ChuanyunProjectTotalCostDO firstResult = result.get(0);
|
|
|
|
+ chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectTotalCostDO.SCHEMA_CODE,firstResult.getObjectId(),projectTotalString);
|
|
}else {
|
|
}else {
|
|
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projecttotalString,true);
|
|
|
|
|
|
+ chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
|
|
|
|
|
|
}
|
|
}
|
|
if(chuanyunSaveDTO.getSuccessful()){
|
|
if(chuanyunSaveDTO.getSuccessful()){
|
|
- log.info("新增项目成本汇总成功");
|
|
|
|
|
|
+// log.info("新增项目成本汇总成功");
|
|
}else{
|
|
}else{
|
|
log.warn("新增项目成本汇总失败");
|
|
log.warn("新增项目成本汇总失败");
|
|
}
|
|
}
|
|
@@ -423,98 +440,232 @@ public class ChuanyunProjectScheduledTask {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 工时标准化
|
|
|
|
- * @param chuanyunUserCompanyDO
|
|
|
|
|
|
+ * 员工单日、各个项目工时标准化,并保存
|
|
|
|
+ * @param chuanyunUserCompanyDO 员工信息
|
|
*/
|
|
*/
|
|
private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
BigDecimal standard = new BigDecimal(8);
|
|
BigDecimal standard = new BigDecimal(8);
|
|
//每人每个项目每天工时
|
|
//每人每个项目每天工时
|
|
List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
|
|
List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
|
|
selfList.forEach(self->{
|
|
selfList.forEach(self->{
|
|
- ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
|
|
|
|
- chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
|
- chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
|
|
|
|
- chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
|
|
|
|
- //每人每天工时
|
|
|
|
- ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
|
|
|
|
- //工时标准化
|
|
|
|
- if (chuanyunWorkHourDO != null) {
|
|
|
|
- if (chuanyunWorkHourDO.getHoursWorked().intValue()<8) {
|
|
|
|
- chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
|
|
|
|
- }else {
|
|
|
|
- BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
|
|
|
|
- chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
|
|
|
|
|
|
+ try{
|
|
|
|
+ ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
|
|
|
|
+ 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.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),self.getProjectId(),self.getDayLogDate());
|
|
|
|
- if (chuanyunSelfWorkHourDO1!=null) {
|
|
|
|
- chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
|
|
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),self.getProjectId(),self.getDayLogDate());
|
|
|
|
+ if (chuanyunSelfWorkHourDO1!=null) {
|
|
|
|
+ chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
|
|
|
|
+ }
|
|
|
|
+ chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
|
|
|
|
+// log.info("工时标准化新增成功");
|
|
}
|
|
}
|
|
- chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
|
|
|
|
- log.info("工时标准化新增成功");
|
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ log.error(""+self);
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 薪资成本
|
|
|
|
- * @param chuanyunUserCompanyDO
|
|
|
|
|
|
+ * 员工每月、各个项目标准工时会职工
|
|
|
|
+ * @param chuanyunUserCompanyDO 员工信息
|
|
*/
|
|
*/
|
|
- private void selfCost(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
|
|
|
|
+ private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
var objectMapper=new ObjectMapper();
|
|
var objectMapper=new ObjectMapper();
|
|
- //每月每项目工时
|
|
|
|
|
|
+ //每月每项目工时,按月-项目-用户分组统计标准工时
|
|
List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
|
|
List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
|
|
|
|
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
list.forEach(projectMonth->{
|
|
list.forEach(projectMonth->{
|
|
- DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
+ //获取人员月度标准工时汇总
|
|
ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
|
|
ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
|
|
|
|
+
|
|
|
|
+ //获取人员月度工资信息
|
|
|
|
+ //TODO 张曦铭的薪资信息同步之后需要使用U9中的数据更新薪资信息
|
|
ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
|
|
ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
|
|
ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
|
|
ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
|
|
- ChuanyunMemberMonthCostDO chuanyunMemberMonthCostDO = new ChuanyunMemberMonthCostDO();
|
|
|
|
|
|
+ ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
|
|
if (chuanyunPayrollDO != null) {
|
|
if (chuanyunPayrollDO != null) {
|
|
BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
|
|
BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
|
|
chuanyunSelfCostDO.setCost(cost);
|
|
chuanyunSelfCostDO.setCost(cost);
|
|
- chuanyunMemberMonthCostDO.setCost(cost);
|
|
|
|
|
|
+ chuanyunMemberMonthCostDTO.setCost(cost);
|
|
|
|
+ }else{
|
|
|
|
+ chuanyunSelfCostDO.setCost(BigDecimal.ZERO);
|
|
|
|
+ chuanyunMemberMonthCostDTO.setCost(BigDecimal.ZERO);
|
|
}
|
|
}
|
|
|
|
+ chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
|
|
chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
|
|
chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
|
|
|
|
+ chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
|
|
chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
|
|
chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
|
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-01 HH:mm:ss");
|
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-01 HH:mm:ss");
|
|
- String newdate = dateTimeFormatter.format(projectMonth.getDayLogDate());
|
|
|
|
- LocalDateTime dt = LocalDateTime.parse(newdate,df);
|
|
|
|
|
|
+ String newDate = dateTimeFormatter.format(projectMonth.getDayLogDate());
|
|
|
|
+ LocalDateTime dt = LocalDateTime.parse(newDate,df);
|
|
chuanyunSelfCostDO.setDayLogDate(dt);
|
|
chuanyunSelfCostDO.setDayLogDate(dt);
|
|
- chuanyunSelfCostDO.setTotalHour(monthHour.getStandardWorkHour());
|
|
|
|
|
|
+ chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
|
|
ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
|
|
ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
|
|
if (oldSelfDO !=null) {
|
|
if (oldSelfDO !=null) {
|
|
chuanyunSelfCostDao.delete(oldSelfDO);
|
|
chuanyunSelfCostDao.delete(oldSelfDO);
|
|
}
|
|
}
|
|
chuanyunSelfCostDao.save(chuanyunSelfCostDO);
|
|
chuanyunSelfCostDao.save(chuanyunSelfCostDO);
|
|
|
|
+
|
|
|
|
+
|
|
//更新氚云数据
|
|
//更新氚云数据
|
|
- chuanyunMemberMonthCostDO.setProjectId(projectMonth.getProjectId());
|
|
|
|
- chuanyunMemberMonthCostDO.setUserId(projectMonth.getUserId());
|
|
|
|
- chuanyunMemberMonthCostDO.setDayLogDate(dt);
|
|
|
|
- chuanyunMemberMonthCostDO.setWorkHour(monthHour.getStandardWorkHour());
|
|
|
|
|
|
+ chuanyunMemberMonthCostDTO.setProjectId(projectMonth.getProjectId());
|
|
|
|
+ chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
|
|
|
|
+ chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
|
|
|
|
+ chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
|
|
|
|
+ chuanyunMemberMonthCostDTO.setDayLogDate(dt);
|
|
|
|
+ chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
|
|
try {
|
|
try {
|
|
- List<String> macthers = new ArrayList<>();
|
|
|
|
- macthers.add("F0000003_2,"+projectMonth.getProjectId());
|
|
|
|
- macthers.add("F0000002_2,"+projectMonth.getUserId());
|
|
|
|
- macthers.add("F0000004_2,"+dt);
|
|
|
|
- var filter= Filter.instance(0,1,true,"And",macthers);
|
|
|
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
|
+ matchers.add("F0000003_2,"+projectMonth.getProjectId());
|
|
|
|
+ matchers.add("F0000002_2,"+projectMonth.getUserId());
|
|
|
|
+ matchers.add("F0000004_2,"+dt);
|
|
|
|
+ var filter= Filter.instance(0,1,true,"And",matchers);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
|
|
var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
|
|
- var membermonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDO);
|
|
|
|
|
|
+ var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
ChuanyunSaveDTO chuanyunSaveDTO;
|
|
if (chuanyunFindAllResponse.getReturnData()!=null){
|
|
if (chuanyunFindAllResponse.getReturnData()!=null){
|
|
List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
- ChuanyunMemberMonthCostDO chuanyunMemberMonthCostDO1 = result.get(0);
|
|
|
|
- chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO1.getObjectId(),membermonthString);
|
|
|
|
|
|
+ ChuanyunMemberMonthCostDO firstResult = result.get(0);
|
|
|
|
+ chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
|
|
}else {
|
|
}else {
|
|
- chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,membermonthString,true);
|
|
|
|
|
|
+ chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
|
|
}
|
|
}
|
|
if(chuanyunSaveDTO.getSuccessful()){
|
|
if(chuanyunSaveDTO.getSuccessful()){
|
|
- log.info("新增项目成员月度成本汇总成功");
|
|
|
|
|
|
+// log.info("新增项目成员月度成本汇总成功");
|
|
}else{
|
|
}else{
|
|
log.warn("新增项目成员月度成本汇总失败");
|
|
log.warn("新增项目成员月度成本汇总失败");
|
|
}
|
|
}
|
|
} catch (JsonProcessingException | BigSizeException e) {
|
|
} catch (JsonProcessingException | BigSizeException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
|
+ log.warn("########"+projectMonth+"");
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+@Data
|
|
|
|
+class ChuanyunMemberMonthCostDTO{
|
|
|
|
+ /**
|
|
|
|
+ * 项目ID
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000003")
|
|
|
|
+ private String projectId;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 项目类型
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000008")
|
|
|
|
+ private String projectType;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 用户ID
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000002")
|
|
|
|
+ private String userId;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 日期
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000004")
|
|
|
|
+ @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
|
|
|
|
+ @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
|
|
|
|
+ private LocalDateTime dayLogDate;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 工时
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000005")
|
|
|
|
+ private BigDecimal workHour;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 成本
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000006")
|
|
|
|
+ private BigDecimal cost;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 月度工时汇总
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000007")
|
|
|
|
+ private BigDecimal monthWorkHour;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+@Data
|
|
|
|
+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;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+@Data
|
|
|
|
+class ChuanyunProjectTotalCostDTO{
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 项目ID
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000001")
|
|
|
|
+ private String projectId;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 项目类型
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000004")
|
|
|
|
+ private String projectType;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 工时
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000003")
|
|
|
|
+ private BigDecimal workHour;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 成本
|
|
|
|
+ */
|
|
|
|
+ @JsonProperty("F0000002")
|
|
|
|
+ private BigDecimal cost;
|
|
|
|
+}
|