123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- package com.galaxis.manatee.task;
- 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.fasterxml.jackson.databind.annotation.JsonDeserialize;
- import com.fasterxml.jackson.databind.annotation.JsonSerialize;
- import com.galaxis.capsule.dto.PageDTO;
- import com.galaxis.manatee.dao.*;
- 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.manager.ClawFeign;
- import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
- import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
- import lombok.Data;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import java.math.BigDecimal;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @Service
- @Slf4j
- public class U9InfoTask {
- private final Integer pageSize=20;
- private final ChuanYunManager chuanYunManager;
- private final ClawFeign clawFeign;
- private final ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao;
- public U9InfoTask(ChuanYunManager chuanYunManager, ClawFeign clawFeign, ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao) {
- this.chuanYunManager = chuanYunManager;
- this.clawFeign = clawFeign;
- this.chuanyunBudgetStatisticsDao = chuanyunBudgetStatisticsDao;
- }
- @Scheduled(fixedDelay = 3600000L)
- private void getDataFromU9() {
- savePurCost();
- saveCashFlow();
- saveSupplier();
- saveLaborCost();
- saveBudgetStatistics();
- }
- /**
- * 更新项目物料成本
- */
- private void savePurCost() {
- 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<ChuanyunPurCostDTO> pageInfo = clawFeign.findChuanyunPurCost(map);
- if (page<=pageInfo.getTotalPages()){
- page += 1;
- }else {
- flag = false;
- break;
- }
- List<ChuanyunPurCostDTO> list = pageInfo.getContent();
- list.forEach(chuanyunPurCostDTO -> {
- try {
- if(chuanyunPurCostDTO != null) {
- PurCostDTO purCostDTO = new PurCostDTO(chuanyunPurCostDTO);
- var purcostString=objectMapper.writeValueAsString(purCostDTO);
- ChuanyunSaveDTO chuanyunSaveDTO;
- //根据项目号判断是否存在
- List<String> macthers = new ArrayList<>();
- macthers.add("F0000001_2,"+chuanyunPurCostDTO.getProjectcode());
- var filter= Filter.instance(0,1,true,"And",macthers);
- var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunPurCostDO.SCHEMA_CODE,filter);
- if (chuanyunFindAllResponse.getReturnData() == null) {
- //新增
- chuanyunSaveDTO =chuanYunManager.save(ChuanyunPurCostDO.SCHEMA_CODE,purcostString,true);
- }else {
- List<ChuanyunPurCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- ChuanyunPurCostDO chuanyunPurCostDO = result.get(0);
- //更新
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunPurCostDO.SCHEMA_CODE,chuanyunPurCostDO.getObjectId(),purcostString);
- }
- if(chuanyunSaveDTO.getSuccessful()){
- // log.info("新增项目物料成本成功");
- }else{
- log.warn("新增项目物料成本失败");
- }
- }
- } catch (JsonProcessingException | BigSizeException e) {
- e.printStackTrace();
- }
- });
- }
- }
- /**
- * 更新项目收付款
- */
- private void saveCashFlow() {
- 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<ChuanyunProjectCashFlowDTO> pageInfo = clawFeign.findChuanyunProjectCashFlow(map);
- if (page<=pageInfo.getTotalPages()){
- page += 1;
- }else {
- flag = false;
- break;
- }
- List<ChuanyunProjectCashFlowDTO> list = pageInfo.getContent();
- list.forEach(chuanyunProjectCashFlowDTO -> {
- try {
- if(chuanyunProjectCashFlowDTO != null) {
- CashFlowDTO cashFlowDTO = new CashFlowDTO(chuanyunProjectCashFlowDTO);
- var purcostString=objectMapper.writeValueAsString(cashFlowDTO);
- ChuanyunSaveDTO chuanyunSaveDTO;
- //根据项目号判断是否存在
- List<String> macthers = new ArrayList<>();
- macthers.add("F0000001_2,"+chuanyunProjectCashFlowDTO.getProjectcode());
- var filter= Filter.instance(0,1,true,"And",macthers);
- var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectCashFlowDO.SCHEMA_CODE,filter);
- if (chuanyunFindAllResponse.getReturnData() == null) {
- //新增
- chuanyunSaveDTO =chuanYunManager.save(ChuanyunProjectCashFlowDO.SCHEMA_CODE,purcostString,true);
- }else {
- List<ChuanyunProjectCashFlowDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- ChuanyunProjectCashFlowDO chuanyunProjectCashFlowDO = result.get(0);
- //更新
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectCashFlowDO.SCHEMA_CODE,chuanyunProjectCashFlowDO.getObjectId(),purcostString);
- }
- if(chuanyunSaveDTO.getSuccessful()){
- // log.info("新增项目收付款成功");
- }else{
- log.warn("新增项目收付款失败");
- }
- }
- } catch (JsonProcessingException | BigSizeException e) {
- e.printStackTrace();
- }
- });
- }
- }
- /**
- * U9供应商信息
- */
- private void saveSupplier() {
- 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<ChuanyunSupplierDTO> pageInfo=clawFeign.findChuanyunSupplier(map);
- if (page<=pageInfo.getTotalPages()){
- page += 1;
- }else {
- flag = false;
- break;
- }
- List<ChuanyunSupplierDTO> list = pageInfo.getContent();
- list.forEach(chuanyunSupplierDTO -> {
- SupplierDTO supplierDTO = new SupplierDTO(chuanyunSupplierDTO);
- try {
- var supplierString = objectMapper.writeValueAsString(supplierDTO);
- ChuanyunSaveDTO chuanyunSaveDTO;
- //根据编码判断供应商是否存在
- List<String> macthers = new ArrayList<>();
- macthers.add("F0000001_2,"+chuanyunSupplierDTO.getName());
- var filter= Filter.instance(0,1,true,"And",macthers);
- var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSupplierDO.SCHEMA_CODE,filter);
- if (chuanyunFindAllResponse.getReturnData() == null) {
- chuanyunSaveDTO=chuanYunManager.save(ChuanyunSupplierDO.SCHEMA_CODE,supplierString,true);
- }else {
- List<ChuanyunSupplierDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- chuanyunSaveDTO=chuanYunManager.update(ChuanyunSupplierDO.SCHEMA_CODE,result.get(0).getObjectId(),supplierString);
- }
- if(chuanyunSaveDTO.getSuccessful()){
- // log.info("新增供应商信息成功");
- }else{
- log.warn("新增供应商信息失败");
- }
- } catch (JsonProcessingException | BigSizeException e) {
- e.printStackTrace();
- }
- });
- }
- }
- /**
- * 新增人力成本
- */
- private void saveLaborCost() {
- 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<ChuanyunLaborCostDTO> pageInfo = clawFeign.findChuanyunLaborCost(map);
- if (page<=pageInfo.getTotalPages()){
- page += 1;
- }else {
- flag = false;
- break;
- }
- List<ChuanyunLaborCostDTO> list = pageInfo.getContent();
- list.forEach(chuanyunLaborCostDTO -> {
- try {
- if(chuanyunLaborCostDTO != null) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
- String newDate = dateTimeFormatter.format(chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod());
- LocalDateTime dt = LocalDateTime.parse(newDate,dateTimeFormatter);
- chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().setPeriod(dt);
- LaborCostDTO laborCostDTO = new LaborCostDTO(chuanyunLaborCostDTO);
- laborCostDTO.setDataType("U9");
- var purcostString=objectMapper.writeValueAsString(laborCostDTO);
- ChuanyunSaveDTO chuanyunSaveDTO;
- //根据项目号判断是否存在
- List<String> matchers = new ArrayList<>();
- matchers.add("F0000005_2,"+chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode());
- matchers.add("F0000002_2,"+chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod());
- var filter= Filter.instance(0,1,true,"And",matchers);
- var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMonthLaborCostDO.SCHEMA_CODE,filter);
- if (chuanyunFindAllResponse.getReturnData() == null) {
- //新增
- chuanyunSaveDTO =chuanYunManager.save(ChuanyunMonthLaborCostDO.SCHEMA_CODE,purcostString,true);
- }else {
- List<ChuanyunMonthLaborCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- // ChuanyunMonthLaborCostDO chuanyunMonthLaborCostDO = result.get(0);
- //更新
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunMonthLaborCostDO.SCHEMA_CODE,result.get(0).getObjectId(),purcostString);
- }
- if(chuanyunSaveDTO.getSuccessful()){
- // log.info("新增项目人力成本成功");
- }else{
- log.warn("新增项目人力成本失败");
- }
- }
- } catch (JsonProcessingException | BigSizeException e) {
- e.printStackTrace();
- }
- });
- }
- }
- /**
- * 更新项目预决算统计
- */
- private void saveBudgetStatistics() {
- List<ChuanyunBudgetStatisticsDO> list = chuanyunBudgetStatisticsDao.findAll();
- list.forEach(chuanyunBudgetStatisticsDO -> {
- if (!StringUtils.isEmpty(chuanyunBudgetStatisticsDO.getProject())){
- var objectMapper = new ObjectMapper();
- try {
- //集团总表中查找项目
- List<String> projectmatchers = new ArrayList<>();
- projectmatchers.add("Name_2,"+chuanyunBudgetStatisticsDO.getProject());
- var projectfilter= Filter.instance(0,1,true,"And",projectmatchers);
- var chuanyunFindResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,projectfilter);
- if (chuanyunFindResponse.getReturnData()!=null){
- List<ChuanyunGroupProjectDO> projectresult=objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- chuanyunBudgetStatisticsDO.setProject(projectresult.get(0).getObjectId());
- List<String> matchers = new ArrayList<>();
- ChuanyunSaveDTO chuanyunSaveDTO;
- matchers.add("F0000001_2,"+chuanyunBudgetStatisticsDO.getProject());
- matchers.add("F0000002_2,"+chuanyunBudgetStatisticsDO.getFeeType());
- var filter= Filter.instance(0,1,true,"And",matchers);
- var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBudgetAmountDO.SCHEMA_CODE,filter);
- BudgetDTO budgetDTO = new BudgetDTO(chuanyunBudgetStatisticsDO);
- budgetDTO.setDate(LocalDateTime.of(2020,2,1,0,0));
- var budgetString = objectMapper.writeValueAsString(budgetDTO);
- if (chuanyunFindAllResponse.getReturnData() != null) {
- List<ChuanyunBudgetAmountDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
- ChuanyunBudgetAmountDO chuanyunBudgetAmountDO = result.get(0);
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunBudgetAmountDO.SCHEMA_CODE,chuanyunBudgetAmountDO.getObjectId(),budgetString);
- }else {
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunBudgetAmountDO.SCHEMA_CODE,budgetString,true);
- }
- if(chuanyunSaveDTO.getSuccessful()){
- // log.info("新增项目预决算统计成功");
- }else{
- log.warn("新增项目预决算统计失败");
- }
- }
- } catch (JsonProcessingException | BigSizeException e) {
- e.printStackTrace();
- }
- }
- });
- }
- @Data
- class PurCostDTO {
- @JsonProperty("F0000001")
- private String projectcode;
- /**
- * 采购成本
- */
- @JsonProperty("F0000002")
- private BigDecimal purcost;
- /**
- * 领料成本
- */
- @JsonProperty("F0000003")
- private BigDecimal issuedcost;
- public PurCostDTO(ChuanyunPurCostDTO chuanyunPurCostDTO) {
- if (null!=chuanyunPurCostDTO) {
- if (null != chuanyunPurCostDTO.getProjectcode()) {
- this.projectcode = chuanyunPurCostDTO.getProjectcode();
- }
- if (null != chuanyunPurCostDTO.getPurcost()) {
- this.purcost = chuanyunPurCostDTO.getPurcost();
- }
- if (null != chuanyunPurCostDTO.getIssuedcost()) {
- this.issuedcost = chuanyunPurCostDTO.getIssuedcost();
- }
- }
- }
- }
- @Data
- class SupplierDTO{
- /**
- * 供应商名称
- */
- @JsonProperty("F0000001")
- private String supplierName;
- /**
- * U9代码
- */
- @JsonProperty("F0000002")
- private String supplierCode;
- public SupplierDTO(ChuanyunSupplierDTO chuanyunSupplierDTO) {
- if (null!=chuanyunSupplierDTO){
- if (null!=chuanyunSupplierDTO.getCode()){
- this.supplierCode=chuanyunSupplierDTO.getCode();
- }
- if (null!=chuanyunSupplierDTO.getName()){
- this.supplierName=chuanyunSupplierDTO.getName();
- }
- }
- }
- }
- @Data
- class LaborCostDTO {
- @JsonProperty("F0000005")
- private String projectCode;
- @JsonProperty("F0000003")
- private BigDecimal amount;
- @JsonProperty("F0000002")
- @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
- @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
- private LocalDateTime logDate;
- @JsonProperty("F0000004")
- private String dataType;
- public LaborCostDTO(ChuanyunLaborCostDTO chuanyunMonthLaborCostDTO) {
- if (null!=chuanyunMonthLaborCostDTO){
- if (null!=chuanyunMonthLaborCostDTO.getCostamount()){
- this.amount=chuanyunMonthLaborCostDTO.getCostamount();
- }
- if (null!=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode()){
- this.projectCode=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode();
- }
- if (null!=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod()){
- this.logDate=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod();
- }
- }
- }
- }
- @Data
- class BudgetDTO{
- /**
- * 所属项目
- */
- @JsonProperty("F0000001")
- private String project;
- /**
- * 费用类型
- */
- @JsonProperty("F0000002")
- private String feeType;
- /**
- * 预算金额
- */
- @JsonProperty("F0000003")
- private BigDecimal budgetAmount;
- /**
- * 默认日期(4月份)
- */
- @JsonProperty("F0000006")
- @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
- @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
- private LocalDateTime date;
- /**
- * 决算金额
- */
- @JsonProperty("F0000004")
- private BigDecimal finalAmount;
- /**
- * 预算绝算差异
- */
- @JsonProperty("F0000005")
- private BigDecimal differenceAmount;
- public BudgetDTO(ChuanyunBudgetStatisticsDO chuanyunBudgetStatisticsDO) {
- if (null!=chuanyunBudgetStatisticsDO){
- if (null!=chuanyunBudgetStatisticsDO.getBudgetAmount()){
- this.budgetAmount=chuanyunBudgetStatisticsDO.getBudgetAmount();
- }
- if (null!=chuanyunBudgetStatisticsDO.getFinalAmount()){
- this.finalAmount=chuanyunBudgetStatisticsDO.getFinalAmount();
- }
- if (null!=chuanyunBudgetStatisticsDO.getFeeType()){
- this.feeType=chuanyunBudgetStatisticsDO.getFeeType();
- }
- if (null!=chuanyunBudgetStatisticsDO.getProject()){
- this.project=chuanyunBudgetStatisticsDO.getProject();
- }
- if (null!=chuanyunBudgetStatisticsDO.getDifferenceAmount()){
- this.differenceAmount=chuanyunBudgetStatisticsDO.getDifferenceAmount();
- }
- }
- }
- }
- @Data
- class CashFlowDTO {
- @JsonProperty("F0000001")
- private String projectcode;
- /**
- * 收款金额
- */
- @JsonProperty("F0000002")
- private BigDecimal income;
- /**
- * 付款金额
- */
- @JsonProperty("F0000003")
- private BigDecimal outcome;
- public CashFlowDTO(ChuanyunProjectCashFlowDTO chuanyunProjectCashFlowDTO) {
- if (null!=chuanyunProjectCashFlowDTO) {
- if (null!=chuanyunProjectCashFlowDTO.getProjectcode()) {
- this.projectcode=chuanyunProjectCashFlowDTO.getProjectcode();
- }
- if (null!=chuanyunProjectCashFlowDTO.getOutcome()) {
- this.outcome=chuanyunProjectCashFlowDTO.getOutcome();
- }
- if (null!=chuanyunProjectCashFlowDTO.getIncome()) {
- this.income=chuanyunProjectCashFlowDTO.getIncome();
- }
- }
- }
- }
- }
|