Przeglądaj źródła

提交修改查询轨迹

chenxiaofei 2 miesięcy temu
rodzic
commit
5bc4f5d6a3

+ 26 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java

@@ -512,9 +512,7 @@ public class DateUtils extends DateUtil {
         return date1.compareTo(date2);
     }
 
-    public static void main(String[] ager) throws InterruptedException {
-        System.out.println(getEndOfDay(new Date()));
-    }
+
 
     /**
      * ltf 获取
@@ -796,4 +794,29 @@ public class DateUtils extends DateUtil {
         LocalDateTime time = LocalDateTime.of(localDate, LocalTime.MAX).withNano(0);
         return formatDate(time);
     }
+
+    /**
+     * 获取前n天的开始时间
+     * @return
+     */
+    public static LocalDateTime getStartDay(int n) {
+        LocalDate localDate = LocalDate.now();
+        LocalDate minusDays = localDate.minusDays(n);
+        return minusDays.atStartOfDay();
+    }
+
+    public static LocalDateTime getEndDay(int n) {
+        LocalDate today = LocalDate.now();
+        LocalDate yesterday = today.minusDays(n);
+        return LocalDateTime.of(yesterday, LocalTime.MAX);
+    }
+
+
+    public static LocalDateTime getStartMonth(int n) {
+        // 获取上个月第一天的 00:00:00
+        return LocalDate.now()
+                .minusMonths(n)
+                .withDayOfMonth(1)
+                .atStartOfDay();
+    }
 }

+ 6 - 5
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -1446,13 +1446,14 @@ public class KwfTruckService {
                 .collect(Collectors.toList());
         //获取车辆信息
         List<KwfTruck> truckList = kwfTruckRepository.queryByEntIds(entIds);
-        if (StringUtils.isNotBlank(req.getTruckNo())){
-            truckList = truckList.stream()
-                    .filter(x -> org.apache.commons.lang3.StringUtils.equals(x.getTruckNo(), req.getTruckNo()))
-                    .collect(Collectors.toList());
-        }
+//        if (StringUtils.isNotBlank(req.getTruckNo())){
+//            truckList = truckList.stream()
+//                    .filter(x -> org.apache.commons.lang3.StringUtils.equals(x.getTruckNo(), req.getTruckNo()))
+//                    .collect(Collectors.toList());
+//        }
         //将车辆信息按照企业id进行分组
         Map<Long, List<KwfTruck>> entIdAndTruckMap = truckList.stream()
+                .filter(x->StringUtils.isNotBlank(req.getTruckNo()) && org.apache.commons.lang3.StringUtils.equals(x.getTruckNo(), req.getTruckNo()) )
                 .collect(Collectors.groupingBy(KwfTruck::getEntId));
 
         //遍历所有企业

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTaskController.java

@@ -2,6 +2,8 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.transport.model.TaskStatisticsVo;
+import com.sckw.transport.model.param.LogisticsOrderStatisticsReq;
+import com.sckw.transport.model.vo.LogOrderStatisticsVo;
 import com.sckw.transport.service.KwfTaskService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -42,4 +44,10 @@ public class KwfTaskController {
         return BaseResult.success(kwfTaskService.getMapApikey());
     }
 
+    @GetMapping("/getLogisticsOrderStatistics")
+    @Operation(summary = "获取物流订单数据", description = "获取物流订单数据")
+    public BaseResult<LogOrderStatisticsVo> getLogisticsOrderStatistics(LogisticsOrderStatisticsReq req)  {
+        return BaseResult.success(kwfTaskService.getLogisticsOrderStatistics(req));
+    }
+
 }

+ 37 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/TaskStatisticsVo.java

