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