U9InfoTask.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. package com.galaxis.manatee.task;
  2. import com.fasterxml.jackson.annotation.JsonProperty;
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.core.type.TypeReference;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
  7. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  8. import com.galaxis.capsule.dto.PageDTO;
  9. import com.galaxis.manatee.dao.*;
  10. import com.galaxis.manatee.entity.chuanyun.data.object.*;
  11. import com.galaxis.manatee.entity.chuanyun.dto.*;
  12. import com.galaxis.manatee.exception.BigSizeException;
  13. import com.galaxis.manatee.manager.ChuanYunManager;
  14. import com.galaxis.manatee.manager.ClawFeign;
  15. import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
  16. import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
  17. import lombok.Data;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.scheduling.annotation.Scheduled;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.util.StringUtils;
  22. import java.math.BigDecimal;
  23. import java.time.LocalDateTime;
  24. import java.time.format.DateTimeFormatter;
  25. import java.util.ArrayList;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29. @Service
  30. @Slf4j
  31. public class U9InfoTask {
  32. private final Integer pageSize=20;
  33. private final ChuanYunManager chuanYunManager;
  34. private final ClawFeign clawFeign;
  35. private final ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao;
  36. public U9InfoTask(ChuanYunManager chuanYunManager, ClawFeign clawFeign, ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao) {
  37. this.chuanYunManager = chuanYunManager;
  38. this.clawFeign = clawFeign;
  39. this.chuanyunBudgetStatisticsDao = chuanyunBudgetStatisticsDao;
  40. }
  41. @Scheduled(fixedDelay = 3600000L)
  42. private void getDataFromU9() {
  43. savePurCost();
  44. saveCashFlow();
  45. saveSupplier();
  46. saveLaborCost();
  47. saveBudgetStatistics();
  48. }
  49. /**
  50. * 更新项目物料成本
  51. */
  52. private void savePurCost() {
  53. var objectMapper=new ObjectMapper();
  54. var page = 1;
  55. var size = 20;
  56. var flag=true;
  57. while (flag) {
  58. Map<String,String> map=new HashMap<>(1);
  59. map.put("page",String.valueOf(page));
  60. map.put("size",String.valueOf(size));
  61. //获取物料成本
  62. PageDTO<ChuanyunPurCostDTO> pageInfo = clawFeign.findChuanyunPurCost(map);
  63. if (page<=pageInfo.getTotalPages()){
  64. page += 1;
  65. }else {
  66. flag = false;
  67. break;
  68. }
  69. List<ChuanyunPurCostDTO> list = pageInfo.getContent();
  70. list.forEach(chuanyunPurCostDTO -> {
  71. try {
  72. if(chuanyunPurCostDTO != null) {
  73. PurCostDTO purCostDTO = new PurCostDTO(chuanyunPurCostDTO);
  74. var purcostString=objectMapper.writeValueAsString(purCostDTO);
  75. ChuanyunSaveDTO chuanyunSaveDTO;
  76. //根据项目号判断是否存在
  77. List<String> macthers = new ArrayList<>();
  78. macthers.add("F0000001_2,"+chuanyunPurCostDTO.getProjectcode());
  79. var filter= Filter.instance(0,1,true,"And",macthers);
  80. var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunPurCostDO.SCHEMA_CODE,filter);
  81. if (chuanyunFindAllResponse.getReturnData() == null) {
  82. //新增
  83. chuanyunSaveDTO =chuanYunManager.save(ChuanyunPurCostDO.SCHEMA_CODE,purcostString,true);
  84. }else {
  85. List<ChuanyunPurCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  86. ChuanyunPurCostDO chuanyunPurCostDO = result.get(0);
  87. //更新
  88. chuanyunSaveDTO = chuanYunManager.update(ChuanyunPurCostDO.SCHEMA_CODE,chuanyunPurCostDO.getObjectId(),purcostString);
  89. }
  90. if(chuanyunSaveDTO.getSuccessful()){
  91. // log.info("新增项目物料成本成功");
  92. }else{
  93. log.warn("新增项目物料成本失败");
  94. }
  95. }
  96. } catch (JsonProcessingException | BigSizeException e) {
  97. e.printStackTrace();
  98. }
  99. });
  100. }
  101. }
  102. /**
  103. * 更新项目收付款
  104. */
  105. private void saveCashFlow() {
  106. var objectMapper=new ObjectMapper();
  107. var page = 1;
  108. var size = 20;
  109. var flag=true;
  110. while (flag) {
  111. Map<String,String> map=new HashMap<>(1);
  112. map.put("page",String.valueOf(page));
  113. map.put("size",String.valueOf(size));
  114. //获取收付款
  115. PageDTO<ChuanyunProjectCashFlowDTO> pageInfo = clawFeign.findChuanyunProjectCashFlow(map);
  116. if (page<=pageInfo.getTotalPages()){
  117. page += 1;
  118. }else {
  119. flag = false;
  120. break;
  121. }
  122. List<ChuanyunProjectCashFlowDTO> list = pageInfo.getContent();
  123. list.forEach(chuanyunProjectCashFlowDTO -> {
  124. try {
  125. if(chuanyunProjectCashFlowDTO != null) {
  126. CashFlowDTO cashFlowDTO = new CashFlowDTO(chuanyunProjectCashFlowDTO);
  127. var purcostString=objectMapper.writeValueAsString(cashFlowDTO);
  128. ChuanyunSaveDTO chuanyunSaveDTO;
  129. //根据项目号判断是否存在
  130. List<String> macthers = new ArrayList<>();
  131. macthers.add("F0000001_2,"+chuanyunProjectCashFlowDTO.getProjectcode());
  132. var filter= Filter.instance(0,1,true,"And",macthers);
  133. var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectCashFlowDO.SCHEMA_CODE,filter);
  134. if (chuanyunFindAllResponse.getReturnData() == null) {
  135. //新增
  136. chuanyunSaveDTO =chuanYunManager.save(ChuanyunProjectCashFlowDO.SCHEMA_CODE,purcostString,true);
  137. }else {
  138. List<ChuanyunProjectCashFlowDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  139. ChuanyunProjectCashFlowDO chuanyunProjectCashFlowDO = result.get(0);
  140. //更新
  141. chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectCashFlowDO.SCHEMA_CODE,chuanyunProjectCashFlowDO.getObjectId(),purcostString);
  142. }
  143. if(chuanyunSaveDTO.getSuccessful()){
  144. // log.info("新增项目收付款成功");
  145. }else{
  146. log.warn("新增项目收付款失败");
  147. }
  148. }
  149. } catch (JsonProcessingException | BigSizeException e) {
  150. e.printStackTrace();
  151. }
  152. });
  153. }
  154. }
  155. /**
  156. * U9供应商信息
  157. */
  158. private void saveSupplier() {
  159. var objectMapper=new ObjectMapper();
  160. var page = 1;
  161. var size = 20;
  162. var flag=true;
  163. while (flag) {
  164. Map<String,String> map=new HashMap<>(1);
  165. map.put("page",String.valueOf(page));
  166. map.put("size",String.valueOf(size));
  167. //获取供应商信息
  168. PageDTO<ChuanyunSupplierDTO> pageInfo=clawFeign.findChuanyunSupplier(map);
  169. if (page<=pageInfo.getTotalPages()){
  170. page += 1;
  171. }else {
  172. flag = false;
  173. break;
  174. }
  175. List<ChuanyunSupplierDTO> list = pageInfo.getContent();
  176. list.forEach(chuanyunSupplierDTO -> {
  177. SupplierDTO supplierDTO = new SupplierDTO(chuanyunSupplierDTO);
  178. try {
  179. var supplierString = objectMapper.writeValueAsString(supplierDTO);
  180. ChuanyunSaveDTO chuanyunSaveDTO;
  181. //根据编码判断供应商是否存在
  182. List<String> macthers = new ArrayList<>();
  183. macthers.add("F0000001_2,"+chuanyunSupplierDTO.getName());
  184. var filter= Filter.instance(0,1,true,"And",macthers);
  185. var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSupplierDO.SCHEMA_CODE,filter);
  186. if (chuanyunFindAllResponse.getReturnData() == null) {
  187. chuanyunSaveDTO=chuanYunManager.save(ChuanyunSupplierDO.SCHEMA_CODE,supplierString,true);
  188. }else {
  189. List<ChuanyunSupplierDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  190. chuanyunSaveDTO=chuanYunManager.update(ChuanyunSupplierDO.SCHEMA_CODE,result.get(0).getObjectId(),supplierString);
  191. }
  192. if(chuanyunSaveDTO.getSuccessful()){
  193. // log.info("新增供应商信息成功");
  194. }else{
  195. log.warn("新增供应商信息失败");
  196. }
  197. } catch (JsonProcessingException | BigSizeException e) {
  198. e.printStackTrace();
  199. }
  200. });
  201. }
  202. }
  203. /**
  204. * 新增人力成本
  205. */
  206. private void saveLaborCost() {
  207. var objectMapper=new ObjectMapper();
  208. var page = 1;
  209. var size = 20;
  210. var flag=true;
  211. while (flag) {
  212. Map<String,String> map=new HashMap<>(1);
  213. map.put("page",String.valueOf(page));
  214. map.put("size",String.valueOf(size));
  215. //获取物料成本
  216. PageDTO<ChuanyunLaborCostDTO> pageInfo = clawFeign.findChuanyunLaborCost(map);
  217. if (page<=pageInfo.getTotalPages()){
  218. page += 1;
  219. }else {
  220. flag = false;
  221. break;
  222. }
  223. List<ChuanyunLaborCostDTO> list = pageInfo.getContent();
  224. list.forEach(chuanyunLaborCostDTO -> {
  225. try {
  226. if(chuanyunLaborCostDTO != null) {
  227. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
  228. String newDate = dateTimeFormatter.format(chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod());
  229. LocalDateTime dt = LocalDateTime.parse(newDate,dateTimeFormatter);
  230. chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().setPeriod(dt);
  231. LaborCostDTO laborCostDTO = new LaborCostDTO(chuanyunLaborCostDTO);
  232. laborCostDTO.setDataType("U9");
  233. var purcostString=objectMapper.writeValueAsString(laborCostDTO);
  234. ChuanyunSaveDTO chuanyunSaveDTO;
  235. //根据项目号判断是否存在
  236. List<String> matchers = new ArrayList<>();
  237. matchers.add("F0000005_2,"+chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode());
  238. matchers.add("F0000002_2,"+chuanyunLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod());
  239. var filter= Filter.instance(0,1,true,"And",matchers);
  240. var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMonthLaborCostDO.SCHEMA_CODE,filter);
  241. if (chuanyunFindAllResponse.getReturnData() == null) {
  242. //新增
  243. chuanyunSaveDTO =chuanYunManager.save(ChuanyunMonthLaborCostDO.SCHEMA_CODE,purcostString,true);
  244. }else {
  245. List<ChuanyunMonthLaborCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  246. // ChuanyunMonthLaborCostDO chuanyunMonthLaborCostDO = result.get(0);
  247. //更新
  248. chuanyunSaveDTO = chuanYunManager.update(ChuanyunMonthLaborCostDO.SCHEMA_CODE,result.get(0).getObjectId(),purcostString);
  249. }
  250. if(chuanyunSaveDTO.getSuccessful()){
  251. // log.info("新增项目人力成本成功");
  252. }else{
  253. log.warn("新增项目人力成本失败");
  254. }
  255. }
  256. } catch (JsonProcessingException | BigSizeException e) {
  257. e.printStackTrace();
  258. }
  259. });
  260. }
  261. }
  262. /**
  263. * 更新项目预决算统计
  264. */
  265. private void saveBudgetStatistics() {
  266. List<ChuanyunBudgetStatisticsDO> list = chuanyunBudgetStatisticsDao.findAll();
  267. list.forEach(chuanyunBudgetStatisticsDO -> {
  268. if (!StringUtils.isEmpty(chuanyunBudgetStatisticsDO.getProject())){
  269. var objectMapper = new ObjectMapper();
  270. try {
  271. //集团总表中查找项目
  272. List<String> projectmatchers = new ArrayList<>();
  273. projectmatchers.add("Name_2,"+chuanyunBudgetStatisticsDO.getProject());
  274. var projectfilter= Filter.instance(0,1,true,"And",projectmatchers);
  275. var chuanyunFindResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,projectfilter);
  276. if (chuanyunFindResponse.getReturnData()!=null){
  277. List<ChuanyunGroupProjectDO> projectresult=objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  278. chuanyunBudgetStatisticsDO.setProject(projectresult.get(0).getObjectId());
  279. List<String> matchers = new ArrayList<>();
  280. ChuanyunSaveDTO chuanyunSaveDTO;
  281. matchers.add("F0000001_2,"+chuanyunBudgetStatisticsDO.getProject());
  282. matchers.add("F0000002_2,"+chuanyunBudgetStatisticsDO.getFeeType());
  283. var filter= Filter.instance(0,1,true,"And",matchers);
  284. var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunBudgetAmountDO.SCHEMA_CODE,filter);
  285. BudgetDTO budgetDTO = new BudgetDTO(chuanyunBudgetStatisticsDO);
  286. budgetDTO.setDate(LocalDateTime.of(2020,2,1,0,0));
  287. var budgetString = objectMapper.writeValueAsString(budgetDTO);
  288. if (chuanyunFindAllResponse.getReturnData() != null) {
  289. List<ChuanyunBudgetAmountDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
  290. ChuanyunBudgetAmountDO chuanyunBudgetAmountDO = result.get(0);
  291. chuanyunSaveDTO = chuanYunManager.update(ChuanyunBudgetAmountDO.SCHEMA_CODE,chuanyunBudgetAmountDO.getObjectId(),budgetString);
  292. }else {
  293. chuanyunSaveDTO = chuanYunManager.save(ChuanyunBudgetAmountDO.SCHEMA_CODE,budgetString,true);
  294. }
  295. if(chuanyunSaveDTO.getSuccessful()){
  296. // log.info("新增项目预决算统计成功");
  297. }else{
  298. log.warn("新增项目预决算统计失败");
  299. }
  300. }
  301. } catch (JsonProcessingException | BigSizeException e) {
  302. e.printStackTrace();
  303. }
  304. }
  305. });
  306. }
  307. @Data
  308. class PurCostDTO {
  309. @JsonProperty("F0000001")
  310. private String projectcode;
  311. /**
  312. * 采购成本
  313. */
  314. @JsonProperty("F0000002")
  315. private BigDecimal purcost;
  316. /**
  317. * 领料成本
  318. */
  319. @JsonProperty("F0000003")
  320. private BigDecimal issuedcost;
  321. public PurCostDTO(ChuanyunPurCostDTO chuanyunPurCostDTO) {
  322. if (null!=chuanyunPurCostDTO) {
  323. if (null != chuanyunPurCostDTO.getProjectcode()) {
  324. this.projectcode = chuanyunPurCostDTO.getProjectcode();
  325. }
  326. if (null != chuanyunPurCostDTO.getPurcost()) {
  327. this.purcost = chuanyunPurCostDTO.getPurcost();
  328. }
  329. if (null != chuanyunPurCostDTO.getIssuedcost()) {
  330. this.issuedcost = chuanyunPurCostDTO.getIssuedcost();
  331. }
  332. }
  333. }
  334. }
  335. @Data
  336. class SupplierDTO{
  337. /**
  338. * 供应商名称
  339. */
  340. @JsonProperty("F0000001")
  341. private String supplierName;
  342. /**
  343. * U9代码
  344. */
  345. @JsonProperty("F0000002")
  346. private String supplierCode;
  347. public SupplierDTO(ChuanyunSupplierDTO chuanyunSupplierDTO) {
  348. if (null!=chuanyunSupplierDTO){
  349. if (null!=chuanyunSupplierDTO.getCode()){
  350. this.supplierCode=chuanyunSupplierDTO.getCode();
  351. }
  352. if (null!=chuanyunSupplierDTO.getName()){
  353. this.supplierName=chuanyunSupplierDTO.getName();
  354. }
  355. }
  356. }
  357. }
  358. @Data
  359. class LaborCostDTO {
  360. @JsonProperty("F0000005")
  361. private String projectCode;
  362. @JsonProperty("F0000003")
  363. private BigDecimal amount;
  364. @JsonProperty("F0000002")
  365. @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
  366. @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
  367. private LocalDateTime logDate;
  368. @JsonProperty("F0000004")
  369. private String dataType;
  370. public LaborCostDTO(ChuanyunLaborCostDTO chuanyunMonthLaborCostDTO) {
  371. if (null!=chuanyunMonthLaborCostDTO){
  372. if (null!=chuanyunMonthLaborCostDTO.getCostamount()){
  373. this.amount=chuanyunMonthLaborCostDTO.getCostamount();
  374. }
  375. if (null!=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode()){
  376. this.projectCode=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getProjectcode();
  377. }
  378. if (null!=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod()){
  379. this.logDate=chuanyunMonthLaborCostDTO.getChuanyunLaborCostPrimaryKey().getPeriod();
  380. }
  381. }
  382. }
  383. }
  384. @Data
  385. class BudgetDTO{
  386. /**
  387. * 所属项目
  388. */
  389. @JsonProperty("F0000001")
  390. private String project;
  391. /**
  392. * 费用类型
  393. */
  394. @JsonProperty("F0000002")
  395. private String feeType;
  396. /**
  397. * 预算金额
  398. */
  399. @JsonProperty("F0000003")
  400. private BigDecimal budgetAmount;
  401. /**
  402. * 默认日期(4月份)
  403. */
  404. @JsonProperty("F0000006")
  405. @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
  406. @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
  407. private LocalDateTime date;
  408. /**
  409. * 决算金额
  410. */
  411. @JsonProperty("F0000004")
  412. private BigDecimal finalAmount;
  413. /**
  414. * 预算绝算差异
  415. */
  416. @JsonProperty("F0000005")
  417. private BigDecimal differenceAmount;
  418. public BudgetDTO(ChuanyunBudgetStatisticsDO chuanyunBudgetStatisticsDO) {
  419. if (null!=chuanyunBudgetStatisticsDO){
  420. if (null!=chuanyunBudgetStatisticsDO.getBudgetAmount()){
  421. this.budgetAmount=chuanyunBudgetStatisticsDO.getBudgetAmount();
  422. }
  423. if (null!=chuanyunBudgetStatisticsDO.getFinalAmount()){
  424. this.finalAmount=chuanyunBudgetStatisticsDO.getFinalAmount();
  425. }
  426. if (null!=chuanyunBudgetStatisticsDO.getFeeType()){
  427. this.feeType=chuanyunBudgetStatisticsDO.getFeeType();
  428. }
  429. if (null!=chuanyunBudgetStatisticsDO.getProject()){
  430. this.project=chuanyunBudgetStatisticsDO.getProject();
  431. }
  432. if (null!=chuanyunBudgetStatisticsDO.getDifferenceAmount()){
  433. this.differenceAmount=chuanyunBudgetStatisticsDO.getDifferenceAmount();
  434. }
  435. }
  436. }
  437. }
  438. @Data
  439. class CashFlowDTO {
  440. @JsonProperty("F0000001")
  441. private String projectcode;
  442. /**
  443. * 收款金额
  444. */
  445. @JsonProperty("F0000002")
  446. private BigDecimal income;
  447. /**
  448. * 付款金额
  449. */
  450. @JsonProperty("F0000003")
  451. private BigDecimal outcome;
  452. public CashFlowDTO(ChuanyunProjectCashFlowDTO chuanyunProjectCashFlowDTO) {
  453. if (null!=chuanyunProjectCashFlowDTO) {
  454. if (null!=chuanyunProjectCashFlowDTO.getProjectcode()) {
  455. this.projectcode=chuanyunProjectCashFlowDTO.getProjectcode();
  456. }
  457. if (null!=chuanyunProjectCashFlowDTO.getOutcome()) {
  458. this.outcome=chuanyunProjectCashFlowDTO.getOutcome();
  459. }
  460. if (null!=chuanyunProjectCashFlowDTO.getIncome()) {
  461. this.income=chuanyunProjectCashFlowDTO.getIncome();
  462. }
  463. }
  464. }
  465. }
  466. }