PnsDataSyncTask.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.uas.eis.task;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import com.uas.eis.config.PNSConfig;
  6. import com.uas.eis.dao.BaseDao;
  7. import com.uas.eis.entity.PNSSendData;
  8. import com.uas.eis.entity.PNSSendResp;
  9. import com.uas.eis.utils.FlexJsonUtil;
  10. import com.uas.eis.utils.HttpUtil;
  11. import com.uas.eis.utils.StringUtil;
  12. import net.sf.json.JSONObject;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.dao.EmptyResultDataAccessException;
  17. import org.springframework.http.HttpStatus;
  18. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  19. import org.springframework.scheduling.annotation.Scheduled;
  20. import org.springframework.stereotype.Component;
  21. import org.springframework.util.StringUtils;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. @Component
  27. public class PnsDataSyncTask {
  28. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  29. private int pageSize = 50;
  30. @Autowired
  31. private PNSConfig pnsConfig;
  32. @Autowired
  33. private BaseDao baseDao;
  34. /**
  35. * 第一商品营业部 1453
  36. * 第二商品营业部 733
  37. * */
  38. @Scheduled(cron = "0 0/5 * * * ?")
  39. public void UploadSaleData(){
  40. logger.info("Sale Upload Start---");
  41. List<PNSSendData> saleUploads = getSaleDataUpload();
  42. if(saleUploads.size() < 1 ) {
  43. return;
  44. }
  45. //分页上传
  46. int a = saleUploads.size() / pageSize;
  47. int b = saleUploads.size() % pageSize;
  48. int pages = a + (b>0?1:0);
  49. HashMap<String, String> reqHeader = new HashMap<>();
  50. reqHeader.put("fromsys","ISP");
  51. JSONObject pageReq = new JSONObject();
  52. pageReq.put("if_name","ISPP-PSI-UPLOAD");
  53. pageReq.put("if_key" , pnsConfig.getIf_key());
  54. pageReq.put("total_page", String.valueOf(pages));
  55. pageReq.put("total_data_count", String.valueOf(saleUploads.size()));
  56. logger.info("Sale Upload totalSize {}", pages);
  57. int flag = 0;
  58. for(int i = 0 ; i < pages; i++) {
  59. pageReq.put("current_page", String.valueOf(i+1));
  60. if((i+1)*pageSize > saleUploads.size()) {
  61. pageReq.put("current_data_count", String.valueOf(b));
  62. pageReq.put("detail", JSONArray.toJSONString(saleUploads.subList(i*pageSize, i*pageSize+b), SerializerFeature.WriteMapNullValue));
  63. }else {
  64. pageReq.put("current_data_count", String.valueOf(pageSize));
  65. pageReq.put("detail", JSONArray.toJSONString(saleUploads.subList(i*pageSize, (i+1)*pageSize),SerializerFeature.WriteMapNullValue));
  66. }
  67. try {
  68. logger.info("上传数据{}",pageReq.toString());
  69. HttpUtil.Response response = HttpUtil.sendPostRequest(pnsConfig.getRoute(), reqHeader, pageReq.toString());
  70. logger.info("{}, statusCode{},{}",response.getResponseText(), response.getStatusCode(), response.getStatusCode() == HttpStatus.OK.value());
  71. if (response.getStatusCode() == HttpStatus.OK.value()) {
  72. String data = response.getResponseText();
  73. logger.info("{}", StringUtils.hasText(data));
  74. if (StringUtils.hasText(data)) {
  75. PNSSendResp resp = FlexJsonUtil.fromJson(String.valueOf(FlexJsonUtil.fromJson(data).get("result")), PNSSendResp.class);
  76. if(resp.getSuccess()) {
  77. logger.info("Sale Upload success Size {}", i);
  78. pageReq.put("if_batch_no",resp.getIf_batch_no());
  79. }
  80. }
  81. }else {
  82. flag= 1;
  83. }
  84. } catch (Exception e) {
  85. flag= 1;
  86. logger.info(e.getMessage());
  87. e.printStackTrace();
  88. }
  89. }
  90. if(flag == 0 ) {
  91. baseDao.execute("UPDATE PNS_SENDDATADETAIL SET UPLOAD=-1 WHERE NVL(CONFIRM_STATUS,'已确认')='已确认' AND UPLOAD=0");
  92. baseDao.execute("UPDATE PNS_SENDDATAMAIN SET LAST_SENDDATE=SYSDATE,SENDSTATUS_='已发送' WHERE NVL(SENDSTATUS_,' ')='待发送'");
  93. }
  94. }
  95. public List<PNSSendData> getSaleDataUpload() {
  96. try {
  97. List<PNSSendData> sendSales = baseDao
  98. .getJdbcTemplate()
  99. .query(" SELECT SUBSTR(YEAR_MONTH,1,4)||'-'||SUBSTR(YEAR_MONTH,5,2) ymonth,MODEL_NO_CUST,MODEL_NO_ISP,(CASE WHEN FINAL_BUYER_ISP IS NOT NULL THEN FINAL_BUYER_ISP ELSE FINAL_BUYER_CUST END ) FINAL_BUYER_CUST,FINAL_BUYER_ISP,FINAL_BUYER_NAME,CONFIRM_DATE,DATA_TYPE,DIVISION_NO,ROUND(SUM(QUANTITY),0) QUANTITY,CUST_ID,CUST_NAME FROM PNS_SENDDATADETAIL LEFT JOIN PNS_SENDDATAMAIN ON PNS_SENDDATADETAIL.MM_ID=PNS_SENDDATAMAIN.MAIN_ID " +
  100. " WHERE NVL(SENDSTATUS_,' ')='待发送' AND NVL(CONFIRM_STATUS,'已确认')='已确认' GROUP BY YEAR_MONTH,MODEL_NO_CUST,MODEL_NO_ISP,FINAL_BUYER_CUST,FINAL_BUYER_ISP,FINAL_BUYER_NAME,CONFIRM_DATE,DATA_TYPE,DIVISION_NO,CUST_ID,CUST_NAME ORDER BY DATA_TYPE DESC,CONFIRM_DATE ASC,MODEL_NO_ISP ASC", new BeanPropertyRowMapper<PNSSendData>(PNSSendData.class));
  101. int num = 0;
  102. for(PNSSendData sendSale : sendSales) {
  103. num ++;
  104. if(num > pageSize) {
  105. num = 1;
  106. }
  107. sendSale.setRow_number(num); //分页处理序号问题
  108. /*sendSale.setCust_id(pnsConfig.getCust_id());
  109. sendSale.setCust_name("华商龙商务互联");
  110. sendSale.setYmonth("2023-04");*/
  111. }
  112. return sendSales;
  113. } catch (EmptyResultDataAccessException e) {
  114. return null;
  115. }
  116. };
  117. }