package com.uas.eis.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.serializer.SerializerFeature; import com.uas.eis.config.PNSConfig; import com.uas.eis.dao.BaseDao; import com.uas.eis.entity.PNSSendData; import com.uas.eis.entity.PNSSendResp; import com.uas.eis.utils.FlexJsonUtil; import com.uas.eis.utils.HttpUtil; import com.uas.eis.utils.StringUtil; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Component public class PnsDataSyncTask { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private int pageSize = 50; @Autowired private PNSConfig pnsConfig; @Autowired private BaseDao baseDao; /** * 第一商品营业部 1453 * 第二商品营业部 733 * */ @Scheduled(cron = "0 0/5 * * * ?") public void UploadSaleData(){ logger.info("Sale Upload Start---"); List saleUploads = getSaleDataUpload(); if(saleUploads.size() < 1 ) { return; } //分页上传 int a = saleUploads.size() / pageSize; int b = saleUploads.size() % pageSize; int pages = a + (b>0?1:0); HashMap reqHeader = new HashMap<>(); reqHeader.put("fromsys","ISP"); JSONObject pageReq = new JSONObject(); pageReq.put("if_name","ISPP-PSI-UPLOAD"); pageReq.put("if_key" , pnsConfig.getIf_key()); pageReq.put("total_page", String.valueOf(pages)); pageReq.put("total_data_count", String.valueOf(saleUploads.size())); logger.info("Sale Upload totalSize {}", pages); int flag = 0; for(int i = 0 ; i < pages; i++) { pageReq.put("current_page", String.valueOf(i+1)); if((i+1)*pageSize > saleUploads.size()) { pageReq.put("current_data_count", String.valueOf(b)); pageReq.put("detail", JSONArray.toJSONString(saleUploads.subList(i*pageSize, i*pageSize+b), SerializerFeature.WriteMapNullValue)); }else { pageReq.put("current_data_count", String.valueOf(pageSize)); pageReq.put("detail", JSONArray.toJSONString(saleUploads.subList(i*pageSize, (i+1)*pageSize),SerializerFeature.WriteMapNullValue)); } try { logger.info("上传数据{}",pageReq.toString()); HttpUtil.Response response = HttpUtil.sendPostRequest(pnsConfig.getRoute(), reqHeader, pageReq.toString()); logger.info("{}, statusCode{},{}",response.getResponseText(), response.getStatusCode(), response.getStatusCode() == HttpStatus.OK.value()); if (response.getStatusCode() == HttpStatus.OK.value()) { String data = response.getResponseText(); logger.info("{}", StringUtils.hasText(data)); if (StringUtils.hasText(data)) { PNSSendResp resp = FlexJsonUtil.fromJson(String.valueOf(FlexJsonUtil.fromJson(data).get("result")), PNSSendResp.class); if(resp.getSuccess()) { logger.info("Sale Upload success Size {}", i); pageReq.put("if_batch_no",resp.getIf_batch_no()); } } }else { flag= 1; } } catch (Exception e) { flag= 1; logger.info(e.getMessage()); e.printStackTrace(); } } if(flag == 0 ) { baseDao.execute("UPDATE PNS_SENDDATADETAIL SET UPLOAD=-1 WHERE NVL(CONFIRM_STATUS,'已确认')='已确认' AND UPLOAD=0"); baseDao.execute("UPDATE PNS_SENDDATAMAIN SET LAST_SENDDATE=SYSDATE,SENDSTATUS_='已发送' WHERE NVL(SENDSTATUS_,' ')='待发送'"); } } public List getSaleDataUpload() { try { List sendSales = baseDao .getJdbcTemplate() .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 " + " 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.class)); int num = 0; for(PNSSendData sendSale : sendSales) { num ++; if(num > pageSize) { num = 1; } sendSale.setRow_number(num); //分页处理序号问题 /*sendSale.setCust_id(pnsConfig.getCust_id()); sendSale.setCust_name("华商龙商务互联"); sendSale.setYmonth("2023-04");*/ } return sendSales; } catch (EmptyResultDataAccessException e) { return null; } }; }