‘chenzhilei’ 1 місяць тому
батько
коміт
4fe4a0f3f3

+ 22 - 0
src/main/java/thyyxxk/wxservice_server/controller/WxApiController.java

@@ -1,6 +1,7 @@
 package thyyxxk.wxservice_server.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.wechat.pay.java.service.payments.model.Transaction;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -10,6 +11,7 @@ import thyyxxk.wxservice_server.config.exception.ExceptionEnum;
 import thyyxxk.wxservice_server.entity.ResultVo;
 import thyyxxk.wxservice_server.entity.appointment.DoctorInfo;
 import thyyxxk.wxservice_server.entity.wxapi.*;
+import thyyxxk.wxservice_server.factory.thmz.model.NongPayRequest;
 import thyyxxk.wxservice_server.service.WxRefundService;
 import thyyxxk.wxservice_server.service.PushWxMessageService;
 import thyyxxk.wxservice_server.service.WxApiService;
@@ -67,6 +69,12 @@ public class WxApiController {
         return service.createPayOrder(order);
     }
 
+    @PassToken
+    @GetMapping("/updatePayNo")
+    public ResultVo<Integer> updatePayNo(@RequestParam("payOrderId") String payOrderId,@RequestParam("mchOrderNo") String mchOrderNo,@RequestParam("tradeNo") String tradeNo) {
+        return service.updatePayNo(payOrderId,mchOrderNo,tradeNo);
+    }
+
     @PassToken
     @GetMapping("/queryOrderState")
     public ResultVo<String> queryOrderState(@RequestParam("tradeNo") String tradeNo) {
@@ -77,6 +85,20 @@ public class WxApiController {
         return ResultVoUtil.success(payTime);
     }
 
+    @PassToken
+    @GetMapping("/queryNongOrderState")
+    public ResultVo<Transaction.TradeStateEnum> queryNongOrderState(@RequestParam("tradeNo") String tradeNo) {
+        ResultVo<Transaction.TradeStateEnum> status = service.queryNongOrderState(tradeNo);
+        return status;
+    }
+
+    @PassToken
+    @PostMapping("/queryNongOrderPayOrder")
+    public ResultVo<Map<String, Object>> queryNongOrderPayOrder(@RequestBody NongPayRequest nongPayRequest) {
+        ResultVo<Map<String, Object>> status = service.queryNongOrderPayOrder(nongPayRequest);
+        return status;
+    }
+
     @PassToken
     @GetMapping("/queryOrderStateOnly")
     public ResultVo<JSONObject> queryOrderStateOnly(@RequestParam("tradeNo") String tradeNo) {

+ 4 - 1
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -73,6 +73,9 @@ public interface WxApiDao {
                                                Transaction.TradeStateEnum tradeState,
                                                String openid);
 
+    @Update("update t_wechat_pay_order set pay_order_id=#{payOrderId} , mch_order_no=#{mchOrderNo} where trade_no=#{tradeNo}")
+    int updatePayNo(String payOrderId,String mchOrderNo,String tradeNo);
+
     @Update("update t_wechat_pay_order set trade_state=#{tradeState} where trade_no=#{tradeNo}")
     void updatePayStatusOnly(String tradeNo, Transaction.TradeStateEnum tradeState);
 
@@ -90,7 +93,7 @@ public interface WxApiDao {
     @Update("update t_wechat_pay_order set trade_state='REFUND' where trade_no=#{tradeNo}")
     void updateRefundStatus(String tradeNo);
 
-    @Update("update t_wechat_pay_order set his_status=1 where trade_no=#{tradeNo}")
+        @Update("update t_wechat_pay_order set his_status=1 where trade_no=#{tradeNo}")
     void updateSuccessHisStatus(String tradeNo);
 
     @Update("update t_patient_coupons set coupon_state='USED' where id=#{id}")

+ 16 - 0
src/main/java/thyyxxk/wxservice_server/entity/hrgresponse/NongPayResponse.java

@@ -0,0 +1,16 @@
+package thyyxxk.wxservice_server.entity.hrgresponse;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author dj
+ */
+@Data
+public class NongPayResponse {
+    private Integer code;
+    private String msg;
+    private Map<String, Object> data;
+}

+ 2 - 0
src/main/java/thyyxxk/wxservice_server/entity/wxapi/WxPayOrder.java

@@ -65,6 +65,8 @@ public class WxPayOrder {
     private String drugPurchaseId;
     private String wxmallPackageId;
     private String recStaff;
+    private String payOrderId;
+    private String mchOrderNo;
 
     public Boolean sglCheckNotNotified() {
         return orderType == OrderType.INSPECTIONS.getCode()

+ 26 - 0
src/main/java/thyyxxk/wxservice_server/factory/thmz/model/NongPayRequest.java

@@ -0,0 +1,26 @@
+package thyyxxk.wxservice_server.factory.thmz.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class NongPayRequest {
+    //
+    private String payType = "1";
+    //金额(整数分)
+    private Integer amount;
+    //
+    private Integer subject;
+    // 支付成功返回跳转地址
+    private Integer returnUrl;
+    //
+    private Integer body;
+
+    public static class Type {
+        public static Integer MZLZ = 1;
+        public static Integer MZHZ = 2;
+        public static Integer ZYLZ = 3;
+        public static Integer ZYHZ = 1;
+    }
+}

+ 41 - 1
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -6,6 +6,7 @@ import com.wechat.pay.java.service.payments.jsapi.model.*;
 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;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import thyyxxk.wxservice_server.config.exception.BizException;
@@ -14,10 +15,14 @@ import thyyxxk.wxservice_server.constant.OrderType;
 import thyyxxk.wxservice_server.dao.WxApiDao;
 import thyyxxk.wxservice_server.entity.ResultVo;
 import thyyxxk.wxservice_server.entity.appointment.DoctorInfo;
+import thyyxxk.wxservice_server.entity.hrgresponse.NongPayResponse;
+import thyyxxk.wxservice_server.entity.hrgresponse.SourcesResponse;
 import thyyxxk.wxservice_server.entity.wxapi.JsApiSHA1;
 import thyyxxk.wxservice_server.entity.wxapi.GenMzPayQrcodeParam;
 import thyyxxk.wxservice_server.entity.wxapi.WxPayOrder;
 import thyyxxk.wxservice_server.entity.wxapi.WxPyQrcdPrm;
+import thyyxxk.wxservice_server.factory.thmz.model.NongPayRequest;
+import thyyxxk.wxservice_server.factory.thmz.model.QueryReceiptRequest;
 import thyyxxk.wxservice_server.factory.wechatpay.WeChatPayService;
 import thyyxxk.wxservice_server.factory.wechatpay.model.NativePayResponse;
 import thyyxxk.wxservice_server.factory.wechatpay.model.WechatPayGlobalRequest;
@@ -43,6 +48,8 @@ public class WxApiService {
         this.savePayResultService = savePayResultService;
         this.template = template;
     }
+    @Value("${thyy.api-addr.nong-api}")
+    private String nongApi;
 
     public JSONObject getAuthorization(String code) {
         String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +
@@ -67,10 +74,11 @@ public class WxApiService {
     }
 
     public ResultVo<WxPayOrder> createPayOrder(WxPayOrder order) {
+        order.setTotalFee(new BigDecimal(0.01));
         WxPayOrder existOrder = getExistOrder(order);
         if (null != existOrder) {
             if (existOrder.getTradeState() == Transaction.TradeStateEnum.SUCCESS
-                && existOrder.getCashpayAmt().compareTo(BigDecimal.ZERO) > 0) {
+                    && existOrder.getCashpayAmt().compareTo(BigDecimal.ZERO) > 0) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR,
                         "您已支付过一笔相同金额的订单,请勿重复支付。");
             }
@@ -103,6 +111,12 @@ public class WxApiService {
             order.setSerialNo(response.getNonceStr());
             order.setSignType(response.getSignType());
             order.setPaySign(response.getPaySign());
+//            order.setAppId("1");
+//            order.setPrepayId("1");
+//            order.setTimeStamp("1");
+//            order.setSerialNo("1");
+//            order.setSignType("1");
+//            order.setPaySign("1");
         }
         if (null == order.getFundpayAmt()) {
             order.setFundpayAmt(BigDecimal.ZERO);
@@ -129,6 +143,10 @@ public class WxApiService {
         return ResultVoUtil.success(order);
     }
 
+    public ResultVo<Integer> updatePayNo(String payOrderId,String mchOrderNo,String tradeNo) {
+        return ResultVoUtil.success(dao.updatePayNo(payOrderId,mchOrderNo,tradeNo));
+    }
+
     private WxPayOrder getExistOrder(WxPayOrder order) {
         if (order.getOrderType() == OrderType.CLINIC_REGISTER.getCode() ||
                 order.getOrderType() == OrderType.REGISTRATION.getCode()) {
@@ -148,6 +166,28 @@ public class WxApiService {
         return ResultVoUtil.success(response);
     }
 
+    public ResultVo<Transaction.TradeStateEnum> queryNongOrderState(String tradeNo) {
+        WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
+        if (order == null) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
+        }
+        String url = nongApi + "NongPay/query?type=0&mchOrderNo="+order.getMchOrderNo();
+        NongPayResponse response = template.getForObject(url, NongPayResponse.class);
+        if (response.getCode() == 9003 && (Integer) response.getData().get("state") == 2) {
+            dao.updatePayStatusAndPayTime(order.getTradeNo(), Transaction.TradeStateEnum.SUCCESS,DateUtil.formatDatetime(new Date((Long)response.getData().get("successTime"))));
+            return ResultVoUtil.success(Transaction.TradeStateEnum.SUCCESS);
+        } else {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "网络服务错误!");
+        }
+    }
+
+    public ResultVo<Map<String, Object>> queryNongOrderPayOrder(NongPayRequest nongPayRequest) {
+        String url = nongApi + "NongPay/unifiedOrder";
+        NongPayResponse response = template.postForObject(url, nongPayRequest, NongPayResponse.class);
+        return ResultVoUtil.success(response.getData());
+
+    }
+
     public String queryOrderState(String tradeNo) {
         try {
             while (TradeVectorUtil.tradeNoBeingQuery(tradeNo) || TradeVectorUtil.tradeNoBeingRefund(tradeNo)) {

+ 1 - 0
src/main/resources/application-8083.yml

@@ -87,6 +87,7 @@ thyy:
     chronic-api: http://130.150.161.72:8077/chronicDisease
     physical-check-api: http://130.150.161.72:8888/bdp/dataservice/api
     add-face-api: http://130.150.161.72:20923/thyy/api/haikang/door/addFaceRecognition
+    nong-api: http://218.93.214.118:6080/
   config:
     dzfpdir: D:\wx-business\files\dzfp
     dzfpurl: https://staticweb.hnthyy.cn/dzfp

+ 1 - 0
src/main/resources/application-8085.yml

@@ -87,6 +87,7 @@ thyy:
     chronic-api: http://130.150.161.72:8077/chronicDisease
     physical-check-api: http://130.150.161.72:8888/bdp/dataservice/api
     add-face-api: http://130.150.161.72:20923/thyy/api/haikang/door/addFaceRecognition
+    nong-api: http://218.93.214.118:6080/
   config:
     dzfpdir: D:\wx-business\files\dzfp
     dzfpurl: https://staticweb.hnthyy.cn/dzfp

+ 1 - 0
src/main/resources/application-prod.yml

@@ -87,6 +87,7 @@ thyy:
     chronic-api: http://130.150.161.72:8077/chronicDisease
     physical-check-api: http://130.150.161.72:8888/bdp/dataservice/api
     add-face-api: http://130.150.161.72:20923/thyy/api/haikang/door/addFaceRecognition
+    nong-api: http://218.93.214.118:6080/
   config:
     dzfpdir: D:\wx-business\files\dzfp
     dzfpurl: https://staticweb.hnthyy.cn/dzfp