gongzuming
2024-09-19 a768dc3daa04d35fedfbe75c0a59b9b2545b85c4
src/main/java/com/mzl/flower/service/payment/BillService.java
@@ -42,6 +42,9 @@
    @Autowired
    private OrderItemSalesMapper orderItemSalesMapper;
    @Autowired
    private OrderItemSettlementMapper orderItemSettlementMapper;
    public Page<BillListDTO> selectBillList(Page page, BillQueryDTO dto){
        dto.setStart(parseLocalDate(dto.getStartDate()));
        dto.setEnd(parseLocalDate(dto.getEndDate()));
@@ -72,6 +75,7 @@
                r.setDeductAmount(r.getDeductAmount().add(b.getDeductAmount()));
                r.setSalesAmount(r.getSalesAmount().add(b.getSalesAmount()));
                r.setProfitAmount(r.getProfitAmount().add(b.getProfitAmount()));
                r.setMemberCouponAmount(r.getMemberCouponAmount().add(b.getMemberCouponAmount()));
            }
        }
@@ -136,24 +140,30 @@
        }
        //账单售后
        List<OrderItemSales> sLs = orderItemSalesMapper.selectList(new QueryWrapper<OrderItemSales>()
        /*List<OrderItemSales> sLs = orderItemSalesMapper.selectList(new QueryWrapper<OrderItemSales>()
                .in("order_id", orderIdsAll));*/
        List<OrderItemSettlement> sLs = orderItemSettlementMapper.selectList(new QueryWrapper<OrderItemSettlement>()
                .in("order_id", orderIdsAll));
        Map<String, BigDecimal> salesMap = new HashMap<>();
        Map<String, BigDecimal> deductMap = new HashMap<>();
        if(sLs != null && sLs.size() > 0){
            for(OrderItemSales s : sLs){//同一个订单的同一个商品可能会多次理赔
                prepareSalesAmount(s, null, null, salesMap);
            for(OrderItemSettlement s : sLs){//同一个订单的同一个商品可能会多次理赔
                salesMap.put(s.getOrderItemId(), s.getSalesFeePlatform());
                deductMap.put(s.getOrderItemId(), s.getLackFeePlatform());
            }
        }
        String type = Constants.BILL_TYPE.partner.name();//账单类型
        calculate(date, type, orderIdsPartner, orderMap, orderItemMap, salesMap);
        calculate(date, type, orderIdsPartner, orderMap, orderItemMap, salesMap, deductMap);
        type = Constants.BILL_TYPE.personal.name();//账单类型
        calculate(date, type, orderIdsPersonal, orderMap, orderItemMap, salesMap);
        calculate(date, type, orderIdsPersonal, orderMap, orderItemMap, salesMap, deductMap);
    }
    public Bill calculate(LocalDate date, String type, List<String> orderIds, Map<String, Order> orderMap
            , Map<String, List<OrderItem>> orderItemMap, Map<String, BigDecimal> salesMap){
            , Map<String, List<OrderItem>> orderItemMap, Map<String, BigDecimal> salesMap
            , Map<String, BigDecimal> deductMap){
        Bill bill = new Bill();
        bill.setId(UUIDGenerator.getUUID());
@@ -165,8 +175,9 @@
        BigDecimal markupOne = new BigDecimal(0);//区间加价
        BigDecimal markupTwo = new BigDecimal(0);//二次加价
        BigDecimal markupPartner = new BigDecimal(0);//合伙人加价
        BigDecimal deductAmount = new BigDecimal(0);//质检退款
        BigDecimal deductAmount = new BigDecimal(0);//质检退款(缺货)
        BigDecimal salesAmount = new BigDecimal(0);//售后退款
        BigDecimal memberCouponAmount = new BigDecimal(0);//优惠券金额
        for(String orderId : orderIds){
            Order o = orderMap.get(orderId);
            orderAmount = orderAmount.add(o.getTotalAmount());
@@ -176,14 +187,16 @@
            for(OrderItem oi : items){
                Integer n = oi.getNum();
                supplierAmount = supplierAmount.add(oi.getSupplierPrice().multiply(new BigDecimal(n)));
                markupOne = markupOne.add(oi.getMarkupOne().multiply(new BigDecimal(n)));
                markupTwo = markupTwo.add((oi.getMarkupTwo() == null ? new BigDecimal(0) : oi.getMarkupTwo()).multiply(new BigDecimal(n)));
                markupPartner = markupPartner.add((oi.getMarkupPartner() == null ? new BigDecimal(0) : oi.getMarkupPartner()).multiply(new BigDecimal(n)));
                deductAmount = deductAmount.add(oi.getDeductAmount() == null ? new BigDecimal(0) : oi.getDeductAmount());
                markupOne = markupOne.add(getAmount(oi.getMarkupOne()).multiply(new BigDecimal(n)));
                markupTwo = markupTwo.add(getAmount(oi.getMarkupTwo()).multiply(new BigDecimal(n)));
                markupPartner = markupPartner.add(getAmount(oi.getMarkupPartner()).multiply(new BigDecimal(n)));
                salesAmount = salesAmount.add(getAmount(salesMap.get(oi.getId())));
                deductAmount = deductAmount.add(getAmount(deductMap.get(oi.getId())));
                num += n;
            }
            BigDecimal ss = salesMap.get(orderId);
            salesAmount = salesAmount.add(ss == null ? new BigDecimal(0) : ss);
            memberCouponAmount = memberCouponAmount.add(getAmount(o.getMemberCouponAmount()));
            o.setBillId(bill.getId());
            orderMapper.updateById(o);
@@ -200,13 +213,15 @@
        bill.setMarkupPartner(markupPartner);
        bill.setDeductAmount(deductAmount);
        bill.setSalesAmount(salesAmount);
        bill.setMemberCouponAmount(memberCouponAmount);
        bill.setBillDate(date);
        //合伙人:利润=售价-底价(花农上架价格)-打包、运费(订单管理手输)-合伙人加价-平台罚款
        //散户:利润=售价-底价(花农上架价格)-运费-平台罚款
        //合伙人:利润=售价-底价(花农上架价格)-打包、运费(订单管理手输)-合伙人加价-平台罚款-质检(缺货)-优惠券
        //散户:利润=售价-底价(花农上架价格)-运费-平台罚款-质检(缺货)-优惠券
        //其实都一样的计算方式
        BigDecimal profitAmount = orderAmount.subtract(supplierAmount)
                .subtract(markupPartner).subtract(salesAmount).subtract(packingFee).subtract(transportFee);//利润合计
                .subtract(markupPartner).subtract(salesAmount).subtract(packingFee).subtract(transportFee)
                .subtract(deductAmount).subtract(memberCouponAmount);//利润合计
        bill.setProfitAmount(profitAmount);
        bill.create();