Parcourir la source

提交app端代码修改

chenxiaofei il y a 2 mois
Parent
commit
83bd051cc3
21 fichiers modifiés avec 485 ajouts et 29 suppressions
  1. 19 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  2. 28 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java
  3. 5 1
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  4. 88 0
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RFleetVo.java
  5. 28 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  6. 13 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetDriverRepository.java
  7. 6 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java
  8. 16 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTaskController.java
  9. 4 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  10. 3 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  11. 25 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/FleetRankingReq.java
  12. 14 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderStatisticsReq.java
  13. 22 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/TaskStatisticsReq.java
  14. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java
  15. 37 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/FleetRankingVo.java
  16. 23 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogOrderStatisticsVo.java
  17. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
  18. 15 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  19. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java
  20. 122 12
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java
  21. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

+ 19 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -258,4 +258,23 @@ public enum CarWaybillEnum {
         statuses.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
         return statuses;
     }
+
+    /**
+     * 已结单总数
+     * @return
+     */
+    public static List<Integer> accepted() {
+        return Arrays.asList(CarWaybillEnum.PENDING_ORDER.getCode(),
+                CarWaybillEnum.PENDING_VEHICLE.getCode(),
+                CarWaybillEnum.EXIT_COMPLETED.getCode(),
+                CarWaybillEnum.WAIT_LOADING.getCode(),
+                CarWaybillEnum.COMPLETION_LOADING.getCode(),
+                CarWaybillEnum.WAIT_UNLOADING.getCode(),
+                CarWaybillEnum.COMPLETION_UNLOADING.getCode(),
+                CarWaybillEnum.APPROVAL_TREAT.getCode(),
+                CarWaybillEnum.APPROVAL_PASS.getCode(),
+                CarWaybillEnum.APPROVAL_NO_PASS.getCode(),
+                CarWaybillEnum.APPROVAL_IN.getCode()
+        );
+    }
 }

+ 28 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java

@@ -10,7 +10,10 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 
 /**
@@ -819,4 +822,29 @@ public class DateUtils extends DateUtil {
                 .withDayOfMonth(1)
                 .atStartOfDay();
     }
+
+    /**
+     * 获取前N个月的年月列表(包含当前月)
+     */
+    public static List<YearMonth> getPreviousMonthsInclusive(int months) {
+        return IntStream.range(0, months)
+                .mapToObj(i -> YearMonth.now().minusMonths(i))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 获取前N个月的年月列表(不包含当前月)
+     */
+    public static List<YearMonth> getPreviousMonthsExclusive(int months) {
+        return IntStream.range(1, months + 1)
+                .mapToObj(i -> YearMonth.now().minusMonths(i))
+                .collect(Collectors.toList());
+    }
+
+    public static void main(String[] args) {
+        getPreviousMonthsExclusive(5).forEach(x->{
+            System.out.println(x.toString());
+        });
+
+    }
 }

+ 5 - 1
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -1,10 +1,10 @@
 package com.sckw.fleet.api;
 
 import com.sckw.fleet.api.model.vo.*;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author zk
@@ -91,4 +91,8 @@ public interface RemoteFleetService {
     RDriverVo findDriverByPhone(String mobile);
 
     RFleetDriverVo findFleetByDriveId(Long driveId);
+
+    List<RFleetDriverVo> findFleetDriveByEntId(Long entId);
+
+    List<RFleetVo> findFleetByEntId(Long entId);
 }

+ 88 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RFleetVo.java

