lighter 1 year ago
parent
commit
cbed66fe3f

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>wxservice-server</artifactId>
-    <version>11.8</version>
+    <version>11.9</version>
     <name>wxservice-server</name>
     <description>server for wxservice-web</description>
 

+ 3 - 0
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -125,6 +125,9 @@ public interface WxApiDao {
             "refund_op_datetime=#{refundOpDatetime}, refund_reason=#{refundReason}, trade_state='REFUND' where trade_no=#{tradeNo}")
     void updateRefundId(WxPayOrder order);
 
+    @Delete("delete from t_wechat_pay_order where trade_no=#{tradeNo}")
+    void deleteOrder(String tradeNo);
+
     @Update("update t_wechat_pay_order set trade_state='REFUND', refund_reason=#{msg}, his_status=0 where trade_no=#{tradeNo}")
     void alreadyRefund(@Param("tradeNo") String tradeNo, @Param("msg") String msg);
 

+ 31 - 14
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -21,6 +21,7 @@ import thyyxxk.wxservice_server.factory.wechatpay.model.NativePayResponse;
 import thyyxxk.wxservice_server.factory.wechatpay.model.WechatPayGlobalRequest;
 import thyyxxk.wxservice_server.utils.*;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -71,18 +72,26 @@ public class WxApiService {
         order.setOpenid(TokenUtil.getInstance().getUserOpenid());
         order.setTradeNo(SnowFlakeId.instance().nextId());
         order.setMchId(PropertiesUtil.getLocalProperty("mchId"));
-        WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                .appletType(null).outTradeNo(order.getTradeNo())
-                .openid(order.getOpenid()).description(order.getBody())
-                .totalAmount(totalAmt).build();
-        PrepayWithRequestPaymentResponse response = new WeChatPayService().jsApiPrepay(request);
+
+        if (totalAmt == 0) {
+            order.setPrepayId("PREPARED");
+            order.setTimeStamp(String.valueOf(System.currentTimeMillis()));
+            order.setSerialNo(SnowFlakeId.instance().nextId());
+        } else {
+            WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
+                    .appletType(null).outTradeNo(order.getTradeNo())
+                    .openid(order.getOpenid()).description(order.getBody())
+                    .totalAmount(totalAmt).build();
+            PrepayWithRequestPaymentResponse response = new WeChatPayService().jsApiPrepay(request);
+            order.setAppId(response.getAppId());
+            order.setPrepayId(response.getPackageVal());
+            order.setTimeStamp(response.getTimeStamp());
+            order.setSerialNo(response.getNonceStr());
+            order.setSignType(response.getSignType());
+            order.setPaySign(response.getPaySign());
+        }
+
         order.setPatientName(dao.selectPatientName(order.getPatientId()));
-        order.setAppId(response.getAppId());
-        order.setPrepayId(response.getPackageVal());
-        order.setTimeStamp(response.getTimeStamp());
-        order.setSerialNo(response.getNonceStr());
-        order.setSignType(response.getSignType());
-        order.setPaySign(response.getPaySign());
         order.setCreateDatetime(new Date());
         order.setTradeState(Transaction.TradeStateEnum.NOTPAY);
         dao.insertNewOrder(order);
@@ -132,9 +141,17 @@ public class WxApiService {
                 return ResultVoUtil.success("保存门诊缴费信息成功。");
             }
 
-            WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                    .outTradeNo(tradeNo).build();
-            Transaction transaction = new WeChatPayService().queryOrderState(request);
+
+            Transaction transaction;
+            if (order.getTotalFee().compareTo(BigDecimal.ZERO) == 0) {
+                transaction = new Transaction();
+                transaction.setTradeState(Transaction.TradeStateEnum.SUCCESS);
+                transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
+            } else {
+                WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
+                        .outTradeNo(tradeNo).build();
+                transaction = new WeChatPayService().queryOrderState(request);
+            }
 
             Transaction.TradeStateEnum tradeState = transaction.getTradeState();
             if (tradeState == Transaction.TradeStateEnum.SUCCESS) {

+ 4 - 0
src/main/java/thyyxxk/wxservice_server/service/WxRefundService.java

@@ -84,6 +84,10 @@ public class WxRefundService {
 
     private ResultVo<String> executeRefund(WxPayOrder order) {
         int refundAmount = DecimalTool.moneyYuanToFen(order.getTotalFee()).intValue();
+        if (refundAmount == 0) {
+            dao.deleteOrder(order.getTradeNo());
+            return ResultVoUtil.success();
+        }
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
                 .outTradeNo(order.getTradeNo()).refundAmount(refundAmount)
                 .totalAmount(refundAmount).build();