FeeDetailSyncTask.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.pj.api.pushfee.task;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.pj.api.pushfee.tools.EncryptTools;
  6. import com.pj.api.pushfee.tools.message.api.OdsOrderPayDetailDTO;
  7. import com.pj.api.pushfee.tools.message.api.OrderPayDetailMessage;
  8. import com.pj.project.tb_fee_details.TbFeeDetails;
  9. import com.pj.project.tb_fee_details.TbFeeDetailsService;
  10. import com.pj.utils.cache.RedisUtil;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import javax.annotation.Resource;
  15. import java.io.IOException;
  16. import java.util.ArrayList;
  17. import java.util.Date;
  18. import java.util.List;
  19. /**
  20. * @Auther: lzm
  21. * @Date: 2022/07/25/9:11
  22. */
  23. @Component
  24. @Slf4j
  25. public class FeeDetailSyncTask {
  26. @Resource
  27. TbFeeDetailsService tbFeeDetailsService;
  28. //客户端公私钥
  29. public static final String f_remotePublicKeyBase6 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb5yK85EKqwiQU+z1jyjOng6ecssQpEjC6STbCuSWN6KHLkijBxdqrCumXhbIyOVx4lHK9Rg5EjzlQxoaXQTgJdItaGjLC+UTE+NNAnnaFLg0x4jajNpLo473zdZxTYQaT3q/aKnTeXuKHw11PPUe4hmmfxPcdt9yJ0Iqo/XxV3QIDAQAB";
  30. public static final String f_remotePrivateKeyBase64 = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJvnIrzkQqrCJBT7PWPKM6eDp5yyxCkSMLpJNsK5JY3oocuSKMHF2qsK6ZeFsjI5XHiUcr1GDkSPOVDGhpdBOAl0i1oaMsL5RMT400CedoUuDTHiNqM2kujjvfN1nFNhBpPer9oqdN5e4ofDXU89R7iGaZ/E9x233InQiqj9fFXdAgMBAAECgYASoeKgcaVYFCDM0yQIn5thy1XGYAUapX5mXSaqygbneWSQ2FR/qB5Ur9awEb30y682CAPYhB1jazyd30QpopVINvyhaWhgq1b/8KD92FqOg1eXxa7bTuTe8aMuKTB/ZJjEry0d5Mu3i6zYKtTSbnpnag5I3UE5awLDy7utYOoOHwJBAPtvz2ZBhtJvL3lsMgs7kGqrPqqI2LAX8J3oOCtE/6eQjQ0I5fBCybrwHp3baDrYul5KTL3kJvl4iWN/gHDi/nMCQQCeu3gzy0DVtM8M8bzFc/ZA753WRn4Z5axQa6lE7Tski8TUw4Bhbfan9E/C6l6Guo/+2hXPAE/RMcncClqeXXZvAkEAgf6FsO1x4fxABDvvB6Ws/ak5hfuoZCqMaWd1GtHah2yRsEqIbxZoq7CXc6/LDJmeiT9Ku+ZoTBSIm5uA8Vw6hwJALEbs872pmzMxYlH4Lzf2pAxzAbduK3kmhNRTRjfKfJpEUHksUYEkAZujuCI6NejKi/N3i+NxYFA8F5YHyw8VHwJAWoiYSYLSziHgDytoPKFvUp6EKLGDClhACJKc4LuaPNWICMxb5Dp88sY0NDYb4HzCyWIE5G4vbiF/K3kEEwCIVA==";
  31. //服务端公私钥
  32. public static final String f_localPublicKeyBase6 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCimSu5J8apt2YR/o9joOCNdFzO3rOHcdcqnSCm1Wt19VwskTVjkKHc/CXHUoskX5vMiMiv6xPnf/lDpMO6KnCrwlVQFtbPvmnkwyUs/haW8ggR865MqDcBpdMGnuV0YJ04UXxSrOX+eu+dl91Web4/ZiRKbObOa8WhFm/Ln2QKswIDAQAB";
  33. public static final String f_localPrivateKeyBase6 = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKKZK7knxqm3ZhH+j2Og4I10XM7es4dx1yqdIKbVa3X1XCyRNWOQodz8JcdSiyRfm8yIyK/rE+d/+UOkw7oqcKvCVVAW1s++aeTDJSz+FpbyCBHzrkyoNwGl0wae5XRgnThRfFKs5f56752X3VZ5vj9mJEps5s5rxaEWb8ufZAqzAgMBAAECgYAmP/QaLXI9kIgxaXnfzQOmIx6GB7uh/DTKsIXy2TfbWunhDhPKJUb+jk5w0kkrOFaVSgQz5hAboG5J7GOi0sMINLb7H2WsOm3uGM/8HPZYsrNFnB8VUiD26LIZ6+HhPXfp/LN+k5eUnUlD6z/dZU1k6hJPOSFC3PyzfBWqaQMqGQJBAMVdQ9Uw+eC94qD1MSSEQZhqpfGE4vO7WrSACLFqyZrHvaIwZTjdUZRF1aMlJyT0afOkfSN/53QQEcejXMUrSBcCQQDS576SXkpdfrN2jmr9BAimi+6AP71GUgXL3O+2yRL2szLoU7GwtMREPBFw+ocnC4UN87NCYveJCzenQEt48JfFAkAqEIa0mYuoatAyng+rSMTyR0i3ASud5wCeF+vCZJAzfP7d4pKwW/tXLsspynFdXvp2A0jomAosooAnnJnZLDBhAkBzXoXm92Fip45wShPIeE5rHJzI1xUoxHGbRS50JKYVAY3VfQL0kM3ULa+0x7bq6uhL64WhyRVziAlXmlouvB2pAkEAuDvsjVhdo3uMGL7Tr+igPhajoWUTjPuAf+Od3SsqMTPFLBpbJM8ziXk39Me9S8wqgGwR3pnlC1Z6Rybgm+uy4g==";
  34. private static final String URL = "http://117.141.148.233:8765/monolithic/uni/v1/sync";
  35. //默认开始时间
  36. private static final String START_TIME = "2022-04-29 00:00:00";
  37. //默认同步时间间隔
  38. private static final Integer TIME_SPAN = 86400000;
  39. /**
  40. * 5分钟执行一次
  41. */
  42. @Scheduled(fixedRate = 300000)
  43. public void send() {
  44. Date startTime;
  45. Integer timeSpan;
  46. //先从redis中获取startTime
  47. if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeStartTime"))){
  48. startTime = DateUtil.parse(RedisUtil.get("pushFeeStartTime"), "yyyy-MM-dd HH:mm:ss");
  49. }else{
  50. startTime = DateUtil.parse(START_TIME, "yyyy-MM-dd HH:mm:ss");
  51. }
  52. //先从redis中获取timeSpan
  53. if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeTimeSpan"))){
  54. timeSpan = Integer.valueOf(RedisUtil.get("pushFeeTimeSpan"));
  55. }else{
  56. timeSpan = TIME_SPAN;
  57. }
  58. Date finishTime = DateUtil.endOfDay(new Date());
  59. Date offsetTime = DateUtil.offsetMillisecond(startTime, timeSpan);
  60. //如果当前时间与开始时间的间隔小于设定间隔,则不执行下面代码,保证推送的时间间隔为设定间隔
  61. if(DateUtil.compare(finishTime, offsetTime) > 0){
  62. finishTime = offsetTime;
  63. }else{
  64. log.info("pushfee_warning: 当前时间与开始时间的间隔小于设定间隔,本次任务不进行推送,开始时间为" +
  65. DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss"));
  66. return;
  67. }
  68. //构建数据
  69. List<TbFeeDetails> fdList = getfeeDetails(startTime, finishTime);
  70. if(fdList.size() == 0){
  71. log.info("pushfee_warning: "
  72. + DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss") + "至"
  73. + DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss") + "范围内没有数据,本次任务不进行推送" );
  74. return;
  75. }
  76. List<OdsOrderPayDetailDTO> opdList = convert(fdList);
  77. //1. 本地,用对方的公钥加密
  78. EncryptTools client = new EncryptTools("hd", f_remotePublicKeyBase6);
  79. OrderPayDetailMessage detail = new OrderPayDetailMessage();
  80. detail.setDate(DateUtil.format(new Date(), "yyyyMMdd"));
  81. detail.setBatch(1);
  82. detail.setList(opdList);
  83. detail.setCount(opdList.size());
  84. String encryptMessage = client.encryptMessage(detail);
  85. log.info("pushfee_encryptMessage: " + encryptMessage);
  86. //推送数据
  87. try {
  88. String response = tools.http.HttpUtils.doPost(URL, encryptMessage);
  89. log.info("pushfee_response: " + response);
  90. } catch (IOException e) {
  91. e.printStackTrace();
  92. }
  93. RedisUtil.set("pushFeeStartTime", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
  94. RedisUtil.set("pushFeeTimeSpan", timeSpan+"");
  95. log.info("pushfee_warning: " + RedisUtil.get("pushFeeStartTime"));
  96. }
  97. private List<TbFeeDetails> getfeeDetails(Date startTime, Date finishTime) {
  98. QueryWrapper<TbFeeDetails> qw = new QueryWrapper<>();
  99. qw.ge("update_time", startTime).le("update_time", finishTime);
  100. return tbFeeDetailsService.list(qw);
  101. }
  102. private List<OdsOrderPayDetailDTO> convert(List<TbFeeDetails> fdList) {
  103. List<OdsOrderPayDetailDTO> opdList = new ArrayList<>();
  104. for (TbFeeDetails fd : fdList) {
  105. OdsOrderPayDetailDTO opd = new OdsOrderPayDetailDTO();
  106. opd.setSysId("hd").setSysName("华东场站系统").setYieldId("hd-a1").setYieldName("华东A1园区")
  107. .setSyncType("insert").setBatch("1")
  108. .setDwDt("20220725").setDwTm("163206").setUniqId("YRTFHFHFHFEWWR43645757");
  109. String bizNo = fd.getBusinessNo();
  110. if(fd.getFeeType() == TbFeeDetails.fee.PARK_FEE.getCode()){
  111. bizNo = fd.getBusinessCarNo();
  112. }
  113. opd.setBizNo(bizNo)
  114. .setChargeItemId(fd.getFeeType()+"").setChargeItemName(TbFeeDetails.fee.getDesc(fd.getFeeType()))
  115. .setBizTypeId(fd.getItemTypeId()).setBizTypeName(fd.getItemTypeName())
  116. .setCarTypId(fd.getItemId()).setCarTypName(fd.getItemName())
  117. .setCarNo(fd.getCarNo())
  118. .setWeight(fd.getWeight() != null ? fd.getWeight()+"": "0")
  119. .setNum(fd.getNum()+"")
  120. .setPrice(fd.getUnitPrice().toString()).setTotalPrice(fd.getItemPrice().toString())
  121. .setSettleStatusName("已结算")
  122. .setTaxRate(fd.getTaxRate().toString()).setTaxPayment(fd.getTaxPrice().toString())
  123. .setTaxAmount(fd.getItemPrice().toString()).setNoTaxAmount(fd.getNoTaxPrice().toString())
  124. .setPaymentWayName("微信支付")
  125. .setPayNo(fd.getTransactionId())
  126. .setWorkNo(fd.getBusinessItemNo())
  127. .setCustName(fd.getEntityName()).setPartnerName(fd.getPickCustomerName()).setAgentName(fd.getCustomerName())
  128. .setInvoiceNo(fd.getInvoice())
  129. .setCreateTime(DateUtil.format(fd.getCreateTime(), "yyyy-MM-dd HH:mm:ss")).setPayTime(fd.getPayTime())
  130. .setRemarks(fd.getRemark())
  131. .setBillClerkName(fd.getKaiDanPerson()).setStatAuditorName(fd.getJiChaPerson()).setDispatcherName(fd.getDiaoDuPerson());
  132. opdList.add(opd);
  133. }
  134. return opdList;
  135. }
  136. }