|  |  |  | 
|---|
|  |  |  | @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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 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(); | 
|---|