@@ -0,0 +1,88 @@
+package com.sckw.fleet.api.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class RFleetVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2995208083876944213L;
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 备注
+     */
+
+    private String remark;
+
+    /**
+     * 状态:0正常/1锁定
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateBy;
+
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 删除标识(0正常/-1删除)
+     */
+    private Integer delFlag;
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 车队长
+     */
+    private Long captainId;
+
+    /**
+     * 车队名称
+     */
+    private String name;
+
+    /**
+     * 车队联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

+ 28 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author zk
@@ -271,6 +272,33 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         return rFleetDriverVo;
     }
 
+    @Override
+    public List<RFleetDriverVo> findFleetDriveByEntId(Long entId) {
+        List<KwfFleetDriver> fleetByDriver = kwfFleetDriverRepository.findFleetDriveByEntId(entId);
+        return fleetByDriver.stream().map(fleet -> {
+            RFleetDriverVo rFleetDriverVo = new RFleetDriverVo();
+            rFleetDriverVo.setFleetId(fleet.getFleetId());
+            rFleetDriverVo.setDriverId(fleet.getDriverId());
+            rFleetDriverVo.setEntId(fleet.getEntId());
+            return rFleetDriverVo;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<RFleetVo> findFleetByEntId(Long entId) {
+        List<KwfFleet> fleets = fleetRepository.findFleetByEntId(entId);
+        return fleets.stream().map(fleet -> {
+            RFleetVo rFleetVo = new RFleetVo();
+            rFleetVo.setEntId(fleet.getEntId());
+            rFleetVo.setCaptainId(fleet.getCaptainId());
+            rFleetVo.setName(fleet.getName());
+            rFleetVo.setContacts(fleet.getContacts());
+            rFleetVo.setPhone(fleet.getPhone());
+            rFleetVo.setId(fleet.getId());
+            return rFleetVo;
+        }).collect(Collectors.toList());
+    }
+
     private static RDriverVo getRDriverVo(KwfDriver kwfDriver) {
         RDriverVo rDriverVo = new RDriverVo();
         rDriverVo.setId(kwfDriver.getId());

+ 13 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetDriverRepository.java

@@ -7,6 +7,8 @@ import com.sckw.fleet.dao.KwfFleetDriverMapper;
 import com.sckw.fleet.model.KwfFleetDriver;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 
 /**
  * @author PC
@@ -29,4 +31,15 @@ public class KwfFleetDriverRepository extends ServiceImpl<KwfFleetDriverMapper,
                 .orderByDesc(BaseModel::getId)
                 .last("limit 1"));
     }
+
+    /**
+     * 通过企业id查询订单
+     * @param entId 企业id
+     * @return 返回订单列表
+     */
+    public List<KwfFleetDriver> findFleetDriveByEntId(Long entId) {
+        return list(Wrappers.<KwfFleetDriver>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwfFleetDriver::getEntId,entId));
+    }
 }

+ 6 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java

@@ -46,4 +46,10 @@ public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
                 .eq(BaseModel::getDelFlag,0)
                 .in(KwfFleet::getId, fleetIdList));
     }
+
+    public List<KwfFleet> findFleetByEntId(Long entId) {
+        return list(Wrappers.<KwfFleet>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwfFleet::getEntId,entId));
+    }
 }

+ 16 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTaskController.java

@@ -2,16 +2,17 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.response.BaseResult;
 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.service.KwfTaskService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 /**
@@ -30,8 +31,8 @@ public class KwfTaskController {
      */
     @GetMapping("/taskStatistics")
     @Operation(summary = "任务和车辆数据统计", description = "任务和车辆数据统计")
-    public BaseResult<TaskStatisticsVo> getTaskStatistics()  {
-        TaskStatisticsVo truckInfoVo = kwfTaskService.getTaskStatistics();
+    public BaseResult<TaskStatisticsVo> getTaskStatistics(TaskStatisticsReq req)  {
+        TaskStatisticsVo truckInfoVo = kwfTaskService.getTaskStatistics(req);
         return BaseResult.success(truckInfoVo);
     }
 
@@ -44,10 +45,15 @@ 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));
+    @PostMapping("/getWaybillOrderStatistics")
+    @Operation(summary = "获取物流运单数据", description = "获取物流运单数据")
+    public BaseResult<LogOrderStatisticsVo> getWaybillOrderStatistics(@Valid @RequestBody LogisticsOrderStatisticsReq req)  {
+        return BaseResult.success(kwfTaskService.getWaybillOrderStatistics(req));
     }
 
+    @GetMapping("/getFleetRanking")
+    @Operation(summary = "获取车队排名", description = "获取车队排名")
+    public BaseResult<FleetRankingVo> getFleetRanking(@Valid @RequestBody FleetRankingReq req)  {
+        return BaseResult.success(kwfTaskService.getFleetRanking(req));
+    }
 }

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.DecimalMin;
@@ -234,4 +235,7 @@ public class KwtLogisticsOrder implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    @TableField(exist = false)
+    private String yearAndMonth;
+
 }

+ 3 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java

@@ -175,4 +175,7 @@ public class KwtWaybillOrder implements Serializable {
     private Date taskEndTime;
 
     private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    private String yearAndMonth;
 }

+ 25 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/FleetRankingReq.java

