Browse Source

服务费关联

zhijiezhao 1 year ago
parent
commit
a017aee6c6

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

@@ -323,6 +323,24 @@ public class ReceiptApi {
         return receiptService.getRebateShopOrderList(id, shopName, pageNum, pageSize, headers);
     }
 
+    /**
+     * 返佣款-平台服务费
+     */
+    @ApiOperation("平台服务费-子订单列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "id", value = "返佣收款ID"),
+            @ApiImplicitParam(required = false, name = "shopName", value = "供应商名称"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/platform/orders")
+    public ResponseJson<PageInfo<ShopOrderVo>> getPlatformOrder(Integer id, String shopName,
+                                                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
+                                                                @RequestHeader HttpHeaders headers) {
+        return receiptService.getPlatformOrder(id, shopName, pageNum, pageSize, headers);
+    }
+
     @ApiOperation("确认收款-平台服务费")
     @PostMapping("/confirm/platform")
     public ResponseJson<Void> receiptPlatformFee(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
@@ -332,19 +350,19 @@ public class ReceiptApi {
         if (null == receiptOperateDto.getShopOrderId() || receiptOperateDto.getShopOrderId() <= 0) {
             return ResponseJson.error("关联平台服务费子订单ID不能为空", null);
         }
-        return receiptService.receiptPlatformFee(receiptOperateDto, headers, 1);
+        return receiptService.receiptPlatformFee(receiptOperateDto, headers);
     }
 
     @ApiOperation("确认收款-平台服务费欠款")
     @PostMapping("/confirm/bill")
     public ResponseJson<Void> receiptPlatformBill(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
-        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
-            return ResponseJson.error("收款Id不能为空", null);
+        if (null == receiptOperateDto.getVerbalAmount()) {
+            return ResponseJson.error("平台服务费欠款参数异常", null);
         }
-        if (null == receiptOperateDto.getShopOrderId() || receiptOperateDto.getShopOrderId() <= 0) {
-            return ResponseJson.error("关联平台服务费欠款子订单ID不能为空", null);
+        if (null == receiptOperateDto.getShopOrderId()) {
+            return ResponseJson.error("关联返佣子订单ID不能为空", null);
         }
-        return receiptService.receiptPlatformFee(receiptOperateDto, headers, 2);
+        return receiptService.receiptPlatformBill(receiptOperateDto, headers);
     }
 
     /**
@@ -480,11 +498,5 @@ public class ReceiptApi {
         return receiptService.ReceiptDetail(keyWord, pageNum, pageSize);
     }
 
-//    @ApiOperation("认证通会员-非返佣订单信息")
-//    @GetMapping("/shoporders")
-//    public ResponseJson<List<ShopOrderVo>> ReceiptDetails(String keyWord) {
-//
-//        return receiptService.ReceiptDetails(keyWord);
-//    }
 }
 

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

@@ -302,4 +302,8 @@ public interface ReceiptMapper {
     Double findCmCost(Integer shopOrderId);
 
     void updateReceiptStatus(Integer shopOrderId);
+
+    List<ShopOrderVo> getPlatformOrderByReceiptId(Integer id);
+
+    List<ShopOrderVo> getPlatformOrderByName(String shopName);
 }

+ 2 - 1
src/main/java/com/caimei365/order/model/dto/ReceiptDto.java

@@ -37,7 +37,8 @@ public class ReceiptDto implements Serializable {
     @ApiModelProperty("付款方式")
     private Integer payWay;
     /**
-     * 付款类型: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网银
+     * 付款类型: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网银
      */
     @ApiModelProperty("付款类型")
     private Integer payType;

+ 5 - 1
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -224,5 +224,9 @@ public interface ReceiptService {
      */
     void sendWechatMsgAuditTimeout(String accessToken);
 
-    ResponseJson<Void> receiptPlatformFee(ReceiptOperateDto receiptOperateDto, HttpHeaders headers, Integer flag);
+    ResponseJson<Void> receiptPlatformFee(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
+
+    ResponseJson<Void> receiptPlatformBill(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
+
+    ResponseJson<PageInfo<ShopOrderVo>> getPlatformOrder(Integer id, String shopName, int pageNum, int pageSize, HttpHeaders headers);
 }

+ 82 - 20
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -176,6 +176,9 @@ public class ReceiptServiceImpl implements ReceiptService {
             // 供应商退款tab
             tabMenus.add(5);
         }
+        if (permissions.contains(20)) {
+            tabMenus.add(10);
+        }
         receiptUser.setTabMenus(tabMenus);
     }
 
@@ -2050,11 +2053,10 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * @param receiptOperateDto
      * @param headers
-     * @param flag              1 平台服务费 2平台服务费欠款
      * @return
      */
     @Override
-    public ResponseJson<Void> receiptPlatformFee(ReceiptOperateDto receiptOperateDto, HttpHeaders headers, Integer flag) {
+    public ResponseJson<Void> receiptPlatformFee(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
         // 检查收款用户权限: 20关联平台服务费
         ReceiptUserVo receiptUser = checkPermissions(20, headers);
         if (null == receiptUser) {
@@ -2078,9 +2080,6 @@ public class ReceiptServiceImpl implements ReceiptService {
         String time = DateUtils.getDateTime();
         ReceiptPo receiptPo = new ReceiptPo();
         BeanUtils.copyProperties(receipt, receiptPo);
-        if (2 == flag) {
-            receiptPo.setPayType(32);
-        }
         receiptPo.setUpdateDate(time);
         receiptPo.setReceiptType(10);
         receiptPo.setReceiptStatus(2);
@@ -2094,11 +2093,87 @@ public class ReceiptServiceImpl implements ReceiptService {
          *      相当于是机构通过商城付了款,然后供应商才给采美付了平台服务费
          * (2)生成订单收款记录后,将子订单的收款状态置为已收款
          */
-        savePlatformFee(receiptOperateDto.getShopOrderId(), receiptPo.getId(), receiptUser.getId(), cmCost, flag);
+        savePlatformFee(receiptOperateDto.getShopOrderId(), receiptPo.getId(), receiptUser.getId(), cmCost);
         return ResponseJson.success("关联平台服务费成功!", null);
     }
 
-    private void savePlatformFee(Integer shopOrderId, Integer id, Integer receiptUserId, Double cmCost, Integer flag) {
+    @Override
+    public ResponseJson<Void> receiptPlatformBill(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
+        // 检查收款用户权限: 20关联平台服务费
+        ReceiptUserVo receiptUser = checkPermissions(20, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        // 检查关联金额是否与子订单平台服务费相等,不相等 收款金额与子订单平台服务费不相等,不能关联!
+        Double cmCost = receiptMapper.findCmCost(receiptOperateDto.getShopOrderId());
+        if (0 != MathUtil.compare(cmCost, receiptOperateDto.getVerbalAmount())) {
+            return ResponseJson.error("收款金额与子订单平台服务费欠款不相等,不能关联!", null);
+        }
+        ShopOrderVo shopOrderById = receiptMapper.getShopOrderById(receiptOperateDto.getShopOrderId());
+        // 欠款录入直接生成收款数据
+        ReceiptPo receiptPo = new ReceiptPo();
+        receiptPo.setPayWay(2);
+        receiptPo.setDelFlag(0);
+        receiptPo.setReceiptDate(DateUtils.getDateTime());
+        receiptPo.setConfirmDate(DateUtils.getDateTime());
+        receiptPo.setPayType(32);
+        receiptPo.setReceiptType(10);
+        receiptPo.setReceiptStatus(3);
+        receiptPo.setConfirmDate(DateUtils.getDateTime());
+        receiptPo.setConfirmUserPermissionId(receiptUser.getId());
+        receiptPo.setReceiptUserPermissionId(receiptUser.getId());
+        receiptPo.setReviewUserPermissionId(receiptUser.getId());
+        receiptPo.setReceiptAmount(cmCost);
+        receiptPo.setRebateRemarks("关联服务费欠款");
+        receiptMapper.insertReceipt(receiptPo);
+        savePlatformFee(shopOrderById.getShopOrderId(), receiptPo.getId(), receiptUser.getId(), cmCost);
+        // 当关联欠款时,造一条欠款记录
+        RebateRecordPo crr = new RebateRecordPo();
+        crr.setType(4);
+        crr.setShopId(shopOrderById.getShopId());
+        crr.setReceiptId(receiptUser.getId());
+        crr.setRebateAmount(cmCost);
+        crr.setShopOrderId(shopOrderById.getShopOrderId().toString());
+        crr.setOperateTime(DateUtils.getTime());
+        receiptMapper.insertRebateRecord(crr);
+        // 修改该供应商的欠款金额
+        receiptMapper.updateShopRebateAmount(shopOrderById.getShopId(), cmCost);
+        return ResponseJson.success("关联平台服务费欠款成功!", null);
+    }
+
+    @Override
+    public ResponseJson<PageInfo<ShopOrderVo>> getPlatformOrder(Integer id, String shopName, int pageNum, int pageSize, HttpHeaders headers) {
+        // 检查收款用户权限:20
+        ReceiptUserVo receiptUser = checkPermissions(20, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        /** 1.2.3无视
+         * (1)来自采美平台且供应商线下收款账号归属于供应商的子订单
+         * (2)来自采美平台且供应商线下收款账号归属于采美的子订单
+         * (3)不限子订单的收款状态
+         * (4)排除线上支付订单
+         */
+        List<ShopOrderVo> shopOrderList;
+        PageHelper.startPage(pageNum, pageSize);
+        if (id != null && id > 0) {
+            // 已关联子订单,展示关联信息
+            shopOrderList = receiptMapper.getPlatformOrderByReceiptId(id);
+            for (ShopOrderVo shopOrder : shopOrderList) {
+                setReceiptedAmount(shopOrder);
+            }
+        } else {
+            // shopName或者是shopOrderId
+            shopOrderList = receiptMapper.getPlatformOrderByName(shopName);
+            for (ShopOrderVo shopOrder : shopOrderList) {
+                setReceiptedAmount(shopOrder);
+            }
+        }
+        PageInfo<ShopOrderVo> pageInfo = new PageInfo(shopOrderList);
+        return ResponseJson.success(pageInfo);
+    }
+
+    private void savePlatformFee(Integer shopOrderId, Integer id, Integer receiptUserId, Double cmCost) {
         // 检查子订单状态是否为未收款
         ShopOrderVo shopOrderById = receiptMapper.getShopOrderById(shopOrderId);
         OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
@@ -2133,19 +2208,6 @@ public class ReceiptServiceImpl implements ReceiptService {
             // 修改订单状态为已付款
             receiptMapper.updateReceiptStatus(shopOrderId);
         }
-        if (2 == flag) {
-            // 当关联欠款时,造一条欠款记录
-            RebateRecordPo crr = new RebateRecordPo();
-            crr.setType(4);
-            crr.setShopId(shopOrderById.getShopId());
-            crr.setReceiptId(id);
-            crr.setRebateAmount(cmCost);
-            crr.setShopOrderId(shopOrderId.toString());
-            crr.setOperateTime(DateUtils.getTime());
-            receiptMapper.insertRebateRecord(crr);
-            // 修改该供应商的欠款金额
-            receiptMapper.updateShopRebateAmount(shopOrderById.getShopId(), cmCost);
-        }
     }
 
     /**

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

@@ -1216,4 +1216,101 @@
         from cm_order_product
         where shopOrderID = #{shopOrderId}
     </select>
+
+    <select id="getPlatformOrderByReceiptId" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+        SELECT DISTINCT cso.shopOrderId                   AS shopOrderId,
+                        cso.shopOrderNo,
+                        cso.orderID                       AS orderId,
+                        cso.orderNo,
+                        cso.shopID                        AS shopId,
+                        cso.note,
+                        cso.userID                        AS userId,
+                        cso.clubID                        AS clubId,
+                        cso.spID                          AS spId,
+                        cso.orderPromotionsId,
+                        cso.promotionFullReduction,
+                        cso.brokerage,
+                        cso.canRefundAmount,
+                        cso.itemCount,
+                        cso.totalAmount,
+                        cso.productAmount,
+                        cso.needPayAmount,
+                        cso.shopProductAmount,
+                        cso.shopPostFee,
+                        cso.shopTaxFee,
+                        cso.shouldPayShopAmount,
+                        cso.payedShopAmount,
+                        cso.orderTime,
+                        cso.orderSubmitType,
+                        cso.payStatus,
+                        cso.sendOutStatus,
+                        cso.splitFlag,
+                        cso.shopOtherFee,
+                        s.name                            AS shopName,
+                        ifnull(co.secondHandOrderFlag, 0) as secondHandOrderFlag,
+                        IFNULL((SELECT SUM(refundAmount)
+                                FROM cm_refund_shop_record
+                                WHERE shopOrderID = cso.shopOrderID
+                                  AND delFlag = 0), 0)    AS shopRefundAmount
+        FROM cm_receipt_order_relation cror
+        LEFT JOIN cm_shop_order cso ON cso.shopOrderID = cror.orderID
+        left join cm_discern_receipt cdr on cror.receiptID = cdr.id
+        LEFT JOIN shop s ON s.shopID = cso.shopID
+        LEFT JOIN cm_order co on co.orderID = cso.orderID
+        WHERE cror.delFlag = '0'
+          and cso.organizeID = 0
+          and cdr.payWay != 1
+          AND cror.receiptID = #{receiptId}
+    </select>
+
+    <select id="getPlatformOrderByName" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+        SELECT DISTINCT
+        cso.shopOrderId AS shopOrderId,
+        cso.shopOrderNo,
+        cso.orderID AS orderId,
+        cso.orderNo,
+        cso.shopID AS shopId,
+        cso.note,
+        cso.userID AS userId,
+        cso.clubID AS clubId,
+        cso.spID AS spId,
+        cso.orderPromotionsId,
+        cso.promotionFullReduction,
+        cso.brokerage,
+        cso.canRefundAmount,
+        cso.itemCount,
+        cso.totalAmount,
+        cso.productAmount,
+        cso.needPayAmount,
+        cso.shopProductAmount,
+        cso.shopPostFee,
+        cso.shopTaxFee,
+        cso.shouldPayShopAmount,
+        cso.payedShopAmount,
+        cso.orderTime,
+        cso.orderSubmitType,
+        cso.payStatus,
+        ifnull(cso.sendOutStatus, 1) as sendOutStatus,
+        ifnull(cso.receiptStatus, 1) as receiptStatus,
+        cso.splitFlag,
+        cso.shopOtherFee,
+        s.name AS shopName,
+        IF((SELECT (crpp.id) FROM cm_returned_purchase_product crpp LEFT JOIN cm_returned_purchase crp ON crp.id =
+        crpp.returnedID
+        WHERE crpp.shopOrderID = cso.shopOrderID AND crp.status = '1' AND crp.delFlag = 0 LIMIT 1) > 0, 1, 0) AS
+        haveReturning
+        FROM cm_shop_order cso
+        LEFT JOIN shop s ON s.shopID = cso.shopID
+        LEFT JOIN cm_receipt_order_relation cror ON cso.shopOrderId = cror.shopOrderId
+        LEFT JOIN cm_discern_receipt cdr ON cdr.id = cror.receiptId
+        <where>
+            <if test="shopName != null and shopName != ''">
+                AND (s.name LIKE CONCAT('%', #{shopName}, '%') or cso.shopOrderId = #{shopName})
+            </if>
+            AND cso.delFlag = '0'
+            and cso.organizeID = 0
+            and cdr.payWay != 1
+        </where>
+        ORDER BY cso.shopOrderID DESC
+    </select>
 </mapper>