TRX il y a 1 an
Parent
commit
c5761cf7f9

+ 4 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.domain.payment;
 
 import cn.hutool.json.JSONObject;
+import com.github.microservice.models.type.OrderFromType;
 import com.github.microservice.models.type.PaymentDeviceType;
 import com.github.microservice.models.type.PaymentType;
 import com.zhongshu.card.client.utils.type.RefundState;
@@ -85,6 +86,9 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "消费创建时间")
     private String paymentTime;
 
+    @Schema(description = "支付来源:刷卡 二维码")
+    private OrderFromType orderFromType;
+
     @Schema(description = "支付方式")
     @Indexed
     private String paymentWay;

+ 77 - 49
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -1,8 +1,10 @@
 package com.zhongshu.card.server.core.service.payment;
 
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.models.hxz.*;
+import com.github.microservice.models.type.OrderFromType;
 import com.github.microservice.models.type.PaymentDeviceType;
 import com.github.microservice.models.type.PaymentType;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
@@ -78,6 +80,17 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     @Autowired
     DeviceBindDao deviceBindDao;
 
+    /**
+     * 创建流水
+     *
+     * @param mqttDataId
+     * @return
+     */
+    public ExpenseFlow init(String mqttDataId) {
+        ExpenseFlow expenseFlow = expenseFlowDao.init(mqttDataId, TokenUtil.create());
+        return expenseFlow;
+    }
+
     /**
      * 创建订单
      *
@@ -107,6 +120,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         String deviceId = iotParam.getDeviceId();
         expenseFlow.setDeviceId(deviceId);
 
+        expenseFlow.setOrderFromType(OrderFromType.Swipe);
         // 支付方式
         expenseFlow.setPaymentWay(param.getPaymentType().getRemark());
         expenseFlow.setPaymentType(param.getPaymentType());
@@ -119,13 +133,13 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     }
 
     /**
-     * 消费付款
+     * 钱包支付
      *
      * @param entity
      * @return
      */
     @Transactional
-    public ResultContent<ExpenseFlow> expendPay(ExpenseFlow entity) {
+    public ResultContent<ExpenseFlow> walletPay(ExpenseFlow entity) {
         if (entity.getVerifyParamIsSuccess() == null || !entity.getVerifyParamIsSuccess()) {
             // 参数失败
             entity.setIsPaySuccess(Boolean.FALSE);
@@ -172,46 +186,9 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             e.printStackTrace();
         }
         expenseFlowDao.save(entity);
-
         return ResultContent.buildSuccess();
     }
 
-    /**
-     * 查询构建支付返回结果
-     *
-     * @param orderNo
-     * @param cardNo
-     * @return
-     */
-    public ConsumTransactionsResult buildConsumTransactionsResult(String orderNo, String cardNo) {
-        ConsumTransactionsResult result = new ConsumTransactionsResult();
-        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoAndCardNoOrderByCreateTimeDesc(orderNo, cardNo);
-        if (ObjectUtils.isNotEmpty(expenseFlow)) {
-            Boolean isPaySuccess = expenseFlow.getIsPaySuccess();
-            if (isPaySuccess != null && isPaySuccess) {
-                result.setSuccess();
-                // 设置了显示异常,去掉
-//                result.setText(expenseFlow.getPayRemark());
-                result.setCardNo(expenseFlow.getCardNo());
-                result.setName(expenseFlow.getUserName());
-                // 金额 转为 元 单位
-                result.setAmount(CommonUtil.turnMoney2Show(expenseFlow.getPayAmount()));
-                if (expenseFlow.getPaymentType() == PaymentType.UserWallet) {
-                    // 钱包查询余额
-                    Wallet wallet = walletDao.findByUserId(expenseFlow.getUserId());
-                    if (ObjectUtils.isNotEmpty(wallet)) {
-                        result.setMoney(CommonUtil.turnMoney2Show(wallet.getAmount()));
-                    }
-                }
-            } else {
-                result.setFailed(expenseFlow.getPayRemark());
-            }
-        } else {
-            result.setFailed("未查询到订单");
-        }
-        return result;
-    }
-
     /**
      * 通过 付款码(二维码)支付接口 创建订单
      *
@@ -220,8 +197,15 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
      */
     public ResultContent<ExpenseFlow> createExpenseFlowByHxz(QRCodeTransactionModel iotParam, ExpenseFlow expenseFlow) {
         expenseFlow.setMqttDataId(iotParam.getMqttDataId());
-
+        // 支付方式 付款码
+        String QR = iotParam.getQR();
+        // 判断是否是平台的二维码
         String userId = "665fc0389083d203896d3541";
+        if (StringUtils.isNotEmpty(QR) && QR.indexOf("userId") > 0) {
+            JSONObject jsonObject = JSONUtil.parseObj(QR);
+            userId = jsonObject.getStr("userId");
+        }
+        expenseFlow.setOrderFromType(OrderFromType.QrCode);
         expenseFlow.setUserId(userId);
 
         expenseFlow.setYear(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyy));
@@ -242,8 +226,6 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         String deviceId = iotParam.getDeviceId();
         expenseFlow.setDeviceId(deviceId);
 
-        // 支付方式 付款码
-        String QR = iotParam.getQR();
         // 判断 是 微信、支付宝的付款码
         PaymentType paymentType = PaymentUtil.getPaymentTypeByQr(QR);
         expenseFlow.setQr(QR);
@@ -296,10 +278,9 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         }
 
         PaymentType paymentType = entity.getPaymentType();
