package com.uas.eis.task; 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 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 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 = 100; @Autowired private PNSConfig pnsConfig; @Autowired private BaseDao baseDao; @Scheduled(cron = "0 0/1 * * * ?") 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"); Map pageReq = new HashMap<>(); 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); 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", FlexJsonUtil.toJsonArrayDeep(saleUploads.subList(i*pageSize, i*pageSize+b))); }else { pageReq.put("current_data_count", String.valueOf(pageSize)); pageReq.put("detail", FlexJsonUtil.toJsonArrayDeep(saleUploads.subList(i*pageSize, (i+1)*pageSize))); } logger.info("{}",pageReq); try { HttpUtil.Response response = HttpUtil.sendPostRequest(pnsConfig.getRoute(), reqHeader, pageReq, false); logger.info("{}",response.getResponseText()); if (response.getStatusCode() == HttpStatus.OK.value()) { String data = response.getResponseText(); if (StringUtil.hasText(data)) { PNSSendResp resp = FlexJsonUtil.fromJson(data, PNSSendResp.class); if(resp.getSuccess()) { logger.info("Sale Upload success Size {}", i); pageReq.put("if_batch_no",resp.getIf_batch_no()); } } } } catch (Exception e) { e.printStackTrace(); } } } public List getSaleDataUpload() { try { List sendSales = baseDao .getJdbcTemplate() .query("SELECT * FROM PNS_SENDDATADETAIL WHERE MAIN_ID=1 AND UPLOAD=0 ", 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.setYmonth("2022-11"); } baseDao.execute("UPDATE PNS_SENDDATADETAIL SET UPLOAD=1"); return sendSales; } catch (EmptyResultDataAccessException e) { return null; } }; }