zhijiezhao 3 年 前
コミット
472af0e849

+ 1 - 2
src/main/java/com/caimei365/order/components/HeliPayUtil.java

@@ -296,7 +296,7 @@ public class HeliPayUtil {
                 URLEncoder.encode(attach,"UTF-8");
                 pay.setP15_desc(attach);
             } else if ("order".equals(payFlag)) {
-                OrderVo order = orderCommonMapper.getOrderByOrderId(heliDto.getOrderId());
+                OrderVo order = orderCommonMapper.getOrderByShopOrderId(heliDto.getShopOrderId());
                 orderId = order.getOrderNo() + "T" + time + environment;
                 pay.setP4_orderAmount(heliDto.getPayAmount());
                 pay.setP12_serverCallback(unionPay);
@@ -304,7 +304,6 @@ public class HeliPayUtil {
                 URLEncoder.encode(product, "UTF-8");
                 pay.setP8_goodsName(product);
                 String attach = order.getOrderId() + "," + BizType.getNumByType(heliDto.getUserType()) + "," + heliDto.getShopOrderId();
-                ;
                 URLEncoder.encode(attach, "UTF-8");
                 pay.setP15_desc(attach);
             }

+ 2 - 5
src/main/java/com/caimei365/order/controller/HeliPayApi.java

@@ -190,7 +190,7 @@ public class HeliPayApi {
             @ApiImplicitParam(required = false, name = "orderFlag", value = "订单标识:0非订单,1订单"),
     })
     @GetMapping("/result/json")
-    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId,Integer orderFlag) {
+    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId,Integer orderFlag) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
         if (null == mbOrderId) {
             return ResponseJson.error("平台唯一流水号不能为空!", null);
         }
