|
@@ -0,0 +1,147 @@
|
|
|
|
+package com.pj.api.pushfee.task;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import com.pj.api.pushfee.tools.EncryptTools;
|
|
|
|
+import com.pj.api.pushfee.tools.message.api.OdsOrderPayDetailDTO;
|
|
|
|
+import com.pj.api.pushfee.tools.message.api.OrderPayDetailMessage;
|
|
|
|
+import com.pj.project.tb_fee_details.TbFeeDetails;
|
|
|
|
+import com.pj.project.tb_fee_details.TbFeeDetailsService;
|
|
|
|
+import com.pj.utils.cache.RedisUtil;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
+
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @Auther: lzm
|
|
|
|
+ * @Date: 2022/07/25/9:11
|
|
|
|
+ */
|
|
|
|
+@Component
|
|
|
|
+@Slf4j
|
|
|
|
+public class FeeDetailSyncTask {
|
|
|
|
+ @Resource
|
|
|
|
+ TbFeeDetailsService tbFeeDetailsService;
|
|
|
|
+
|
|
|
|
+ //客户端公私钥
|
|
|
|
+ public static final String f_remotePublicKeyBase6 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb5yK85EKqwiQU+z1jyjOng6ecssQpEjC6STbCuSWN6KHLkijBxdqrCumXhbIyOVx4lHK9Rg5EjzlQxoaXQTgJdItaGjLC+UTE+NNAnnaFLg0x4jajNpLo473zdZxTYQaT3q/aKnTeXuKHw11PPUe4hmmfxPcdt9yJ0Iqo/XxV3QIDAQAB";
|
|
|
|
+ public static final String f_remotePrivateKeyBase64 = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJvnIrzkQqrCJBT7PWPKM6eDp5yyxCkSMLpJNsK5JY3oocuSKMHF2qsK6ZeFsjI5XHiUcr1GDkSPOVDGhpdBOAl0i1oaMsL5RMT400CedoUuDTHiNqM2kujjvfN1nFNhBpPer9oqdN5e4ofDXU89R7iGaZ/E9x233InQiqj9fFXdAgMBAAECgYASoeKgcaVYFCDM0yQIn5thy1XGYAUapX5mXSaqygbneWSQ2FR/qB5Ur9awEb30y682CAPYhB1jazyd30QpopVINvyhaWhgq1b/8KD92FqOg1eXxa7bTuTe8aMuKTB/ZJjEry0d5Mu3i6zYKtTSbnpnag5I3UE5awLDy7utYOoOHwJBAPtvz2ZBhtJvL3lsMgs7kGqrPqqI2LAX8J3oOCtE/6eQjQ0I5fBCybrwHp3baDrYul5KTL3kJvl4iWN/gHDi/nMCQQCeu3gzy0DVtM8M8bzFc/ZA753WRn4Z5axQa6lE7Tski8TUw4Bhbfan9E/C6l6Guo/+2hXPAE/RMcncClqeXXZvAkEAgf6FsO1x4fxABDvvB6Ws/ak5hfuoZCqMaWd1GtHah2yRsEqIbxZoq7CXc6/LDJmeiT9Ku+ZoTBSIm5uA8Vw6hwJALEbs872pmzMxYlH4Lzf2pAxzAbduK3kmhNRTRjfKfJpEUHksUYEkAZujuCI6NejKi/N3i+NxYFA8F5YHyw8VHwJAWoiYSYLSziHgDytoPKFvUp6EKLGDClhACJKc4LuaPNWICMxb5Dp88sY0NDYb4HzCyWIE5G4vbiF/K3kEEwCIVA==";
|
|
|
|
+
|
|
|
|
+ //服务端公私钥
|
|
|
|
+ public static final String f_localPublicKeyBase6 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCimSu5J8apt2YR/o9joOCNdFzO3rOHcdcqnSCm1Wt19VwskTVjkKHc/CXHUoskX5vMiMiv6xPnf/lDpMO6KnCrwlVQFtbPvmnkwyUs/haW8ggR865MqDcBpdMGnuV0YJ04UXxSrOX+eu+dl91Web4/ZiRKbObOa8WhFm/Ln2QKswIDAQAB";
|
|
|
|
+ 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==";
|
|
|
|
+
|
|
|
|
+ private static final String URL = "http://117.141.148.233:8765/monolithic/uni/v1/sync";
|
|
|
|
+
|
|
|
|
+ //默认开始时间
|
|
|
|
+ private static final String START_TIME = "2022-04-29 00:00:00";
|
|
|
|
+ //默认同步时间间隔
|
|
|
|
+ private static final Integer TIME_SPAN = 86400000;
|
|
|
|
+ /**
|
|
|
|
+ * 5分钟执行一次
|
|
|
|
+ */
|
|
|
|
+ @Scheduled(fixedRate = 300000)
|
|
|
|
+ public void send() {
|
|
|
|
+ Date startTime;
|
|
|
|
+ Integer timeSpan;
|
|
|
|
+ //先从redis中获取startTime
|
|
|
|
+ if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeStartTime"))){
|
|
|
|
+ startTime = DateUtil.parse(RedisUtil.get("pushFeeStartTime"), "yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ }else{
|
|
|
|
+ startTime = DateUtil.parse(START_TIME, "yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ }
|
|
|
|
+ //先从redis中获取timeSpan
|
|
|
|
+ if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeTimeSpan"))){
|
|
|
|
+ timeSpan = Integer.valueOf(RedisUtil.get("pushFeeTimeSpan"));
|
|
|
|
+ }else{
|
|
|
|
+ timeSpan = TIME_SPAN;
|
|
|
|
+ }
|
|
|
|
+ Date finishTime = new Date();
|
|
|
|
+ Date offsetTime = DateUtil.offsetMillisecond(startTime, timeSpan);
|
|
|
|
+ //如果当前时间与开始时间的间隔小于设定间隔,则不执行下面代码,保证推送的时间间隔为设定间隔
|
|
|
|
+ if(DateUtil.compare(finishTime, offsetTime) > 0){
|
|
|
|
+ finishTime = offsetTime;
|
|
|
|
+ }else{
|
|
|
|
+ log.info("pushfee_warning: 当前时间与开始时间的间隔小于设定间隔,本次任务不进行推送,开始时间为" +
|
|
|
|
+ DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ //构建数据
|
|
|
|
+ List<TbFeeDetails> fdList = getfeeDetails(startTime, finishTime);
|
|
|
|
+ List<OdsOrderPayDetailDTO> opdList = convert(fdList);
|
|
|
|
+
|
|
|
|
+ //1. 本地,用对方的公钥加密
|
|
|
|
+ EncryptTools client = new EncryptTools("hd", f_remotePublicKeyBase6);
|
|
|
|
+
|
|
|
|
+ OrderPayDetailMessage detail = new OrderPayDetailMessage();
|
|
|
|
+ detail.setDate(DateUtil.format(new Date(), "yyyyMMdd"));
|
|
|
|
+ detail.setBatch(1);
|
|
|
|
+ detail.setList(opdList);
|
|
|
|
+ detail.setCount(opdList.size());
|
|
|
|
+
|
|
|
|
+ String encryptMessage = client.encryptMessage(detail);
|
|
|
|
+ log.info("pushfee_encryptMessage: " + encryptMessage);
|
|
|
|
+
|
|
|
|
+ //推送数据
|
|
|
|
+ try {
|
|
|
|
+ String response = tools.http.HttpUtils.doPost(URL, encryptMessage);
|
|
|
|
+ log.info("pushfee_response: " + response);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RedisUtil.set("pushFeeStartTime", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
|
+ RedisUtil.set("pushFeeTimeSpan", timeSpan+"");
|
|
|
|
+ log.info("pushfee_warning: " + RedisUtil.get("pushFeeStartTime"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<TbFeeDetails> getfeeDetails(Date startTime, Date finishTime) {
|
|
|
|
+ QueryWrapper<TbFeeDetails> qw = new QueryWrapper<>();
|
|
|
|
+ qw.ge("update_time", startTime).le("update_time", finishTime);
|
|
|
|
+ return tbFeeDetailsService.list(qw);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<OdsOrderPayDetailDTO> convert(List<TbFeeDetails> fdList) {
|
|
|
|
+ List<OdsOrderPayDetailDTO> opdList = new ArrayList<>();
|
|
|
|
+ for (TbFeeDetails fd : fdList) {
|
|
|
|
+ OdsOrderPayDetailDTO opd = new OdsOrderPayDetailDTO();
|
|
|
|
+ opd.setSysId("hd").setSysName("华东场站系统").setYieldId("hd-a1").setYieldName("华东A1园区")
|
|
|
|
+ .setSyncType("insert").setBatch("1")
|
|
|
|
+ .setDwDt("20220725").setDwTm("163206").setUniqId("YRTFHFHFHFEWWR43645757");
|
|
|
|
+
|
|
|
|
+ String bizNo = fd.getBusinessNo();
|
|
|
|
+ if(fd.getFeeType() == TbFeeDetails.fee.PARK_FEE.getCode()){
|
|
|
|
+ bizNo = fd.getBusinessCarNo();
|
|
|
|
+ }
|
|
|
|
+ opd.setBizNo(bizNo)
|
|
|
|
+ .setChargeItemId(fd.getFeeType()+"").setChargeItemName(TbFeeDetails.fee.getDesc(fd.getFeeType()))
|
|
|
|
+ .setBizTypeId(fd.getItemTypeId()).setBizTypeName(fd.getItemTypeName())
|
|
|
|
+ .setCarTypId(fd.getItemId()).setCarTypName(fd.getItemName())
|
|
|
|
+ .setCarNo(fd.getCarNo())
|
|
|
|
+ .setWeight(fd.getWeight() != null ? fd.getWeight()+"": "0")
|
|
|
|
+ .setNum(fd.getNum()+"")
|
|
|
|
+ .setPrice(fd.getUnitPrice().toString()).setTotalPrice(fd.getItemPrice().toString())
|
|
|
|
+ .setSettleStatusName("已结算")
|
|
|
|
+ .setTaxRate(fd.getTaxRate().toString()).setTaxPayment(fd.getTaxPrice().toString())
|
|
|
|
+ .setTaxAmount(fd.getItemPrice().toString()).setNoTaxAmount(fd.getNoTaxPrice().toString())
|
|
|
|
+ .setPaymentWayName("微信支付")
|
|
|
|
+ .setPayNo(fd.getTransactionId())
|
|
|
|
+ .setWorkNo(fd.getBusinessItemNo())
|
|
|
|
+ .setCustName(fd.getEntityName()).setPartnerName(fd.getPickCustomerName()).setAgentName(fd.getCustomerName())
|
|
|
|
+ .setInvoiceNo(fd.getInvoice())
|
|
|
|
+ .setCreateTime(DateUtil.format(fd.getCreateTime(), "yyyy-MM-dd HH:mm:ss")).setPayTime(fd.getPayTime())
|
|
|
|
+ .setRemarks(fd.getRemark())
|
|
|
|
+ .setBillClerkName(fd.getKaiDanPerson()).setStatAuditorName(fd.getJiChaPerson()).setDispatcherName(fd.getDiaoDuPerson());
|
|
|
|
+
|
|
|
|
+ opdList.add(opd);
|
|
|
|
+ }
|
|
|
|
+ return opdList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|