| | |
| | | @Override |
| | | public Map<String, Long> total() { |
| | | Map<String, Long> map = new HashMap<>(); |
| | | //总销售金额 |
| | | List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(null); |
| | | //总销售金额 |
| | | BigDecimal sum = salesDeliveries.stream() |
| | | .map(item -> item.getPrice() != null ? new BigDecimal(item.getPrice().toString()) : BigDecimal.ZERO) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | long finalPrice = sum.divide(new BigDecimal("1000"), 0, RoundingMode.HALF_UP).longValue(); |
| | | |
| | | map.put("price", finalPrice);//单位w |
| | | //总发货单 |
| | | map.put("delivery", (long) salesDeliveries.size()); |
| | | //总销售方数 |
| | | long volume = salesDeliveries.stream().mapToLong(value -> Long.parseLong(value.getVolume().toString())).sum(); |
| | | map.put("volume",volume); |
| | | BigDecimal volume = salesDeliveries.stream() |
| | | .map(item -> item.getVolume() != null ? new BigDecimal(item.getVolume().toString()) : BigDecimal.ZERO) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | long finalVolume = volume.divide(new BigDecimal("1000"), 0, RoundingMode.HALF_UP).longValue(); |
| | | map.put("volume",finalVolume); |
| | | //累计客户 |
| | | Long count = customerMapper.selectCount(null); |
| | | map.put("customer",count); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public String salesAnalysis(SalesDeliveryDto salesDeliveryDto) { |
| | | public SalesTotalDto salesAnalysis(SalesDeliveryDto salesDeliveryDto) { |
| | | SalesTotalDto salesTotalDto = new SalesTotalDto(); |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | List<Map<String, Long>> maps = new ArrayList<>(); |
| | | List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery() |
| | | .eq(SalesDelivery::getProductName,salesDeliveryDto.getType())); |
| | | for (LocalDate date : dates) { |
| | | LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); |
| | | if (salesDeliveryDto.getDays().equals("年")){ |
| | | lastDay = date.with(TemporalAdjusters.lastDayOfYear()); |
| | | } |
| | | LocalDate finalLastDay = lastDay; |
| | | salesDeliveries = salesDeliveries |
| | | .stream() |
| | | .filter(delivery -> { |
| | | LocalDate deliveryDate = delivery.getDeliveryDate(); |
| | | return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay); |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values()) |
| | | .collect(Collectors.toMap( |
| | | AddressRegionEnum::getRegionName, // 区域名作为key |
| | | enumItem -> 0L // 初始值全部为0 |
| | | )); |
| | | if (!CollectionUtils.isEmpty(salesDeliveries)) { |
| | | // 按区域分组,统计每个区域的销量总和 |
| | | regionCountMap = salesDeliveries.stream() |
| | | .filter(delivery -> delivery.getDeliveryPlace() != null) |
| | | .collect(Collectors.groupingBy( |
| | | delivery -> { |
| | | AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace()); |
| | | return regionEnum != null ? regionEnum.getRegionName() : null; |
| | | }, |
| | | Collectors.summingLong(delivery -> delivery.getVolume() != null ? delivery.getVolume().longValue() : 0L) |
| | | )); |
| | | } |
| | | regionCountMap.put("全部", salesDeliveries.stream() |
| | | .mapToLong(item -> item.getVolume() != null ? item.getVolume().longValue() : 0L) |
| | | .sum()); |
| | | maps.add(regionCountMap); |
| | | } |
| | | salesTotalDto.setDates(dates); |
| | | salesTotalDto.setCustomerTrends(maps); |
| | | return salesTotalDto; |
| | | } |
| | | |
| | | @Override |
| | | public String salesRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | public List<SalesTotalDetailDto> salesRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | List<SalesTotalDetailDto> salesTotalDetailDtos = new ArrayList<>(); |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery() |
| | | .eq(SalesDelivery::getProductName,salesDeliveryDto.getType())); |
| | | for (LocalDate date : dates) { |
| | | LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); |
| | | if (salesDeliveryDto.getDays().equals("年")){ |
| | | lastDay = date.with(TemporalAdjusters.lastDayOfYear()); |
| | | } |
| | | LocalDate finalLastDay = lastDay; |
| | | salesDeliveries = salesDeliveries |
| | | .stream() |
| | | .filter(delivery -> { |
| | | LocalDate deliveryDate = delivery.getDeliveryDate(); |
| | | return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay); |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values()) |
| | | .collect(Collectors.toMap( |
| | | AddressRegionEnum::getRegionName, // 区域名作为key |
| | | enumItem -> 0L // 初始值全部为0 |
| | | )); |
| | | if (!CollectionUtils.isEmpty(salesDeliveries)) { |
| | | // 按区域分组,统计每个区域的销量总和 |
| | | regionCountMap = salesDeliveries.stream() |
| | | .filter(delivery -> delivery.getDeliveryPlace() != null) |
| | | .collect(Collectors.groupingBy( |
| | | delivery -> { |
| | | AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace()); |
| | | return regionEnum != null ? regionEnum.getRegionName() : null; |
| | | }, |
| | | Collectors.summingLong(delivery -> delivery.getVolume() != null ? delivery.getVolume().longValue() : 0L) |
| | | )); |
| | | } |
| | | regionCountMap.put("全部", salesDeliveries.stream() |
| | | .mapToLong(item -> item.getVolume() != null ? item.getVolume().longValue() : 0L) |
| | | .sum()); |
| | | SalesTotalDetailDto salesTotalDetailDto = new SalesTotalDetailDto(); |
| | | salesTotalDetailDto.setDate(date); |
| | | salesTotalDetailDto.setType(salesDeliveryDto.getType()); |
| | | salesTotalDetailDtos.add(salesTotalDetailDto); |
| | | } |
| | | return salesTotalDetailDtos; |
| | | } |
| | | |
| | | @Override |
| | | public String salesAmount(SalesDeliveryDto salesDeliveryDto) { |
| | | public SalesTotalDto salesAmount(SalesDeliveryDto salesDeliveryDto) { |
| | | SalesTotalDto salesTotalDto = new SalesTotalDto(); |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | List<Map<String, Long>> maps = new ArrayList<>(); |
| | | List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery() |
| | | .eq(SalesDelivery::getProductName,salesDeliveryDto.getType())); |
| | | for (LocalDate date : dates) { |
| | | LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); |
| | | if (salesDeliveryDto.getDays().equals("年")){ |
| | | lastDay = date.with(TemporalAdjusters.lastDayOfYear()); |
| | | } |
| | | LocalDate finalLastDay = lastDay; |
| | | salesDeliveries = salesDeliveries |
| | | .stream() |
| | | .filter(delivery -> { |
| | | LocalDate deliveryDate = delivery.getDeliveryDate(); |
| | | return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay); |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values()) |
| | | .collect(Collectors.toMap( |
| | | AddressRegionEnum::getRegionName, // 区域名作为key |
| | | enumItem -> 0L // 初始值全部为0 |
| | | )); |
| | | if (!CollectionUtils.isEmpty(salesDeliveries)) { |
| | | // 按区域分组,统计每个区域的销量总和 |
| | | regionCountMap = salesDeliveries.stream() |
| | | .filter(delivery -> delivery.getDeliveryPlace() != null) |
| | | .collect(Collectors.groupingBy( |
| | | delivery -> { |
| | | AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace()); |
| | | return regionEnum != null ? regionEnum.getRegionName() : null; |
| | | }, |
| | | Collectors.summingLong(delivery -> delivery.getPrice() != null ? delivery.getPrice().longValue() : 0L) |
| | | )); |
| | | } |
| | | regionCountMap.put("全部", salesDeliveries.stream() |
| | | .mapToLong(item -> item.getPrice() != null ? item.getPrice().longValue() : 0L) |
| | | .sum()); |
| | | maps.add(regionCountMap); |
| | | } |
| | | salesTotalDto.setDates(dates); |
| | | salesTotalDto.setCustomerTrends(maps); |
| | | return salesTotalDto; |
| | | } |
| | | |
| | | @Override |
| | | public String salesDataRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | public List<SalesTotalDetailDto> salesDataRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | List<SalesTotalDetailDto> salesTotalDetailDtos = new ArrayList<>(); |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | |
| | | return salesTotalDetailDtos; |
| | | } |
| | | |
| | | @Override |
| | |
| | | for (LocalDate date : dates) { |
| | | LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); |
| | | if (salesDeliveryDto.getDays().equals("年")){ |
| | | lastDay = date.with(TemporalAdjusters.lastDayOfYear()); |
| | | } |
| | | Date startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); |
| | | Date endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); |
| | | List<Customer> customers = customerMapper.selectList(Wrappers.<Customer>lambdaQuery() |
| | | .between(Customer::getMaintenanceTime, startDate, endDate)); |
| | | Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values()) |
| | | .filter(addressRegionEnum -> addressRegionEnum.getRegionName().equals("SELF_PICKUP")) |
| | | .collect(Collectors.toMap( |
| | | AddressRegionEnum::getRegionName, // 区域名作为key |
| | | enumItem -> 0L // 初始值全部为0 |
| | |
| | | Collectors.counting() // 计数 |
| | | )); |
| | | } |
| | | regionCountMap.put("ALLIN",customers.stream().count()); |
| | | regionCountMap.put("全部",customers.stream().count()); |
| | | maps.add(regionCountMap); |
| | | } |
| | | salesTotalDto.setDates(dates); |