Browse Source

Merge branches 'developerB' and 'developer_pay' of git.caimei365.com:chao/caimei-modules-soa into developerB

jun.li@caimei365.com 4 years ago
parent
commit
657ac76429

+ 1 - 1
base-module/src/main/java/com/caimei/module/base/entity/po/CmDiscernReceipt.java

@@ -14,7 +14,7 @@ public class CmDiscernReceipt implements Serializable {
     private Long id;
 
     /**
-     * 用户付款方式:1线上,2线下
+     * 用户付款方式:1线上,2线下,3余额抵扣
      */
     private String payWay;
 

+ 6 - 0
base-module/src/main/java/com/caimei/module/base/entity/po/CmOrder.java

@@ -7,6 +7,7 @@ import java.math.BigDecimal;
 
 /**
  * cm_order
+ *
  * @author
  */
 @Data
@@ -80,6 +81,11 @@ public class CmOrder implements Serializable {
      */
     private String refundType;
 
+    /**
+     * 已支付成功次数统计(适用线上多笔付款用来确认当前是哪一笔)
+     */
+    private Integer paySuccessCounter;
+
     /**
      * 是否已支付 未支付0 已支付1
      */

+ 17 - 0
pay/src/main/java/com/caimei/module/pay/service/PayService.java

@@ -46,4 +46,21 @@ public interface PayService {
      * 重定向到收银台页面
      */
     void jumpPage(String linkLogo, String linkPage, HttpServletResponse response) throws IOException;
+
+    /**
+     * 判断此次支付是否完成
+     *
+     * @param orderId           订单id
+     * @param paySuccessCounter 付款次数
+     * @return
+     */
+    JsonModel payWhetherSuccess(Integer orderId, Integer paySuccessCounter);
+
+    /**
+     * 查询第三方订单状态
+     *
+     * @param mbOrderId 平台唯一流水号
+     * @return
+     */
+    JsonModel findOrderStatus(String mbOrderId);
 }

+ 45 - 4
pay/src/main/java/com/caimei/module/pay/service/impl/PayServiceImpl.java

@@ -49,9 +49,10 @@ public class PayServiceImpl implements PayService {
      */
     String merNo = "10001720";
 
+    JsonModel model = JsonModel.newInstance();
+
     @Override
     public JsonModel checkoutCounter(Integer orderId) {
-        JsonModel model = JsonModel.newInstance();
         if (null == orderId) {
             return model.error("参数异常");
         }
@@ -66,10 +67,12 @@ public class PayServiceImpl implements PayService {
         BigDecimal receiptAmount = BigDecimal.ZERO;
         if (null != discernReceiptList && discernReceiptList.size() > 0) {
             for (DiscernReceiptVo discernReceipt : discernReceiptList) {
-                receiptAmount = receiptAmount.add(discernReceipt.getAssociateAmount());
                 if ("2".equals(discernReceipt.getPayWay())) {
                     return model.error("线下支付过只能走线下");
                 }
+                if ("3".equals(discernReceipt.getReceiptStatus())) {
+                    receiptAmount = receiptAmount.add(discernReceipt.getAssociateAmount());
+                }
             }
         }
         order.setReceiptAmount(receiptAmount);
@@ -87,7 +90,6 @@ public class PayServiceImpl implements PayService {
 
     @Override
     public synchronized JsonModel pay(Payment payment, HttpServletRequest request) {
-        JsonModel model = JsonModel.newInstance();
         JSONObject result = null;
         OrderVo order = payDao.findOrder(payment.getOrderId());
         if (null == order) {
@@ -238,6 +240,8 @@ public class PayServiceImpl implements PayService {
             //(收款买家)收款状态:1待收款、2部分收款、3已收款
             order.setReceiptStatus("2");
         }
+        //更新付款次数
+        order.setPaySuccessCounter(order.getPaySuccessCounter() + 1);
         payDao.updateSelective(order);
         //修改支付链接状态
         OrderPayLinkVo orderPayLink = payDao.findOrderPayLink(order.getOrderID(), amount);
@@ -289,7 +293,6 @@ public class PayServiceImpl implements PayService {
 
     @Override
     public JsonModel payLink(OrderPayLinkVo orderPayLink) {
-        JsonModel model = JsonModel.newInstance();
         if (null == orderPayLink) {
             return model.error("参数异常");
         }
@@ -360,4 +363,42 @@ public class PayServiceImpl implements PayService {
         }
     }
 
+    @Override
+    public JsonModel payWhetherSuccess(Integer orderId, Integer paySuccessCounter) {
+        OrderVo order = payDao.findOrder(orderId);
+        if (order.getPaySuccessCounter().equals(paySuccessCounter)) {
+            return model.error(-2, "支付失败");
+        } else if (order.getPaySuccessCounter() > paySuccessCounter) {
+            return model.success("支付成功");
+        } else {
+            return model.error("支付异常>>>>>>>" + order);
+        }
+    }
+
+    @Override
+    public JsonModel findOrderStatus(String mbOrderId) {
+        // 时间戳
+        long time = System.currentTimeMillis() / 1000;
+        JSONObject json = new JSONObject();
+        json.put("merAccount", merAccount);
+        json.put("mbOrderId", mbOrderId);
+        json.put("time", time);
+        String sign = PayUtils.buildSign(json, merKey);
+        json.put("sign", sign);
+        String data = "";
+        try {
+            data = PayUtils.buildDataPrivate(json, merKey);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        JSONObject result = PayUtils.httpGet("https://platform.mhxxkj.com/paygateway/mbpay/order/query/v1_1", merAccount, data);
+        String code = result.getString("code");
+        if (!"000000".equals(code)) {
+            String msg = result.getString("msg");
+            log.info("第三方查询订单失败>>>>>>>msg:" + msg);
+            return model.error(msg);
+        }
+        return model.success(result);
+    }
+
 }

+ 5 - 0
pay/src/main/resources/com-caimei-module-pay/PayMapper.xml

@@ -31,6 +31,7 @@
           AND cror.delFlag = '0'
           AND cdr.delFlag = '0'
           AND cdr.payType != '16'
+          AND cdr.receiptStatus IN(2,3)
         ORDER BY
           cdr.receiptDate DESC
     </select>
@@ -80,6 +81,9 @@
             <if test="refundType != null">
                 refundType = #{refundType,jdbcType=CHAR},
             </if>
+            <if test="paySuccessCounter != null">
+                paySuccessCounter = #{paySuccessCounter},
+            </if>
             <if test="payFlag != null">
                 payFlag = #{payFlag,jdbcType=CHAR},
             </if>
@@ -256,6 +260,7 @@
           </if>
           AND delFlag = '0'
           AND payStatus = '0'
+          ORDER BY id DESC LIMIT 1
     </select>
 
     <insert id="insertOrderPayLink">