@@ -239,9 +239,6 @@ public class HeliPayApi {
         if (StringUtils.isBlank(heliDto.getPayType())) {
             return ResponseJson.error("支付类型不能为空!", null);
         }
-        if (null == heliDto.getOrderId()) {
-            return ResponseJson.error("订单Id不能为空!", null);
-        }
         if (null == heliDto.getShopOrderId()) {
             return ResponseJson.error("子订单Id不能为空!", null);
         }
@@ -295,7 +292,7 @@ public class HeliPayApi {
 
     @ApiOperation("银行通道码获取")
     @GetMapping("/bankcode")
-    public ResponseJson<JSONObject> bankcode() {
+    public ResponseJson<Map<String, Object>> bankcode() {
         return heliPayService.bankCode();
     }
 

+ 1 - 1
src/main/java/com/caimei365/order/controller/HeliPayNonOrderApi.java

@@ -158,7 +158,7 @@ public class HeliPayNonOrderApi {
         if (StringUtils.isBlank(heliDto.getPayType())) {
             return ResponseJson.error("支付类型不能为空!", null);
         }
-        if (null == heliDto.getVipRecordId()) {
+        if (null == heliDto.getCouponRecordId()) {
             return ResponseJson.error("购买记录id不能为空!", null);
         }
         if (StringUtils.isEmpty(heliDto.getBankCode())) {

+ 5 - 1
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -224,7 +224,7 @@ public interface PayOrderMapper {
      */
     OrderPayLinkVo getAuthVipPayLink(@Param("recordId") int recordId, @Param("amount") Double amount);
 
-    Double getCouponPrice(Integer couponId);
+    Double getCouponPrice(Integer recordId);
 
     void insertCouponRecord(CouponRecordPo cr);
 
@@ -249,4 +249,8 @@ public interface PayOrderMapper {
     Integer getOrderId(Integer shopOrderId);
 
     String getSplitCodeByMbOrderId(String mbOrderId);
+
+    List<BankCodeVo> findB2BBankCode();
+
+    List<BankCodeVo> findB2CBankCode();
 }

+ 5 - 0
src/main/java/com/caimei365/order/model/dto/PayLinkDto.java

@@ -39,4 +39,9 @@ public class PayLinkDto implements Serializable {
      */
     @ApiModelProperty("本次待付款金额")
     private Double unpaidAmount;
+    /**
+     * 子订单Id
+     */
+    @ApiModelProperty("子订单Id")
+    private Integer shopOrderId;
 }

+ 4 - 0
src/main/java/com/caimei365/order/model/vo/OrderPayLinkVo.java

@@ -17,6 +17,10 @@ public class OrderPayLinkVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private Integer id;
+    /**
+     * 子订单id
+     */
+    private Integer shopOrderId;
     /**
      * 订单id
      */

+ 3 - 2
src/main/java/com/caimei365/order/service/HeliPayService.java

@@ -13,6 +13,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.InvalidKeySpecException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Description
@@ -40,9 +41,9 @@ public interface HeliPayService {
      */
     String delayedSplittingCallback(AccountResVo data);
 
-    ResponseJson<JSONObject> bankCode();
+    ResponseJson<Map<String, Object>> bankCode();
 
-    ResponseJson<JSONObject> getPayOrderResult(String mbOrderId, Integer orderFlag);
+    ResponseJson<JSONObject> getPayOrderResult(String mbOrderId, Integer orderFlag) throws IntrospectionException, InvocationTargetException, IllegalAccessException;
     /**
      * 银联回调
      */

+ 2 - 2
src/main/java/com/caimei365/order/service/impl/HeliPayNonOrderServiceImpl.java

@@ -131,7 +131,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
                 // 优惠券 公账-专票
                 splitAccount.setType(1);
                 // 待分账总金额
-                double splitAmount = Double.parseDouble(heliDto.getPayAmount());
+                double splitAmount = Double.parseDouble(pay.getP9_orderAmount());
                 // 总手续费
                 double procedureFee;
                 procedureFee = MathUtil.mul(splitAmount, 0.0025, 2).doubleValue();
@@ -1192,7 +1192,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
                 // 优惠券 公账-专票
                 splitAccount.setType(1);
                 // 待分账总金额
-                double splitAmount = Double.parseDouble(heliDto.getPayAmount());
+                double splitAmount = Double.parseDouble(pay.getP5_orderAmount());
                 // 总手续费
                 double procedureFee;
                 procedureFee = MathUtil.mul(splitAmount, 0.0025, 2).doubleValue();

+ 42 - 43
src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java

@@ -466,7 +466,7 @@ public class HeliPayServiceImpl implements HeliPayService {
     public ResponseJson<String> link(HeliDto heliDto, HttpHeaders headers) {
         log.info("--------进入线上支付接口----------");
         // 订单信息
-        OrderVo order = orderCommonMapper.getOrderByOrderId(heliDto.getOrderId());
+        OrderVo order = orderCommonMapper.getOrderByShopOrderId(heliDto.getShopOrderId());
         if (null == order) {
             log.error("订单不存在");
             return ResponseJson.error("订单不存在");
@@ -505,6 +505,7 @@ public class HeliPayServiceImpl implements HeliPayService {
             if (StringUtils.isBlank(splitCode)) {
                 return ResponseJson.error("子订单无商户号!", null);
             }
+            heliOnlineVo.setP3_customerNumber(splitCode);
             heliPayUtil.setLinkValue(heliOnlineVo, heliDto, "order", headers);
             Map<String, String> map = MyBeanUtils.convertBean(heliOnlineVo, new LinkedHashMap());
             String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, HeliOnlineVo.NEED_SIGN_PARAMS);
@@ -835,15 +836,17 @@ public class HeliPayServiceImpl implements HeliPayService {
 
     //银行通道码获取
     @Override
-    public ResponseJson<JSONObject> bankCode() {
-        List<BankCodeVo> banks = payOrderMapper.findBankCode();
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("list", banks);
-        return ResponseJson.success("获取成功", jsonObject);
+    public ResponseJson<Map<String, Object>> bankCode() {
+        List<BankCodeVo> B2B = payOrderMapper.findB2BBankCode();
+        List<BankCodeVo> B2C = payOrderMapper.findB2CBankCode();
+        Map<String, Object> banks = new HashMap<>(2);
+        banks.put("B2B",B2B);
+        banks.put("B2C",B2C);
+        return ResponseJson.success("获取成功", banks);
     }
 
     @Override
-    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId, Integer orderFlag) {
+    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId, Integer orderFlag) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
         log.info("--------进入交易订单查询接口----------");
         QueryOrderVo queryOrderVo = new QueryOrderVo();
         queryOrderVo.setP1_bizType("AppPayQuery");
@@ -854,50 +857,46 @@ public class HeliPayServiceImpl implements HeliPayService {
             String splitCode = payOrderMapper.getSplitCodeByMbOrderId(mbOrderId);
             queryOrderVo.setP3_customerNumber(splitCode);
         }
-        try {
-            Map<String, String> map = MyBeanUtils.convertBean(queryOrderVo, new LinkedHashMap());
-            String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, QueryOrderVo.NEED_SIGN_PARAMS);
-            //区分网银和其他产品
-            String payType = baseMapper.findType(mbOrderId);
+        Map<String, String> map = MyBeanUtils.convertBean(queryOrderVo, new LinkedHashMap());
+        String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, QueryOrderVo.NEED_SIGN_PARAMS);
+        //区分网银和其他产品
+        String payType = baseMapper.findType(mbOrderId);
+        if ("12".equals(payType) || "17".equals(payType)) {
+            oriMessage += Constant.SPLIT + Constant.WANGYIN;
+        } else {
+            oriMessage += Constant.SPLIT + Constant.SAOMA;
+        }
+        log.info("签名原文串:" + oriMessage);
+        String sign = Disguiser.disguiseMD5(oriMessage.trim());
+        log.info("签名串:" + sign);
+        map.put("sign", sign);
+        log.info("发送参数:" + map);
+        Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
+        log.info("响应结果:" + resultMap);
+        if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
+            String resultMsg = (String) resultMap.get("response");
+            QueryOrderResponseVo queryOrderResponseVo = JSONObject.parseObject(resultMsg, QueryOrderResponseVo.class);
+            String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(queryOrderResponseVo, QueryOrderResponseVo.NEED_SIGN_PARAMS);
+            log.info("组装返回结果签名串:" + assemblyRespOriSign);
             if ("12".equals(payType) || "17".equals(payType)) {
-                oriMessage += Constant.SPLIT + Constant.WANGYIN;
+                assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
             } else {
-                oriMessage += Constant.SPLIT + Constant.SAOMA;
+                assemblyRespOriSign += Constant.SPLIT + Constant.SAOMA;
             }
-            log.info("签名原文串:" + oriMessage);
-            String sign = Disguiser.disguiseMD5(oriMessage.trim());
-            log.info("签名串:" + sign);
-            map.put("sign", sign);
-            log.info("发送参数:" + map);
-            Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
-            log.info("响应结果:" + resultMap);
-            if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
-                String resultMsg = (String) resultMap.get("response");
-                QueryOrderResponseVo queryOrderResponseVo = JSONObject.parseObject(resultMsg, QueryOrderResponseVo.class);
-                String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(queryOrderResponseVo, QueryOrderResponseVo.NEED_SIGN_PARAMS);
-                log.info("组装返回结果签名串:" + assemblyRespOriSign);
-                if ("12".equals(payType) || "17".equals(payType)) {
-                    assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
-                } else {
-                    assemblyRespOriSign += Constant.SPLIT + Constant.SAOMA;
-                }
-                String responseSign = queryOrderResponseVo.getSign();
-                log.info("响应签名:" + responseSign);
-                String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
-                if (checkSign.equals(responseSign)) {
-                    if ("0000".equals(queryOrderResponseVo.getRt2_retCode())) {
-                        JSONObject jsonObject = JSONObject.parseObject(resultMsg, JSONObject.class);
-                        return ResponseJson.success("查询成功", jsonObject);
-                    } else {
-                        return ResponseJson.error("验签失败", null);
-                    }
+            String responseSign = queryOrderResponseVo.getSign();
+            log.info("响应签名:" + responseSign);
+            String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
+            if (checkSign.equals(responseSign)) {
+                if ("0000".equals(queryOrderResponseVo.getRt2_retCode())) {
+                    JSONObject jsonObject = JSONObject.parseObject(resultMsg, JSONObject.class);
+                    return ResponseJson.success("查询成功", jsonObject);
                 } else {
                     return ResponseJson.error("验签失败", null);
                 }
             } else {
-                return ResponseJson.error("查询失败", null);
+                return ResponseJson.error("验签失败", null);
             }
-        } catch (Exception e) {
+        } else {
             return ResponseJson.error("查询失败", null);
         }
     }

+ 8 - 8
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -348,13 +348,13 @@ public class PayOrderServiceImpl implements PayOrderService {
     @Override
     public ResponseJson<String> getPayLink(PayLinkDto payLinkDto) {
         OrderPayLinkVo orderPayLink = null;
-        if (null != payLinkDto.getOrderId()) {
+        if (null != payLinkDto.getShopOrderId()) {
             // 订单信息
-            OrderVo order = orderCommonMapper.getOrderByOrderId(payLinkDto.getOrderId());
+            OrderVo order = orderCommonMapper.getOrderByShopOrderId(payLinkDto.getShopOrderId());
             if (null == order) {
                 return ResponseJson.error("订单不存在", null);
             }
-            orderPayLink = payOrderMapper.getOrderPayLink(payLinkDto.getOrderId(), null);
+            orderPayLink = payOrderMapper.getOrderPayLink(payLinkDto.getShopOrderId(), null);
         } else if (null != payLinkDto.getVipRecordId()) {
             orderPayLink = payOrderMapper.getVipPayLink(payLinkDto.getVipRecordId(), null);
         } else {
@@ -398,7 +398,7 @@ public class PayOrderServiceImpl implements PayOrderService {
         } else {
             orderPayLink.setUnpaidAmount(payLinkDto.getUnpaidAmount());
         }
-        orderPayLink.setOrderId(payLinkDto.getOrderId());
+        orderPayLink.setShopOrderId(payLinkDto.getShopOrderId());
         orderPayLink.setVipRecordId(payLinkDto.getVipRecordId());
         orderPayLink.setAuthVipRecordId(payLinkDto.getAuthVipRecordId());
         orderPayLink.setPayType(payLinkDto.getPayType());
@@ -435,7 +435,7 @@ public class PayOrderServiceImpl implements PayOrderService {
     @Override
     public ResponseJson<Map<String, Object>> linkPayData(String linkLogo) {
         OrderPayLinkVo orderPayLink = payOrderMapper.getPayLinkByLinkLogo(linkLogo);
-        if (null == orderPayLink || (null == orderPayLink.getOrderId() && null == orderPayLink.getVipRecordId() && null == orderPayLink.getAuthVipRecordId())) {
+        if (null == orderPayLink || (null == orderPayLink.getShopOrderId() && null == orderPayLink.getVipRecordId() && null == orderPayLink.getAuthVipRecordId())) {
             // 已重新生成链接
             return ResponseJson.error("链接已更新,请重新获取", null);
         }
@@ -448,12 +448,12 @@ public class PayOrderServiceImpl implements PayOrderService {
         int type = 0;
         // 订单支付记录
         List<DiscernReceiptVo> discernReceiptList = null;
-        if (null != orderPayLink.getOrderId()) {
+        if (null != orderPayLink.getShopOrderId()) {
             type = 1;
             // 订单信息
-            OrderVo order = orderCommonMapper.getOrderByOrderId(orderPayLink.getOrderId());
+            OrderVo order = orderCommonMapper.getOrderByShopOrderId(orderPayLink.getShopOrderId());
             // 支付记录
-            discernReceiptList = orderCommonMapper.getDiscernReceipt(order.getOrderId(), order.getShopOrderIds());
+            discernReceiptList = orderCommonMapper.getShopOrderDiscernReceipt(orderPayLink.getShopOrderId());
             // 机构信息
             userName = baseMapper.getUserNameByUserId(order.getUserId());
         } else if (null != orderPayLink.getVipRecordId()) {

+ 24 - 6
src/main/resources/mapper/PayOrderMapper.xml

@@ -41,9 +41,9 @@
     </delete>
     <insert id="insertOrderPayLink" keyColumn="id" keyProperty="id"  parameterType="com.caimei365.order.model.vo.OrderPayLinkVo" useGeneratedKeys="true">
         INSERT INTO cm_order_pay_link (orderId, vipRecordId, authVipRecordId, vipMonth, linkLogo, unpaidAmount,
-                                       generateTime, effectiveTime, payStatus, payType, delFlag)
+                                       generateTime, effectiveTime, payStatus, payType, delFlag, shopOrderId)
         VALUES (#{orderId}, #{vipRecordId}, #{authVipRecordId}, #{vipMonth}, #{linkLogo}, #{unpaidAmount},
-                #{generateTime}, #{effectiveTime}, #{payStatus}, #{payType}, #{delFlag})
+                #{generateTime}, #{effectiveTime}, #{payStatus}, #{payType}, #{delFlag}, #{shopOrderId})
     </insert>
     <insert id="insertSplitAccount" keyColumn="id" keyProperty="id"  parameterType="com.caimei365.order.model.po.SplitAccountPo" useGeneratedKeys="true">
         INSERT INTO cm_split_account (orderId, productId, orderProductId, shopId, couponRecordId,vipRecordId, authVipRecordId, type, subUserNo, splitAccount,
@@ -88,7 +88,7 @@
     <update id="updateOrderPayLink">
         UPDATE cm_order_pay_link SET
             orderId = #{orderId}, vipRecordId = #{vipRecordId}, authVipRecordId = #{authVipRecordId}, vipMonth = #{vipMonth}, linkLogo = #{linkLogo}, unpaidAmount = #{unpaidAmount}, generateTime = #{generateTime},
-            effectiveTime = #{effectiveTime}, payStatus = #{payStatus}, payType = #{payType}, delFlag = #{delFlag}
+            effectiveTime = #{effectiveTime}, payStatus = #{payStatus}, payType = #{payType}, delFlag = #{delFlag} , shopOrderId = #{shopOrderId}
         WHERE id = #{id}
     </update>
     <update id="updateOrderPayLinkStatus">
@@ -168,7 +168,7 @@
             delFlag
         FROM
         cm_order_pay_link
-        WHERE orderId = #{orderId}
+        WHERE shopOrderId = #{orderId}
         <if test="amount != null">
             AND unpaidAmount = #{amount}
         </if>
@@ -199,6 +199,7 @@
     <select id="getPayLinkByLinkLogo" resultType="com.caimei365.order.model.vo.OrderPayLinkVo">
         SELECT
             id,
+            shopOrderId,
             orderId,
             vipRecordId,
             authVipRecordId,
@@ -306,7 +307,10 @@
         from cm_bankcode
     </select>
     <select id="getCouponPrice" resultType="java.lang.Double">
-        select moneyCouponPrice from cm_coupon where id = #{couponId}
+        SELECT cc.moneyCouponPrice
+        FROM  cm_coupon cc
+        LEFT JOIN cm_coupon_buyrecord ccb ON cc.id=ccb.couponId
+        WHERE ccb.id = #{recordId}
     </select>
     <select id="findPayStatus" resultType="java.lang.Integer">
         select payStatus from cm_coupon_buyrecord where id = #{recordId}
@@ -368,6 +372,20 @@
     <select id="getSplitCodeByMbOrderId" resultType="java.lang.String">
         select cso.splitCode from cm_shop_order cso
             left join cm_receipt_order_relation cror on cso.shopOrderID = cror.shopOrderId
-        where cror.mbOrderId = #{mbOrderId}
+        where cror.orderRequestNo = #{mbOrderId}
+    </select>
+    <select id="findB2BBankCode" resultType="com.caimei365.order.model.vo.BankCodeVo">
+        select id, bankName, B2B, bankLogo, delFlag
+        from cm_bankcode
+        where B2B is not null
+          and B2B != ''
+          and delFlag = 0
+    </select>
+    <select id="findB2CBankCode" resultType="com.caimei365.order.model.vo.BankCodeVo">
+        select id, bankName, B2C, bankLogo, delFlag
+        from cm_bankcode
+        where B2C is not null
+          and B2C != ''
+          and delFlag = 0
     </select>
 </mapper>