浏览代码

确认收款-关联口头佣金

chao 3 年之前
父节点
当前提交
cb4de5de3f

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

@@ -340,12 +340,34 @@ public class ReceiptApi {
         if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
             return ResponseJson.error("收款Id不能为空", null);
         }
-        if (!StringUtils.hasLength(receiptOperateDto.getOrderIds())) {
+        if (!StringUtils.hasLength(receiptOperateDto.getShopOrderIds())) {
             return ResponseJson.error("关联返佣子订单IDs不能为空", null);
         }
         return receiptService.receiptAssociateRebate(receiptOperateDto, headers);
     }
 
+    /**
+     * 确认收款-关联口头佣金
+     * crm:/api/user/rebate/verballyReceipt
+     *
+     * @param receiptOperateDto {
+     *                            verbalAmount: 口头返佣佣金
+     *                            shopOrderIds: 关联返佣子订单IDs
+     *                            rebateRemarks:关联返佣备注
+     *                            }
+     */
+    @ApiOperation("确认收款-关联口头佣金")
+    @PostMapping("/confirm/rebate/verbal")
+    public ResponseJson<Integer> associateVerbalRebate(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getVerbalAmount()) {
+            return ResponseJson.error("口头返佣佣金参数异常", null);
+        }
+        if (!StringUtils.hasLength(receiptOperateDto.getShopOrderIds())) {
+            return ResponseJson.error("关联返佣子订单IDs不能为空", null);
+        }
+        return receiptService.associateVerbalRebate(receiptOperateDto, headers);
+    }
+
     /**
      * 审核收款信息
      * crm:/api/user/receivables/checkReceipt
@@ -367,5 +389,6 @@ public class ReceiptApi {
         }
         return receiptService.receiptAudit(receiptOperateDto.getId(), receiptOperateDto.getReceiptStatus(), receiptOperateDto.getReviewReason(), headers);
     }
+
 }
 

+ 11 - 4
src/main/java/com/caimei365/order/mapper/ReceiptMapper.java

@@ -1,9 +1,7 @@
 package com.caimei365.order.mapper;
 
 import com.caimei365.order.model.bo.ReceiptParamsBo;
-import com.caimei365.order.model.po.OrderReceiptRelationPo;
-import com.caimei365.order.model.po.ReceiptPo;
-import com.caimei365.order.model.po.RefundShopRecordPo;
+import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -171,7 +169,7 @@ public interface ReceiptMapper {
     /**
      * 保存供应商退款
      */
-    void insertRefundShop(ReceiptPo receiptPo);
+    void insertRefundShop(RefundShopPo refundShopPo);
     /**
      * 保存供应商退款记录
      */
@@ -203,4 +201,13 @@ public interface ReceiptMapper {
      */
     int getPendingAuditCount(Integer orderId);
 
+    /**
+     * 添加 返佣欠款记录
+     */
+    void insertRebateRecord(RebateRecordPo crr);
+
+    /**
+     * 更新供应商欠款金额
+     */
+    void updateShopRebateAmount(Integer shopId, Double amount);
 }

+ 6 - 0
src/main/java/com/caimei365/order/model/dto/ReceiptOperateDto.java

@@ -69,5 +69,11 @@ public class ReceiptOperateDto implements Serializable {
     /**
      * 审核不通过原因
      */
+    @ApiModelProperty("审核不通过原因")
     private String reviewReason;
+    /**
+     * 口头返佣佣金
+     */
+    @ApiModelProperty("口头返佣佣金")
+    private Double verbalAmount;
 }

+ 41 - 0
src/main/java/com/caimei365/order/model/po/RebateRecordPo.java

@@ -0,0 +1,41 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/28
+ */
+@Data
+public class RebateRecordPo implements Serializable {
+    private static final long serialVersionUId = 1L;
+    private Integer id;
+    /**
+     * 记录类型:1供应商欠款录入(口头返佣)、2应付供应商抵扣(不打款欠款抵扣)(付款抵扣), 3供应商退款给采美退款到余额
+     */
+    private Integer type;
+    /**
+     * 供应商ID
+     */
+    private Integer shopId;
+    /**
+     * 识别款项Id(对应cm_discern_receipt表)供应商欠款录入(口头返佣)的时候有值
+     */
+    private Integer receiptId;
+    /**
+     * 子订单ID(多个子订单使用,分隔
+     */
+    private String shopOrderId;
+    /**
+     * 金额(可能是欠款录入的口头返佣,可能是付款抵扣金额,具体看type值)
+     */
+    private Double rebateAmount;
+    /**
+     * 操作时间
+     */
+    private String operateTime;
+}