-        // 刷卡支付
-        if (paymentType == PaymentType.UserWallet) {
+        // 刷卡支付 并且钱包支付
+        if (paymentType == PaymentType.UserWallet && entity.getOrderFromType() == OrderFromType.Swipe) {
             CardInfo cardInfo = cardInfoDao.findByCode(entity.getCardNo());
-
             // 验证卡片
             if (ObjectUtils.isEmpty(cardInfo)) {
                 entity.setVerifyParamIsSuccess(Boolean.FALSE);
@@ -356,7 +337,6 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
                 entity.setVerifyParamMsg(String.format("支付失败钱包%s", wallet.getDataState().getRemark()));
                 return;
             }
-
             // 检查
             if (wallet.getAmount().compareTo(amount) < 0) {
                 entity.setVerifyParamIsSuccess(Boolean.FALSE);
@@ -429,13 +409,49 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess(entity);
     }
 
+    /**
+     * 查询构建支付返回结果
+     *
+     * @param orderNo
+     * @param cardNo
+     * @return
+     */
+    public ConsumTransactionsResult buildConsumTransactionsResult(String orderNo, String cardNo) {
+        ConsumTransactionsResult result = new ConsumTransactionsResult();
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoAndCardNoOrderByCreateTimeDesc(orderNo, cardNo);
+        if (ObjectUtils.isNotEmpty(expenseFlow)) {
+            Boolean isPaySuccess = expenseFlow.getIsPaySuccess();
+            if (isPaySuccess != null && isPaySuccess) {
+                result.setSuccess();
+                // 设置了显示异常,去掉
+//                result.setText(expenseFlow.getPayRemark());
+                result.setCardNo(expenseFlow.getCardNo());
+                result.setName(expenseFlow.getUserName());
+                // 金额 转为 元 单位
+                result.setAmount(CommonUtil.turnMoney2Show(expenseFlow.getPayAmount()));
+                if (expenseFlow.getPaymentType() == PaymentType.UserWallet) {
+                    // 钱包查询余额
+                    Wallet wallet = walletDao.findByUserId(expenseFlow.getUserId());
+                    if (ObjectUtils.isNotEmpty(wallet)) {
+                        result.setMoney(CommonUtil.turnMoney2Show(wallet.getAmount()));
+                    }
+                }
+            } else {
+                result.setFailed(expenseFlow.getPayRemark());
+            }
+        } else {
+            result.setFailed("未查询到订单");
+        }
+        return result;
+    }
+
     /**
      * 查询构建支付返回结果
      *
      * @param orderNo
      * @return
      */
-    public ConsumTransactionsResult buildConsumTransactionsResult(String orderNo) {
+    public ConsumTransactionsResult buildPayResult(String orderNo) {
         ConsumTransactionsResult result = new ConsumTransactionsResult();
         ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(orderNo);
         if (ObjectUtils.isNotEmpty(expenseFlow)) {
@@ -443,11 +459,23 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             if (isPaySuccess != null && isPaySuccess) {
                 result.setSuccess();
 //                result.setText(expenseFlow.getPayRemark());
+                if (expenseFlow.getPaymentType() == PaymentType.WxQrCode
+                        || expenseFlow.getPaymentType() == PaymentType.ZfbQrCode) {
+                    result.setName("陈琰春");
+                } else {
+                    result.setName(expenseFlow.getUserName());
+                }
                 result.setCardNo(expenseFlow.getCardNo());
-//                result.setName(expenseFlow.getUserName());
-                result.setName("陈琰春");
                 // 金额 转为 元 单位
                 result.setAmount(CommonUtil.turnMoney2Show(expenseFlow.getPayAmount()));
+
+                if (expenseFlow.getPaymentType() == PaymentType.UserWallet) {
+                    // 钱包查询余额
+                    Wallet wallet = walletDao.findByUserId(expenseFlow.getUserId());
+                    if (ObjectUtils.isNotEmpty(wallet)) {
+                        result.setMoney(CommonUtil.turnMoney2Show(wallet.getAmount()));
+                    }
+                }
             } else {
                 result.setFailed(expenseFlow.getPayRemark());
             }

+ 23 - 11
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/HxzService.java

@@ -83,7 +83,8 @@ public class HxzService extends SuperService {
 
         ConsumTransactionsModel param1 = param.getParam();
         String mqttDataId = param1.getMqttDataId();
-        ExpenseFlow expenseFlow = expenseFlowDao.init(mqttDataId, TokenUtil.create());
+        ExpenseFlow expenseFlow = expenseFlowService.init(mqttDataId);
+
         if (ObjectUtils.isEmpty(expenseFlow)) {
             resultModel.setFailed("重复订单");
             result.setModel(resultModel);
@@ -94,7 +95,7 @@ public class HxzService extends SuperService {
         expenseFlow = createResult.getContent();
 
         // 支付
-        ResultContent<ExpenseFlow> resultContent = expenseFlowService.expendPay(expenseFlow);
+        ResultContent<ExpenseFlow> resultContent = expenseFlowService.walletPay(expenseFlow);
         if (resultContent.isFailed()) {
             resultModel.setFailed(resultContent.getMsg());
             requestInfoService.addRequestInfo(param, resultModel);
@@ -118,7 +119,7 @@ public class HxzService extends SuperService {
     public ResultContent orderQuery(OrderQueryModel param) {
         ConsumTransactionsFullResult result = new ConsumTransactionsFullResult();
         // 构建返回结果
-        ConsumTransactionsResult resultModel = expenseFlowService.buildConsumTransactionsResult(param.getOrder(), param.getCardNo());
+        ConsumTransactionsResult resultModel = expenseFlowService.buildPayResult(param.getOrder());
         result.setModel(resultModel);
         requestInfoService.addRequestInfo(param, resultModel);
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(result));
@@ -137,7 +138,7 @@ public class HxzService extends SuperService {
 
         QRCodeTransactionResult model = new QRCodeTransactionResult();
         String mqttDataId = param.getMqttDataId();
-        ExpenseFlow expenseFlow = expenseFlowDao.init(mqttDataId, TokenUtil.create());
+        ExpenseFlow expenseFlow = expenseFlowService.init(mqttDataId);
         if (ObjectUtils.isEmpty(expenseFlow)) {
             model.setFailed("重复订单");
             result.setModel(model);
@@ -148,13 +149,24 @@ public class HxzService extends SuperService {
         ResultContent<ExpenseFlow> createResult = expenseFlowService.createExpenseFlowByHxz(param, expenseFlow);
         expenseFlow = createResult.getContent();
 
-        // 扣款支付订单
-        ResultContent<ExpenseFlow> resultContent = expenseFlowService.expendPayQrCode(expenseFlow);
-        if (resultContent.isFailed()) {
-            model.setFailed(resultContent.getMsg());
+        if (expenseFlow.getPaymentType() == PaymentType.UserWallet) {
+            // 钱包支付
+            ResultContent<ExpenseFlow> resultContent = expenseFlowService.walletPay(expenseFlow);
+            if (resultContent.isSuccess()) {
+                model.setSuccess();
+                model.setQrorder(expenseFlow.getOrderNo());
+            } else {
+                model.setFailed(resultContent.getMsg());
+            }
         } else {
-            model.setSuccess();
-            model.setQrorder(expenseFlow.getOrderNo());
+            // 扣款支付订单
+            ResultContent<ExpenseFlow> resultContent = expenseFlowService.expendPayQrCode(expenseFlow);
+            if (resultContent.isFailed()) {
+                model.setFailed(resultContent.getMsg());
+            } else {
+                model.setSuccess();
+                model.setQrorder(expenseFlow.getOrderNo());
+            }
         }
         result.setModel(model);
         // 记录日志
@@ -172,7 +184,7 @@ public class HxzService extends SuperService {
         ConsumTransactionsFullResult result = new ConsumTransactionsFullResult();
         result.setPaymentType(PaymentType.WxQrCode);
         // 构建返回结果
-        ConsumTransactionsResult resultModel = expenseFlowService.buildConsumTransactionsResult(param.getQROrder());
+        ConsumTransactionsResult resultModel = expenseFlowService.buildPayResult(param.getQROrder());
         result.setModel(resultModel);
         requestInfoService.addRequestInfo(param, resultModel);
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(result));

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/util/PaymentUtil.java

@@ -26,6 +26,9 @@ public class PaymentUtil {
     public static PaymentType getPaymentTypeByQr(String qr) {
         PaymentType paymentType = null;
         if (StringUtils.isNotEmpty(qr)) {
+            if (qr.indexOf("userId") > 0) {
+                return PaymentType.UserWallet;
+            }
             int len = qr.length();
             for (String str : wxStartList) {
                 if (qr.startsWith(str) && len == 18) {