|  |  | 
 |  |  | import java.time.LocalDate; | 
 |  |  | import java.time.LocalDateTime; | 
 |  |  | import java.time.format.DateTimeFormatter; | 
 |  |  | import java.time.temporal.ChronoUnit; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | 
 |  |  |  | 
 |  |  |     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<>(); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Page<DeliveryOrderStatisticsDTO> selectSupplierDoStatistics(Page page){ | 
 |  |  |  | 
 |  |  |         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); | 
 |  |  |         LocalDate theDay = parseLocalDate("2024-08-03"); | 
 |  |  |  | 
 |  |  |         long current = page.getCurrent(); | 
 |  |  | 
 |  |  |         current = current == 0 ? 1 : current; | 
 |  |  |  | 
 |  |  |         long endDays = (current - 1) * size; | 
 |  |  |         long beginDays = endDays + size; | 
 |  |  |         long beginDays = endDays + size-1; | 
 |  |  |         LocalDate beginDate = now.plusDays(-beginDays); | 
 |  |  |         LocalDate endDate = now.plusDays(-endDays); | 
 |  |  |  | 
 |  |  | 
 |  |  |                     , fivePm.plusDays(-1), fivePm); | 
 |  |  |  | 
 |  |  |             DeliveryOrderStatisticsDTO dto = new DeliveryOrderStatisticsDTO(); | 
 |  |  |             dto.setId(endDate.format(formatter)); | 
 |  |  |             dto.setDate(endDate); | 
 |  |  |             dto.setNum(0); | 
 |  |  |             dto.setPrice(new BigDecimal(0)); | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         page.setRecords(ls); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         // 获取当前日期 | 
 |  |  |         LocalDate today = LocalDate.now(); | 
 |  |  |         // 计算当前日期与给定日期的天数差 | 
 |  |  |         long daysBetween = ChronoUnit.DAYS.between(theDay, today); | 
 |  |  |         page.setTotal(daysBetween); | 
 |  |  |  | 
 |  |  |         return page; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public List<DeliveryOrderItemListDTO> getDeliveryOrderItems(String id) { | 
 |  |  |         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) { | 
 |  |  | 
 |  |  |  | 
 |  |  |         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) { | 
 |  |  | 
 |  |  |         dto.setFlowerCategory(oi.getFlowerCategory()); | 
 |  |  |  | 
 |  |  |         dto.setParams(parseArray(oi.getFlowerParams(), ParamItemDTO.class)); | 
 |  |  |  | 
 |  |  |         dto.setNum(oi.getNum()); | 
 |  |  |  | 
 |  |  |         return dto; | 
 |  |  |     } | 
 |  |  | 
 |  |  |         ); | 
 |  |  |         if (items != null && items.size() > 0) { | 
 |  |  |             for (OrderItem i : items) { | 
 |  |  |                 i.setStatus(Constants.CHECK_OPERATE.ok.name()); | 
 |  |  |                 i.setStatus(Constants.ORDER_ITEM_STATUS.ok.name()); | 
 |  |  |                 i.setCheckTime(LocalDateTime.now()); | 
 |  |  |                 orderItemMapper.updateById(i); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         ); | 
 |  |  |         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); | 
 |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             Integer orderCountToday = deliveryOrderMapper.selectCount(new QueryWrapper<DeliveryOrder>() | 
 |  |  |                     .eq("deleted", 0) | 
 |  |  |                     .eq("supplier_id", supplierId) | 
 |  |  |                     .gt("create_time", startDate) | 
 |  |  |                     .le("create_time", endDate)); | 
 |  |  |             dto.setOrderCountToday(orderCountToday == null ? 0 : orderCountToday); | 
 |  |  |  | 
 |  |  |             Integer orderCountYesterday = deliveryOrderMapper.selectCount(new QueryWrapper<DeliveryOrder>() | 
 |  |  |                     .eq("deleted", 0) | 
 |  |  |                     .eq("supplier_id", supplierId) | 
 |  |  |                     .gt("create_time", startDate.plusDays(-1)) | 
 |  |  |                     .le("create_time", endDate.plusDays(-1))); | 
 |  |  | 
 |  |  |  | 
 |  |  |             LocalDateTime ffPm = LocalDate.now().withDayOfMonth(1).atTime(17, 0, 0).plusDays(-1); | 
 |  |  |             Integer orderCountMonth = deliveryOrderMapper.selectCount(new QueryWrapper<DeliveryOrder>() | 
 |  |  |                     .eq("deleted", 0) | 
 |  |  |                     .eq("supplier_id", supplierId) | 
 |  |  |                     .gt("create_time", ffPm)); | 
 |  |  |             dto.setOrderCountMonth(orderCountMonth == null ? 0 : orderCountMonth); | 
 |  |  |  | 
 |  |  |             BigDecimal salesRate = new BigDecimal(0); | 
 |  |  |             Integer orderTotal = deliveryOrderMapper.selectCount(new QueryWrapper<DeliveryOrder>() | 
 |  |  |                     .eq("supplier_id", supplierId)); | 
 |  |  |                     .eq("deleted", 0) | 
 |  |  |                     .eq("supplier_id", supplierId) | 
 |  |  |             ); | 
 |  |  |             Integer salesCount = orderItemSalesMapper.getSupplierSalesCount(supplierId); | 
 |  |  |             if (orderTotal != null && orderTotal > 0) { | 
 |  |  |                 BigDecimal rate = new BigDecimal(salesCount).divide(new BigDecimal(orderTotal), 2, RoundingMode.HALF_UP); | 
 |  |  | 
 |  |  |         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; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //////////////////////////////////////////////////////////////新接口 | 
 |  |  |     public Page<DeliveryOrderList4CheckDTO> selectSupplierDoList4Check(Page page, DeliveryOrderStationQueryDTO dto) { | 
 |  |  |         dto.setStatusList(splitParam(dto.getStatus())); | 
 |  |  |         List<DeliveryOrderList4CheckDTO> ls = deliveryOrderMapper.selectSupplierDoList4Check(page, dto); | 
 |  |  |  | 
 |  |  |         page.setRecords(ls); | 
 |  |  | 
 |  |  |         if(dto.getSupplierId() == null){ | 
 |  |  |             throw new ValidationException("供应商id不能为空"); | 
 |  |  |         } | 
 |  |  |         dto.setStatusList(splitParam(dto.getStatus())); | 
 |  |  |         List<DeliveryOrder4CheckDTO> ls = deliveryOrderMapper.selectSupplierDoInfo4Check(page, dto); | 
 |  |  |  | 
 |  |  |         if(ls != null && ls.size() > 0){ | 
 |  |  | 
 |  |  |         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()) | 
 |  |  | 
 |  |  |         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) | 
 |  |  | 
 |  |  |             BeanUtils.copyProperties(c, dto); | 
 |  |  |             User user = userMapper.selectById(c.getCreateBy()); | 
 |  |  |             dto.setCreateName(user.getNickName()); | 
 |  |  |  | 
 |  |  |             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; | 
 |  |  | 
 |  |  |             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>() | 
 |  |  |                 .ne("type", dto.getType()) | 
 |  |  |                 .eq("order_item_id", dto.getOrderItemId()) | 
 |  |  | 
 |  |  |         int otherNum = 0; | 
 |  |  |         if(cLs != null && cLs.size() > 0){ | 
 |  |  |             for(OrderItemCheck c : cLs){ | 
 |  |  |                 if(Constants.CHECK_AUDIT_STATUS.REJECTED.name().equals(c.getAuditStatus())){ | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 otherNum += c.getNum(); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         BigDecimal deduct = new BigDecimal(0); | 
 |  |  |         BigDecimal realPrice = getAmount(oi.getRealPrice()); | 
 |  |  |         if(Constants.CHECK_TYPE.replace.name().equals(dto.getType())){ | 
 |  |  |             deduct = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum())); | 
 |  |  |         } else if(Constants.CHECK_TYPE.lack.name().equals(dto.getType())){ | 
 |  |  |             deduct = oi.getPrice().multiply(new BigDecimal(dto.getNum())); | 
 |  |  |             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 = oi.getPrice().multiply(new BigDecimal(dto.getNum())); | 
 |  |  |             if(deduct.doubleValue() > dt.doubleValue()){ | 
 |  |  |                 throw new ValidationException("降级金额不能大于商品处理数量金额"); | 
 |  |  |             BigDecimal dt = realPrice.multiply(new BigDecimal(dto.getNum())); | 
 |  |  |             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("降级金额不能大于商品处理数量的供应商的金额"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  |