+ 13 - 0
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -176,6 +176,18 @@ public interface ReceiptService {
      */
     ResponseJson<Void> receiptAssociateRebate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
 
+    /**
+     * 确认收款-关联口头佣金
+     * crm:/api/user/rebate/verballyReceipt
+     *
+     * @param receiptOperateDto {
+     *                            verbalAmount: 口头返佣佣金
+     *                            shopOrderIds: 关联返佣子订单IDs
+     *                            rebateRemarks:关联返佣备注
+     *                            }
+     */
+    ResponseJson<Integer> associateVerbalRebate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
+
     /**
      * 审核收款信息
      *
@@ -193,4 +205,5 @@ public interface ReceiptService {
      * 微信收款信息推送(待审核超时)
      */
     void sendWechatMsgAuditTimeout();
+
 }

+ 74 - 7
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -1181,7 +1181,7 @@ public class ReceiptServiceImpl implements ReceiptService {
         } else {
             refundShop.setRefundType(6);
         }
-        receiptMapper.insertRefundShop(receiptPo);
+        receiptMapper.insertRefundShop(refundShop);
         //保存供应商退款记录
         RefundShopRecordPo refundShopRecord = new RefundShopRecordPo();
         refundShopRecord.setRefundShopId(refundShop.getId());
@@ -1212,7 +1212,6 @@ public class ReceiptServiceImpl implements ReceiptService {
             return ResponseJson.error("无权限操作!", null);
         }
         String[] shopOrderIdArr = receiptOperateDto.getShopOrderIds().split(",");
-
         List<Integer> shopIdList = receiptMapper.getShopIdList(shopOrderIdArr);
         if (shopIdList.size() > 1) {
             return ResponseJson.error("子订单不属于相同的供应商!", null);
@@ -1240,11 +1239,77 @@ public class ReceiptServiceImpl implements ReceiptService {
             receiptPo.setRebateRemarks(receiptOperateDto.getRebateRemarks());
         }
         receiptMapper.updateReceipt(receiptPo);
+        // 保存返佣收款关系和修改订单状态
+        saveRelationAndUpdateOrderStatus(shopOrderIdArr, receipt.getId());
+        return ResponseJson.success("关联返佣款成功!", null);
+    }
+
+    /**
+     * 确认收款-关联口头佣金
+     * crm:/api/user/rebate/verballyReceipt
+     *
+     * @param receiptOperateDto {
+     *                          verbalAmount: 口头返佣佣金
+     *                          shopOrderIds: 关联返佣子订单IDs
+     *                          rebateRemarks:关联返佣备注
+     *                          }
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public ResponseJson<Integer> associateVerbalRebate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
+        // 检查收款用户权限: 5收款关联返佣
+        ReceiptUserVo receiptUser = checkPermissions(5, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        String[] shopOrderIdArr = receiptOperateDto.getShopOrderIds().split(",");
+        List<Integer> shopIdList = receiptMapper.getShopIdList(shopOrderIdArr);
+        if (shopIdList.size() > 1) {
+            return ResponseJson.error("子订单不属于相同的供应商!", null);
+        }
+        String date = DateUtils.getDate("yyyy-MM-dd HH:mm:ss");
+        ReceiptPo receiptPo = new ReceiptPo();
+        receiptPo.setPayWay(2);
+        receiptPo.setDelFlag(0);
+        receiptPo.setPayType(10);
+        receiptPo.setReceiptType(3);
+        receiptPo.setReceiptStatus(2);
+        receiptPo.setReceiptAmount(receiptOperateDto.getVerbalAmount());
+        receiptPo.setConfirmUserPermissionId(receiptUser.getId());
+        receiptPo.setReceiptDate(date);
+        receiptPo.setConfirmDate(date);
+        receiptPo.setRebateRemarks(receiptOperateDto.getRebateRemarks());
+        // 保存收款记录
+        receiptMapper.insertReceipt(receiptPo);
+        // 保存返佣收款关系和修改订单状态
+        saveRelationAndUpdateOrderStatus(shopOrderIdArr, receiptPo.getId());
+        // 添加 返佣欠款记录
+        RebateRecordPo crr = new RebateRecordPo();
+        crr.setType(1);
+        crr.setShopId(shopIdList.get(0));
+        crr.setReceiptId(receiptPo.getId());
+        crr.setRebateAmount(receiptOperateDto.getVerbalAmount());
+        crr.setShopOrderId(receiptOperateDto.getShopOrderIds());
+        crr.setOperateTime(date);
+        receiptMapper.insertRebateRecord(crr);
+        // 更新供应商欠款金额
+        receiptMapper.updateShopRebateAmount(shopIdList.get(0),receiptOperateDto.getVerbalAmount());
+        //返回 款项Id
+        return ResponseJson.success("关联口头返佣款成功!", receiptPo.getId());
+    }
+
+
+    /**
+     * 保存返佣收款关系和修改订单状态
+     * @param shopOrderIdArr 子订单Ids
+     * @param receiptId 款项Id
+     */
+    private void saveRelationAndUpdateOrderStatus(String[] shopOrderIdArr, Integer receiptId) {
         for (String shopOrderId : shopOrderIdArr) {
             // 保存 收款项和订单关系
             OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
             relation.setOrderId(Integer.valueOf(shopOrderId));
-            relation.setReceiptId(receipt.getId());
+            relation.setReceiptId(receiptId);
             relation.setRelationType(1);
             relation.setAssociateAmount(0d);
             baseMapper.insertOrderReceiptRelation(relation);
@@ -1281,13 +1346,13 @@ public class ReceiptServiceImpl implements ReceiptService {
                     order.setStatus(Integer.valueOf("2" + order.getStatus().toString().charAt(1)));
                 }
             }
-            order.setUpdateDate(time);
+            order.setUpdateDate(DateUtils.getDateTime());
             // 更新订单收款状态
             payOrderMapper.updateOrderStatus(order);
         }
