Explorar o código

返佣款-子订单列表

chao %!s(int64=3) %!d(string=hai) anos
pai
achega
5c58fbb72e

+ 57 - 40
src/main/java/com/caimei365/order/controller/ReceiptApi.java

@@ -138,6 +138,7 @@ public class ReceiptApi {
     /**
      * 获取收款列表
      * crm:/api/user/receivables/list
+     * 返佣款/api/user/rebate/list  或 (receiptType==3:/api/user/receivables/list)
      */
     @ApiOperation("获取收款列表")
     @ApiImplicitParams({
@@ -150,11 +151,7 @@ public class ReceiptApi {
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })
     @GetMapping("/list")
-    public ResponseJson<PageInfo<ReceiptVo>> getReceiptList(Integer receiptType,
-                                                            Integer receiptStatus,
-                                                            String smsContent,
-                                                            String startDate,
-                                                            String endDate,
+    public ResponseJson<PageInfo<ReceiptVo>> getReceiptList(Integer receiptType, Integer receiptStatus, String smsContent, String startDate, String endDate,
                                                             @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                             @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                                             @RequestHeader HttpHeaders headers) {
@@ -162,10 +159,10 @@ public class ReceiptApi {
     }
 
     /**
-     * 获取收款详情
+     * 收款详情(订单/非订单)
      * crm:/api/user/receivables/get
      */
-    @ApiOperation("获取收款详情")
+    @ApiOperation("收款详情(订单/非订单)")
     @ApiImplicitParam(required = true, name = "id", value = "款项Id")
     @GetMapping("/detail")
     public ResponseJson<ReceiptVo> getReceiptDetail(Integer id, @RequestHeader HttpHeaders headers) {
@@ -173,11 +170,33 @@ public class ReceiptApi {
     }
 
     /**
-     * 获取收款订单列表
+     * 收款详情(供应商退款)
+     * crm:/api/user/shop/shopRefund
+     */
+    @ApiOperation("收款详情(供应商退款)")
+    @ApiImplicitParam(required = true, name = "id", value = "款项Id")
+    @GetMapping("/refund")
+    public ResponseJson<ReceiptVo> getReceiptRefundDetail(Integer id, @RequestHeader HttpHeaders headers) {
+        return receiptService.getReceiptRefundDetail(id, headers);
+    }
+
+    /**
+     * 收款详情(返佣款)
+     * crm:/api/user/rebate/rebateDetail
+     */
+    @ApiOperation("收款详情(返佣款)")
+    @ApiImplicitParam(required = true, name = "id", value = "款项Id")
+    @GetMapping("/rebate")
+    public ResponseJson<ReceiptVo> getReceiptRebateDetail(Integer id, @RequestHeader HttpHeaders headers) {
+        return receiptService.getReceiptRebateDetail(id, headers);
+    }
+
+    /**
+     * 收款详情-订单列表
      * crm:/api/user/receivables/getOrderList
      * crm:/api/user/receivables/getMoneyOrderList
      */
-    @ApiOperation("获取收款订单列表")
+    @ApiOperation("收款详情-订单列表")
     @ApiImplicitParams({
             @ApiImplicitParam(required = false, name = "id", value = "收款ID"),
             @ApiImplicitParam(required = false, name = "type", value = "类型:0商品订单(默认),1订金订单"),
@@ -187,12 +206,8 @@ public class ReceiptApi {
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })
-    @GetMapping("/orders")
-    public ResponseJson<PageInfo<OrderVo>> getReceiptOrderList(Integer id,
-                                                               Integer type,
-                                                               Integer organizeId,
-                                                               String orderReceiptStatus,
-                                                               String keyword,
+    @GetMapping("/detail/orders")
+    public ResponseJson<PageInfo<OrderVo>> getReceiptOrderList(Integer id, Integer type, Integer organizeId, String orderReceiptStatus, String keyword,
                                                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                                @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                                                @RequestHeader HttpHeaders headers) {
@@ -200,34 +215,23 @@ public class ReceiptApi {
     }
 
     /**
-     * 获取收款订单详情
+     * 收款详情-订单详情
      * crm:/api/user/receivables/orderDetail
      */
-    @ApiOperation("获取收款订单详情")
+    @ApiOperation("收款详情-订单详情")
     @ApiImplicitParam(required = false, name = "orderId", value = "订单ID")
-    @GetMapping("/orders/info")
+    @GetMapping("/detail/orders/info")
     public ResponseJson<OrderVo> getReceiptOrderInfo(Integer orderId, @RequestHeader HttpHeaders headers) {
         return receiptService.getReceiptOrderInfo(orderId, headers);
     }
 
-    /**
-     * 供应商退款-详情
-     * crm:/api/user/shop/shopRefund
-     */
-    @ApiOperation("供应商退款-详情")
-    @ApiImplicitParam(required = true, name = "id", value = "款项Id")
-    @GetMapping("/refund")
-    public ResponseJson<ReceiptVo> getReceiptRefundDetail(Integer id, @RequestHeader HttpHeaders headers) {
-        return receiptService.getReceiptRefundDetail(id, headers);
-    }
-
     /**
      * 供应商退款-子订单列表
      * crm:/api/user/shop/refundShopOrder
      */
     @ApiOperation("供应商退款-子订单列表")
     @ApiImplicitParams({
-            @ApiImplicitParam(required = false, name = "id", value = "返佣收款ID"),
+            @ApiImplicitParam(required = false, name = "id", value = "收款ID"),
             @ApiImplicitParam(required = false, name = "confirmedType", value = "0待确认,2已确认子订单"),
             @ApiImplicitParam(required = false, name = "shopName", value = "供应商名称"),
             @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键词(客户名称/订单号)"),
@@ -235,10 +239,7 @@ public class ReceiptApi {
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })
     @GetMapping("/refund/orders")
-    public ResponseJson<PageInfo<ShopOrderVo>> getRefundShopOrderList(Integer id,
-                                                                      Integer confirmedType,
-                                                                      String shopName,
-                                                                      String keyword,
+    public ResponseJson<PageInfo<ShopOrderVo>> getRefundShopOrderList(Integer id, Integer confirmedType, String shopName, String keyword,
                                                                       @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                                       @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                                                       @RequestHeader HttpHeaders headers) {
@@ -246,16 +247,35 @@ public class ReceiptApi {
     }
 
     /**
-     * 供应商退款详情
+     * 供应商退款-订单详情
      * crm:/api/user/rebate/orderInfo
      */
-    @ApiOperation("供应商退款详情")
+    @ApiOperation("供应商退款-订单详情")
     @ApiImplicitParam(required = false, name = "orderId", value = "订单ID")
-    @GetMapping("/refunds/info")
+    @GetMapping("/refund/orders/info")
     public ResponseJson<OrderVo> getRefundShopOrderInfo(Integer orderId, @RequestHeader HttpHeaders headers) {
         return receiptService.getRefundShopOrderInfo(orderId, headers);
     }
 
+    /**
+     * 返佣款-子订单列表
+     * crm:/api/user/rebate/rebateShopOrder
+     */
+    @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("/rebate/orders")
+    public ResponseJson<PageInfo<ShopOrderVo>> getRebateShopOrderList(Integer id, String shopName,
+                                                                      @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                      @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
+                                                                      @RequestHeader HttpHeaders headers) {
+        return receiptService.getRebateShopOrderList(id, shopName, pageNum, pageSize, headers);
+    }
+
     /**
      * 确认收款-关联收款信息
      * crm:/api/user/receivables/confirmReceipt
@@ -277,9 +297,6 @@ public class ReceiptApi {
     }
 
 
-    // 收款列表-返佣款/api/user/rebate/list    (receiptType==3:/api/user/receivables/list)
-    // 返佣款详情/api/user/rebate/rebateDetail
-        // 返佣款详情-子订单列表 /api/user/rebate/rebateShopOrder
     // 返佣关联/api/user/rebate/relation
 
 }

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

@@ -125,6 +125,10 @@ public interface ReceiptMapper {
      * 搜索子订单进行关联
      */
     List<ShopOrderVo> getRefundShopOrders(Integer confirmedType, String shopName, String userName, Integer orderId);
+    /**
+     * 返佣款-子订单列表
+     */
+    List<ShopOrderVo> getRebateShopOrders(String shopName);
     /**
      * 返佣订单付款总金额
      */
@@ -141,4 +145,5 @@ public interface ReceiptMapper {
      * 子订单付款类型列表
      */
     List<Integer> getRebatePayTypeList(Integer shopOrderId);
+
 }

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

@@ -147,6 +147,10 @@ public class ShopOrderVo implements Serializable {
      * 订单能否拆分 1 为可拆分, 0为不可拆分
      */
     private Integer splitFlag;
+    /**
+     * 付第三方
+     */
+    private Double shopOtherFee;
     /**
      * 子订单店铺促销活动
      */

+ 22 - 6
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -78,19 +78,24 @@ public interface ReceiptService {
     ResponseJson<PageInfo<ReceiptVo>> getReceiptList(Integer receiptType, Integer receiptStatus, String smsContent, String startDate, String endDate, int pageNum, int pageSize, HttpHeaders headers);
 
     /**
-     * 获取收款详情
+     * 收款详情(订单/非订单)
      *
      * @param id 款项Id
      */
     ResponseJson<ReceiptVo> getReceiptDetail(Integer id, HttpHeaders headers);
 
     /**
-     * 供应商退款-详情
+     * 收款详情(供应商退款)
      */
     ResponseJson<ReceiptVo> getReceiptRefundDetail(Integer id, HttpHeaders headers);
 
     /**
-     * 获取收款商品订单列表
+     * 收款详情(返佣款)
+     */
+    ResponseJson<ReceiptVo> getReceiptRebateDetail(Integer id, HttpHeaders headers);
+
+    /**
+     * 收款详情-订单列表
      *
      * @param id                 收款ID
      * @param organizeId         组织ID
@@ -102,14 +107,15 @@ public interface ReceiptService {
     ResponseJson<PageInfo<OrderVo>> getReceiptOrderList(Integer id, Integer type, Integer organizeId, String orderReceiptStatus, String keyword, int pageNum, int pageSize, HttpHeaders headers);
 
     /**
-     * 获取收款订单详情
+     * 收款详情-订单详情
      *
      * @param orderId 订单Id
      */
     ResponseJson<OrderVo> getReceiptOrderInfo(Integer orderId, HttpHeaders headers);
 
     /**
-     * @param id            返佣收款ID
+     * 供应商退款-子订单列表
+     * @param id            收款ID
      * @param confirmedType 0待确认,2已确认子订单
      * @param shopName      供应商名称
      * @param keyword       搜索关键词(客户名称/订单号)
@@ -119,12 +125,22 @@ public interface ReceiptService {
     ResponseJson<PageInfo<ShopOrderVo>> getRefundShopOrderList(Integer id, Integer confirmedType, String shopName, String keyword, int pageNum, int pageSize, HttpHeaders headers);
 
     /**
-     * 供应商退款详情
+     * 供应商退款-订单详情
      *
      * @param orderId 订单Id
      */
     ResponseJson<OrderVo> getRefundShopOrderInfo(Integer orderId, HttpHeaders headers);
 
+    /**
+     * 返佣款-子订单列表
+     * @param id 返佣收款ID
+     * @param shopName 供应商名称
+     * @param pageNum       页码
+     * @param pageSize      每页数量
+     */
+    ResponseJson<PageInfo<ShopOrderVo>> getRebateShopOrderList(Integer id, String shopName, int pageNum, int pageSize, HttpHeaders headers);
+
+
     /**
      * 关联收款信息
      */

+ 86 - 9
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -35,6 +35,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -521,7 +522,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * 获取收款详情
+     * 收款详情(订单/非订单)
      *
      * @param id     款项Id
      */
@@ -569,7 +570,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * 供应商退款-详情
+     * 收款详情(供应商退款)
      */
     @Override
     public ResponseJson<ReceiptVo> getReceiptRefundDetail(Integer id, HttpHeaders headers) {
@@ -583,7 +584,21 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * 获取收款商品订单列表
+     * 收款详情(返佣款)
+     */
+    @Override
+    public ResponseJson<ReceiptVo> getReceiptRebateDetail(Integer id, HttpHeaders headers) {
+        // 检查收款用户权限
+        ReceiptUserVo receiptUser = checkPermissions(4, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(id);
+        return ResponseJson.success(receipt);
+    }
+
+    /**
+     * 收款详情-订单列表
      *
      * @param id                 收款ID
      * @param organizeId         组织ID
@@ -688,7 +703,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * 获取收款订单详情
+     * 收款详情-订单详情
      *
      * @param orderId 订单Id
      */
@@ -726,7 +741,8 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * @param id            返佣收款ID
+     * 供应商退款-子订单列表
+     * @param id            收款ID
      * @param confirmedType 0待确认,2已确认子订单
      * @param shopName      供应商名称
      * @param keyword       搜索关键词(客户名称/订单号)
@@ -773,7 +789,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     }
 
     /**
-     * 供应商退款详情
+     * 供应商退款-订单详情
      *
      * @param orderId 订单Id
      */
@@ -831,6 +847,41 @@ public class ReceiptServiceImpl implements ReceiptService {
         return ResponseJson.success(order);
     }
 
+    /**
+     * 返佣款-子订单列表
+     *
+     * @param id       返佣收款ID
+     * @param shopName 供应商名称
+     * @param pageNum  页码
+     * @param pageSize 每页数量
+     */
+    @Override
+    public ResponseJson<PageInfo<ShopOrderVo>> getRebateShopOrderList(Integer id, String shopName, int pageNum, int pageSize, HttpHeaders headers) {
+        // 检查收款用户权限
+        ReceiptUserVo receiptUser = checkPermissions(4, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        List<ShopOrderVo> shopOrderList = new ArrayList<>();
+        PageHelper.startPage(pageNum, pageSize);
+        if (id != null) {
+            // 已关联子订单,展示关联信息
+            shopOrderList = receiptMapper.getShopOrderListByReceiptId(id);
+            for (ShopOrderVo shopOrder : shopOrderList) {
+                setReceiptedAmount(shopOrder);
+            }
+        } else {
+            //没有关联子订单,根据shopName搜索子订单进行关联
+            //这里的子订单  必须满足 它的主订单只进行过返佣收款或者主订单根本没有收过款
+            shopOrderList = receiptMapper.getRebateShopOrders(shopName);
+            for (ShopOrderVo shopOrder : shopOrderList) {
+                setReceiptedAmount(shopOrder);
+            }
+        }
+        PageInfo<ShopOrderVo> pageInfo = new PageInfo(shopOrderList);
+        return ResponseJson.success(pageInfo);
+    }
+
     /**
      * 关联收款信息
      */
@@ -1080,11 +1131,37 @@ public class ReceiptServiceImpl implements ReceiptService {
         OrderVo order = orderCommonMapper.getOrderByOrderId(shopOrder.getOrderId());
         if (null != order.getRebateFlag() && 1 == order.getRebateFlag()) {
             // 返佣订单
-            double associateAmount = receiptMapper.countAllPayAssociateAmount(order.getOrderId());
-            order.setReceiptAmount(associateAmount);
-        } else {
             double needPayAmount = receiptMapper.countNeedPayAmount(order.getOrderId());
             order.setReceiptAmount(needPayAmount);
+            // 佣金计算
+            BigDecimal brokerage = BigDecimal.ZERO;
+            List<OrderProductVo> orderProductList = orderCommonMapper.getShopOrderProduct(shopOrder.getShopOrderId());
+            orderProductList.removeIf(Objects::isNull);
+            for (OrderProductVo orderProduct : orderProductList){
+                // 已退货数量
+                Integer returnedNum = orderCommonMapper.countReturnedNum(orderProduct.getShopOrderId(), orderProduct.getProductId());
+                returnedNum = null != returnedNum ? returnedNum : 0;
+                // 赠品数量
+                int presentNum = orderProduct.getPresentNum() == null ? 0 : orderProduct.getPresentNum();
+                // 折后单价
+                double discountPrice = orderProduct.getDiscountPrice() == null ? 0d : orderProduct.getDiscountPrice();
+                // 单个税费
+                double tax = orderProduct.getAddedValueTax() == null ? 0d : orderProduct.getAddedValueTax();
+                // 成本
+                double costPrice = orderProduct.getCostPrice() == null ? 0d : orderProduct.getCostPrice();
+                // 单个付供应商税费
+                double costTax = orderProduct.getSingleShouldPayTotalTax() == null ? 0d : orderProduct.getSingleShouldPayTotalTax();
+                // (num + presentNum - returnedNum) * ((discountPrice + tax) - (costPrice + costTax));
+                int num = orderProduct.getNum() + presentNum - returnedNum;
+                BigDecimal price = MathUtil.sub(MathUtil.add(discountPrice, tax), MathUtil.add(costPrice, costTax));
+                brokerage = MathUtil.add(brokerage, MathUtil.mul(price, num));
+            }
+            BigDecimal otherFee = MathUtil.add(order.getDiscountFee(), MathUtil.add(shopOrder.getShopOtherFee(), shopOrder.getShopPostFee()));
+            brokerage = MathUtil.sub(brokerage, otherFee);
+            shopOrder.setBrokerage(brokerage.doubleValue());
+        } else {
+            double associateAmount = receiptMapper.countAllPayAssociateAmount(order.getOrderId());
+            order.setReceiptAmount(associateAmount);
         }
         shopOrder.setMainOrder(order);
     }

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

@@ -608,6 +608,7 @@
             cso.payStatus,
             cso.sendOutStatus,
             cso.splitFlag,
+            cso.shopOtherFee,
             s.name AS shopName
         FROM cm_receipt_order_relation cror
             LEFT JOIN cm_shop_order cso ON  cso.shopOrderID = cror.orderID
@@ -643,6 +644,7 @@
         cso.payStatus,
         cso.sendOutStatus,
         cso.splitFlag,
+        cso.shopOtherFee,
         s.name AS shopName,
         IFNULL((SELECT SUM(refundAmount) FROM cm_refund_shop_record WHERE shopOrderID = cso.shopOrderID AND delFlag = 0), 0) AS shopRefundAmount
         FROM cm_shop_order cso
@@ -670,6 +672,61 @@
         </if>
         ORDER BY cso.orderTime DESC
     </select>
+    <select id="getRebateShopOrders" 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,
+        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_order co ON co.orderID = cso.orderID
+        <where>
+            <if test="shopName != null and shopName != ''">
+                AND s.name LIKE CONCAT('%', #{shopName}, '%')
+            </if>
+            AND cso.delFlag = '0'
+            AND co.delFlag = '0'
+            AND cso.shopOrderID NOT IN (
+                SELECT DISTINCT cror.orderID FROM cm_receipt_order_relation cror LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+                WHERE cror.delFlag = '0' AND cror.relationType = '1' AND cdr.receiptStatus = '2' AND cror.orderID IS NOT NULL
+                )
+            AND cso.orderID NOT IN (
+                SELECT DISTINCT cror.orderID FROM cm_receipt_order_relation cror
+                WHERE cror.delFlag = '0' AND cror.relationType = '2'  AND cror.orderID IS NOT NULL
+                )
+            AND co.receiptStatus != '3'
+            AND co.rebateFlag = 1
+        </where>
+        ORDER BY cso.shopOrderID DESC
+    </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