瀏覽代碼

分账接口

花田厝 5 月之前
父節點
當前提交
cb953698ca

+ 14 - 0
jsjp-admin/src/main/java/com/miaxis/pc/PcOrderInfoController.java

@@ -7,8 +7,10 @@ import com.miaxis.common.core.page.ResponsePageInfo;
 import com.miaxis.common.enums.BusinessTypeEnum;
 import com.miaxis.common.utils.poi.ExcelUtil;
 import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.domain.OrderSplit;
 import com.miaxis.order.dto.QuerySchoolOrderListDTO;
 import com.miaxis.order.service.IOrderInfoService;
+import com.miaxis.order.service.IOrderSplitService;
 import com.miaxis.order.vo.OrderIncomeVo;
 import com.miaxis.order.vo.QuerySchoolOrderDetailedVo;
 import com.miaxis.order.vo.QuerySchoolOrderListVo;
@@ -38,6 +40,8 @@ public class PcOrderInfoController extends BaseController{
     @Autowired
     private IOrderInfoService orderInfoService;
     @Autowired
+    private IOrderSplitService orderSplitService;
+    @Autowired
     private IWxJsOrderService wxJsOrderService;
 
     @Autowired
@@ -86,10 +90,12 @@ public class PcOrderInfoController extends BaseController{
         ResponsePageInfo<QuerySchoolOrderListVo> orderInfoResponsePageInfo = toResponsePageInfo(list);
         Integer total = orderInfoService.getTotalMoney(schoolOrderListDTO);
         Integer commission = orderInfoService.getCommissionMoney(schoolOrderListDTO);
+        Integer fzMoney = orderInfoService.getFzMoney(schoolOrderListDTO);
 
         Map<String,Integer> map = new HashMap<String,Integer>();
         map.put("total",total);
         map.put("commission",commission);
+        map.put("fzMoney",fzMoney);
         orderInfoResponsePageInfo.setData(map);
         return orderInfoResponsePageInfo;
 
@@ -148,6 +154,14 @@ public class PcOrderInfoController extends BaseController{
     ) throws Exception {
         String refundCode = getOrderCode(null);
         WxJsOrder order = wxJsOrderService.getByOutTradeNo(outTradeNo);
+        if(order!=null && order.getIsFz()==1){
+            //分账退回
+            OrderInfo orderInfo = orderInfoService.getByOutTradeNo(outTradeNo);
+            OrderSplit orderSplit = orderSplitService.getByOutTradeNo(outTradeNo);
+            if(orderSplit!=null && orderSplit.getStatus()==1) {
+                orderInfoService.wxProfitsharingRetrun(orderInfo,orderSplit);
+            }
+        }
         refundRecordService.refund(order,refundCode,reason);
         //TODO 取消会员
         orderInfoService.refundOrder(order);

+ 15 - 0
jsjp-admin/src/test/java/com/miaxis/test/WxFenZhangTest.java

@@ -2,7 +2,9 @@ package com.miaxis.test;
 
 import com.miaxis.JsjpApplication;
 import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.domain.OrderSplit;
 import com.miaxis.order.service.IOrderInfoService;
+import com.miaxis.order.service.IOrderSplitService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +21,9 @@ public class WxFenZhangTest {
     @Autowired
     private IOrderInfoService orderInfoService;
 
+    @Autowired
+    private IOrderSplitService orderSplitService;
+
 
     @Test
     public void test1() throws Exception {
@@ -45,6 +50,16 @@ public class WxFenZhangTest {
     }
 
 
+    @Test
+    public void test3() throws Exception {
+        OrderInfo orderInfo = orderInfoService.getByOutTradeNo("12025020710535648621586410006527");
+        OrderSplit orderSplit = orderSplitService.getByOutTradeNo("12025020710535648621586410006527");
+
+
+       boolean flag =   orderInfoService.wxProfitsharingRetrun(orderInfo,orderSplit);
+
+    }
+
 
 }
 

+ 25 - 0
jsjp-service/src/main/java/com/miaxis/order/domain/OrderSplit.java

@@ -50,6 +50,8 @@ public class OrderSplit extends BaseBusinessEntity {
     @ApiModelProperty(value = "商户内部订单ID")
     private String outTradeNo;
 
+
+
     /** 分账金额 */
     @Excel(name = "分账金额")
     @TableField("amount")
@@ -68,6 +70,29 @@ public class OrderSplit extends BaseBusinessEntity {
     @ApiModelProperty(value = "前端类型 1:app 2:小程序 3:公众号")
     private Integer openIdType;
 
+    /** 分账状态 1 分账成功  2 分账回退 */
+    @Excel(name = "分账状态 1 分账成功  2 分账回退")
+    @TableField("status")
+    @ApiModelProperty(value = "分账状态 1 分账成功  2 分账回退")
+    private Integer status;
+
+    /** 分账回退失败原来 */
+    @Excel(name = "分账回退失败原来")
+    @TableField("status")
+    @ApiModelProperty(value = "分账回退失败原来")
+    private String failReason;
+
+    /** 商户回退单号 */
+    @Excel(name = "商户回退单号")
+    @TableField("out_return_no")
+    @ApiModelProperty(value = "商户回退单号")
+    private String outReturnNo;
+
+    /** 微信回退单号 */
+    @Excel(name = "微信回退单号")
+    @TableField("out_return_no")
+    @ApiModelProperty(value = "微信回退单号")
+    private String returnNo;
 
     /** 描述 */
     @Excel(name = "描述")

+ 2 - 0
jsjp-service/src/main/java/com/miaxis/order/mapper/OrderInfoMapper.java

@@ -41,4 +41,6 @@ public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
     List<OrderIncomeVo> getIncomeList(QuerySchoolOrderListDTO schoolOrderListDTO);
 
     List<OrderInfo> selectOrderInfoByWaitProfit();
+
+    Integer getFzMoney(QuerySchoolOrderListDTO orderInfo);
 }

+ 1 - 0
jsjp-service/src/main/java/com/miaxis/order/mapper/OrderSplitMapper.java

@@ -20,4 +20,5 @@ public interface OrderSplitMapper extends BaseMapper<OrderSplit> {
      */
     public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
 
+    OrderSplit getByOutTradeNo(String outTradeNo);
 }

+ 5 - 2
jsjp-service/src/main/java/com/miaxis/order/service/IOrderInfoService.java

@@ -2,6 +2,7 @@ package com.miaxis.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.domain.OrderSplit;
 import com.miaxis.order.dto.QuerySchoolOrderListDTO;
 import com.miaxis.order.vo.OrderIncomeVo;
 import com.miaxis.order.vo.QuerySchoolOrderDetailedVo;
@@ -46,6 +47,8 @@ public interface IOrderInfoService extends IService<OrderInfo> {
 
     Integer getCommissionMoney(QuerySchoolOrderListDTO orderInfo);
 
+    Integer getFzMoney(QuerySchoolOrderListDTO orderInfo);
+
     List<QuerySchoolOrderListVo> selectSchoolOrderInfoExcel(QuerySchoolOrderListDTO schoolOrderListDTO);
 
     List<OrderIncomeVo> getIncomeList(QuerySchoolOrderListDTO schoolOrderListDTO);
@@ -58,6 +61,6 @@ public interface IOrderInfoService extends IService<OrderInfo> {
     @Transactional
     boolean wxProfitsharing(OrderInfo orderInfo) throws Exception;
 
-//    @Transactional
-//    boolean wxProfitsharingRetrun(OrderInfo orderInfo) throws Exception;
+    @Transactional
+    boolean wxProfitsharingRetrun(OrderInfo orderInfo, OrderSplit orderSplit) throws Exception;
 }

+ 2 - 1
jsjp-service/src/main/java/com/miaxis/order/service/IOrderSplitService.java

@@ -1,6 +1,7 @@
 package com.miaxis.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.order.domain.OrderInfo;
 import com.miaxis.order.domain.OrderSplit;
 
 import java.util.List;
@@ -21,5 +22,5 @@ public interface IOrderSplitService extends IService<OrderSplit>{
      List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
 
 
-
+    OrderSplit getByOutTradeNo(String outTradeNo);
 }

+ 56 - 51
jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java

@@ -1643,6 +1643,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         return orderInfoMapper.getCommissionMoney(orderInfo);
     }
 
+
+    @Override
+    public Integer getFzMoney(QuerySchoolOrderListDTO orderInfo) {
+        return orderInfoMapper.getFzMoney(orderInfo);
+    }
+
     @Override
     public List<QuerySchoolOrderListVo> selectSchoolOrderInfoExcel(QuerySchoolOrderListDTO schoolOrderListDTO) {
         return orderInfoMapper.selectSchoolOrderInfoExcel(schoolOrderListDTO);
@@ -2247,7 +2253,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         sortMap.put("nonce_str", nonceStr);
         sortMap.put("sign_type", "HMAC-SHA256");
         sortMap.put("transaction_id", orderInfo.getTransactionId());
-        String orderCode = getOrderCode(orderInfo.getUserId()); //商户分账单号
+        String orderCode = "P"+getOrderCode(orderInfo.getUserId()); //商户分账单号
         sortMap.put("out_order_no", orderCode);
 
         Map<String, Object> receiverMap = new TreeMap<String, Object>();
@@ -2285,8 +2291,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
             orderSplit.setOrderId(orderId);
             orderSplit.setOutTradeNo(orderInfo.getOutTradeNo());
             orderSplit.setAmount(orderInfo.getFzPrice());
+            orderSplit.setTransactionId(orderInfo.getTransactionId());
             orderSplit.setOpenId(fzConfig.getAccount());
             orderSplit.setOpenIdType(1);
+            orderSplit.setStatus(1);
             orderSplit.setDescription(fzConfig.getDescription());
             return orderSplitService.save(orderSplit);
         }
@@ -2301,56 +2309,53 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
      * @return
      * @throws Exception
      */
-//    @Override
-//    @Transactional
-//    public boolean wxProfitsharingRetrun(OrderSplit orderSplit) throws Exception {
-//        String url = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingreturn";
-//        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
-//        //用于签名
-//        Map<String, String> sortMap = new TreeMap<String, String>();
-//        sortMap.put("mch_id", wxpayConfig.getMerchantId());
-//        sortMap.put("sub_mch_id", wxpayConfig.getMerchantId());
-//        sortMap.put("appid", appConfig.getAppid());
-//        sortMap.put("nonce_str", nonceStr);
-//        sortMap.put("sign_type", "HMAC-SHA256");
-//        sortMap.put("order_id", "order_id");
-//        sortMap.put("out_return_no", "order_id");
-//        sortMap.put("return_account_type", "MERCHANT_ID");
-//        sortMap.put("return_account", fzConfig.getAccount());
-//        sortMap.put("return_amount", String.valueOf(orderSplit.getAmount()));
-//        sortMap.put("description","用户退款");
-//
-//
-//
-//        WXPayConfig config = new WxPayConfigImpl();
-//        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
-//        sortMap.put("sign", sign);
-//
-//        WXPay pay = new WXPay(config);
-//        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
-//        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
-//        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
-//            //throw new CustomException("微信分账出错");
-//            log.info("微信分账出错");
-//            log.info(resMap.toString());
-//            orderSplitService.updateById(orderSplit);
-//            return false;
-//        } else {
-//            //更新成交订单表
-//            orderInfo.setIsFz(2);
-//            this.updateById(orderInfo);
-//
-//            OrderSplit orderSplit = new OrderSplit();
-//            orderSplit.setOutSplitNo(orderCode);
-//            orderSplit.setOutTradeNo(orderInfo.getOutTradeNo());
-//            orderSplit.setAmount(orderInfo.getFzPrice());
-//            orderSplit.setOpenId(fzConfig.getAccount());
-//            orderSplit.setOpenIdType(1);
-//            orderSplit.setDescription(fzConfig.getDescription());
-//            return orderSplitService.save(orderSplit);
-//        }
-//
-//    }
+    @Override
+    @Transactional
+    public boolean wxProfitsharingRetrun(OrderInfo orderInfo,OrderSplit orderSplit) throws Exception {
+        String url = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingreturn";
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        //用于签名
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_id", wxpayConfig.getMerchantId());
+        sortMap.put("sub_mch_id", wxpayConfig.getMerchantId());
+        sortMap.put("appid", appConfig.getAppid());
+        sortMap.put("nonce_str", nonceStr);
+        sortMap.put("sign_type", "HMAC-SHA256");
+        sortMap.put("out_order_no", orderSplit.getOutSplitNo());
+        String outReturnNo = "R" + getOrderCode(orderInfo.getUserId());
+        sortMap.put("out_return_no", outReturnNo);
+        sortMap.put("return_account_type", fzConfig.getType());
+        sortMap.put("return_account", fzConfig.getAccount());
+        sortMap.put("return_amount", String.valueOf(orderSplit.getAmount()));
+        sortMap.put("description","用户退款");
+
+
+        WXPayConfig config = new WxPayConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        sortMap.put("sign", sign);
+
+        WXPay pay = new WXPay(config);
+        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result"))) {
+            //throw new CustomException("微信分账出错");
+            log.info("微信分账退回出错");
+            log.info(resMap.toString());
+            orderSplit.setStatus(3);
+            orderSplit.setFailReason(resMap.get("fail_reason"));
+            orderSplitService.updateById(orderSplit);
+            return false;
+        } else {
+            //更新成交订单表
+            String returnNo = resMap.get("return_no");
+            orderSplit.setStatus(2); //分账回退成功
+            orderSplit.setOutReturnNo(outReturnNo);
+            orderSplit.setReturnNo(returnNo);
+            orderSplitService.updateById(orderSplit);
+            return true;
+        }
+
+    }
 
 
 

+ 5 - 0
jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderSplitServiceImpl.java

@@ -30,4 +30,9 @@ public class OrderSplitServiceImpl extends ServiceImpl<OrderSplitMapper, OrderSp
     public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit){
         return orderSplitMapper.selectOrderSplitList(orderSplit);
     }
+
+    @Override
+    public OrderSplit getByOutTradeNo(String outTradeNo) {
+        return orderSplitMapper.getByOutTradeNo(outTradeNo);
+    }
 }

+ 4 - 0
jsjp-service/src/main/java/com/miaxis/order/vo/QuerySchoolOrderListVo.java

@@ -26,6 +26,10 @@ public class QuerySchoolOrderListVo  {
     @ApiModelProperty(value = "订单总金额")
     private Float orderTotal;
 
+    @Excel(name = "主播分账")
+    @ApiModelProperty(value = "主播分账")
+    private Float fzMoney;
+
     @Excel(name = "驾校提成")
     @ApiModelProperty(value = "驾校提成")
     private Float schoolCommission;

+ 29 - 1
jsjp-service/src/main/resources/mapper/order/OrderInfoMapper.xml

@@ -104,7 +104,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    -->
 
 
-
     <select id="selectSchoolOrderInfoList"  parameterType="com.miaxis.order.dto.QuerySchoolOrderListDTO" resultType="com.miaxis.order.vo.QuerySchoolOrderListVo">
         SELECT *,
             CASE
@@ -116,6 +115,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             SELECT
             school,
             school_name,
+            IFNULL(SUM(fz_price), 0) AS fzMoney,
             IFNULL(SUM(school_commission), 0) AS school_commission,
             IFNULL(SUM(total), 0) AS order_total,
             COUNT(DISTINCT logincode) AS people_count,
@@ -246,6 +246,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     </select>
 
+    <select id="getFzMoney"  resultType="java.lang.Integer">
+        select
+        IFNULL(sum(fz_price),0) as fzMoney
+        from order_info
+        <where>
+            <if test="isShare != null">
+                and is_share = #{isShare }
+            </if>
+            <if test="tradeType != null">
+                and trade_type = #{tradeType }
+            </if>
+            <if test="dqbh != null  and dqbh != ''">
+                and dqbh = #{dqbh}
+            </if>
+            <if test="schoolName != null  and schoolName != ''">
+                and school_name like concat('%', #{schoolName}, '%')
+            </if>
+            <if test="startTime != null and startTime!=''">
+                and DATE_FORMAT(success_time,'%Y-%m-%d %H:%i:%S')<![CDATA[ >= ]]> #{startTime}
+            </if>
+            <if test="endTime != null and endTime!=''">
+                and DATE_FORMAT(success_time,'%Y-%m-%d %H:%i:%S') <![CDATA[ <= ]]> #{endTime}
+            </if>
+        </where>
+
+    </select>
+
+
 
     <select id="selectSchoolOrderDetailed"  resultType="com.miaxis.order.domain.OrderInfo">
         select * from order_info

+ 7 - 0
jsjp-service/src/main/resources/mapper/order/OrderSplitMapper.xml

@@ -12,7 +12,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="outTradeNo"    column="out_trade_no"    />
         <result property="amount"    column="amount"    />
         <result property="openId"    column="open_id"    />
+        <result property="openIdType"    column="open_id_type"    />
         <result property="description"    column="description"    />
+        <result property="status"    column="status"    />
+        <result property="outReturnNo"    column="out_return_no"    />
+        <result property="returnNo"    column="return_no"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateTime"    column="update_time"    />
     </resultMap>
@@ -35,6 +39,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="description != null  and description != ''"> and description = #{description}</if>
         </where>
     </select>
+    <select id="getByOutTradeNo" resultType="com.miaxis.order.domain.OrderSplit">
+        select * from order_split where out_trade_no =#{outTradeNo}
+    </select>
 
 
 </mapper>