Ver Fonte

收费明细数据同步

lzm há 3 anos atrás
pai
commit
3b93666838

+ 4 - 4
sp-server/src/main/java/com/pj/api/pushfee/api/PushFeeController.java

@@ -20,22 +20,22 @@ public class PushFeeController {
     @RequestMapping(value = "changeStartTime")
     public AjaxJson changeStartTime(String startTime){
         if(StrUtil.isEmpty(startTime)){
-            RedisUtil.del("pushFeeStartTime");
+            RedisUtil.del("pushfee:start_time");
             return AjaxJson.getSuccess("删除成功");
         }
         DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss");
-        RedisUtil.set("pushFeeStartTime", startTime);
+        RedisUtil.set("pushfee:start_time", startTime);
         return AjaxJson.getSuccess("设置成功");
     }
 
     @RequestMapping(value = "changeTimeSpan")
     public AjaxJson changeTimeSpan(String timeSpan){
         if(StrUtil.isEmpty(timeSpan)){
-            RedisUtil.del("pushFeeTimeSpan");
+            RedisUtil.del("pushfee:time_span");
             return AjaxJson.getSuccess("删除成功");
         }
         Integer.valueOf(timeSpan);
-        RedisUtil.set("pushFeeTimeSpan", timeSpan);
+        RedisUtil.set("pushfee:time_span", timeSpan);
         return AjaxJson.getSuccess("设置成功");
     }
 }

+ 50 - 51
sp-server/src/main/java/com/pj/api/pushfee/task/FeeDetailSyncTask.java

@@ -9,6 +9,7 @@ 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.current.config.PartConfig;
+import com.pj.current.config.PushfeeConfig;
 import com.pj.project.tb_fee_details.TbFeeDetails;
 import com.pj.project.tb_fee_details.TbFeeDetailsService;
 import com.pj.utils.cache.RedisUtil;
