Selaa lähdekoodia

修改分账异步通知

plf 4 vuotta sitten
vanhempi
commit
737d3b065a

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

@@ -55,7 +55,7 @@ public class CmPayShopRecord implements Serializable {
     private Integer payShopID;
 
     /**
-     * 0待审核, 1已审核
+     * 0待审核, 1审核通过, 2审核不通过
      */
     private String status;
 

+ 1 - 3
pay/src/main/java/com/caimei/module/pay/service/PayService.java

@@ -7,8 +7,6 @@ import com.caimei.module.base.entity.vo.OrderPayLinkVo;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
-import java.security.spec.InvalidKeySpecException;
 
 /**
  * Description
@@ -109,5 +107,5 @@ public interface PayService {
      * @param data 回调参数
      * @return SUCCESS告诉第三方回调成功
      */
-    String delayedSplittingCallback(String data) throws InvalidKeySpecException, NoSuchAlgorithmException;
+    String delayedSplittingCallback(String data);
 }

+ 93 - 88
pay/src/main/java/com/caimei/module/pay/service/impl/PayServiceImpl.java

@@ -152,7 +152,7 @@ public class PayServiceImpl implements PayService {
             long time = System.currentTimeMillis() / 1000;
             JSONObject json = getPayParameter(payment, request, time);
             // 商户订单号
-            String orderId = order.getOrderNo() + "#" + time;
+            String orderId = order.getOrderNo() + "T" + time;
             json.put("orderId", orderId);
             //商品名称
             String product = "采美订单" + order.getOrderNo();
@@ -715,7 +715,7 @@ public class PayServiceImpl implements PayService {
             long time = System.currentTimeMillis() / 1000;
             JSONObject json = getPayParameter(payment, request, time);
             // 商户订单号
-            String orderId = payment.getProductId() + "#" + time;
+            String orderId = payment.getProductId() + "T" + time;
             json.put("orderId", orderId);
             //商品名称
             String product = "采美订单" + orderId;
@@ -815,7 +815,7 @@ public class PayServiceImpl implements PayService {
         calendar.setTime(new Date());
         calendar.add(Calendar.DAY_OF_MONTH, -1);
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String currentTime = format.format(new Date());
+        String currentTime = format.format(calendar.getTime());
         List<OrderRelationVo> orderRelations = payDao.findUnallocatedAccount(currentTime);
         if (orderRelations != null && orderRelations.size() > 0) {
             for (OrderRelationVo orderRelation : orderRelations) {
@@ -873,98 +873,103 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
-    public String delayedSplittingCallback(String data) throws InvalidKeySpecException, NoSuchAlgorithmException {
-        //公钥解密
-        JSONObject json = PayUtils.decryptDataPublic(data, publicKey);
-        log.info("公钥解密>>>>>>" + json);
-        //公钥验签
-        String signaa = json.getString("sign");
-        json.remove("sign");
-        String signbb = PayUtils.buildSign(json, publicKey);
-        if (!signaa.equals(signbb)) {
-            return "验签失败";
-        }
-        String mbOrderId = json.getString("mbOrderId");
-        String status = json.getString("status");
-        log.info("分账状态>>>" + status);
-        if ("FAILED".equals(status)) {
-            return "分账失败";
-        }
+    public String delayedSplittingCallback(String data) {
+        try {
+            //公钥解密
+            JSONObject json = PayUtils.decryptDataPublic(data, publicKey);
+            log.info("公钥解密>>>>>>" + json);
+            //公钥验签
+            String signaa = json.getString("sign");
+            json.remove("sign");
+            String signbb = PayUtils.buildSign(json, publicKey);
+            if (!signaa.equals(signbb)) {
+                return "验签失败";
+            }
+            String mbOrderId = json.getString("mbOrderId");
+            String status = json.getString("status");
+            log.info("分账状态>>>" + status);
+            if ("FAILED".equals(status)) {
+                return "分账失败";
+            }
 
-        //修改收款分账状态
-        payDao.updateBySplitStatus(mbOrderId);
-
-        //子订单是否全部付款
-        boolean isPay = true;
-        Integer orderId = null;
-        List<SplitAccountVo> splitAccountList = payDao.findByMbOrderId(mbOrderId);
-        if (splitAccountList != null && splitAccountList.size() > 0) {
-            Integer shopOrderId = null;
-            String shopOrderNo = "";
-            for (SplitAccountVo account : splitAccountList) {
-                log.info("保存应付付供应商>>>>" + account.getShopId());
-                //本次付供应商金额(分账金额)
-                BigDecimal splitAmount = account.getSplitAccount();
-                orderId = account.getOrderId();
-                Integer shopId = account.getShopId();
-                List<ShopOrderVo> shopOrderList = payDao.findShopOrder(Long.valueOf(orderId));
-                String payStatus = "";
-                for (ShopOrderVo shopOrder : shopOrderList) {
-                    if (shopId.equals(shopOrder.getShopID())) {
-                        shopOrderId = shopOrder.getShopOrderID();
-                        shopOrderNo = shopOrder.getShopOrderNo();
-                        //已付供应商金额
-                        BigDecimal paidAmount = payDao.findPaidShop(shopOrderId);
-                        BigDecimal paidShop = MathUtil.add(paidAmount, splitAmount);
-                        if (MathUtil.compare(shopOrder.getShouldPayShopAmount(), paidShop) == 0) {
-                            payStatus = "2";
+            //修改收款分账状态
+            payDao.updateBySplitStatus(mbOrderId);
+
+            //子订单是否全部付款
+            boolean isPay = true;
+            Integer orderId = null;
+            List<SplitAccountVo> splitAccountList = payDao.findByMbOrderId(mbOrderId);
+            if (splitAccountList != null && splitAccountList.size() > 0) {
+                Integer shopOrderId = null;
+                String shopOrderNo = "";
+                for (SplitAccountVo account : splitAccountList) {
+                    log.info("保存应付付供应商>>>>" + account.getShopId());
+                    //本次付供应商金额(分账金额)
+                    BigDecimal splitAmount = account.getSplitAccount();
+                    orderId = account.getOrderId();
+                    Integer shopId = account.getShopId();
+                    List<ShopOrderVo> shopOrderList = payDao.findShopOrder(Long.valueOf(orderId));
+                    String payStatus = "";
+                    for (ShopOrderVo shopOrder : shopOrderList) {
+                        if (shopId.equals(shopOrder.getShopID())) {
+                            shopOrderId = shopOrder.getShopOrderID();
+                            shopOrderNo = shopOrder.getShopOrderNo();
+                            //已付供应商金额
+                            BigDecimal paidAmount = payDao.findPaidShop(shopOrderId);
+                            BigDecimal paidShop = MathUtil.add(paidAmount, splitAmount);
+                            if (MathUtil.compare(shopOrder.getShouldPayShopAmount(), paidShop) == 0) {
+                                payStatus = "2";
+                                isPay = false;
+                            } else {
+                                payStatus = "3";
+                            }
+                            //修改子订单付款状态及付款金额
+                            payDao.updateShopOrderByPayStatus(shopOrderId, paidShop, payStatus);
+                        } else if (!"3".equals(shopOrder.getPayStatus())) {
                             isPay = false;
-                        } else {
-                            payStatus = "3";
                         }
-                        //修改子订单付款状态及付款金额
-                        payDao.updateShopOrderByPayStatus(shopOrderId, paidShop, payStatus);
-                    } else if (!"3".equals(shopOrder.getPayStatus())) {
-                        isPay = false;
                     }
-                }
 
-                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                String currentTime = format.format(new Date());
-                //保存付供应商记录
-                PayShopVo payShop = new PayShopVo();
-                payShop.setShopID(shopId);
-                payShop.setName("线上支付分账");
-                payShop.setTotalAmount(splitAmount);
-                payShop.setWipePayment(BigDecimal.ZERO);
-                payShop.setPayType("6");
-                payShop.setStatus("1");
-                payShop.setDelFlag("0");
-                payShop.setApplyTime(currentTime);
-                payShop.setReviewTime(currentTime);
-                payShop.setPayTime(currentTime);
-                payDao.insertPayShop(payShop);
-
-                PayShopRecordVo shopRecord = new PayShopRecordVo();
-                shopRecord.setShopID(shopId);
-                shopRecord.setShopOrderID(shopOrderId);
-                shopRecord.setShopOrderNo(shopOrderNo);
-                shopRecord.setPayAmount(splitAmount);
-                shopRecord.setWipePayment(BigDecimal.ZERO);
-                shopRecord.setPayType("6");
-                shopRecord.setPayTime(currentTime);
-                shopRecord.setPayShopID(payShop.getId().intValue());
-                shopRecord.setStatus("2");
-                shopRecord.setDelFlag("0");
-                payDao.insertPayShopRecord(shopRecord);
-            }
+                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    String currentTime = format.format(new Date());
+                    //保存付供应商记录
+                    PayShopVo payShop = new PayShopVo();
+                    payShop.setShopID(shopId);
+                    payShop.setName("线上支付分账");
+                    payShop.setTotalAmount(splitAmount);
+                    payShop.setWipePayment(BigDecimal.ZERO);
+                    payShop.setPayType("6");
+                    payShop.setStatus("1");
+                    payShop.setDelFlag("0");
+                    payShop.setApplyTime(currentTime);
+                    payShop.setReviewTime(currentTime);
+                    payShop.setPayTime(currentTime);
+                    payDao.insertPayShop(payShop);
+
+                    PayShopRecordVo shopRecord = new PayShopRecordVo();
+                    shopRecord.setShopID(shopId);
+                    shopRecord.setShopOrderID(shopOrderId);
+                    shopRecord.setShopOrderNo(shopOrderNo);
+                    shopRecord.setPayAmount(splitAmount);
+                    shopRecord.setWipePayment(BigDecimal.ZERO);
+                    shopRecord.setPayType("6");
+                    shopRecord.setPayTime(currentTime);
+                    shopRecord.setPayShopID(payShop.getId().intValue());
+                    shopRecord.setStatus("1");
+                    shopRecord.setDelFlag("0");
+                    payDao.insertPayShopRecord(shopRecord);
+                }
 
-            //修改主订单修改状态
-            if (isPay) {
-                payDao.updateOrderByPayStatus(orderId, "3");
-            } else {
-                payDao.updateOrderByPayStatus(orderId, "2");
+                //修改主订单修改状态
+                if (isPay) {
+                    payDao.updateOrderByPayStatus(orderId, "3");
+                } else {
+                    payDao.updateOrderByPayStatus(orderId, "2");
+                }
             }
+        } catch (Exception e) {
+            log.error("分账异步通知异常", e);
+            return "分账失败";
         }
         return "SUCCESS";
     }

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

@@ -521,7 +521,7 @@
           AND shopOrderID = #{shopOrderId}
     </select>
 
-    <insert id="insertPayShop" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
+    <insert id="insertPayShop" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.caimei.module.base.entity.vo.PayShopVo">
         INSERT INTO `cm_pay_shop` (
           `shopID`, `name`, `bankAccountName`,
           `bankAccount`, `bankName`, `type`,
@@ -545,18 +545,18 @@
           )
     </insert>
 
-    <insert id="insertPayShopRecord" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
+    <insert id="insertPayShopRecord">
         INSERT INTO `cm_pay_shop_record` (
           `shopID`, `shopOrderID`, `shopOrderNo`,
           `payAmount`, `wipePayment`, `payType`,
-          `payTime`, `wipeTime`, `payShopID`,
+          `payTime`, `payShopID`,
           `status`, `delFlag`
         )
         VALUES
           (
             #{shopID}, #{shopOrderID}, #{shopOrderNo},
             #{payAmount}, #{wipePayment}, #{payType},
-            #{payTime}, #{wipeTime}, #{payShopID},
+            #{payTime}, #{payShopID},
             #{status}, #{delFlag}
           )
     </insert>