浏览代码

优化创元体检通知

lighter 1 年之前
父节点
当前提交
f63da8e96f

+ 13 - 6
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -36,12 +36,14 @@ public interface WxApiDao {
             "time_stamp,trade_no,create_order_sign,pay_sign,spbill_create_ip," +
             "create_datetime,trade_state,serial_no,order_type,his_ord_num," +
             "mzy_request_id,yj_req_no,his_status,query_state_times,ap_time," +
-            "fundpay_amt,acctpay_amt,coupon_amt,cashpay_amt,coupon_id,sgl_check_id) " +
+            "fundpay_amt,acctpay_amt,coupon_amt,cashpay_amt,coupon_id,sgl_check_id," +
+            "sgl_check_notified) " +
             "values (#{body},#{openid},#{totalFee},#{patientId},#{patientName},#{inpatientNo}," +
             "#{admissTimes},#{appId},#{mchId},#{prepayId},#{timeStamp},#{tradeNo},#{createOrderSign}," +
             "#{paySign},#{spbillCreateIp},#{createDatetime},#{tradeState},#{serialNo},#{orderType}," +
             "#{hisOrdNum},#{mzyRequestId},#{yjReqNo},0,0,#{apTime},#{fundpayAmt}," +
-            "#{acctpayAmt},#{couponAmt},#{cashpayAmt},#{couponId},#{sglCheckId})")
+            "#{acctpayAmt},#{couponAmt},#{cashpayAmt},#{couponId},#{sglCheckId}," +
+            "#{sglCheckNotified})")
     void insertNewOrder(WxPayOrder param);
 
     @Select("select * from t_si_presetlinfo where pat_no=#{patNo} and times=#{times} ")
@@ -107,11 +109,16 @@ public interface WxApiDao {
     @Select("select * from t_wechat_pay_order with(nolock) where trade_no=#{tradeNo}")
     WxPayOrder selectOrderByTradeNo(String tradeNo);
 
-    @Select("select trade_no, query_state_times, " +
+    @Select("select trade_no,trade_state,query_state_times, " +
             "offset=datediff(minute,create_datetime,last_query_state) " +
-            "from t_wechat_pay_order with(nolock) where his_status=0 " +
-            "and order_type in (1,2,3,5) and openid!='' and sgl_check_notified=0 " +
-            "and trade_state in ('NOTPAY','ACCEPT','USERPAYING','PAYERROR') ")
+            "from t_wechat_pay_order with(nolock) " +
+            "where openid!='' and his_status=0 and order_type in (1,2,3) " +
+            "and trade_state='NOTPAY' " +
+            "union " +
+            "select trade_no,trade_state,query_state_times, " +
+            "offset=datediff(minute,create_datetime,last_query_state) " +
+            "from t_wechat_pay_order with(nolock) where order_type=5 " +
+            "and sgl_check_notified=0 ")
     List<TradeNo> selectTradeNosForScheduleTask();
 
     @Select("select openid from t_wechat_patient_bind with(nolock) where patient_id=#{cardNo} and del_flag=0")

+ 2 - 0
src/main/java/thyyxxk/wxservice_server/entity/scheduled/TradeNo.java

@@ -1,5 +1,6 @@
 package thyyxxk.wxservice_server.entity.scheduled;
 
+import com.wechat.pay.java.service.payments.model.Transaction;
 import lombok.Data;
 
 @Data
@@ -7,5 +8,6 @@ public class TradeNo {
     private String tradeNo;
     private Integer queryStateTimes;
     private Integer offset;
+    private Transaction.TradeStateEnum tradeState;
 }
 

+ 9 - 4
src/main/java/thyyxxk/wxservice_server/scheduled/QueryOrderStateTask.java

@@ -1,5 +1,6 @@
 package thyyxxk.wxservice_server.scheduled;
 
+import com.wechat.pay.java.service.payments.model.Transaction;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -54,13 +55,17 @@ public class QueryOrderStateTask {
         if (canScheduleRun && production) {
             List<TradeNo> tradeNos = dao.selectTradeNosForScheduleTask();
             log.info("定时查询订单支付状态:{}", tradeNos);
-            for (TradeNo tradeNo : tradeNos) {
-                if (tradeNo.getQueryStateTimes() >= 20 || overOneHour(tradeNo.getOffset())) {
+            for (TradeNo trade : tradeNos) {
+                if (trade.getQueryStateTimes() >= 20 || overOneHour(trade.getOffset())) {
                     WxPayOrder order = new WxPayOrder();
-                    order.setTradeNo(tradeNo.getTradeNo());
+                    order.setTradeNo(trade.getTradeNo());
                     service.closeWxOrder(order);
                 } else {
-                    service.queryOrderState(tradeNo.getTradeNo());
+                    if (trade.getTradeState() == Transaction.TradeStateEnum.SUCCESS) {
+                        service.notifyCytj(trade.getTradeNo());
+                    } else {
+                        service.queryOrderState(trade.getTradeNo());
+                    }
                 }
             }
         }

+ 8 - 10
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -114,10 +114,6 @@ public class WxApiService {
         order.setPatientName(dao.selectPatientName(order.getPatientId()));
         order.setCreateDatetime(new Date());
         order.setTradeState(Transaction.TradeStateEnum.NOTPAY);
-        if (order.getOrderType() == OrderType.INSPECTIONS.getCode()
-                && StringUtil.isBlank(order.getOpenid())) {
-            order.setOpenid("inspection-user");
-        }
         dao.insertNewOrder(order);
         return ResultVoUtil.success(order);
     }
@@ -214,6 +210,12 @@ public class WxApiService {
         }
     }
 
+    public void notifyCytj(String tradeNo) {
+        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
+        String successTime = DateUtil.formatDatetime(order.getPayDatetime());
+        savePayResultService.notifyCytj(order, successTime);
+    }
+
     public ResultVo<String> generateMzGuideBillPayQrcode(GenMzPayQrcodeParam param) {
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
                 .totalAmount(param.getTotalAmt()).description("湖南泰和医院-门诊缴费").build();
@@ -263,16 +265,12 @@ public class WxApiService {
                 return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "体检ID不能为空!");
             }
             order.setSglCheckId(param.getSglcheckid());
+            order.setSglCheckNotified(Boolean.FALSE);
         }
-
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
                 .totalAmount(param.getTotalAmt()).description(param.getDescription())
                 .build();
         NativePayResponse response = new WeChatPayService().nativePrepay(request);
-        if (param.getOrderType() == OrderType.INSPECTIONS.getCode()) {
-            response.setTradeNo("TJ_" + response.getTradeNo());
-        }
-
         long timesStamp = System.currentTimeMillis() / 1000;
         String orderTypeName = OrderType.get(param.getOrderType()).getLabel();
         order.setAppId(PropertiesUtil.getLocalProperty("appId"));
@@ -292,8 +290,8 @@ public class WxApiService {
         order.setAcctpayAmt(BigDecimal.ZERO);
         order.setCouponAmt(BigDecimal.ZERO);
         order.setCashpayAmt(order.getTotalFee());
-
         dao.insertNewOrder(order);
+
         Map<String, String> map = new HashMap<>();
         map.put("qrcodeUrl", response.getCodeUrl());
         map.put("tradeNo", response.getTradeNo());