| | |
| | | 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<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){ |
| | |
| | | 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; |
| | |
| | | if(dto.getNum() == null || dto.getNum() == 0){ |
| | | throw new ValidationException("处理数量不能为0"); |
| | | } |
| | | OrderItemCheck c = orderItemCheckMapper.selectOne(new QueryWrapper<OrderItemCheck>() |
| | | .eq("type", dto.getType()) |
| | | .eq("order_item_id", dto.getOrderItemId()) |
| | | ); |
| | | |
| | | OrderItem oi = orderItemMapper.selectById(dto.getOrderItemId()); |
| | | if(dto.getNum() > oi.getNum()){ |
| | | throw new ValidationException("处理数量不能大于商品数量"); |
| | | } |
| | | BigDecimal deduct = deductAmount; |
| | | if(deduct == null){ |
| | | deduct = new BigDecimal(0); |
| | | 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())); |
| | | |
| | | 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(); |
| | | } |
| | | } |
| | | if(otherNum + dto.getNum() > oi.getNum()){ |
| | | throw new ValidationException("处理总数量不能大于商品数量"); |
| | | } |
| | | |
| | | 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 = 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() |
| | | || (oi.getRealTotal() != null && deduct.doubleValue() > oi.getRealTotal().doubleValue())){ |
| | | throw new ValidationException("降级金额不能大于商品处理数量金额"); |
| | | } |
| | | } |
| | | |
| | | OrderItemCheck c = orderItemCheckMapper.selectOne(new QueryWrapper<OrderItemCheck>() |
| | | .eq("type", dto.getType()) |
| | | .eq("order_item_id", dto.getOrderItemId()) |
| | | ); |
| | | if(c != null){ |
| | | if(Constants.CHECK_AUDIT_STATUS.AGREED.name().equals(c.getAuditStatus())){ |
| | | throw new ValidationException("已审核通过,不可修改"); |
| | | } |
| | | c.setCheckTime(LocalDateTime.now()); |
| | | c.setNum(dto.getNum()); |
| | | c.setRemarks(dto.getRemarks()); |
| | | c.setPictures(toJSONString(pictureList)); |
| | | c.setTargetLevel(targetLevel); |
| | | c.setDeductAmount(deduct); |
| | | c.setAuditStatus(null); |
| | | c.setAuditTime(null); |
| | | c.update(SecurityUtils.getUserId()); |
| | | orderItemCheckMapper.updateById(c); |
| | | } else { |
| | |
| | | } |
| | | } |
| | | |
| | | public void checkOrderItemStatus(String id){ |
| | | public String checkOrderItemStatus(String id){ |
| | | OrderItem oi = orderItemMapper.selectById(id); |
| | | List<OrderItemCheck> cLs = orderItemCheckMapper.selectList(new QueryWrapper<OrderItemCheck>() |
| | | .eq("order_item_id", id) |
| | |
| | | deliveryOrderMapper.updateById(d); |
| | | } |
| | | } |
| | | |
| | | return oi.getOrderId(); |
| | | } |
| | | |
| | | public void deleteCheckInfo(String itemId, String type){ |