gongzuming
2024-09-19 a768dc3daa04d35fedfbe75c0a59b9b2545b85c4
src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
@@ -34,6 +34,7 @@
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;
@@ -179,6 +180,8 @@
    }
    public Page<DeliveryOrderStatisticsDTO> selectSupplierDoStatistics(Page page){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        LocalDate theDay = parseLocalDate("2024-08-03");
        long current = page.getCurrent();
@@ -187,7 +190,7 @@
        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);
@@ -207,6 +210,7 @@
                    , fivePm.plusDays(-1), fivePm);
            DeliveryOrderStatisticsDTO dto = new DeliveryOrderStatisticsDTO();
            dto.setId(endDate.format(formatter));
            dto.setDate(endDate);
            dto.setNum(0);
            dto.setPrice(new BigDecimal(0));
@@ -219,11 +223,31 @@
        }
        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) {
@@ -250,7 +274,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) {
@@ -272,6 +310,8 @@
        dto.setFlowerCategory(oi.getFlowerCategory());
        dto.setParams(parseArray(oi.getFlowerParams(), ParamItemDTO.class));
        dto.setNum(oi.getNum());
        return dto;
    }
@@ -354,7 +394,7 @@
        );
        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);
            }
@@ -370,6 +410,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);
@@ -399,12 +443,14 @@
            }
            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)));
@@ -412,13 +458,16 @@
            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);
@@ -446,23 +495,26 @@
        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);
@@ -473,6 +525,7 @@
        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){
@@ -558,7 +611,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)
@@ -570,6 +623,12 @@
            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;
@@ -585,30 +644,68 @@
        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 {
@@ -628,7 +725,7 @@
        }
    }
    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)
@@ -659,6 +756,8 @@
                deliveryOrderMapper.updateById(d);
            }
        }
        return oi.getOrderId();
    }
    public void deleteCheckInfo(String itemId, String type){