|  |  | 
 |  |  |     @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())); | 
 |  |  | 
 |  |  |                 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())); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //账单售后 | 
 |  |  |         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()); | 
 |  |  |  | 
 |  |  | 
 |  |  |         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()); | 
 |  |  | 
 |  |  |             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); | 
 |  |  | 
 |  |  |         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(); |