@@ -35,6 +35,18 @@ public class TaskStatisticsVo implements Serializable {
      */
     @Schema(description = "占全部运力百分比")
     private String taskPercent;
+    /**
+     * 昨日运单数(昨日累计派车数)
+     */
+    private String waybillTotalYesterday;
+    /**
+     * 前日运单数 (前日累计派车数)
+     */
+    private String waybillTotalBeforeYesterday;
+    /**
+     * 较前日数据上涨或者下降百分比
+     */
+    private String waybillPercentChange;
     /**
      * 当前异常车辆数
      */
@@ -45,4 +57,29 @@ public class TaskStatisticsVo implements Serializable {
      */
     @Schema(description = "今日安全警告总数")
     private String warningTotal;
+    /**
+     * 昨日累计任务数
+     */
+    private String taskTotalYesterday;
+    /**
+     * 前一天累计任务数
+     */
+    private String taskTotalBeforeYesterday;
+    /**
+     * 较前一天数据上涨或者下降百分比
+     */
+    private String taskPercentChange;
+
+    /**
+     * 上月累计卸货吨数
+     */
+   private String unloadTon;
+    /**
+     * 本月初到当前时间累计装货吨数
+     */
+    private String unloadTonThisMonth;
+    /**
+     * 上月初到上个月某个时间点的累计卸货吨数
+     */
+    private String unloadTonBeforeMonth;
 }

+ 20 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderStatisticsReq.java

@@ -0,0 +1,20 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author PC
+ */
+@Data
+public class LogisticsOrderStatisticsReq implements Serializable {
+    /**
+     * 统计类型(1-年,2-月 3.日 )
+     */
+    private String type;
+    /**
+     * 值
+     */
+    private String value;
+}

+ 14 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java

@@ -6,11 +6,15 @@ import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+import java.util.Date;
+
 /**
  * @author PC
  */
 @Data
 public class VehiclesTrajectoryReq {
+    private String ts;
     /**
      * 手机号
      */
@@ -41,56 +45,56 @@ public class VehiclesTrajectoryReq {
      * 车速(km/h)
      */
     @Schema(description = "车速(km/h)")
-    private Float speed;
+    private Float speed  =15.0f;
 
     /**
      * GPS状态
      */
     @Schema(description = "GPS状态")
-    private String gpsStatus;
+    private String gpsStatus = "1";
     /**
      * 行驶方向(角度)
      */
     @Schema(description = "行驶方向(角度)")
-    private Integer direction;
+    private Float direction = 0.0f;
 
     /**
      * 燃油液位(%)
      */
     @Schema(description = "燃油液位(%)")
-    private Float fuelLevel;
+    private Float fuelLevel = 0.0f;
 
     /**
      * 里程数(km)
      */
     @Schema(description = "里程数(km)")
-    private Double mileage;
+    private String mileage= "1.0";
 
     /**
      * 发动机温度(℃)
      */
     @Schema(description = "发动机温度(℃)")
-    private Float engineTemp;
+    private Float engineTemp = 25.0f;
 
     /**
      * 电池电压(V)
      */
     @Schema(description = "电池电压(V)")
-    private Float batteryVoltage;
+    private Float batteryVoltage = 12.0f;
 
     /**
      * 车辆状态
      */
 
     @Schema(description = "车辆状态")
-    private String status;
+    private String status = "0";
 
     /**
      * 运单号
      */
 
     @Schema(description = "运单号")
-    private String wOrderNo;
+    private String wOrderNo = "55121245";
     /**
      * 运单状态
      */
@@ -102,7 +106,7 @@ public class VehiclesTrajectoryReq {
      * 报警代码
      */
     @Schema(description = "报警代码")
-    private Integer alarmCode;
+    private String alarmCode = "123";
 
     /**
      * 车辆信息

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogOrderStatisticsVo.java

@@ -0,0 +1,9 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class LogOrderStatisticsVo implements Serializable {
+}

+ 13 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java

@@ -0,0 +1,13 @@
+package com.sckw.transport.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtLogisticsOrderMapper;
+import com.sckw.transport.model.KwtLogisticsOrder;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author PC
+ */
+@Repository
+public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMapper, KwtLogisticsOrder> {
+}

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java

@@ -7,6 +7,9 @@ import com.sckw.transport.dao.KwtWaybillOrderSubtaskMapper;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * @author PC
  */
@@ -19,4 +22,10 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                 .orderByDesc(KwtWaybillOrderSubtask::getId)
                  .last("limit 1"));
     }
+
+    public List<KwtWaybillOrderSubtask> findOneByWOrderIds(Set<Long> wOrderIds) {
+        return list(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwtWaybillOrderSubtask::getWOrderId,wOrderIds));
+    }
 }

+ 108 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java

@@ -2,18 +2,31 @@ package com.sckw.transport.service;
 
 
 import com.sckw.core.model.enums.CarWaybillEnum;
+import com.sckw.core.utils.DateUtils;
 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.LogisticsOrderStatisticsReq;
