From 118623071a97b66f21c29e2bc02b8f15855ede5d Mon Sep 17 00:00:00 2001 From: Cui Zhi Feng <cuizf@fengyuntec.com> Date: 星期三, 25 九月 2024 19:54:11 +0800 Subject: [PATCH] 均价计算 优化 --- src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java | 99 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 86 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java index 055edd1..f921a0d 100644 --- a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java @@ -120,7 +120,14 @@ public Page<DeliveryOrderListDTO> selectDeliveryOrderList(Page page, DeliveryOrderQueryDTO dto) { Supplier s = getCurrentSupplier(); - dto.setStatusList(splitParam(dto.getStatus())); + if(Constants.DELIVERY_ORDER_STATUS.ARRIVED.name().equals(dto.getStatus())){ + List<String> statusLs = new ArrayList<>(); + statusLs.add(Constants.DELIVERY_ORDER_STATUS.ARRIVED.name()); + statusLs.add(Constants.DELIVERY_ORDER_STATUS.CHECKED.name()); + dto.setStatusList(statusLs); + } else { + dto.setStatusList(splitParam(dto.getStatus())); + } List<DeliveryOrderListDTO> ls = deliveryOrderMapper.selectDoList(page, s.getId(), dto); if (ls != null && ls.size() > 0) { List<String> dIds = new ArrayList<>(); @@ -238,6 +245,18 @@ return deliveryOrderItemMapper.selectDoItemList(id); } + public List<DeliveryOrderItemDTO> getSupplierDeliveryOrderItems(PostQueryDTO dto){ + List<String> idList = dto.getIds(); + List<DeliveryOrderItemDTO> ls = new ArrayList<>(); + if(idList != null && idList.size() > 0){ + for(String id : idList){ + ls.add(getSupplierDeliveryOrderItem(id)); + } + } + + return ls; + } + public DeliveryOrderItemDTO getSupplierDeliveryOrderItem(String id) { DeliveryOrderItemDTO dto = new DeliveryOrderItemDTO(); @@ -262,7 +281,21 @@ dto.setParams(parseArray(oi.getFlowerParams(), ParamItemDTO.class)); + dto.setNum(oi.getNum()); + return dto; + } + + public List<DeliveryOrderItemDTO> getDeliveryOrderItems(PostQueryDTO dto){ + List<String> idList = dto.getIds(); + List<DeliveryOrderItemDTO> ls = new ArrayList<>(); + if(idList != null && idList.size() > 0){ + for(String id : idList){ + ls.add(getDeliveryOrderItem(id)); + } + } + + return ls; } public DeliveryOrderItemDTO getDeliveryOrderItem(String id) { @@ -284,6 +317,8 @@ dto.setFlowerCategory(oi.getFlowerCategory()); dto.setParams(parseArray(oi.getFlowerParams(), ParamItemDTO.class)); + + dto.setNum(oi.getNum()); return dto; } @@ -382,6 +417,10 @@ ); if (count == 0) { Order o = orderMapper.selectById(orderId); + if(!Constants.ORDER_STATUS_BACKEND.COLLECTION.name().equals(o.getStatusBackend())){ + log.warn("非待集货状态,不可设置待发货"); + return; + } o.setStatusBackend(Constants.ORDER_STATUS_BACKEND.SEND.name()); o.update(SecurityUtils.getUserId()); orderMapper.updateById(o); @@ -463,17 +502,19 @@ return dto; } - public List<StationStatisticDTO> statisticStationList(String name, LocalDateTime startDate, LocalDateTime endDate) { + public List<StationStatisticDTO> statisticStationList(String name, LocalDateTime startDate + , LocalDateTime endDate, String status) { String userId = SecurityUtils.getUserId(); LambdaQueryWrapper<Station> lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.like(Station::getUserIds, userId); + lambdaQueryWrapper.like(Station::getUserIds, "%" + userId + "%"); lambdaQueryWrapper.eq(Station::getType, "0"); - boolean hasZc = stationMapper.selectCount(lambdaQueryWrapper)>0;//当前用户是否有总仓权限,总仓能查看到所有集货站的数据 + boolean hasZc = stationMapper.selectCount(lambdaQueryWrapper) > 0;//当前用户是否有总仓权限,总仓能查看到所有集货站的数据 + List<String> statusList = splitParam(status); if(hasZc){ - List<StationStatisticDTO> stationStatisticDTOS = deliveryOrderMapper.statisticStationList(startDate, endDate,name,null); + List<StationStatisticDTO> stationStatisticDTOS = deliveryOrderMapper.statisticStationList(startDate, endDate,name,null, statusList); return stationStatisticDTOS; }else{ - List<StationStatisticDTO> stationStatisticDTOS = deliveryOrderMapper.statisticStationList(startDate, endDate,name,userId); + List<StationStatisticDTO> stationStatisticDTOS = deliveryOrderMapper.statisticStationList(startDate, endDate, name, userId, statusList); return stationStatisticDTOS; } } @@ -539,7 +580,7 @@ orderItemSettlementService.saveItemSettlementInfo(oi, SecurityUtils.getUserId(), Constants.S_TYPE.CHECK); } - private BigDecimal calculateOrderItemDeduct(String id){ + public BigDecimal calculateOrderItemDeduct(String id){ List<OrderItemCheck> cLs = orderItemCheckMapper.selectList(new QueryWrapper<OrderItemCheck>() .eq("order_item_id", id) .eq("audit_status", Constants.CHECK_AUDIT_STATUS.AGREED.name()) @@ -577,7 +618,7 @@ return dto; } - public OrderItemCheckNumDTO getOtherCheck(String itemId, String type){ + public OrderItemCheckNumDTO getOtherCheck(String itemId, String type, boolean isSupplier){ OrderItemCheck c = orderItemCheckMapper.selectOne(new QueryWrapper<OrderItemCheck>() .eq("type", type) .eq("order_item_id", itemId) @@ -589,6 +630,14 @@ BeanUtils.copyProperties(c, dto); User user = userMapper.selectById(c.getCreateBy()); dto.setCreateName(user.getNickName()); + + dto.setPictureList(parseArray(c.getPictures(), String.class)); + + if(Constants.CHECK_TYPE.lack.name().equals(c.getType()) && isSupplier){ + OrderItem oi = orderItemMapper.selectById(itemId); + BigDecimal lackFeeSupplier = oi.getSupplierPrice().multiply(new BigDecimal(c.getNum())); + dto.setDeductAmount(lackFeeSupplier); + } } return dto; @@ -596,18 +645,32 @@ public void doReduceCheck(OrderItemCheckCommitReduceDTO dto){ dto.setType(Constants.CHECK_TYPE.reduce.name()); - doCheck(dto, dto.getPictureList(), dto.getTargetLevel(), dto.getDeductAmount()); + doCheck(dto, dto.getTargetLevel(), dto.getDeductAmount()); } - public void doCheck(OrderItemCheckCommitDTO dto - , List<String> pictureList, String targetLevel, BigDecimal deductAmount) { + public void doCheck(OrderItemCheckCommitDTO dto, String targetLevel, BigDecimal deductAmount) { if(dto.getNum() == null || dto.getNum() == 0){ throw new ValidationException("处理数量不能为0"); + } + + List<String> pictureList = dto.getPictureList(); + if(pictureList == null || pictureList.size() == 0){ + throw new ValidationException("质检图片不能为空"); } OrderItem oi = orderItemMapper.selectById(dto.getOrderItemId()); if(dto.getNum() > oi.getNum()){ throw new ValidationException("处理数量不能大于商品数量"); + } + + Order o = orderMapper.selectById(oi.getOrderId()); + if(StringUtils.isNotEmpty(o.getTransferId())){ + throw new ValidationException("已质检退款,不可提交质检记录"); + } + + if(!Constants.ORDER_STATUS_BACKEND.COLLECTION.name().equals(o.getStatusBackend()) + && !Constants.ORDER_STATUS_BACKEND.SEND.name().equals(o.getStatusBackend())){ + throw new ValidationException("订单状态异常,不可提交质检记录"); } List<OrderItemCheck> cLs = orderItemCheckMapper.selectList(new QueryWrapper<OrderItemCheck>() @@ -633,14 +696,24 @@ deduct = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum())); } else if(Constants.CHECK_TYPE.lack.name().equals(dto.getType())){ deduct = realPrice.multiply(new BigDecimal(dto.getNum())); + //质检退款,按照这个单价扣,如果3扎都缺货,按照总的金额退 + //缺货数量等于商品总数时按真实总价退款 + if(dto.getNum().intValue() == oi.getNum() && oi.getRealTotal() != null){ + deduct = oi.getRealTotal(); + } } else if (Constants.CHECK_TYPE.reduce.name().equals(dto.getType())) { if(deductAmount == null){ throw new ValidationException("降级金额不能为空"); } deduct = deductAmount.multiply(new BigDecimal(dto.getNum())); BigDecimal dt = realPrice.multiply(new BigDecimal(dto.getNum())); - if(deduct.doubleValue() > dt.doubleValue()){ - throw new ValidationException("降级金额不能大于商品处理数量金额"); + if(deduct.doubleValue() > dt.doubleValue() + || (oi.getRealTotal() != null && deduct.doubleValue() > oi.getRealTotal().doubleValue())){ + throw new ValidationException("降级金额不能大于商品处理数量的支付的金额"); + } + BigDecimal st = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum())); + if(deduct.doubleValue() > st.doubleValue()){ + throw new ValidationException("降级金额不能大于商品处理数量的供应商的金额"); } } -- Gitblit v1.9.3