|
|
@@ -1,14 +1,21 @@
|
|
|
package com.sckw.transport.service;
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.sckw.core.model.enums.CarWaybillEnum;
|
|
|
import com.sckw.core.utils.DateUtils;
|
|
|
+import com.sckw.fleet.api.RemoteFleetService;
|
|
|
+import com.sckw.fleet.api.model.vo.RFleetDriverVo;
|
|
|
+import com.sckw.fleet.api.model.vo.RFleetVo;
|
|
|
import com.sckw.transport.common.config.AmapProperties;
|
|
|
-import com.sckw.transport.model.KwtLogisticsOrder;
|
|
|
import com.sckw.transport.model.KwtWaybillOrder;
|
|
|
import com.sckw.transport.model.KwtWaybillOrderSubtask;
|
|
|
import com.sckw.transport.model.TaskStatisticsVo;
|
|
|
+import com.sckw.transport.model.param.FleetRankingReq;
|
|
|
import com.sckw.transport.model.param.LogisticsOrderStatisticsReq;
|
|
|
+import com.sckw.transport.model.param.TaskStatisticsReq;
|
|
|
+import com.sckw.transport.model.vo.FleetRankingVo;
|
|
|
import com.sckw.transport.model.vo.LogOrderStatisticsVo;
|
|
|
import com.sckw.transport.repository.KwtLogisticsOrderRepository;
|
|
|
import com.sckw.transport.repository.KwtWaybillOrderRepository;
|
|
|
@@ -17,15 +24,14 @@ import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.jetbrains.annotations.NotNull;
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.YearMonth;
|
|
|
import java.time.ZoneId;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -39,9 +45,11 @@ public class KwfTaskService {
|
|
|
private final AmapProperties amapProperties;
|
|
|
private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
|
|
|
private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
|
|
|
- public TaskStatisticsVo getTaskStatistics() {
|
|
|
- log.info("开始获取任务统计信息请求参数");
|
|
|
- List<KwtWaybillOrder> waybillOrder= kwtWaybillOrderRepository.findAll();
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
+ RemoteFleetService fleetService;
|
|
|
+ public TaskStatisticsVo getTaskStatistics(TaskStatisticsReq req) {
|
|
|
+ log.info("开始获取任务统计信息请求参数:{}",JSON.toJSONString(req));
|
|
|
+ List<KwtWaybillOrder> waybillOrder= kwtWaybillOrderRepository.findByEntId(req.getEntId());
|
|
|
//任务总数
|
|
|
int totalCount = waybillOrder.size();
|
|
|
if (totalCount == 0) {
|
|
|
@@ -161,8 +169,110 @@ public class KwfTaskService {
|
|
|
return amapProperties.getKey();
|
|
|
}
|
|
|
|
|
|
- public LogOrderStatisticsVo getLogisticsOrderStatistics(LogisticsOrderStatisticsReq req) {
|
|
|
- kwtLogisticsOrderRepository.query();
|
|
|
- return null;
|
|
|
+ public LogOrderStatisticsVo getWaybillOrderStatistics(LogisticsOrderStatisticsReq req) {
|
|
|
+ log.info("查询物流单统计参数:{}", JSON.toJSONString(req));
|
|
|
+ //安装月份统计
|
|
|
+ LocalDateTime startMonth = DateUtils.getStartMonth(Integer.parseInt(req.getValue()));
|
|
|
+ //获取当前的前几个月份
|
|
|
+ List<YearMonth> previousMonthsInclusive = DateUtils.getPreviousMonthsInclusive(Integer.parseInt(req.getValue()));
|
|
|
+ //查询运单数据
|
|
|
+ List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderRepository.queryByCreateTime(startMonth,req.getEntId());
|
|
|
+
|
|
|
+ //安装年月进行分组
|
|
|
+ Map<String, List<KwtWaybillOrder>> yearMonthAndWayOrderListMap = waybillOrders.stream()
|
|
|
+ .peek(x -> DateUtils.format(x.getCreateTime(), DateUtils.FORMAT10))
|
|
|
+ .collect(Collectors.groupingBy(KwtWaybillOrder::getYearAndMonth));
|
|
|
+ //获取已接单的状态
|
|
|
+ List<Integer> accepted = CarWaybillEnum.accepted();
|
|
|
+ List<LogOrderStatisticsVo.LogOrderStatistics> logOrderStatisticsList = previousMonthsInclusive.stream()
|
|
|
+ .map(x -> getLogOrderStatistics(x, yearMonthAndWayOrderListMap, accepted))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ LogOrderStatisticsVo logOrderStatisticsVo = new LogOrderStatisticsVo();
|
|
|
+ logOrderStatisticsVo.setLogOrderStatistics(logOrderStatisticsList);
|
|
|
+ return logOrderStatisticsVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LogOrderStatisticsVo.LogOrderStatistics getLogOrderStatistics(YearMonth x, Map<String, List<KwtWaybillOrder>> yearMonthAndWayOrderListMap, List<Integer> accepted) {
|
|
|
+ LogOrderStatisticsVo.LogOrderStatistics logOrderStatistics = new LogOrderStatisticsVo.LogOrderStatistics();
|
|
|
+ logOrderStatistics.setKey(x.toString());
|
|
|
+ List<KwtWaybillOrder> orderList = yearMonthAndWayOrderListMap.getOrDefault(x.toString(), Collections.emptyList());
|
|
|
+ if (CollectionUtils.isEmpty(orderList)) {
|
|
|
+ logOrderStatistics.setDispatchCount("0");
|
|
|
+ logOrderStatistics.setCompleteCount("0");
|
|
|
+ } else {
|
|
|
+ long dispatchCount = orderList.stream()
|
|
|
+ .filter(s -> Objects.equals(s.getStatus(), CarWaybillEnum.APPROVAL_PASS.getCode())).count();
|
|
|
+ logOrderStatistics.setDispatchCount(String.valueOf(dispatchCount));
|
|
|
+ long completeCount = orderList.stream()
|
|
|
+ .filter(s -> accepted.contains(s.getStatus())).count();
|
|
|
+ logOrderStatistics.setCompleteCount(String.valueOf(completeCount));
|
|
|
+ }
|
|
|
+ return logOrderStatistics;
|
|
|
+ }
|
|
|
+
|
|
|
+ public FleetRankingVo getFleetRanking(FleetRankingReq req) {
|
|
|
+ log.info("查询车队排行榜");
|
|
|
+ Long entId = req.getEntId();
|
|
|
+ //查询订单
|
|
|
+ List<KwtWaybillOrder> writeOrders = kwtWaybillOrderRepository.findByEntId(entId);
|
|
|
+ if (CollectionUtils.isEmpty(writeOrders)) {
|
|
|
+ return new FleetRankingVo();
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询车队和司机关系
|
|
|
+ List<RFleetDriverVo> feltDriverVos = fleetService.findFleetDriveByEntId(entId);
|
|
|
+ if (CollectionUtils.isEmpty(feltDriverVos)) {
|
|
|
+ return new FleetRankingVo();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<RFleetVo> fleets = fleetService.findFleetByEntId(entId);
|
|
|
+
|
|
|
+ Map<Long, RFleetVo> fleetIdAndFleetMap = fleets.stream()
|
|
|
+ .collect(Collectors.toMap(RFleetVo::getId, Function.identity(), (k1, k2) -> k1));
|
|
|
+ //车队id进行分组
|
|
|
+ Map<Long, List<RFleetDriverVo>> fleetIdAndFeltDriverVosMap = feltDriverVos
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.groupingBy(RFleetDriverVo::getFleetId));
|
|
|
+
|
|
|
+ //查询运单子运单数据
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = kwtWaybillOrderSubtaskRepository.findByEntId(entId);
|
|
|
+ List<FleetRankingVo.FleetRanking> fleetRankings = Lists.newArrayList();
|
|
|
+ fleetIdAndFeltDriverVosMap.forEach((k, rFleetDriverVos) -> {
|
|
|
+ FleetRankingVo.FleetRanking fleetRanking = new FleetRankingVo.FleetRanking();
|
|
|
+ RFleetVo fleetVo = fleetIdAndFleetMap.getOrDefault(k, new RFleetVo());
|
|
|
+ fleetRanking.setFleetName(fleetVo.getName());
|
|
|
+ fleetRanking.setFleetId(String.valueOf(k));
|
|
|
+ fleetRanking.setLoadCount(CollectionUtils.isEmpty(rFleetDriverVos) ? "0" :String.valueOf(rFleetDriverVos.size()));
|
|
|
+ double sum = 0.0;
|
|
|
+ if (CollectionUtils.isEmpty(rFleetDriverVos)){
|
|
|
+ fleetRanking.setLoadWeight(String.valueOf( sum));
|
|
|
+ fleetRankings.add(fleetRanking);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Set<Long> driveIds = rFleetDriverVos.stream()
|
|
|
+ .map(RFleetDriverVo::getDriverId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ List<Long> wOrderIds = writeOrders.stream()
|
|
|
+ .filter(x -> driveIds.contains(x.getDriverId()))
|
|
|
+ .map(KwtWaybillOrder::getId).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(wOrderIds)){
|
|
|
+ fleetRanking.setLoadWeight(String.valueOf( sum));
|
|
|
+ fleetRankings.add(fleetRanking);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sum = waybillOrderSubtasks.stream()
|
|
|
+ .filter(x -> wOrderIds.contains(x.getWOrderId()))
|
|
|
+ .filter(x -> Objects.nonNull(x.getUnloadAmount()))
|
|
|
+ .mapToDouble(x -> x.getUnloadAmount().doubleValue())
|
|
|
+ .sum();
|
|
|
+ fleetRanking.setLoadWeight(String.valueOf( sum));
|
|
|
+ fleetRankings.add(fleetRanking);
|
|
|
+ });
|
|
|
+ FleetRankingVo fleetRankingVo = new FleetRankingVo();
|
|
|
+ List<FleetRankingVo.FleetRanking> fleetRankingList = fleetRankings.stream()
|
|
|
+ .sorted(Comparator.comparing(FleetRankingVo.FleetRanking::getLoadCount).reversed()
|
|
|
+ .thenComparing(FleetRankingVo.FleetRanking::getLoadWeight)).collect(Collectors.toList());
|
|
|
+ fleetRankingVo.setFleetRankingList(fleetRankingList);
|
|
|
+ return fleetRankingVo;
|
|
|
}
|
|
|
}
|