From 3b4ff9fba93ee13919f990ef8c2910a902a2a8f3 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 24 九月 2024 10:17:26 +0800 Subject: [PATCH] add:会员等级筛选 --- src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java | 198 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 156 insertions(+), 42 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 3c8e8ff..b7727a5 100644 --- a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java +++ b/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; @@ -119,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<>(); @@ -171,25 +179,6 @@ if(ls != null && ls.size() > 0){ for(DeliveryOrderItemSettlementDTO dto : ls){ dto.setTotalAmount(dto.getPrice().multiply(new BigDecimal(dto.getNum()))); - - if(StringUtils.isNotEmpty(dto.getStatus())) { - Double rate = dto.getServiceFeeRate(); - BigDecimal serviceFee = new BigDecimal(0); - if(rate != null) { - serviceFee = dto.getTotalAmount().multiply(new BigDecimal(rate)) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - dto.setServiceFee(serviceFee); - } - - BigDecimal income = dto.getTotalAmount().subtract(dto.getCheckFee()) - .subtract(dto.getSalesFee()).subtract(dto.getStationFee()) - .subtract(serviceFee);//结算金额 - if (income.doubleValue() < 0) { - income = new BigDecimal(0); - } - - dto.setIncome(income); - } } } @@ -198,6 +187,8 @@ } public Page<DeliveryOrderStatisticsDTO> selectSupplierDoStatistics(Page page){ + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate theDay = parseLocalDate("2024-08-03"); long current = page.getCurrent(); @@ -206,7 +197,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); @@ -226,6 +217,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)); @@ -238,11 +230,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) { @@ -269,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) { @@ -291,6 +317,8 @@ dto.setFlowerCategory(oi.getFlowerCategory()); dto.setParams(parseArray(oi.getFlowerParams(), ParamItemDTO.class)); + + dto.setNum(oi.getNum()); return dto; } @@ -373,7 +401,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); } @@ -389,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); @@ -418,12 +450,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))); @@ -431,13 +465,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); @@ -465,23 +502,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); @@ -492,6 +532,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){ @@ -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,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; @@ -604,30 +651,82 @@ 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())); + + 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(); } } + 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("降级金额不能大于商品处理数量的支付的金额"); + } + BigDecimal st = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum())); + if(deduct.doubleValue() > st.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 { @@ -647,7 +746,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) @@ -665,6 +764,21 @@ oi.update(SecurityUtils.getUserId()); orderItemMapper.updateById(oi); } + + DeliveryOrderItem di = deliveryOrderItemMapper.selectOne(new QueryWrapper<DeliveryOrderItem>() + .eq("order_item_id", id)); + if(di != null) { + Integer count = deliveryOrderItemMapper.getUnCheckCount(di.getDeliveryId()); + if(count == 0) { + DeliveryOrder d = deliveryOrderMapper.selectById(di.getDeliveryId()); + d.setCheckTime(LocalDateTime.now()); + d.setStatus(Constants.DELIVERY_ORDER_STATUS.CHECKED.name()); + d.update(SecurityUtils.getUserId()); + deliveryOrderMapper.updateById(d); + } + } + + return oi.getOrderId(); } public void deleteCheckInfo(String itemId, String type){ -- Gitblit v1.9.3