Quellcode durchsuchen

feat:运力调度接口

wangweiyu vor 4 Jahren
Ursprung
Commit
c40b1fce64

+ 3 - 3
src/main/java/com/aoyang/tms/controller/TruckMongoInfoController.java

@@ -91,7 +91,7 @@ public class TruckMongoInfoController {
             location.setLongitude(tmsMongoDoc.getLongitude() + "");
             location.setCarNumber(truckSimCard.getCarNumber());
             location.setTruckId(truckSimCard.getTruckId());
-            location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+            location.setDate(tmsMongoDoc.getCreateTime());
         }
         return new Result<>(location);
     }
@@ -129,7 +129,7 @@ public class TruckMongoInfoController {
             location.setLongitude(tmsMongoDoc.getLongitude() + "");
             location.setCarNumber(truckSimCard.getCarNumber());
             location.setTruckId(truckSimCard.getTruckId());
-            location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+            location.setDate(tmsMongoDoc.getCreateTime());
             result.add(location);
         }
         return new Result<>(result);
@@ -168,7 +168,7 @@ public class TruckMongoInfoController {
         location.setLongitude(tmsMongoDoc.getLongitude()+"");
         location.setCarNumber(truckSimCard.getCarNumber());
         location.setTruckId(truckSimCard.getTruckId());
-        location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+        location.setDate(tmsMongoDoc.getCreateTime());
         return new Result<>(location);
     }
 

+ 70 - 0
src/main/java/com/aoyang/tms/controller/WorkOrderManageController.java