@@ -34,50 +35,38 @@ public class FeeDetailSyncTask {
     TbFeeDetailsService tbFeeDetailsService;
     @Resource
     PartConfig partConfig;
+    @Resource
+    PushfeeConfig pushfeeConfig;
 
-    //客户端公私钥
-    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-27 00:00:00";
-    //默认同步时间间隔
-    private static final Integer TIME_SPAN = 86400000;
     /**
-     * 5分钟执行一次
+     * 10分钟执行一次
      */
-    @Scheduled(fixedRate = 15000)
+    @Scheduled(fixedRate = 600000)
     public void send() {
-//        if(partConfig.isTestEnv()){
-//            log.info("pushfee_info: 测试环境不推送");
-//            return;
-//        }
+        if(partConfig.isTestEnv()){
+            log.info("pushfee_info: 测试环境不推送");
+            return;
+        }
         Date startTime;
         Integer timeSpan;
         //先从redis中获取startTime
-        if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeStartTime"))){
-            startTime = DateUtil.parse(RedisUtil.get("pushFeeStartTime"), "yyyy-MM-dd HH:mm:ss");
+        if(StrUtil.isNotEmpty(RedisUtil.get("pushfee:start_time"))){
+            startTime = DateUtil.parse(RedisUtil.get("pushfee:start_time"), "yyyy-MM-dd HH:mm:ss");
         }else{
-            startTime = DateUtil.parse(START_TIME, "yyyy-MM-dd HH:mm:ss");
+            startTime = DateUtil.parse(pushfeeConfig.getStartTime(), "yyyy-MM-dd HH:mm:ss");
         }
         //先从redis中获取timeSpan
-        if(StrUtil.isNotEmpty(RedisUtil.get("pushFeeTimeSpan"))){
-            timeSpan = Integer.valueOf(RedisUtil.get("pushFeeTimeSpan"));
+        if(StrUtil.isNotEmpty(RedisUtil.get("pushfee:time_span"))){
+            timeSpan = Integer.valueOf(RedisUtil.get("pushfee:time_span"));
         }else{
-            timeSpan = TIME_SPAN;
+            timeSpan = pushfeeConfig.getTimeSpan();
         }
 
         Date now = new Date();
         Date finishTime = DateUtil.offsetMillisecond(startTime, timeSpan);
         //如果当前时间小于推送结束时间,则不执行下面代码,保证推送的时间间隔为设定间隔
         if(DateUtil.compare(now, finishTime) < 0){
-            log.info("pushfee_warn: 当前时间与开始时间的间隔小于设定间隔,本次任务不进行推送,开始时间为" +
+            log.info("pushfee_warn: 当前时间小于结束时间,本次任务不进行推送,开始时间为" +
                     DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss")
                     + ",结束时间为" + DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss")
                     + ",当前时间为" + DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
@@ -87,13 +76,12 @@ public class FeeDetailSyncTask {
         //构建数据
         List<TbFeeDetails> fdList = getfeeDetails(startTime, finishTime);
         if(fdList.size() > 0){
-            List<OdsOrderPayDetailDTO> opdList = convert(fdList);
-
+            List<OdsOrderPayDetailDTO> opdList = convert(fdList, now);
             //1. 本地,用对方的公钥加密
-            EncryptTools client = new EncryptTools("hd", f_remotePublicKeyBase6);
+            EncryptTools client = new EncryptTools(pushfeeConfig.getSysId(), pushfeeConfig.getRemotePublicKeyBase6());
 
             OrderPayDetailMessage detail = new OrderPayDetailMessage();
-            detail.setDate(DateUtil.format(new Date(), "yyyyMMdd"));
+            detail.setDate(DateUtil.format(now, "yyyyMMdd"));
             detail.setBatch(1);
             detail.setList(opdList);
             detail.setCount(opdList.size());
@@ -102,25 +90,27 @@ public class FeeDetailSyncTask {
             log.info("pushfee_encryptMessage: " + encryptMessage);
 
             //推送数据
+            //String response = "{\"msg\":\"测试\",\"code\":200,\"timestamp\":\"2022-07-27 18:13:17\"}";
             String response = "{}";
             try {
-                response = tools.http.HttpUtils.doPost(URL, encryptMessage);
+                response = tools.http.HttpUtils.doPost(pushfeeConfig.getSyncUrl(), encryptMessage);
                 log.info("pushfee_response: " + response);
             } catch (IOException e) {
-                e.printStackTrace();
+                log.error("pushfee_error: " + e.getMessage());
             }
             JSONObject jsonObject = JSONUtil.parseObj(response);
             String code = jsonObject.getStr("code");
             if(StrUtil.equals("200", code)){
-                RedisUtil.set("pushFeeStartTime", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
+                RedisUtil.set("pushfee:start_time", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
+                log.info("pushfee_info: 推送成功,范围为"
+                        + DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss") + "至"
+                        + RedisUtil.get("pushfee:start_time"));
             }
-            log.info("pushfee_startTime changes: " + RedisUtil.get("pushFeeStartTime"));
         }else {
+            RedisUtil.set("pushfee:start_time", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
             log.info("pushfee_warn: "
                     + DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss") + "至"
-                    + DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss") + "范围内没有数据,本次任务不进行推送" );
-            RedisUtil.set("pushFeeStartTime", DateUtil.format(finishTime, "yyyy-MM-dd HH:mm:ss"));
-            log.info("pushfee_startTime changes: " + RedisUtil.get("pushFeeStartTime"));
+                    + RedisUtil.get("pushfee:start_time") + "范围内没有数据,本次任务不进行推送" );
         }
     }
 
@@ -130,15 +120,19 @@ public class FeeDetailSyncTask {
         return tbFeeDetailsService.list(qw);
     }
 
-    private List<OdsOrderPayDetailDTO> convert(List<TbFeeDetails> fdList) {
+    private List<OdsOrderPayDetailDTO> convert(List<TbFeeDetails> fdList, Date now) {
         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");
-
-
+            opd.setSysId(pushfeeConfig.getSysId()).setSysName(pushfeeConfig.getSysName())
+            .setYieldId(pushfeeConfig.getYieldId()).setYieldName(pushfeeConfig.getYieldName())
+            .setBatch(DateUtil.current()+"")
+            .setDwDt(DateUtil.format(now, "yyyyMMdd")).setDwTm(DateUtil.format(now, "HH:mm:ss"));
+
+            String syncType = "insert";
+            if(DateUtil.compare(fd.getCreateTime(), fd.getUpdateTime()) < 0){
+                syncType = "update";
+            }
             String bizNo = fd.getBusinessNo();
             if(fd.getFeeType() == TbFeeDetails.fee.PARK_FEE.getCode()){
                 bizNo = fd.getBusinessCarNo();
@@ -148,25 +142,30 @@ public class FeeDetailSyncTask {
                 .setBizTypeId(fd.getItemTypeId()).setBizTypeName(fd.getItemTypeName())
                 .setCarTypId(fd.getItemId()).setCarTypName(fd.getItemName())
                 .setCarNo(fd.getCarNo())
-                .setWeight(fd.getWeight() != null ? fd.getWeight()+"kg": "0kg")
+                .setWeight(fd.getWeight() != null ? fd.getWeight()+"": "0")
                 .setNum(fd.getNum()+"")
-                .setPrice(fd.getUnitPrice().toString()+"元").setTotalPrice(fd.getItemPrice().toString()+"元")
+                .setPrice(fd.getUnitPrice().toString()).setTotalPrice(fd.getItemPrice().toString())
                 .setSettleStatusName("已结算").setSettleStatusId(fd.getIsSettle()+"")
-                .setTaxRate(fd.getTaxRate().multiply(BigDecimal.valueOf(100)).toString()+"%")
-                .setTaxPayment(fd.getTaxPrice().toString()+"元")
-                .setTaxAmount(fd.getItemPrice().toString()+"元").setNoTaxAmount(fd.getNoTaxPrice().toString()+"元")
+                .setTaxRate(fd.getTaxRate().multiply(BigDecimal.valueOf(100)).toString())
+                .setTaxPayment(fd.getTaxPrice().toString())
+                .setTaxAmount(fd.getItemPrice().toString()).setNoTaxAmount(fd.getNoTaxPrice().toString())
                 .setPaymentWayName("微信支付").setPaymentWayId(fd.getPayType()+"")
+                .setSysSerialNo(fd.getOutTradeNo())
                 .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())
+                .setCreateTime(DateUtil.format(fd.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))
+                .setUpdateTime(DateUtil.format(fd.getUpdateTime(), "yyyy-MM-dd HH:mm:ss"))
+                .setPayTime(fd.getPayTime())
                 .setRemarks(fd.getRemark())
-                .setBillClerkName(fd.getKaiDanPerson()).setStatAuditorName(fd.getJiChaPerson()).setDispatcherName(fd.getDiaoDuPerson());
+                .setBillClerkName(fd.getKaiDanPerson()).setStatAuditorName(fd.getJiChaPerson()).setDispatcherName(fd.getDiaoDuPerson())
+                .setSyncType(syncType);
 
             opdList.add(opd);
         }
         return opdList;
     }
 
+
 }

+ 1 - 0
sp-server/src/main/java/com/pj/api/pushfee/tools/message/api/OdsOrderPayDetailDTO.java

@@ -97,6 +97,7 @@ public class OdsOrderPayDetailDTO implements Serializable {
     private String invoiceNo;
 
     private String createTime;
+    private String updateTime;
 
     private String payTime;
 

+ 26 - 0
sp-server/src/main/java/com/pj/current/config/PushfeeConfig.java

@@ -0,0 +1,26 @@
+package com.pj.current.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Auther: lzm
+ * @Date: 2022/07/27/19:07
+ * @Description:
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pushfee-config")
+public class PushfeeConfig {
+
+    private String remotePublicKeyBase6;
+    private String syncUrl;
+    private String sysId;
+    private String sysName;
+    private String yieldId;
+    private String yieldName;
+    private String startTime;
+    private Integer timeSpan;
+
+}

+ 10 - 0
sp-server/src/main/resources/application-dev.yml

@@ -88,3 +88,13 @@ jh-config:
 ocr-config:
     bash: /opt/ocrpic/tesseract.sh
     analysis: /opt/ocrpic/ocrtxt/PIC_NAME.txt
+pushfee-config:
+    remote-public-key-base6: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb5yK85EKqwiQU+z1jyjOng6ecssQpEjC6STbCuSWN6KHLkijBxdqrCumXhbIyOVx4lHK9Rg5EjzlQxoaXQTgJdItaGjLC+UTE+NNAnnaFLg0x4jajNpLo473zdZxTYQaT3q/aKnTeXuKHw11PPUe4hmmfxPcdt9yJ0Iqo/XxV3QIDAQAB
+    sync-url: http://117.141.148.233:8765/monolithic/uni/v1/sync
+    sys-id: "0001"
+    sys-name: 东兴口岸场站系统
+    yield-id: 0001-a1
+    yield-name: 东兴口岸场站系统-A1园区
+    start-time: 2022-07-26 00:00:00
+    time-span: 3600000
+