瀏覽代碼

关联供应商退款-关联返佣款

chao 3 年之前
父節點
當前提交
0aab7b92fb

+ 3 - 3
src/main/java/com/caimei365/order/components/WeChatService.java

@@ -351,11 +351,11 @@ public class WeChatService {
      *  @param openid 被推送人的openid
      * @param title 标题
      * @param money 金额
-     * @param type 收款类型
      * @param time 日期时间
+     * @param remarkText 备注文本:收款类型+确认时间
      * @param redirectUrl 跳转链接
      */
-    public void sendTemplateMsg(String openid, String title, Double money, String type, String time, String redirectUrl) {
+    public void sendTemplateMsg(String openid, String title, Double money, String time, String remarkText, String redirectUrl) {
         JSONObject first = new JSONObject();
         first.put("value", title);
         first.put("color", "#000000");
@@ -366,7 +366,7 @@ public class WeChatService {
         keyword2.put("value", time);
         keyword2.put("color", "#c4c400");
         JSONObject remark = new JSONObject();
-        keyword2.put("value", "收款类型:" + type);
+        keyword2.put("value", remarkText);
         keyword2.put("color", "#c4c400");
 
         JSONObject data = new JSONObject();

+ 18 - 0
src/main/java/com/caimei365/order/controller/ReceiptApi.java

@@ -291,6 +291,12 @@ public class ReceiptApi {
     @ApiOperation("确认收款-关联收款信息")
     @PostMapping("/confirm")
     public ResponseJson<Void> receiptAssociate(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+            return ResponseJson.error("收款Id不能为空", null);
+        }
+        if (!StringUtils.hasLength(receiptAssociateDto.getOrderIds())) {
+            return ResponseJson.error("关联订单IDS不能为空", null);
+        }
         return receiptService.receiptAssociate(receiptAssociateDto, headers);
     }
 
@@ -306,6 +312,12 @@ public class ReceiptApi {
     @ApiOperation("确认收款-关联供应商退款")
     @PostMapping("/confirm/refund")
     public ResponseJson<ReceiptPo> receiptAssociateRefund(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+            return ResponseJson.error("收款Id不能为空", null);
+        }
+        if (null == receiptAssociateDto.getShopOrderId() || receiptAssociateDto.getShopOrderId() <= 0) {
+            return ResponseJson.error("关联供应商退款子订单ID不能为空", null);
+        }
         return receiptService.receiptAssociateRefund(receiptAssociateDto, headers);
     }
 
@@ -322,6 +334,12 @@ public class ReceiptApi {
     @ApiOperation("确认收款-关联返佣款")
     @PostMapping("/confirm/rebate")
     public ResponseJson<ReceiptPo> receiptAssociateRebate(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+            return ResponseJson.error("收款Id不能为空", null);
+        }
+        if (!StringUtils.hasLength(receiptAssociateDto.getOrderIds())) {
+            return ResponseJson.error("关联返佣子订单IDs不能为空", null);
+        }
         return receiptService.receiptAssociateRebate(receiptAssociateDto, headers);
     }
 

+ 5 - 0
src/main/java/com/caimei365/order/mapper/OrderCommonMapper.java

@@ -107,6 +107,11 @@ public interface OrderCommonMapper {
      * @param orderId 订单Id
      */
     OrderVo getOrderByOrderId(Integer orderId);
+    /**
+     * 根据子订单Id获取订单
+     * @param shopOrderId 订单Id
+     */
+    OrderVo getOrderByShopOrderId(Integer shopOrderId);
     /**
      * 根据订单Id获取子订单列表
      */

+ 39 - 2
src/main/java/com/caimei365/order/mapper/ReceiptMapper.java

@@ -2,6 +2,7 @@ package com.caimei365.order.mapper;
 
 import com.caimei365.order.model.bo.ReceiptParamsBo;
 import com.caimei365.order.model.po.ReceiptPo;
+import com.caimei365.order.model.po.RefundShopRecordPo;
 import com.caimei365.order.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -130,6 +131,10 @@ public interface ReceiptMapper {
      * 返佣款-子订单列表
      */
     List<ShopOrderVo> getRebateShopOrders(String shopName);
+    /**
+     * 获取子订单信息
+     */
+    ShopOrderVo getShopOrderById(Integer shopOrderId);
     /**
      * 返佣订单付款总金额
      */
@@ -154,6 +159,38 @@ public interface ReceiptMapper {
      * 统计收款金额
      */
     double countAssociateAmountById(Integer receiptId);
-
-
+    /**
+     * 总退款金额
+     */
+    double getRefundShopAmount(Integer shopOrderId);
+    /**
+     * 保存供应商退款
+     */
+    void insertRefundShop(ReceiptPo receiptPo);
+    /**
+     * 保存供应商退款记录
+     */
+    void insertRefundShopRecord(RefundShopRecordPo refundShopRecord);
+    /**
+     * 供应商Id列表
+     */
+    List<Integer> getShopIdList(@Param("shopOrderIdArr") String[] shopOrderIdArr);
+    /**
+     * 查询这个子订单的主订单下面的所有子订单ID
+     */
+    List<Integer> getSubShopOrderList(String shopOrderId);
+    /**
+     * 查询当前子订单列表中已经返佣了的子订单
+     */
+    List<Integer> getSubShopOrderRebate(@Param("shopOrderIdList") List<Integer> shopOrderIdList);
+    /**
+     * 修改(付款供应商)付款状态
+     * @param shopOrderId 子订单Id
+     * @param payStatus 付款状态
+     */
+    void updateShopOrdePayStatus(String shopOrderId, Integer payStatus);
+    /**
+     * 更新订单状态
+     */
+    void updateOrderStatus(OrderVo order);
 }

+ 52 - 0
src/main/java/com/caimei365/order/model/po/RefundShopPo.java

@@ -0,0 +1,52 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/24
+ */
+@Data
+public class RefundShopPo implements Serializable {
+    private static final long serialVersionUId = 1L;
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 供应商Id
+     */
+    private Integer shopId;
+    /**
+     * 操作人ID
+     */
+    private Integer operator;
+    /**
+     * 操作时间
+     */
+    private String operateTime;
+    /**
+     * 退款金额(线下转账)
+     */
+    private Double refundAmount;
+    /**
+     * 退款余额金额(余额账号)
+     */
+    private Double refundBalanceAmount;
+    /**
+     * 退款方式:1线下转账,2余额账号,3线下和余额同时退,4收款CRM(供应商退款)
+     */
+    private Integer refundWay;
+    /**
+     * 线下转账具体银行
+     */
+    private Integer refundType;
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 49 - 0
src/main/java/com/caimei365/order/model/po/RefundShopRecordPo.java

@@ -0,0 +1,49 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/24
+ */
+@Data
+public class RefundShopRecordPo implements Serializable {
+    private static final long serialVersionUId = 1L;
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 退款表ID
+     */
+    private Integer refundShopId;
+    /**
+     * 供应商Id
+     */
+    private Integer shopId;
+    /**
+     * 子订单ID
+     */
+    private Integer shopOrderId;
+    /**
+     * 子订单编号
+     */
+    private String shopOrderNo;
+    /**
+     * 退款金额(线下转账)
+     */
+    private Double refundAmount;
+    /**
+     * 线下转账具体银行
+     */
+    private Integer refundType;
+    /**
+     * 付款时间
+     */
+    private String refundTime;
+
+}

+ 157 - 30
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -12,9 +12,7 @@ import com.caimei365.order.model.dto.ReceiptDto;
 import com.caimei365.order.model.enums.OrderStatus;
 import com.caimei365.order.model.enums.ReceiptStatus;
 import com.caimei365.order.model.enums.ReceiptType;
-import com.caimei365.order.model.po.BalanceRecordPo;
-import com.caimei365.order.model.po.OrderReceiptRelationPo;
-import com.caimei365.order.model.po.ReceiptPo;
+import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.*;
 import com.caimei365.order.service.ReceiptService;
 import com.caimei365.order.utils.DateUtils;
@@ -901,6 +899,9 @@ public class ReceiptServiceImpl implements ReceiptService {
             return ResponseJson.error("无权限操作!", null);
         }
         ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        if (null == receipt) {
+            return ResponseJson.error("收款数据异常!", null);
+        }
         // 删除之前与这个收款所有的关系
         receiptMapper.deleteReceiptRelation(receipt.getId());
         // ReceiptVo -- copy to --> ReceiptPo
@@ -1069,14 +1070,14 @@ public class ReceiptServiceImpl implements ReceiptService {
         receiptPo.setConfirmUserPermissionId(receiptUser.getId());
         receiptPo.setConfirmDate(time);
         receiptMapper.updateReceipt(receiptPo);
-        // 关联成功推送模板消息给审核人员
+        // 关联成功推送模板消息给审核人员(3财务)
         List<String> openidList = receiptMapper.getOpenidListByUserType(3);
         openidList.removeIf(Objects::isNull);
         double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
         String associateTitle = "收款和订单已确认关联,请及时审核!";
         String associateDate = receipt.getReceiptDate();
         String associateType = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
-
+        String remarkText = "收款类型:" + associateType + ",确认时间:"+receipt.getConfirmDate();
 
         //todo 跳转到详情页
         // 跳转链接 crm旧链接:/api/user/receivables/toReceivablesPage.rpc?pageName=listToDesc&id=receipt.getId()
@@ -1084,8 +1085,8 @@ public class ReceiptServiceImpl implements ReceiptService {
 
         String redirectUrl = "";
         for (String openid : openidList) {
-            // sendTemplateMsg(openid, 标题, 金额, 收款类型, 收款日期, 跳转链接)
-            weChatService.sendTemplateMsg(openid, associateTitle, associateAmount, associateType, associateDate, redirectUrl);
+            // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
+            weChatService.sendTemplateMsg(openid, associateTitle, associateAmount, associateDate, remarkText, redirectUrl);
         }
         return ResponseJson.success("关联收款信息成功!", null);
     }
@@ -1106,19 +1107,80 @@ public class ReceiptServiceImpl implements ReceiptService {
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
-
-
-
-
-
-
-
-
-
-
-
-
-        return null;
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        if (null == receipt) {
+            return ResponseJson.error("收款数据异常!", null);
+        }
+        // 只有在待确认 和撤销的状态下才能关联  子订单  不然就是状态出错了
+        if (5 != receipt.getReceiptStatus() && 1 != receipt.getReceiptStatus()) {
+            return ResponseJson.error("收款记录状态异常!", null);
+        }
+        ShopOrderVo shopOrder = receiptMapper.getShopOrderById(receiptAssociateDto.getShopOrderId());
+        // 总退款金额
+        Double refundAmount = receiptMapper.getRefundShopAmount(receiptAssociateDto.getShopOrderId());
+        // 确认本次收款金额大于已付金额与已退金额的差值,不能关联
+        if (MathUtil.compare(shopOrder.getPayedShopAmount(), MathUtil.add(refundAmount, receipt.getReceiptAmount())) < 0) {
+            return ResponseJson.error("确认本次收款金额大于已付金额与已退金额的差值,不能关联!", null);
+        }
+        //删除之前与这个收款的关联
+        receiptMapper.deleteReceiptRelation(receipt.getId());
+        // ReceiptVo -- copy to --> ReceiptPo
+        String time = DateUtils.getDateTime();
+        ReceiptPo receiptPo = new ReceiptPo();
+        BeanUtils.copyProperties(receipt, receiptPo);
+        receiptPo.setUpdateDate(time);
+        receiptPo.setReceiptType(5);
+        receiptPo.setReceiptStatus(2);
+        receiptPo.setConfirmDate(time);
+        receiptPo.setConfirmUserPermissionId(receiptUser.getId());
+        receiptMapper.updateReceipt(receiptPo);
+        // 保存 收款项和订单关系
+        OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
+        relation.setOrderId(receiptAssociateDto.getShopOrderId());
+        relation.setReceiptId(receipt.getId());
+        relation.setRelationType(1);
+        relation.setAssociateAmount(receipt.getReceiptAmount());
+        relation.setDelFlag(0);
+        baseMapper.insertOrderReceiptRelation(relation);
+        /*
+         * 保存供应商退款
+         */
+        RefundShopPo refundShop = new RefundShopPo();
+        refundShop.setOperator(receiptUser.getId());
+        refundShop.setOperateTime(receipt.getConfirmDate());
+        refundShop.setRefundWay(4);
+        refundShop.setShopId(shopOrder.getShopId());
+        refundShop.setRefundAmount(receipt.getReceiptAmount());
+        refundShop.setRefundBalanceAmount(0d);
+        refundShop.setRemark(receipt.getSmsContent());
+        /*
+                退款:1建设银行7297, 2中信银行0897, 3中信银行7172, 4广发银行0115, 5广发银行5461, 6虚拟银行0000
+                付款:1建设银行7297、2广发银行0115、3中信银行7172、4中信银行0897、5中信银行0897-财付通、6中信银行0897-支付宝、7线上-支付宝、8线上-微信支付、9线上-快钱支付、10口头返佣、11广发银行5461、12PC-B2B网银、13PC-微信支付、14PC-支付宝、15小程序-微信支付、16余额抵扣、17PC-B2C网银
+         */
+        if (1 == receipt.getPayType()) {
+            refundShop.setRefundType(1);
+        } else if (4 == receipt.getPayType() || 5 == receipt.getPayType() || 6 == receipt.getPayType()) {
+            refundShop.setRefundType(2);
+        } else if (3 == receipt.getPayType()) {
+            refundShop.setRefundType(3);
+        } else if (2 == receipt.getPayType()) {
+            refundShop.setRefundType(4);
+        } else if (11 == receipt.getPayType()) {
+            refundShop.setRefundType(5);
+        } else {
+            refundShop.setRefundType(6);
+        }
+        receiptMapper.insertRefundShop(receiptPo);
+        //保存供应商退款记录
+        RefundShopRecordPo refundShopRecord = new RefundShopRecordPo();
+        refundShopRecord.setRefundShopId(refundShop.getId());
+        refundShopRecord.setShopId(refundShop.getShopId());
+        refundShopRecord.setShopOrderId(shopOrder.getShopOrderId());
+        refundShopRecord.setShopOrderNo(shopOrder.getShopOrderNo());
+        refundShopRecord.setRefundAmount(receipt.getReceiptAmount());
+        refundShopRecord.setRefundTime(receipt.getConfirmDate());
+        receiptMapper.insertRefundShopRecord(refundShopRecord);
+        return ResponseJson.success("关联供应商退款成功!", null);
     }
 
     /**
@@ -1130,6 +1192,7 @@ public class ReceiptServiceImpl implements ReceiptService {
      *                            rebateRemarks:关联返佣备注
      *                            }
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public ResponseJson<ReceiptPo> receiptAssociateRebate(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers) {
         // 检查收款用户权限: 5收款关联返佣
@@ -1137,17 +1200,81 @@ public class ReceiptServiceImpl implements ReceiptService {
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
+        String[] shopOrderIdArr = receiptAssociateDto.getShopOrderIds().split(",");
 
-
-
-
-
-
-
-
-
-
-        return null;
+        List<Integer> shopIdList = receiptMapper.getShopIdList(shopOrderIdArr);
+        if (shopIdList.size() > 1) {
+            return ResponseJson.error("子订单不属于相同的供应商!", null);
+        }
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        if (null == receipt) {
+            return ResponseJson.error("收款数据异常!", null);
+        }
+        // 只有在待确认 和撤销的状态下才能关联  子订单  不然就是状态出错了
+        if (5 != receipt.getReceiptStatus() && 1 != receipt.getReceiptStatus()) {
+            return ResponseJson.error("收款记录状态异常!", null);
+        }
+        //删除之前与这个收款的关联
+        receiptMapper.deleteReceiptRelation(receipt.getId());
+        // ReceiptVo -- copy to --> ReceiptPo
+        String time = DateUtils.getDateTime();
+        ReceiptPo receiptPo = new ReceiptPo();
+        BeanUtils.copyProperties(receipt, receiptPo);
+        receiptPo.setUpdateDate(time);
+        receiptPo.setReceiptType(3);
+        receiptPo.setReceiptStatus(2);
+        receiptPo.setConfirmDate(time);
+        receiptPo.setConfirmUserPermissionId(receiptUser.getId());
+        if (StringUtils.isNotBlank(receiptAssociateDto.getRebateRemarks())) {
+            receiptPo.setRebateRemarks(receiptAssociateDto.getRebateRemarks());
+        }
+        receiptMapper.updateReceipt(receiptPo);
+        for (String shopOrderId : shopOrderIdArr) {
+            // 保存 收款项和订单关系
+            OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
+            relation.setOrderId(Integer.valueOf(shopOrderId));
+            relation.setReceiptId(receipt.getId());
+            relation.setRelationType(1);
+            relation.setAssociateAmount(0d);
+            baseMapper.insertOrderReceiptRelation(relation);
+            //查询这个子订单的主订单下面的所有子订单ID 结果里面包含了 shopOrderId自己的   也就是这个这订单的兄弟子订单
+            List<Integer> shopOrderIdList = receiptMapper.getSubShopOrderList(shopOrderId);
+            //因为最起码已经有一个子订单进行了返佣操作  所以主订单最起码是部分收款付款
+            //如果子订单全部进行了 返佣操作 那么就是全部收付款了
+            boolean flag = true;
+            // 查询已经返佣了的子订单
+            List<Integer> shopOrderIdRebate = receiptMapper.getSubShopOrderRebate(shopOrderIdList);
+            for (Integer soId : shopOrderIdList) {
+                if (!shopOrderIdRebate.contains(soId)) {
+                    //只要有一个子订单没有进行过返佣
+                    //那么这个主订单就是部分的收付款
+                    flag = false;
+                    break;
+                }
+            }
+            receiptMapper.updateShopOrdePayStatus(shopOrderId, 3);
+            // 订单信息
+            OrderVo order = orderCommonMapper.getOrderByShopOrderId(Integer.parseInt(shopOrderId));
+            if (flag) {
+                //子订单全部收到款了
+                order.setReceiptStatus(3);
+                order.setPayStatus(3);
+                if (order.getStatus().toString().length() == 2) {
+                    order.setStatus(Integer.valueOf("3" + order.getStatus().toString().substring(1, 2)));
+                }
+            } else {
+                //子订单的款还没有收全
+                order.setReceiptStatus(2);
+                order.setPayStatus(2);
+                if (order.getStatus().toString().length() == 2) {
+                    order.setStatus(Integer.valueOf("2" + order.getStatus().toString().substring(1, 2)));
+                }
+            }
+            order.setUpdateDate(time);
+            // 更新订单状态
+            receiptMapper.updateOrderStatus(order);
+        }
+        return ResponseJson.success("关联返佣款成功!", null);
     }
 
     /**

+ 52 - 1
src/main/resources/mapper/OrderCommonMapper.xml

@@ -317,6 +317,57 @@
         FROM cm_order
         WHERE orderID = #{orderId}
     </select>
+    <select id="getOrderByShopOrderId" resultType="com.caimei365.order.model.vo.OrderVo">
+        SELECT
+           co.orderID AS orderId,
+           co.shopOrderIds,
+           co.orderSource,
+           co.orderNo,
+           co.organizeID AS organizeId,
+           co.userID AS userId,
+           co.clubID AS clubId,
+           co.buyUserID AS buyUserId,
+           co.orderTime AS orderTime,
+           co.updateDate AS updateDate,
+           co.delFlag,
+           co.userBeans,
+           co.orderType,
+           co.orderSubmitType,
+           co.confirmFlag,
+           co.onlinePayFlag,
+           co.splitFlag,
+           co.payFlag,
+           co.receiptStatus,
+           co.payStatus,
+           co.zeroCostFlag,
+           co.sendOutStatus,
+           co.refundType,
+           co.affirmPaymentFlag,
+           co.productCount,
+           co.presentCount,
+           co.promotionalGiftsCount,
+           co.hasActProduct,
+           co.promotionFullReduction,
+           co.secondHandOrderFlag,
+           co.invoiceFlag,
+           co.freePostFlag AS postageFlag,
+           co.freight AS postage,
+           co.productTotalFee,
+           co.orderTotalFee,
+           co.payTotalFee,
+           co.payableAmount,
+           co.balancePayFee,
+           co.status,
+           co.paySuccessCounter,
+           co.confirmTime,
+           co.payTime,
+           co.rebateFlag,
+           co.clauseID AS clauseId,
+           co.clauseName
+        FROM cm_shop_order cso
+        LEFT JOIN cm_order co ON cso.orderID = co.orderID
+        WHERE cso.shopOrderID = #{shopOrderId}
+    </select>
     <select id="getShopOrderListByOrderId" resultType="com.caimei365.order.model.vo.ShopOrderVo">
         SELECT
         shopOrderID AS shopOrderId,
@@ -490,4 +541,4 @@
     <select id="getUserRegisterTime" resultType="java.util.Date">
         select registerTime from user where userID = #{userId}
     </select>
-</mapper>
+</mapper>

+ 89 - 0
src/main/resources/mapper/ReceiptMapper.xml

@@ -133,6 +133,30 @@
     <update id="deleteReceiptRelation">
         UPDATE cm_receipt_order_relation SET delFlag = '1' WHERE receiptID = #{receiptId}
     </update>
+    <update id="updateShopOrdePayStatus">
+        UPDATE cm_shop_order SET payStatus = #{payStatus} WHERE shopOrderID = #{shopOrderId}
+    </update>
+    <update id="updateOrderStatus">
+        UPDATE cm_order SET
+        status = #{status}
+        <if test="receiptStatus != null and receiptStatus != ''">
+            ,receiptStatus = #{receiptStatus}
+        </if>
+        <if test="payStatus != null and payStatus != ''">
+            ,payStatus = #{payStatus}
+        </if>
+        <if test="confirmFlag != null and confirmFlag != ''">
+            ,confirmFlag = #{confirmFlag}
+        </if>
+        <if test="confirmTime != null and confirmTime != ''">
+            ,confirmTime = #{confirmTime}
+        </if>
+        <if test="affirmPaymentFlag != null and affirmPaymentFlag != ''">
+            ,affirmPaymentFlag = #{affirmPaymentFlag}
+        </if>
+        ,updateDate = #{updateDate}
+        WHERE orderID = #{orderId}
+    </update>
     <select id="getReceiptUserByOpenid" resultType="com.caimei365.order.model.vo.ReceiptUserVo">
         SELECT DISTINCT id, user_type AS userType, name, mobile, openid, unionId, password
         FROM cm_receipt_user
@@ -730,6 +754,40 @@
         </where>
         ORDER BY cso.shopOrderID DESC
     </select>
+    <select id="getShopOrderById" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+        SELECT
+            shopOrderID AS shopOrderId,
+            shopOrderNo,
+            orderID AS orderId,
+            orderNo,
+            shopID AS shopId,
+            note,
+            userID AS userId,
+            clubID AS clubId,
+            spID AS spId,
+            orderPromotionsId,
+            promotionFullReduction,
+            brokerage,
+            canRefundAmount,
+            itemCount,
+            totalAmount,
+            productAmount,
+            needPayAmount,
+            shopProductAmount,
+            shopPostFee,
+            shopTaxFee,
+            shouldPayShopAmount,
+            payedShopAmount,
+            outStoreNum,
+            IFNULL(presentNum,0) AS presentNum,
+            orderTime,
+            orderSubmitType,
+            payStatus,
+            sendOutStatus,
+            splitFlag
+        FROM cm_shop_order
+        WHERE shopOrderID = #{shopOrderId} AND delFlag = '0'
+    </select>
     <select id="countAllPayAssociateAmount" resultType="java.lang.Double">
         SELECT IFNULL(SUM(cror.associateAmount), 0) FROM cm_receipt_order_relation cror
         LEFT JOIN cm_discern_receipt cdr on cror.receiptID = cdr.id
@@ -759,5 +817,36 @@
     <select id="countAssociateAmountById" resultType="java.lang.Double">
         SELECT IFNULL(SUM(associateAmount), 0) FROM cm_receipt_order_relation WHERE receiptID = #{receiptId}
     </select>
+    <select id="getRefundShopAmount" resultType="java.lang.Double">
+        SELECT SUM(refundAmount) FROM  cm_refund_shop_record WHERE shopOrderID = #{shopOrderId} AND delFlag = 0
+    </select>
+    <select id="getShopIdList" resultType="java.lang.Integer">
+        SELECT DISTINCT shopID FROM cm_shop_order WHERE shopOrderID IN
+        <foreach collection="shopOrderIdArr" open="(" close=")" item="shopOrderId" separator=",">
+            #{shopOrderId}
+        </foreach>
+    </select>
+    <select id="getSubShopOrderList" resultType="java.lang.Integer">
+        SELECT cso2.shopOrderID FROM cm_shop_order cso1
+            LEFT JOIN cm_order co ON co.orderID = cso1.orderID
+            LEFT JOIN cm_shop_order cso2 ON cso2.orderID = co.orderID
+        WHERE cso1.shopOrderID = #{shopOrderId}
+    </select>
+    <select id="getSubShopOrderRebate" resultType="java.lang.Integer">
+        SELECT cror.orderID FROM cm_receipt_order_relation cror
+        WHERE  cror.delFlag = '0' AND  cror.relationType = '1' AND cror.orderID IN
+        <foreach collection="shopOrderIdList" open="(" close=")" item="shopOrderId" separator=",">
+            #{shopOrderId}
+        </foreach>
+        AND cror.orderID IS NOT NULL
+    </select>
+    <insert id="insertRefundShop" keyColumn="id" keyProperty="id"  parameterType="com.caimei365.order.model.po.RefundShopPo" useGeneratedKeys="true">
+        INSERT INTO cm_refund_shop( shopID, operator, operatTime, refundAmount, refundType, remark, refundWay, refundBalanceAmount)
+        VALUES (#{shopId}, #{operator}, #{operateTime}, #{refundAmount}, #{refundType}, #{remark}, #{refundWay}, #{refundBalanceAmount})
+    </insert>
+    <insert id="insertRefundShopRecord" keyColumn="id" keyProperty="id"  parameterType="com.caimei365.order.model.po.RefundShopRecordPo" useGeneratedKeys="true">
+        INSERT INTO cm_refund_shop_record( shopID, shopOrderID, shopOrderNo, refundAmount, refundType, refundTime, refundShopID)
+        VALUES (#{shopId}, #{shopOrderId}, #{shopOrderNo}, #{refundAmount}, #{refundType}, #{refundTime}, #{refundShopId})
+    </insert>
 
 </mapper>