|
|
@@ -21,10 +21,12 @@ import org.dromara.product.api.domain.dto.HotProductRankingDto;
|
|
|
import org.dromara.product.api.domain.dto.LatestOrderDto;
|
|
|
import org.dromara.product.api.domain.dto.OrderAmountTrendDto;
|
|
|
import org.dromara.product.api.domain.dto.OrderStatusCountDto;
|
|
|
+import org.dromara.product.api.domain.dto.PartnerOrderIndexDto;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -240,4 +242,97 @@ public class RemoteOrderInfoServiceImpl implements RemoteOrderInfoService {
|
|
|
.map(entry -> new HotProductRankingDto(entry.getKey(), entry.getValue()))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PartnerOrderIndexDto getPartnerOrderIndex(Long partnerId) {
|
|
|
+ PartnerOrderIndexDto dto = new PartnerOrderIndexDto();
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ Date todayStart = java.sql.Date.valueOf(today);
|
|
|
+ Date todayEnd = java.sql.Date.valueOf(today.plusDays(1));
|
|
|
+ LocalDate weekStart = today.with(java.time.DayOfWeek.MONDAY);
|
|
|
+ Date weekStartDate = java.sql.Date.valueOf(weekStart);
|
|
|
+
|
|
|
+ dto.setTodayOrders(orderMainService.count(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId)
|
|
|
+ .ge(OrderMain::getCreateTime, todayStart)
|
|
|
+ .lt(OrderMain::getCreateTime, todayEnd)));
|
|
|
+
|
|
|
+ List<OrderMain> weekOrders = orderMainService.list(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId)
|
|
|
+ .ge(OrderMain::getCreateTime, weekStartDate)
|
|
|
+ .lt(OrderMain::getCreateTime, todayEnd)
|
|
|
+ .select(OrderMain::getTotalAmount));
|
|
|
+ dto.setWeekRevenue(weekOrders.stream()
|
|
|
+ .map(OrderMain::getTotalAmount).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+
|
|
|
+ dto.setPendingShipment(orderMainService.count(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId)
|
|
|
+ .notIn(OrderMain::getOrderStatus, "3", "4")));
|
|
|
+
|
|
|
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM-dd");
|
|
|
+ List<PartnerOrderIndexDto.DayShipment> shipmentTrend = new ArrayList<>();
|
|
|
+ for (int i = 6; i >= 0; i--) {
|
|
|
+ LocalDate date = today.minusDays(i);
|
|
|
+ Long count = orderMainService.count(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId)
|
|
|
+ .in(OrderMain::getOrderStatus, "3", "4")
|
|
|
+ .ge(OrderMain::getCreateTime, java.sql.Date.valueOf(date))
|
|
|
+ .lt(OrderMain::getCreateTime, java.sql.Date.valueOf(date.plusDays(1))));
|
|
|
+ PartnerOrderIndexDto.DayShipment ds = new PartnerOrderIndexDto.DayShipment();
|
|
|
+ ds.setDate(date.format(dateFormatter));
|
|
|
+ ds.setCount(count);
|
|
|
+ shipmentTrend.add(ds);
|
|
|
+ }
|
|
|
+ dto.setShipmentTrend(shipmentTrend);
|
|
|
+
|
|
|
+ List<OrderMain> partnerOrders = orderMainService.list(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId).select(OrderMain::getId));
|
|
|
+ List<PartnerOrderIndexDto.TypeSales> typeSalesList = Collections.emptyList();
|
|
|
+ if (CollUtil.isNotEmpty(partnerOrders)) {
|
|
|
+ Set<Long> orderIds = partnerOrders.stream().map(OrderMain::getId).collect(Collectors.toSet());
|
|
|
+ List<OrderProduct> products = orderProductService.list(Wrappers.<OrderProduct>lambdaQuery()
|
|
|
+ .in(OrderProduct::getOrderId, orderIds).select(OrderProduct::getProductName));
|
|
|
+ Map<String, Long> nameCountMap = products.stream()
|
|
|
+ .filter(p -> p.getProductName() != null)
|
|
|
+ .collect(Collectors.groupingBy(OrderProduct::getProductName, Collectors.counting()));
|
|
|
+ typeSalesList = nameCountMap.entrySet().stream()
|
|
|
+ .sorted(Map.Entry.<String, Long>comparingByValue().reversed()).limit(5)
|
|
|
+ .map(entry -> { PartnerOrderIndexDto.TypeSales ts = new PartnerOrderIndexDto.TypeSales(); ts.setName(entry.getKey()); ts.setValue(entry.getValue()); return ts; })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ dto.setProductTypeSales(typeSalesList);
|
|
|
+
|
|
|
+ List<OrderMain> latestOrders = orderMainService.list(Wrappers.<OrderMain>lambdaQuery()
|
|
|
+ .eq(OrderMain::getAssigneeId, partnerId)
|
|
|
+ .orderByDesc(OrderMain::getCreateTime).last("LIMIT 10"));
|
|
|
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ List<PartnerOrderIndexDto.ShipmentOrder> shipments = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(latestOrders)) {
|
|
|
+ Set<Long> latestOrderIds = latestOrders.stream().map(OrderMain::getId).collect(Collectors.toSet());
|
|
|
+ List<OrderProduct> latestProducts = orderProductService.list(Wrappers.<OrderProduct>lambdaQuery()
|
|
|
+ .in(OrderProduct::getOrderId, latestOrderIds));
|
|
|
+ Map<Long, String> productNameMap = latestProducts.stream()
|
|
|
+ .collect(Collectors.groupingBy(OrderProduct::getOrderId,
|
|
|
+ Collectors.collectingAndThen(Collectors.toList(), list -> list.isEmpty() ? "" : list.get(0).getProductName())));
|
|
|
+ Set<Long> customerIds = latestOrders.stream().map(OrderMain::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
+ Map<Long, String> customerNameMap = CollUtil.isEmpty(customerIds) ? Collections.emptyMap() : remoteCustomerService.selectCustomerNameByIds(customerIds);
|
|
|
+ for (OrderMain order : latestOrders) {
|
|
|
+ PartnerOrderIndexDto.ShipmentOrder so = new PartnerOrderIndexDto.ShipmentOrder();
|
|
|
+ so.setOrderNo(order.getOrderNo());
|
|
|
+ so.setProductName(productNameMap.getOrDefault(order.getId(), ""));
|
|
|
+ so.setAmount(order.getTotalAmount());
|
|
|
+ so.setCustomer(customerNameMap.getOrDefault(order.getCustomerId(), ""));
|
|
|
+ String status = order.getOrderStatus();
|
|
|
+ if ("3".equals(status)) so.setStatus("部分发货");
|
|
|
+ else if ("4".equals(status)) so.setStatus("已发货");
|
|
|
+ else so.setStatus(status);
|
|
|
+ if (order.getCreateTime() != null)
|
|
|
+ so.setDate(order.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(dtf));
|
|
|
+ shipments.add(so);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dto.setLatestShipments(shipments);
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
}
|