-        return ResponseJson.success("关联返佣款成功!", null);
     }
 
+
     /**
      * 审核收款信息
      *
@@ -1389,7 +1454,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                     }
                     // 更新订单收款状态
                     payOrderMapper.updateOrderStatus(order);
-                    log.info("-------------审核通过订单状态改变---orderID:" + order.getOrderId() + "--status:" + order.getStatus());
+                    log.info("-------------审核通过订单状态改变---orderId:" + order.getOrderId() + "--status:" + order.getStatus());
                     //判断是否有充值商品,充值到余额
                     Integer rechargeGoods = null;
                     //缴纳订金订单
@@ -1625,6 +1690,8 @@ public class ReceiptServiceImpl implements ReceiptService {
      * 设置订单的款项信息
      */
     private void setOrderAmountInfo(OrderVo order) {
+        String userName = baseMapper.getUserNameByUserId(order.getUserId());
+        order.setClubName(userName);
         order.setPaidAmount(getReceivedAmount(order, true));
         order.setStatusName(OrderStatus.getOrderStatusText(order.getStatus()));
         order.setUnCheckAmount(receiptMapper.getUncheckAmount(order.getOrderId()));
@@ -2019,7 +2086,7 @@ public class ReceiptServiceImpl implements ReceiptService {
         // 获取订单已退金额
         Double returnedAmount = receiptMapper.getReturnedAmount(order.getOrderId());
         // 经理折扣
-        Double discountFee = order.getDiscountFee();
+        Double discountFee = null != order.getDiscountFee() ? order.getDiscountFee() : 0d ;
         // 如果经理折扣大于退款(退货)总金额之和  那么先抵扣经理折扣  退款价值为0
         if (discountFee >= returnedAmount) {
             returnedAmount = 0d;

+ 2 - 0
src/main/resources/mapper/OrderCommonMapper.xml

@@ -307,6 +307,7 @@
         payTotalFee,
         payableAmount,
         balancePayFee,
+        discountFee,
         status,
         paySuccessCounter,
         confirmTime,
@@ -357,6 +358,7 @@
            co.payTotalFee,
            co.payableAmount,
            co.balancePayFee,
+           co.discountFee,
            co.status,
            co.paySuccessCounter,
            co.confirmTime,

+ 12 - 4
src/main/resources/mapper/ReceiptMapper.xml

@@ -136,6 +136,10 @@
     <update id="updateShopOrderPayStatus">
         UPDATE cm_shop_order SET payStatus = #{payStatus} WHERE shopOrderID = #{shopOrderId}
     </update>
+    <update id="updateShopRebateAmount">
+        UPDATE shop s SET s.rebateAmount = (IFNULL(s.rebateAmount, 0) + #{amount}), s.ableRebateAmount = (IFNULL(s.ableRebateAmount, 0) + #{amount})
+        WHERE s.shopID = #{shopId}
+    </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
@@ -834,14 +838,18 @@
         </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)
+    <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)
+    <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>
+    <insert id="insertRebateRecord" keyColumn="id" keyProperty="id" parameterType="com.caimei365.order.model.po.RebateRecordPo" useGeneratedKeys="true">
+        INSERT  INTO cm_rebate_record(type, shopId, receiptID, shopOrderId, rebateAmount, operatTime)
+        VALUES (#{type}, #{shopId}, #{receiptId}, #{shopOrderId}, #{rebateAmount}, #{operateTime})
+    </insert>
     <select id="getOrderReceiptRelationList" resultType="com.caimei365.order.model.po.OrderReceiptRelationPo">
         SELECT
         cror.id,