@@ -0,0 +1,70 @@
+package com.aoyang.tms.controller;
+
+
+import com.alibaba.fastjson.JSON;
+import com.aoyang.common.param.PageParam;
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.controller.param.Truck;
+import com.aoyang.tms.controller.vo.TruckOrderManageVO;
+import com.aoyang.tms.controller.vo.TruckOrderStatisticsVO;
+import com.aoyang.tms.entity.WorkOrder;
+import com.aoyang.tms.service.WorkOrderService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+/**
+ * <p>
+    * 运单运单表 控制器
+    * </p>
+ *
+ * @author guoyong
+ * @since 2022-04-20
+ */
+@RestController
+@Slf4j
+@Api(value = "运营端运力调度相关接口")
+@RequestMapping("/tms/work_order_manage")
+public class WorkOrderManageController {
+
+    @Resource
+    private WorkOrderService workOrderService;
+
+    @ApiOperation(value = "获取运力调度列表",notes="")
+    @PostMapping("/list")
+    public Result<IPage<TruckOrderManageVO>> list(@RequestBody PageParam<Truck> pageParam) {
+        log.info("获取运力调度列表,调用/tms/work_order_manage/list param:{} ", JSON.toJSONString(pageParam));
+        if (pageParam == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        Page<TruckOrderManageVO> page = new Page<>(pageParam.getPage(), pageParam.getSize());
+        IPage<TruckOrderManageVO> records = null;
+        return new Result<>(records);
+    }
+
+    @ApiOperation(value = "运力调度统计汇总信息",notes="")
+    @PostMapping("/statistics")
+    public Result<TruckOrderStatisticsVO> statistics(@RequestHeader(value = "orgId") Long orgId,
+                                                     @RequestHeader(value = "userId") Long userId) {
+        TruckOrderStatisticsVO vo = new TruckOrderStatisticsVO();
+        vo.setLoadCount(100);
+        vo.setLoadGotoSpot(10);
+        vo.setLoadSubmit(20);
+        vo.setLoadWait(30);
+        vo.setUnloadCount(100);
+        vo.setUnloadGotoSpot(10);
+        vo.setUnloadSubmit(20);
+        vo.setUnloadWait(30);
+        return new Result<>(vo);
+    }
+
+}

+ 2 - 1
src/main/java/com/aoyang/tms/controller/vo/LocationVO.java

@@ -41,6 +41,7 @@ public class LocationVO implements Serializable {
     private String latitude;
 
     @ApiModelProperty(value = "位置时间")
-    private String localTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime date;
 
 }

+ 31 - 0
src/main/java/com/aoyang/tms/controller/vo/ReadInfo.java

@@ -0,0 +1,31 @@
+package com.aoyang.tms.controller.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description: 运单已读未读信息
+ * @Author guoyong
+ * @Date 2022/4/20 16:52
+ * @Version 1.0
+ */
+@Data
+@ApiModel(value="运单已读未读信息")
+public class ReadInfo {
+
+    @ApiModelProperty(value = "司机id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long driverId;
+
+    @ApiModelProperty(value = "司机姓名")
+    private String driverName;
+
+    @ApiModelProperty(value = "类型 0-驾驶员 1-押运员")
+    private Integer driverType;
+
+    @ApiModelProperty(value = "已读未读标识 0-未读 1-已读")
+    private Integer readFlag;
+
+}

+ 89 - 0
src/main/java/com/aoyang/tms/controller/vo/TruckOrderManageVO.java

@@ -0,0 +1,89 @@
+package com.aoyang.tms.controller.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+    * 运力调度列表实体VO
+ * </p>
+ *
+ */
+@Data
+@ApiModel(value="TruckOrderManageVO对象", description="运力调度信息")
+public class TruckOrderManageVO implements Serializable {
+
+    @ApiModelProperty(value = "卡车id")
+    private Long truckId;
+
+    @ApiModelProperty(value = "运力系统车辆状态,状态:1出车检查;2.作业中;3.收车中;4.收车后检查;5.已收车")
+    private Integer tmsStatus;
+
+    @ApiModelProperty(value = "物流公司id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "物流公司名")
+    private String orgName;
+
+    @ApiModelProperty(value = "物流公司名简称")
+    private String orgShortName;
+
+    @ApiModelProperty(value = "车牌号")
+    private String carNumber;
+
+    @ApiModelProperty(value = "挂车牌号")
+    private String trailerNumber;
+
+    @ApiModelProperty(value = "车辆所属部门id")
+    private Long deptId;
+
+    @ApiModelProperty(value = "车辆所属部门名称")
+    private Long deptName;
+
+    @ApiModelProperty(value = "位置经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "位置纬度")
+    private String latitude;
+
+    /**
+     * 执行中运单
+     */
+    @ApiModelProperty(value = "id,自增")
+    private Long id;
+
+    @ApiModelProperty(value = "行程周期id")
+    private Long cycleId;
+
+    @ApiModelProperty(value = "运单状态:0-待执行 1-前往 2-等待 3-成果报备 4-已完成 5-已关闭")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "运单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "1装车、2卸车")
+    private Integer type;
+
+    @ApiModelProperty(value = "作业地点id")
+    private Long spotId;
+
+    @ApiModelProperty(value = "作业地点名")
+    private String spotName;
+
+    @ApiModelProperty(value = "修改日期时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateDate;
+
+    @ApiModelProperty(value = "排队号")
+    private String queueNo;
+
+    @ApiModelProperty(value = "已读未读信息")
+    private List<ReadInfo> readInfos;
+
+}

+ 57 - 0
src/main/java/com/aoyang/tms/controller/vo/TruckOrderStatisticsVO.java

@@ -0,0 +1,57 @@
+package com.aoyang.tms.controller.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+    * 运力调度统计信息VO
+ * </p>
+ *
+ */
+@Data
+@ApiModel(value="TruckOrderStatisticsVO对象", description="运力调度统计信息")
+public class TruckOrderStatisticsVO implements Serializable {
+
+    @ApiModelProperty(value = "总运力")
+    private Integer total;
+
+    @ApiModelProperty(value = "装车占用运力")
+    private Integer loadCount;
+
+    @ApiModelProperty(value = "装车前往装车点")
+    private Integer loadGotoSpot;
+
+    @ApiModelProperty(value = "装车等待")
+    private Integer loadWait;
+
+    @ApiModelProperty(value = "装车成果报备中")
+    private Integer loadSubmit;
+
+    @ApiModelProperty(value = "卸车占用运力")
+    private Integer unloadCount;
+
+    @ApiModelProperty(value = "卸车前往装车点")
+    private Integer unloadGotoSpot;
+
+    @ApiModelProperty(value = "卸车等待")
+    private Integer unloadWait;
+
+    @ApiModelProperty(value = "卸车成果报备中")
+    private Integer unloadSubmit;
+
+    @ApiModelProperty(value = "剩余运力")
+    private Integer surplusCount;
+
+    @ApiModelProperty(value = "未派单")
+    private Integer unAllocated;
+
+    @ApiModelProperty(value = "未执行运单")
+    private Integer unExecuted;
+
+}

+ 2 - 0
src/main/java/com/aoyang/tms/mapper/WorkOrderMapper.java

@@ -2,6 +2,7 @@ package com.aoyang.tms.mapper;
 
 import com.aoyang.tms.entity.WorkOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Component;
 
 /**
  * <p>
@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author guoyong
  * @since 2022-04-20
  */
+@Component
 public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
 
 }

+ 8 - 0
src/main/java/com/aoyang/tms/service/CommonService.java

@@ -6,6 +6,8 @@ import com.aoyang.tms.feign.result.Truck;
 import com.aoyang.tms.feign.result.TruckDriver;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -63,4 +65,10 @@ public interface CommonService {
      */
     LocationVO getLocation(Long truckId);
 
+
+    /**
+     * 根据时间根据truckId获取车辆信息
+     */
+    LocationVO getLocationByDate(Long truckId, LocalDateTime date);
+
 }

+ 19 - 0
src/main/java/com/aoyang/tms/service/WorkOrderService.java

@@ -1,6 +1,12 @@
 package com.aoyang.tms.service;
 
+import com.aoyang.common.param.PageParam;
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.controller.param.Truck;
+import com.aoyang.tms.controller.vo.TruckOrderManageVO;
+import com.aoyang.tms.controller.vo.TruckOrderStatisticsVO;
 import com.aoyang.tms.entity.WorkOrder;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -13,4 +19,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface WorkOrderService extends IService<WorkOrder> {
 
+    /**
+     * 根据组织id查询运力调度统计汇总信息
+     * @param orgId
+     * @return
+     */
+    TruckOrderStatisticsVO getTruckOrderStatistics(Long orgId);
+
+    /**
+     * 分页查询运力调度统计列表
+     * @return
+     */
+    Result<IPage<TruckOrderManageVO>> getTruckOrderStatistics(PageParam<Truck> pageParam);
+
 }

+ 40 - 8
src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java

@@ -18,6 +18,8 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -94,22 +96,52 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public LocationVO getLocation(Long truckId) {
+        LocationVO location = null;
         QueryWrapper<TruckSimCard> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("truck_id", truckId);
         TruckSimCard truckSimCard = truckSimCardService.getOne(queryWrapper);
         if (truckSimCard == null) {
             log.error("绑定信息不存在 truckId:{}", truckId);
-            return null;
+            return location;
         }
         Query query = new Query(Criteria.where("clientId").is(truckSimCard.getClientId()));
-        query.with(new Sort(Sort.Direction.DESC, "createTime"));
+        query.with(new Sort(Sort.Direction.DESC, "dateTime"));
         TmsMongoDoc tmsMongoDoc = mongoTemplate.findOne(query, TmsMongoDoc.class);
-        LocationVO location = new LocationVO();
-        location.setLatitude(tmsMongoDoc.getLatitude() + "");
-        location.setLongitude(tmsMongoDoc.getLongitude() + "");
-        location.setCarNumber(truckSimCard.getCarNumber());
-        location.setTruckId(truckSimCard.getTruckId());
-        location.setLocalTime("20" + tmsMongoDoc.getDateTime());
+        if (location != null) {
+            location = new LocationVO();
+            location.setLatitude(tmsMongoDoc.getLatitude() + "");
+            location.setLongitude(tmsMongoDoc.getLongitude() + "");
+            location.setCarNumber(truckSimCard.getCarNumber());
+            location.setTruckId(truckSimCard.getTruckId());
+            location.setDate(tmsMongoDoc.getCreateTime());
+        }
+        return location;
+    }
+
+    @Override
+    public LocationVO getLocationByDate(Long truckId, LocalDateTime date) {
+        LocationVO location = null;
+        QueryWrapper<TruckSimCard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("truck_id", truckId);
+        TruckSimCard truckSimCard = truckSimCardService.getOne(queryWrapper);
+        if (truckSimCard == null) {
+            log.error("绑定信息不存在 truckId:{}", truckId);
+            return location;
+        }
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getClientId());
+        criteria.andOperator(Criteria.where("dateTime").gt(date));
+        Query query = new Query(criteria);
+        query.with(new Sort(Sort.Direction.ASC, "dateTime"));
+        TmsMongoDoc tmsMongoDoc = mongoTemplate.findOne(query, TmsMongoDoc.class);
+        if (location != null) {
+            location = new LocationVO();
+            location.setLatitude(tmsMongoDoc.getLatitude() + "");
+            location.setLongitude(tmsMongoDoc.getLongitude() + "");
+            location.setCarNumber(truckSimCard.getCarNumber());
+            location.setTruckId(truckSimCard.getTruckId());
+            location.setDate(tmsMongoDoc.getCreateTime());
+        }
         return location;
     }
+
 }

+ 116 - 0
src/main/java/com/aoyang/tms/service/impl/WorkOrderServiceImpl.java

@@ -1,11 +1,29 @@
 package com.aoyang.tms.service.impl;
 
+import com.aoyang.common.param.PageParam;
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.common.WorkOrderEnum;
+import com.aoyang.tms.controller.param.Truck;
+import com.aoyang.tms.controller.vo.LocationVO;
+import com.aoyang.tms.controller.vo.TruckOrderManageVO;
+import com.aoyang.tms.controller.vo.TruckOrderStatisticsVO;
 import com.aoyang.tms.entity.WorkOrder;
 import com.aoyang.tms.mapper.WorkOrderMapper;
+import com.aoyang.tms.service.CommonService;
 import com.aoyang.tms.service.WorkOrderService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.*;
+
 /**
  * <p>
  * 运单运单表 服务实现类
@@ -17,4 +35,102 @@ import org.springframework.stereotype.Service;
 @Service
 public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
 
+    @Resource
+    private CommonService commonService;
+    @Resource
+    private WorkOrderService workOrderService;
+    @Resource
+    private WorkOrderMapper workOrderMapper;
+
+    @Override
+    public TruckOrderStatisticsVO getTruckOrderStatistics(Long orgId) {
+        TruckOrderStatisticsVO vo = new TruckOrderStatisticsVO();
+        vo.setTotal(commonService.findOrgTruckNumber(orgId, null));
+        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("org_id", orgId);
+        //装车
+        vo.setLoadWait(getOrgOrderCount(orgId, 1, WorkOrderEnum.ZHUANGCHE_WAIT.orderStatus()));
+        vo.setLoadGotoSpot(getOrgOrderCount(orgId, 1, WorkOrderEnum.GOTO_ZHUANGCHE_SPOT.orderStatus()));
+        vo.setLoadSubmit(getOrgOrderCount(orgId,  1, WorkOrderEnum.ZHUANGCHE_RESULT_SUBMIT.orderStatus()));
+        vo.setLoadCount(vo.getLoadGotoSpot() + vo.getLoadGotoSpot() + vo.getLoadSubmit());
+        //卸车
+        vo.setUnloadWait(getOrgOrderCount(orgId,  2, WorkOrderEnum.XIECHE_WAIT.orderStatus()));
+        vo.setUnloadGotoSpot(getOrgOrderCount(orgId,  2, WorkOrderEnum.GOTO_XIECHE_SPOT.orderStatus()));
+        vo.setUnloadSubmit(getOrgOrderCount(orgId,  2, WorkOrderEnum.XIECHE_RESULT_SUBMIT.orderStatus()));
+        vo.setUnloadCount(vo.getUnloadGotoSpot() + vo.getUnloadGotoSpot() + vo.getUnloadSubmit());
+        //剩余运力
+        vo.setSurplusCount(vo.getTotal() - vo.getLoadCount() - vo.getUnloadCount());
+        //未执行运单
+        vo.setUnExecuted(getOrgOrderCount(orgId, null, WorkOrderEnum.TODO.orderStatus()));
+        //未派单
+        vo.setUnAllocated(0);
+
+        return vo;
+    }
+
+    private int getOrgOrderCount(Long orgId, Integer type, Integer status) {
+        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>().eq("org_id", orgId).
+                eq("order_status", status);
+        if (type != null) {
+            queryWrapper.eq("type", type);
+        }
+        return workOrderMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public Result<IPage<TruckOrderManageVO>> getTruckOrderStatistics(PageParam<Truck> pageParam) {
+        if (pageParam.getParam() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        // TODO strategy接口
+        Result<IPage<Truck>> trucksResult = null;
+        if (!commonService.verifyResult(trucksResult)) {
+            return new Result<>(trucksResult.getCode(), trucksResult.getMessage());
+        }
+        IPage<Truck> records = trucksResult.getData();
+        List<Truck> trucks = records.getRecords();
+        IPage<TruckOrderManageVO> truckOrderRecords = new Page<TruckOrderManageVO>();
+        if (records == null || trucks.size() == 0) {
+            return new Result<>(truckOrderRecords);
+        }
+        truckOrderRecords.setTotal(records.getTotal());
+        truckOrderRecords.setCurrent(records.getCurrent());
+        truckOrderRecords.setSize(records.getSize());
+        List<TruckOrderManageVO> truckOrderList = new ArrayList<>();
+        for (Truck truck : trucks) {
+            TruckOrderManageVO vo = new TruckOrderManageVO();
+            BeanUtils.copyProperties(truck, vo);
+            QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("truck_id", truck.getTruckId());
+            List<Integer> statuses = new ArrayList<>();
+            statuses.add(10);
+            statuses.add(20);
+            statuses.add(30);
+            queryWrapper.in("order_status", statuses);
+            WorkOrder order = workOrderService.getOne(queryWrapper);
+            if (order != null) {
+                vo.setCycleId(order.getCycleId());
+                vo.setOrderNo(order.getOrderNo());
+                vo.setOrderStatus(order.getOrderStatus());
+                vo.setSpotId(order.getSpotId());
+                vo.setSpotName(order.getSpotName());
+                vo.setUpdateDate(order.getUpdateDate());
+                if (order.getOrderStatus().equals(WorkOrderEnum.ZHUANGCHE_WAIT.orderStatus())) {
+                    // 等待中状态运单排队号
+                    vo.setQueueNo(order.getQueueNo());
+                }
+                LocationVO location = commonService.getLocation(truck.getTruckId());
+                if (location != null) {
+                    vo.setLatitude(location.getLatitude());
+                    vo.setLongitude(location.getLongitude());
+                }
+            }
+            truckOrderList.add(vo);
+        }
+
+        truckOrderRecords.setRecords(truckOrderList);
+        return new Result<>(truckOrderRecords);
+    }
+
+
 }