+import com.sckw.transport.model.vo.LogOrderStatisticsVo;
+import com.sckw.transport.repository.KwtLogisticsOrderRepository;
 import com.sckw.transport.repository.KwtWaybillOrderRepository;
+import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 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.springframework.stereotype.Service;
 
-import java.util.Arrays;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author PC
@@ -24,6 +37,8 @@ import java.util.Objects;
 public class KwfTaskService {
     private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
     private final AmapProperties amapProperties;
+    private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
+    private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     public TaskStatisticsVo getTaskStatistics() {
         log.info("开始获取任务统计信息请求参数");
         List<KwtWaybillOrder> waybillOrder= kwtWaybillOrderRepository.findAll();
@@ -41,6 +56,26 @@ public class KwfTaskService {
         long completedCount = waybillOrder.stream()
                 .filter(w -> Objects.equals(w.getStatus(), CarWaybillEnum.COMPLETION_UNLOADING.getCode()))
                 .count();
+        //昨日累计任务数
+        long yesterdayTaskCount = getYesterdayTaskCount(waybillOrder);
+        // 前一天累计任务数
+        long taskTotalBeforeYesterday = getTaskTotalBeforeYesterday(waybillOrder);
+
+        //计算上月卸货吨数
+        double unloadTon = getUnloadTon(waybillOrder);
+
+        //获取本月初到当前时间的数据
+        double unloadTonThisMonth = getUnloadTonThisMonth(waybillOrder);
+        //获取上个月初到某个时间点的数据
+        double unloadTonBeforeMonth = getUnloadTonBeforeMonth(waybillOrder);
+        // 计算增长率
+        double growthRate = (double) (yesterdayTaskCount - taskTotalBeforeYesterday) / taskTotalBeforeYesterday * 100;
+        return getTaskStatisticsVo(totalCount, taskingCount, completedCount, yesterdayTaskCount,
+                taskTotalBeforeYesterday, growthRate, unloadTon, unloadTonThisMonth, unloadTonBeforeMonth);
+    }
+
+
+    private TaskStatisticsVo getTaskStatisticsVo(int totalCount, long taskingCount, long completedCount, long yesterdayTaskCount, long taskTotalBeforeYesterday, double growthRate, double unloadTon, double unloadTonThisMonth, double unloadTonBeforeMonth) {
         TaskStatisticsVo taskStatisticsVo = new TaskStatisticsVo();
         taskStatisticsVo.setTaskTotal(String.valueOf(totalCount));
         taskStatisticsVo.setTaskRunning(String.valueOf(taskingCount));
@@ -48,9 +83,76 @@ public class KwfTaskService {
         taskStatisticsVo.setTaskPercent(taskingCount == 0 ? "0" : String.format("%.2f", (double) taskingCount / totalCount * 100));
         taskStatisticsVo.setTruckAbnormal("0");
         taskStatisticsVo.setWarningTotal("0");
+        taskStatisticsVo.setTaskTotalYesterday(String.valueOf(yesterdayTaskCount));
+        taskStatisticsVo.setTaskTotalBeforeYesterday(String.valueOf(taskTotalBeforeYesterday));
+        taskStatisticsVo.setTaskPercentChange(String.format("%.2f", growthRate));
+        taskStatisticsVo.setUnloadTon(String.valueOf(unloadTon));
+        taskStatisticsVo.setUnloadTonThisMonth(String.valueOf(unloadTonThisMonth));
+        taskStatisticsVo.setUnloadTonBeforeMonth(String.valueOf(unloadTonBeforeMonth));
+        taskStatisticsVo.setWaybillTotalYesterday(String.valueOf(yesterdayTaskCount));
+        taskStatisticsVo.setWaybillTotalBeforeYesterday(String.valueOf(taskTotalBeforeYesterday));
+        taskStatisticsVo.setWaybillPercentChange(String.format("%.2f", growthRate));
         return taskStatisticsVo;
     }
 
+    private double getUnloadTonBeforeMonth(List<KwtWaybillOrder> waybillOrder) {
+        Date startBeforeMonth = Date.from(DateUtils.getStartMonth(1).atZone(ZoneId.systemDefault()).toInstant());
+        Date endBeforeMonth = Date.from(LocalDateTime.now().minusMonths(1).atZone(ZoneId.systemDefault()).toInstant());
+        return geUnloadAmount(waybillOrder, startBeforeMonth, endBeforeMonth);
+    }
+
+    private double geUnloadAmount(List<KwtWaybillOrder> waybillOrder, Date startBeforeMonth, Date endBeforeMonth) {
+        Set<Long> wOrderIds = waybillOrder.stream()
+                .filter(w -> w.getCreateTime() != null)
+                .filter(w -> !w.getCreateTime().before(startBeforeMonth) && w.getCreateTime().before(endBeforeMonth))
+                .map(KwtWaybillOrder::getId).collect(Collectors.toSet());
+        if (CollectionUtils.isEmpty(wOrderIds)){
+            return 0;
+        }
+        List<KwtWaybillOrderSubtask> beforeMonthWaybillOrderSubtasks = kwtWaybillOrderSubtaskRepository.findOneByWOrderIds(wOrderIds);
+        if (CollectionUtils.isEmpty(beforeMonthWaybillOrderSubtasks)){
+            return 0;
+        }
+        return beforeMonthWaybillOrderSubtasks.stream()
+                .filter(w -> w.getUnloadAmount() != null)
+                .mapToDouble(x -> x.getUnloadAmount().doubleValue())
+                .sum();
+    }
+
+    private double getUnloadTonThisMonth(List<KwtWaybillOrder> waybillOrder) {
+        Date startThisMonth = Date.from(DateUtils.getStartMonth(0).atZone(ZoneId.systemDefault()).toInstant());
+        Date endThisMonth = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
+        return geUnloadAmount(waybillOrder, startThisMonth, endThisMonth);
+
+    }
+
+    private double getUnloadTon(List<KwtWaybillOrder> waybillOrder) {
+        Date startMonth = Date.from(DateUtils.getStartMonth(1).atZone(ZoneId.systemDefault()).toInstant());
+        Date endMonth = Date.from(DateUtils.getStartMonth(0).atZone(ZoneId.systemDefault()).toInstant());
+        //获取运单id列表
+        return geUnloadAmount(waybillOrder, startMonth, endMonth);
+    }
+
+    private static long getTaskTotalBeforeYesterday(List<KwtWaybillOrder> waybillOrder) {
+        Date startOfDay = Date.from(DateUtils.getStartDay(2).atZone(ZoneId.systemDefault()).toInstant());
+        Date endOfDay = Date.from(DateUtils.getStartDay(1).atZone(ZoneId.systemDefault()).toInstant());
+        return waybillOrder.stream()
+                .filter(w -> w.getCreateTime() != null)
+                .filter(w -> !w.getCreateTime().before(startOfDay) && w.getCreateTime().before(endOfDay))
+                .count();
+    }
+
+    private static long getYesterdayTaskCount(List<KwtWaybillOrder> waybillOrder) {
+        Date startOfYesterday = Date.from(DateUtils.getStartDay(1).atZone(ZoneId.systemDefault()).toInstant());
+        Date startOfToday = Date.from(DateUtils.getStartDay(0).atZone(ZoneId.systemDefault()).toInstant());
+
+        // 昨日累计任务数
+        return waybillOrder.stream()
+                .filter(w -> w.getCreateTime() != null)
+                .filter(w -> !w.getCreateTime().before(startOfYesterday) && w.getCreateTime().before(startOfToday))
+                .count();
+    }
+
     /**
      * 获取高德地图apiKey
      * @return apiKey
@@ -58,4 +160,9 @@ public class KwfTaskService {
     public String getMapApikey() {
         return amapProperties.getKey();
     }
+
+    public LogOrderStatisticsVo getLogisticsOrderStatistics(LogisticsOrderStatisticsReq req) {
+        kwtLogisticsOrderRepository.query();
+        return null;
+    }
 }

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -382,6 +382,7 @@ public class kwfTruckTraceService {
      */
     public Void vehiclesTrajectory(@Valid VehiclesTrajectoryReq req) {
         //通过手机号查询司机以及车辆信息
+        req.setTs(DateUtils.format(new Date(),DateUtils.DATE_TIME_PATTERN));
         RDriverVo rDriverVo = fleetService.findDriverByPhone(req.getMobile());
         if (Objects.isNull(rDriverVo)){
             throw new BusinessException("司机信息不存在");