@@ -0,0 +1,25 @@
+package com.sckw.transport.model.param;
+
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.NonNull;
+import org.springframework.validation.annotation.Validated;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author PC
+ */
+@Data
+@Valid
+public class FleetRankingReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+    /**
+     * 企业id
+     */
+   @NotNull( message = "企业id不能为空")
+    private Long entId;
+}

+ 14 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderStatisticsReq.java

@@ -1,20 +1,30 @@
 package com.sckw.transport.model.param;
 
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
+import org.springframework.validation.annotation.Validated;
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
  * @author PC
  */
 @Data
+@Validated
 public class LogisticsOrderStatisticsReq implements Serializable {
-    /**
-     * 统计类型(1-年,2-月 3.日 )
-     */
-    private String type;
+
+    @Serial
+    private static final long serialVersionUID = -7212758364745803687L;
     /**
      * 值
      */
+    @NotBlank(message = "值不能为空")
     private String value;
+    /**
+     * 企业id
+     */
+    @NotNull(message = "企业id不能为空")
+    private Long entId;
 }

+ 22 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/TaskStatisticsReq.java

@@ -0,0 +1,22 @@
+package com.sckw.transport.model.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class TaskStatisticsReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4679270490916242074L;
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+}

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

@@ -14,7 +14,7 @@ import java.util.Date;
  */
 @Data
 public class VehiclesTrajectoryReq {
-    private String ts;
+    //private String ts;
     /**
      * 手机号
      */

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

@@ -0,0 +1,37 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author PC
+ */
+@Data
+public class FleetRankingVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+    List<FleetRanking> fleetRankingList;
+
+    @Data
+    public static class FleetRanking implements Serializable{
+        /**
+         * 车队名称
+         */
+        private String fleetName;
+        /**
+         * 车队id
+         */
+        private String fleetId;
+        /**
+         * 运载次数
+         */
+        private String loadCount;
+        /**
+         * 运输重量
+         */
+        private String loadWeight;
+    }
+}

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

@@ -2,8 +2,31 @@ package com.sckw.transport.model.vo;
 
 import lombok.Data;
 
+import java.io.Serial;
 import java.io.Serializable;
+import java.util.List;
 
+/**
+ * @author PC
+ */
 @Data
 public class LogOrderStatisticsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5231734637702228843L;
+    private List<LogOrderStatistics> logOrderStatistics;
+    @Data
+    public static class LogOrderStatistics implements Serializable  {
+        @Serial
+        private static final long serialVersionUID = -2906763425198045309L;
+        private String key;
+        /**
+         * 派单总数
+         */
+        private String dispatchCount;
+        /**
+         * 完工总数
+         */
+        private String completeCount;
+    }
 }

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

@@ -1,13 +1,22 @@
 package com.sckw.transport.repository;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * @author PC
  */
 @Repository
 public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMapper, KwtLogisticsOrder> {
+    public List<KwtLogisticsOrder> queryByCreateTime(LocalDateTime localDateTime) {
+        return list(Wrappers.<KwtLogisticsOrder>lambdaQuery()
+                .ge(KwtLogisticsOrder::getCreateTime, localDateTime)
+                .eq(KwtLogisticsOrder::getDelFlag, 0));
+    }
 }

+ 15 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -9,8 +9,10 @@ import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import com.sckw.transport.model.KwtWaybillOrder;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @Author: 马超伟
@@ -60,4 +62,17 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .orderByDesc(KwtWaybillOrder::getId)
                 .last("limit 1"));
     }
+
+    public List<KwtWaybillOrder> queryByCreateTime(LocalDateTime startMonth,Long entId) {
+        return list(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .ge(KwtWaybillOrder::getCreateTime, startMonth)
+                .eq(Objects.nonNull(entId),KwtWaybillOrder::getEntId, entId)
+                .eq(KwtWaybillOrder::getDelFlag, 0));
+    }
+
+    public List<KwtWaybillOrder> findByEntId(Long entId) {
+        return list(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(Objects.nonNull(entId),KwtWaybillOrder::getEntId, entId)
+                .eq(KwtWaybillOrder::getDelFlag, 0));
+    }
 }

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

@@ -28,4 +28,10 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                 .eq(BaseModel::getDelFlag,0)
                 .in(KwtWaybillOrderSubtask::getWOrderId,wOrderIds));
     }
+
+    public List<KwtWaybillOrderSubtask> findByEntId(Long entId) {
+        return list(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwtWaybillOrderSubtask::getEntId,entId));
+    }
 }

+ 122 - 12
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java

@@ -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;
     }
 }

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

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