소스 검색

订单支付

chunping 3 년 전
부모
커밋
8f4fa02ca7

+ 29 - 0
mp-common/src/main/java/com/qs/mp/common/enums/PayTypeEnum.java

@@ -0,0 +1,29 @@
+package com.qs.mp.common.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+
+/**
+ *
+ * 前端选择的支付类型
+ *
+ */
+public enum PayTypeEnum implements IEnum<Integer> {
+
+  ALIPAY(1, "支付宝"),
+  WXPAY(2, "微信支付"),
+  ACCTPAY(3,"余额支付");
+
+
+  private final int value;
+  private final String desc;
+
+  PayTypeEnum(final int value, final String desc) {
+    this.value = value;
+    this.desc = desc;
+  }
+
+  @Override
+  public Integer getValue() {
+    return value;
+  }
+}

+ 7 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelOrderService.java

@@ -3,6 +3,7 @@ package com.qs.mp.channel.service;
 import com.qs.mp.channel.domain.ChannelOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
+import com.qs.mp.pay.domain.PayOrder;
 
 /**
  * <p>
@@ -30,4 +31,10 @@ public interface IChannelOrderService extends IService<ChannelOrder> {
    * @return
    */
   boolean cancelOrder(Long channelId, String orderId);
+
+  /**
+   * 支付成功回调
+   * @param payOrder
+   */
+  void paySuccess(PayOrder payOrder);
 }

+ 18 - 3
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qs.mp.channel.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.admin.domain.TicketBox;
@@ -17,9 +18,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.common.enums.ChannelOrderStatusEnum;
 import com.qs.mp.common.enums.TicketBoxStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import java.util.ArrayList;
 import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,13 +39,11 @@ import org.springframework.transaction.annotation.Transactional;
  */
 @Service
 public class ChannelOrderServiceImpl extends ServiceImpl<ChannelOrderMapper, ChannelOrder> implements IChannelOrderService {
+  protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
 
   @Autowired
   private BizIdGenerator bizIdGenerator;
 
-  @Autowired
-  private IChannelAddrService channelAddrService;
-
   @Autowired
   private ITicketBoxService ticketBoxService;
 
@@ -134,4 +137,16 @@ public class ChannelOrderServiceImpl extends ServiceImpl<ChannelOrderMapper, Cha
         .eq(ChannelOrder::getOrderId, orderId));
     return true;
   }
+
+  @Override
+  public void paySuccess(PayOrder payOrder) {
+    ChannelOrder channelOrder = channelOrderService.getById(payOrder.getBizId());
+    if (channelOrder.getStatus() != ChannelOrderStatusEnum.NOT_PAY) {
+      LogUtil.error(logger, "支付回调渠道订单处理,订单状态异常,不是待支付。payOrder:{0}, channelOrder:{1}",
+          new Object[]{JSONObject.toJSONString(payOrder), JSONObject.toJSONString(channelOrder)});
+      throw new ServiceException("支付回调渠道订单处理,订单状态异常,不是待支付。orderId:" + payOrder.getBizId());
+    }
+    channelOrderService.update(new LambdaUpdateWrapper<ChannelOrder>().set(ChannelOrder::getStatus, ChannelOrderStatusEnum.NOT_DELIVER)
+        .eq(ChannelOrder::getOrderId, channelOrder.getOrderId()));
+  }
 }

+ 12 - 12
mp-service/src/main/java/com/qs/mp/pay/domain/PayOrder.java

@@ -12,7 +12,7 @@ import lombok.Data;
 /**
  * @describe 支付订单表实体类
  * @auther quanshu
- * @create 2022-03-03 21:28:15
+ * @create 2022-03-04 14:02:40
  */
 @TableName("mp_pay_order")
 @Data
