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 = DateUtil.endOfDay(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 fdList = getfeeDetails(startTime, finishTime); if(fdList.size() == 0){ log.info("pushfee_warning: " + DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss") + "至" + DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss") + "范围内没有数据,本次任务不进行推送" ); return; } List 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 getfeeDetails(Date startTime, Date finishTime) { QueryWrapper qw = new QueryWrapper<>(); qw.ge("update_time", startTime).le("update_time", finishTime); return tbFeeDetailsService.list(qw); } private List convert(List fdList) { List 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; } }