@@ -51,10 +51,10 @@ public class PayOrder implements Serializable {
   private String orderTime;
 
   /**
-   * 支付方式 1:微信  2:支付宝 3:云闪付
+   * 支付来源 1:支付宝  2:微信支付 5:云闪付
    */
-  @TableField("pay_type")
-  private Integer payType;
+  @TableField("pay_resource")
+  private String payResource;
 
   /**
    * 1004:支付宝CTB;1008:微信公众号(需要绑定支付目录)1014: 支付宝服务窗1016:云闪付CTB1017:微信小程序1019:支付宝小程序(请用1014编码)
@@ -65,26 +65,26 @@ public class PayOrder implements Serializable {
   /**
    * 交易金额,以分为单位
    */
-  @TableField("trans_amt")
-  private Integer transAmt;
+  @TableField("transaction_amount")
+  private Integer transactionAmount;
 
   /**
    * 订单备注 长度 100
    */
-  @TableField("remark")
-  private String remark;
+  @TableField("order_remark")
+  private String orderRemark;
 
   /**
    * 订单名称,如:充值,租赁仓库,采购设备等
    */
-  @TableField("title")
-  private String title;
+  @TableField("order_name")
+  private String orderName;
 
   /**
    * 订单状态码
    */
-  @TableField("status")
-  private String status;
+  @TableField("order_status")
+  private String orderStatus;
 
   /**
    * 返回状态码

+ 1 - 1
mp-service/src/main/java/com/qs/mp/pay/mapper/PayOrderMapper.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * @auther quanshu
- * @create 2022-03-03 21:28:15
+ * @create 2022-03-04 14:02:40
  * @describe 支付订单表mapper类
  */
 public interface PayOrderMapper extends BaseMapper<PayOrder> {

+ 1 - 1
mp-service/src/main/java/com/qs/mp/pay/service/IPayOrderService.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author quanshu
- * @since 2022-03-03
+ * @since 2022-03-04
  */
 public interface IPayOrderService extends IService<PayOrder> {
 

+ 0 - 2
mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java

@@ -52,6 +52,4 @@ public interface IWalletService {
    */
   boolean completeDrawingsApply(String merchId);
 
-  boolean merchRecharge(PayOrder payOrder);
-
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/pay/service/impl/PayOrderServiceImpl.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author quanshu
- * @since 2022-03-03
+ * @since 2022-03-04
  */
 @Service
 public class PayOrderServiceImpl extends ServiceImpl<PayOrderMapper, PayOrder> implements IPayOrderService {

+ 42 - 115
mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java

@@ -47,7 +47,7 @@ public class WalletServiceImpl implements IWalletService {
   @Value("${pay.base.url}")
   private String baseUrl = "https://jlpays.kakapaypay.com/";
   @Value("${wx.appId}")
-  private String appId ="wxb86cb7f459fc3675";
+  private String appId = "wxb86cb7f459fc3675";
 
   @Value("${pay.shopNo}")
   private String payShopNo;  //平台商户号
@@ -60,13 +60,13 @@ public class WalletServiceImpl implements IWalletService {
 
   @Override
   public JSONObject channelPay(BizTypeEnum bizType, String bizId, String openId, int money) {
-    String reqUrl = baseUrl+"/pay/payMoneyCTB";
+    String reqUrl = baseUrl + "/pay/payMoneyCTB";
     JSONObject params = new JSONObject();
     params = buildPayOrderReqData(payShopNo, paySign, money, openId);
-    String result = OkHttpUtil.postJsonParams(reqUrl,params.toJSONString());
-    logger.info("request params:"+ params.toJSONString()+"  result:"+result);
-    if(StringUtils.isBlank(result)){
-      LogUtil.error(logger,"创建充值订单接口失败");
+    String result = OkHttpUtil.postJsonParams(reqUrl, params.toJSONString());
+    logger.info("request params:" + params.toJSONString() + "  result:" + result);
+    if (StringUtils.isBlank(result)) {
+      LogUtil.error(logger, "创建充值订单接口失败");
       return null;
     }
     JSONObject resultJson = JSONObject.parseObject(result);
@@ -74,7 +74,7 @@ public class WalletServiceImpl implements IWalletService {
     String orderNo = resultJson.getString("order_no");
     JSONObject data = resultJson.getJSONObject("pay_info");
     String orderstatus = resultJson.getString("orderstatus");
-    if(REQ_STATUS_SUCCESS.equalsIgnoreCase(code)){
+    if (REQ_STATUS_SUCCESS.equalsIgnoreCase(code)) {
       //保存订单记录
       PayOrder payOrder = buildPayOrder(params);
       payOrder.setOrderId(resultJson.getString("shop_order_no"));
@@ -82,12 +82,12 @@ public class WalletServiceImpl implements IWalletService {
       payOrder.setCode(code);
       payOrder.setBizType(bizType);
       payOrder.setBizId(bizId);
-      payOrder.setStatus(orderstatus);
+      payOrder.setOrderStatus(orderstatus);
       boolean ret = payOrderService.save(payOrder);
-      if(ret){
+      if (ret) {
         return data;
-      }else{
-        LogUtil.error(logger,"渠道支付订单数据库保存失败.");
+      } else {
+        LogUtil.error(logger, "渠道支付订单数据库保存失败.");
       }
     }
     return null;
@@ -99,25 +99,25 @@ public class WalletServiceImpl implements IWalletService {
     //查询统一支付订单表,查询订单类型,然后根据不同类型做对应的逻辑处理
     //查询支付状态为1:支付成功,2:订单创建成功,等待支付。
     LambdaQueryWrapper<PayOrder> wrapper = new LambdaQueryWrapper();
-    wrapper.eq(PayOrder::getOrderId,orderNo);
-    wrapper.eq(PayOrder::getStatus,"1");
+    wrapper.eq(PayOrder::getOrderId, orderNo);
+    wrapper.eq(PayOrder::getOrderStatus, "1");
     List<PayOrder> payOrderList = payOrderService.list(wrapper);
-    if(payOrderList.size() != 1){
+    if (payOrderList.size() != 1) {
       //数据结构异常,告警
-      LogUtil.error(logger,"数据结构异常,违反唯一约束,orderNo:"+orderNo);
+      LogUtil.error(logger, "数据结构异常,违反唯一约束,orderNo:" + orderNo);
     }
     //渠道订单
     PayOrder payOrder = payOrderList.get(0);
-    logger.info("biz type:"+payOrder.getBizType());
+    LogUtil.info(logger, "支付回调,bizType:{0},bizId:{1}" ,
+        new Object[]{payOrder.getBizType(), payOrder.getBizId()});
     if (BizTypeEnum.CHANNEL_ORDER == payOrder.getBizType()) {
-      // TODO 业务订单支付成功,调用业务订单服务处理
-      // customerOrderService.paySuccess(payOrder);
-    }
-    else{
+      // 业务订单支付成功,调用业务订单服务处理
+      channelOrderService.paySuccess(payOrder);
+    } else {
       //数据结构异常,告警
-      LogUtil.error(logger,"该业务单据类型未支持,orderNo:"+orderNo);
+      LogUtil.error(logger, "该业务单据类型未支持,orderNo:" + orderNo);
     }
-}
+  }
 
 
   @Override
@@ -136,104 +136,31 @@ public class WalletServiceImpl implements IWalletService {
   }
 
 
-
-
-  private PayOrder buildPayOrder(JSONObject jsonObject){
-    PayOrder payOrder =  jsonObject.toJavaObject(PayOrder.class);
+  private PayOrder buildPayOrder(JSONObject jsonObject) {
+    PayOrder payOrder = jsonObject.toJavaObject(PayOrder.class);
     return payOrder;
   }
 
-  private JSONObject buildPayOrderReqData(String shopNo,String sign,int money,String openId){
+  private JSONObject buildPayOrderReqData(String shopNo, String sign, int money, String openId) {
 
     JSONObject sendData = new JSONObject();
-    sendData.put("shop_no", shopNo);
-    sendData.put("shop_order_no", String.valueOf(bizIdGenerator.newId()));
-    sendData.put("shop_order_time", DateUtils.getTime());
-    sendData.put("pay_resource", PAY_RESOURCE); //支付来源 1:支付宝  2:微信支付 5:云闪付
-    sendData.put("trans_type_code",PAY_RESOURCE_TYPE); //1017:微信小程序
-    sendData.put("transaction_amount", money);
-    sendData.put("order_remark", "");
-    sendData.put("timestamp", System.currentTimeMillis());
-    sendData.put("callback_url", callbackUrl);
-
-    sendData.put("order_name", "充值");
-    sendData.put("sign", sign);
-    sendData.put("client_ip", "113.31.163.91");
-
-    sendData.put("auth_code", openId);
-    sendData.put("notify_url", notifyUrl);
-    sendData.put("app_id", appId);
+    sendData.put("shop_no" , shopNo);
+    sendData.put("shop_order_no" , String.valueOf(bizIdGenerator.newId()));
+    sendData.put("shop_order_time" , DateUtils.getTime());
+    sendData.put("pay_resource" , PAY_RESOURCE); //支付来源 1:支付宝  2:微信支付 5:云闪付
+    sendData.put("trans_type_code" , PAY_RESOURCE_TYPE); //1017:微信小程序
+    sendData.put("transaction_amount" , money);
+    sendData.put("order_remark" , "");
+    sendData.put("timestamp" , System.currentTimeMillis());
+    sendData.put("callback_url" , callbackUrl);
+
+    sendData.put("order_name" , "订单支付");
+    sendData.put("sign" , sign);
+    sendData.put("client_ip" , "113.31.163.91");
+
+    sendData.put("auth_code" , openId);
+    sendData.put("notify_url" , notifyUrl);
+    sendData.put("app_id" , appId);
     return sendData;
   }
-
-
-  @Override
-  @Transactional
-  public boolean merchRecharge(PayOrder payOrder) {
-    /*String merchId = payOrder.getOrderTypeRefId();
-    String orderNo = payOrder.getOrderNo();
-    //根据订单类型,查询商户ID
-    if(PayOrderTypeEnum.ORDER_MRARCH_BILL.getValue() == payOrder.getOrderType().intValue()){
-      //商户支付订单,查询商户信息
-      MerchantBill merchantBill = merchantBillService.getById(payOrder.getOrderTypeRefId());
-      if(merchantBill == null){
-        LogUtil.error(logger,"账单不存在.billId:"+payOrder.getOrderTypeRefId());
-        return false;
-      }
-      merchId = merchantBill.getMerchId();
-    }
-    //查询资金流水表,是否存在重复订单号
-    LambdaQueryWrapper<MerchantMoneyLog> logWrapper = new LambdaQueryWrapper<>();
-    logWrapper.eq(MerchantMoneyLog::getRefId, orderNo);
-    logWrapper.eq(MerchantMoneyLog::getMerchId, merchId);
-    logWrapper.eq(MerchantMoneyLog::getRefType, payOrder.getOrderType());
-    List<MerchantMoneyLog> logList = merchantMoneyLogService.list(logWrapper);
-    if (logList.size() == 0) {
-      Merchant merchant = merchantService.getById(merchId);
-      if(null == merchant){
-        LogUtil.error(logger,"商户不存在.merchId:"+merchId);
-        return false;
-      }
-      MerchantMoneyLog merchantMoneyLog = new MerchantMoneyLog();
-      merchantMoneyLog.setBizTime(
-          DateUtils.parseStrToDate(payOrder.getCompleteDate(), DateUtils.YYYY_MM_DD_HH_MM_SS));
-      merchantMoneyLog.setMerchId(merchId); //商户ID
-      merchantMoneyLog.setType(MerchantMoneyEnum.TYPE_RECHARGE);
-      merchantMoneyLog.setCustId(payOrder.getCustId());  //客户ID
-      merchantMoneyLog.setStoreId(merchant.getStoreId());
-      merchantMoneyLog.setLogMoney(payOrder.getTransactionAmount());  //交易金额
-      merchantMoneyLog.setRefId(payOrder.getOrderId()); //订单ID,全局唯一
-      merchantMoneyLog.setRefType(payOrder.getOrderType()); //单据类型
-      boolean result = merchantMoneyLogService.changeMerchantMoney(merchantMoneyLog);
-      Customer customer = customerService.getById(merchantMoneyLog.getCustId());
-      // 客户中配置了提现卡号,则认为是充值到了平台账户
-      if (null != customer && StringUtils.isNotBlank(customer.getBankCardNo())) {
-        CustomerMoneyLog customerMoneyLog = new CustomerMoneyLog();
-        customerMoneyLog.setBizTime(merchantMoneyLog.getBizTime());
-        customerMoneyLog.setType(CustomerMoneyTypeEnum.MERCH_RECHARGE);
-        customerMoneyLog.setCustId(merchantMoneyLog.getCustId());
-        customerMoneyLog.setLogMoney(merchantMoneyLog.getLogMoney());
-        customerMoneyLog.setIncomeExpense(MerchantMoneyEnum.INCOME);
-        customerMoneyLog.setRefId(payOrder.getOrderId());
-        customerMoneyLog.setRefType(CustomerMoneyTypeEnum.MERCH_RECHARGE.getValue());
-        Store store = storeService.getById(merchant.getStoreId());
-        customerMoneyLog.setLogText(merchant.getBrand() + "-" + store.getName());
-        customerMoneyLogService.changeCustomerMoney(customerMoneyLog);
-      }
-      if (result) {
-        //充值成功,给订阅者发送消息
-        try {
-          pulsarClientService.producer(MqTopicType.merch_recharge, JSONObject.toJSONString(merchantMoneyLog));
-        } catch (PulsarClientException e) {
-          LogUtil.error(logger,"发送异步消息失败.",e);
-        }
-        return true;
-      }
-    }else{
-      //Todo 数据结构异常,告警
-      LogUtil.error(logger,"数据结构异常,违反唯一约束,orderNo:"+orderNo);
-      return false;
-    }*/
-    return false;
-  }
 }

+ 6 - 6
mp-service/src/main/resources/mapper/pay/PayOrderMapper.xml

@@ -9,12 +9,12 @@
         <result column="biz_id" property="bizId" />
         <result column="order_no" property="orderNo" />
         <result column="order_time" property="orderTime" />
-        <result column="pay_type" property="payType" />
+        <result column="pay_resource" property="payResource" />
         <result column="trans_type_code" property="transTypeCode" />
-        <result column="trans_amt" property="transAmt" />
-        <result column="remark" property="remark" />
-        <result column="title" property="title" />
-        <result column="status" property="status" />
+        <result column="transaction_amount" property="transactionAmount" />
+        <result column="order_remark" property="orderRemark" />
+        <result column="order_name" property="orderName" />
+        <result column="order_status" property="orderStatus" />
         <result column="code" property="code" />
         <result column="result" property="result" />
         <result column="complete_date" property="completeDate" />
@@ -25,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        order_id, biz_type, biz_id, order_no, order_time, pay_type, trans_type_code, trans_amt, remark, title, status, code, result, complete_date, channel_no, gmt_created, gmt_modified
+        order_id, biz_type, biz_id, order_no, order_time, pay_resource, trans_type_code, transaction_amount, order_remark, order_name, order_status, code, result, complete_date, channel_no, gmt_created, gmt_modified
     </sql>
 
 </mapper>