ソースを参照

Merge remote-tracking branch 'origin/master'

wangweiyu 4 年 前
コミット
2e3bab2de4
23 ファイル変更771 行追加58 行削除
  1. 16 1
      src/main/java/com/aoyang/tms/common/ErrCodeEnum.java
  2. 2 2
      src/main/java/com/aoyang/tms/common/WorkOrderEnum.java
  3. 49 0
      src/main/java/com/aoyang/tms/controller/JxlsExportTestController.java
  4. 42 0
      src/main/java/com/aoyang/tms/controller/WorkOrderController.java
  5. 21 9
      src/main/java/com/aoyang/tms/controller/WorkerController.java
  6. 69 0
      src/main/java/com/aoyang/tms/controller/vo/WorkLogTplVO.java
  7. 3 0
      src/main/java/com/aoyang/tms/controller/vo/WorkOrderPageListVO.java
  8. 3 1
      src/main/java/com/aoyang/tms/controller/vo/WorkerInfo.java
  9. 5 0
      src/main/java/com/aoyang/tms/entity/TruckCheckInfo.java
  10. 12 0
      src/main/java/com/aoyang/tms/entity/WorkCycle.java
  11. 8 0
      src/main/java/com/aoyang/tms/entity/WorkSpot.java
  12. 20 0
      src/main/java/com/aoyang/tms/service/JxlsExportTestService.java
  13. 16 5
      src/main/java/com/aoyang/tms/service/WorkOrderService.java
  14. 2 1
      src/main/java/com/aoyang/tms/service/WorkerService.java
  15. 26 11
      src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java
  16. 97 0
      src/main/java/com/aoyang/tms/service/impl/JxlsExportTestServiceImpl.java
  17. 11 0
      src/main/java/com/aoyang/tms/service/impl/WorkOrderServiceImpl.java
  18. 14 8
      src/main/java/com/aoyang/tms/service/impl/WorkerServiceImpl.java
  19. 171 0
      src/main/java/com/aoyang/tms/util/FileUtil.java
  20. 136 0
      src/main/java/com/aoyang/tms/util/JxlsUtils.java
  21. 39 19
      src/main/resources/mapper/TruckCheckInfoMapper.xml
  22. 4 1
      src/main/resources/mapper/WorkCycleMapper.xml
  23. 5 0
      src/main/resources/mapper/WorkSpotMapper.xml

+ 16 - 1
src/main/java/com/aoyang/tms/common/ErrCodeEnum.java

@@ -329,7 +329,22 @@ public enum ErrCodeEnum {
     /**
      * 该部门下面存在卡车
      */
-    DEPARTMENT_EXIST_TRUCK(2309, "该部门下面存在卡车")
+    DEPARTMENT_EXIST_TRUCK(2309, "该部门下面存在卡车"),
+
+    /**
+     * 该运单状态下不允许中止
+     */
+    NO_STOP(2310, "该运单状态下不允许中止"),
+
+    /**
+     * 已完成运单状态下才允许关闭
+     */
+    NO_CLOSE(2311, "已完成运单状态下才允许关闭"),
+
+    /**
+     * 该运单状态下不修改
+     */
+    NO_UPDATE(2312, "该运单状态下不修改")
     ;
 
     private int code;

+ 2 - 2
src/main/java/com/aoyang/tms/common/WorkOrderEnum.java

@@ -17,7 +17,7 @@ public enum WorkOrderEnum {
     ZHUANGCHE_WAIT(20, "装车等待"),
 
     //装车磅单报备中
-    ZHUANGCHE_RESULT_SUBMIT(30, "磅单报备"),
+    ZHUANGCHE_RESULT_SUBMIT(30, "磅单报备"),
 
     //前往卸车点
     GOTO_XIECHE_SPOT(10, "前往卸车点"),
@@ -26,7 +26,7 @@ public enum WorkOrderEnum {
     XIECHE_WAIT(20, "卸车等待"),
 
     //卸车磅单报备
-    XIECHE_RESULT_SUBMIT(30, "磅单报备"),
+    XIECHE_RESULT_SUBMIT(30, "磅单报备"),
 
     //已完成
     COMPLETED(40, "已完成"),

+ 49 - 0
src/main/java/com/aoyang/tms/controller/JxlsExportTestController.java

@@ -0,0 +1,49 @@
+package com.aoyang.tms.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.aoyang.tms.entity.TmsGasFee;
+import com.aoyang.tms.service.JxlsExportTestService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 车辆行车日志表 控制器
+ * </p>
+ *
+ * @author guoyong
+ * @since 2022-04-20
+ */
+@RestController
+@Slf4j
+@Api(value = "行车日志相关接口")
+@RequestMapping("/tms/jxls_export")
+public class JxlsExportTestController {
+
+    @Resource
+    private JxlsExportTestService jxlsExportTestService;
+
+    @ApiOperation(value = "下载行车日志,测试自用")
+    @PostMapping("/download_test")
+    public StreamingResponseBody download(HttpServletResponse response, @RequestBody TmsGasFee param) {
+        log.info("下载行车日志,导出专用,调用/tms/jxls_export/download_test,参数:{}", JSON.toJSONString(param));
+        if (null == param) {
+            log.error("download_list param is null");
+        }
+        try {
+            return jxlsExportTestService.download(param, response);
+        } catch (Exception e) {
+            log.error("download_list " + e.getMessage() + ":{}", e);
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/aoyang/tms/controller/WorkOrderController.java

@@ -78,4 +78,46 @@ public class WorkOrderController {
         return new Result<>(workOrderService.getById(param));
     }
 
+    @ApiOperation(value = "根据id中止运单(运单分页列表PC端)", notes = "必传参数:id,orderStatus=60")
+    @PostMapping("/stop")
+    public Result stop(@RequestBody WorkOrder param) {
+        log.info("根据id中止运单(运单分页列表PC端),调用/tms/work_order/stop,参数:{}", JSON.toJSONString(param));
+        if (param == null || param.getId() == null || param.getOrderStatus() != 60) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkOrder workOrder = workOrderService.getById(param);
+        if (workOrder.getOrderStatus() != 0 && workOrder.getOrderStatus() != 10 && workOrder.getOrderStatus() != 20) {
+            return new Result<>(ErrCodeEnum.NO_STOP.getCode(), ErrCodeEnum.NO_STOP.getMessage());
+        }
+        return new Result<>(workOrderService.saveOrUpdate(param));
+    }
+
+    @ApiOperation(value = "根据id关闭运单(运单分页列表PC端)", notes = "必传参数:id,orderStatus=50")
+    @PostMapping("/close")
+    public Result close(@RequestBody WorkOrder param) {
+        log.info("根据id中止运单(运单分页列表PC端),调用/tms/work_order/close,参数:{}", JSON.toJSONString(param));
+        if (param == null || param.getId() == null || param.getOrderStatus() != 50) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkOrder workOrder = workOrderService.getById(param);
+        if (workOrder.getOrderStatus() != 40) {
+            return new Result<>(ErrCodeEnum.NO_CLOSE.getCode(), ErrCodeEnum.NO_CLOSE.getMessage());
+        }
+        return new Result<>(workOrderService.saveOrUpdate(param));
+    }
+
+    @ApiOperation(value = "根据id修改运单(运单分页列表PC端,已完成40已关闭50运单可改)", notes = "必传参数:id,orderStatus=60")
+    @PostMapping("/pc_update")
+    public Result pcUpdate(@RequestBody WorkOrder param) {
+        log.info("根据id修改运单(运单分页列表PC端,已完成已关闭运单可改),调用/tms/work_order/pc_update,参数:{}", JSON.toJSONString(param));
+        if (param == null || param.getId() == null || param.getOrderStatus() != 50) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkOrder workOrder = workOrderService.getById(param);
+        if (workOrder.getOrderStatus() != 40 && workOrder.getOrderStatus() != 50) {
+            return new Result<>(ErrCodeEnum.NO_UPDATE.getCode(), ErrCodeEnum.NO_UPDATE.getMessage());
+        }
+        return new Result<>(workOrderService.saveOrUpdate(param));
+    }
+
 }

+ 21 - 9
src/main/java/com/aoyang/tms/controller/WorkerController.java

@@ -84,7 +84,7 @@ public class WorkerController {
         WorkOrderVO vo = new WorkOrderVO();
         WorkOrder workerInfo1 = workOrderService.getById(workOrder.getId());
         if (workerInfo1 != null) {
-            //取ExecuteTime第一条GPS上报时间
+            //取ExecuteTime第一条GPS上报时间作为开始运单时间,累计用时
             LocationVO locationVO = commonService.getLocationByDate(workerInfo1.getTruckId(), workerInfo1.getExecuteTime());
             if (locationVO != null) {
                 vo.setTime(DateUtils.betweenTime(locationVO.getDate(), LocalDateTime.now()));
@@ -287,7 +287,7 @@ public class WorkerController {
         return new Result<>(flag);
     }
 
-    @ApiOperation(value = "1.开始执行运单", notes = "点击开始执行运单按钮")
+    @ApiOperation(value = "1.开始执行装卸车运单", notes = "点击-开始执行装卸车运单-按钮")
     @PostMapping("/start_order")
     public Result startOrder(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrder) {
         log.info("开始执行运单,/tms/worker/start_order,参数:{}", JSON.toJSONString(workOrder));
@@ -299,26 +299,38 @@ public class WorkerController {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        //TODO 1.车辆进入出车前检车状态,2.订单进入前往装车点状态,3.并记行车日志,4.创建行程周期
+        //1.车辆进入出车前检车状态,2.订单进入前往装车点状态,3.并记行车日志,4.创建行程周期
         workOrder.setExecuteTime(LocalDateTime.now());
         Boolean flag = workerService.startOrder(userId, utf8Name, workOrder);
         return new Result<>(flag);
     }
 
-    @ApiOperation(value = "2.完成出车前检查,开始装卸车作业", notes = "点击完成出车前检查,开始作业按钮")
+    @ApiOperation(value = "2.完成出车前检查,开始装卸车作业", notes = "点击-完成出车前检查,开始出车作业-按钮")
     @PostMapping("/start_work")
-    public Result starWork(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrder) {
-        log.info("完成出车前检查,开始作业,/tms/worker/start_work,参数:{}", JSON.toJSONString(workOrder));
-        if (workOrder == null || workOrder.getId() == null) {
+    public Result starWork(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody TruckCheckInfo truckCheckInfo) {
+        log.info("完成出车前检查,开始作业,/tms/worker/start_work,参数:{}", JSON.toJSONString(truckCheckInfo));
+        if (truckCheckInfo == null || truckCheckInfo.getOrderId() == null || truckCheckInfo.getType() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+        //出车检查
+        if (truckCheckInfo.getType() == 1) {
+            if (StringUtils.isBlank(truckCheckInfo.getCheckUrl())) {
+                return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+            }
+        }
+        //出车检查
+        if (truckCheckInfo.getType() == 2) {
+            if (StringUtils.isBlank(truckCheckInfo.getTrip()) || StringUtils.isBlank(truckCheckInfo.getTripUrl()) || StringUtils.isBlank(truckCheckInfo.getCheckUrl())) {
+                return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+            }
+        }
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        //TODO 1.车辆进入作业中状态,2.订单进入前往装车点状态,3.并记行车日志
-        Boolean flag = workerService.starWork(userId, utf8Name, workOrder);
+        //1.车辆进入作业中状态,2.订单进入前往装车点状态,3.并记行车日志
+        Boolean flag = workerService.starWork(userId, utf8Name, truckCheckInfo);
         return new Result<>(flag);
     }
 

+ 69 - 0
src/main/java/com/aoyang/tms/controller/vo/WorkLogTplVO.java

@@ -0,0 +1,69 @@
+package com.aoyang.tms.controller.vo;
+
+import com.aoyang.tms.entity.TmsGasFee;
+import com.aoyang.tms.entity.TmsOtherFee;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class WorkLogTplVO {
+
+    @ApiModelProperty(value = "线路费用列表")
+    private List<TmsLineCostDetail> tmsLineCostList;
+
+    @ApiModelProperty(value = "燃气费用列表")
+    private List<TmsGasFee> tmsGasFeeList;
+
+    @ApiModelProperty(value = "其他费用列表")
+    private TmsOtherFee tmsOtherFee;
+
+    @ApiModelProperty(value = "车牌号")
+    private String carNumber;
+
+    @ApiModelProperty(value = "挂车车牌号")
+    private String trailerNumber;
+
+    @ApiModelProperty(value = "行车日志表头日期")
+    private String logDate;
+
+    @ApiModelProperty(value = "司机1姓名")
+    private String driverNameOne;
+
+    @ApiModelProperty(value = "司机2姓名")
+    private String driverNameTwo;
+
+    @ApiModelProperty(value = "押运员姓名")
+    private String escortName;
+
+    @ApiModelProperty(value = "开始公里数")
+    private Integer startKilometre;
+
+    @ApiModelProperty(value = "结束公里数")
+    private Integer endKilometre;
+
+    @ApiModelProperty(value = "总共公里数")
+    private Integer sumKilometre;
+
+    @ApiModelProperty(value = "开始时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "总计时间")
+    private String betweenTime;
+
+    @ApiModelProperty(value = "司机1签字url")
+    private String driverOneSignUrl;
+
+    @ApiModelProperty(value = "司机2签字url")
+    private String driverTwoSignUrl;
+
+    @ApiModelProperty(value = "押运员签字url")
+    private String escortSignUrl;
+}

+ 3 - 0
src/main/java/com/aoyang/tms/controller/vo/WorkOrderPageListVO.java

@@ -47,4 +47,7 @@ public class WorkOrderPageListVO {
     @ApiModelProperty(value = "已读未读信息")
     private List<ReadInfo> readInfos;
 
+    @ApiModelProperty(value = "(操作可能需要此状态)运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已报废60")
+    private Integer orderStatus;
+
 }

+ 3 - 1
src/main/java/com/aoyang/tms/controller/vo/WorkerInfo.java

@@ -64,6 +64,9 @@ public class WorkerInfo {
     @ApiModelProperty(value = "挂车牌号")
     private String trailerNumber;
 
+    @ApiModelProperty(value = "当前作业订单ID")
+    private Long orderId;
+
     @ApiModelProperty(value = "订单状态,待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已作废60")
     private int orderStatus;
 
@@ -95,5 +98,4 @@ public class WorkerInfo {
     private String lastTime;
 
 
-
 }

+ 5 - 0
src/main/java/com/aoyang/tms/entity/TruckCheckInfo.java

@@ -40,6 +40,11 @@ public class TruckCheckInfo implements Serializable {
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long cycleId;
 
+    @ApiModelProperty(value = "装卸车订单id")
+    @TableField("order_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long orderId;
+
     @ApiModelProperty(value = "物流公司id")
     @TableField("org_id")
     @JsonFormat(shape = JsonFormat.Shape.STRING)

+ 12 - 0
src/main/java/com/aoyang/tms/entity/WorkCycle.java

@@ -109,6 +109,18 @@ public class WorkCycle implements Serializable {
     @TableField("end_time")
     private LocalDateTime endTime;
 
+    @ApiModelProperty(value = "司机1签字url")
+    @TableField("driver_one_sign_url")
+    private String driverOneSignUrl;
+
+    @ApiModelProperty(value = "司机2签字url")
+    @TableField("driver_two_sign_url")
+    private String driverTwoSignUrl;
+
+    @ApiModelProperty(value = "押运员签字url")
+    @TableField("escort_sign_url")
+    private String escortSignUrl;
+
     @ApiModelProperty(value = "创建人id")
     @TableField("creater")
     @JsonFormat(shape = JsonFormat.Shape.STRING)

+ 8 - 0
src/main/java/com/aoyang/tms/entity/WorkSpot.java

@@ -64,6 +64,14 @@ public class WorkSpot implements Serializable {
     @TableField("location")
     private String location;
 
+    @ApiModelProperty(value = "联系人")
+    @TableField("contact_name")
+    private String contactName;
+
+    @ApiModelProperty(value = "联系人电话")
+    @TableField("contact_phone")
+    private String contactPhone;
+
     @ApiModelProperty(value = "作业点经纬度数据集")
     @TableField("region_data")
     private String regionData;

+ 20 - 0
src/main/java/com/aoyang/tms/service/JxlsExportTestService.java

@@ -0,0 +1,20 @@
+package com.aoyang.tms.service;
+
+import com.aoyang.tms.entity.TmsGasFee;
+import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+public interface JxlsExportTestService {
+
+    /**
+     * @return
+     * @Author chengang
+     * @Description 下载行车日志,财务导出专用
+     * @Date 2022/4/13
+     * @Param
+     **/
+    StreamingResponseBody download(TmsGasFee param, HttpServletResponse response) throws IOException;
+}

+ 16 - 5
src/main/java/com/aoyang/tms/service/WorkOrderService.java

@@ -28,16 +28,26 @@ import java.util.List;
 public interface WorkOrderService extends IService<WorkOrder> {
 
     /**
+     * @return
+     * @Author guoyong
+     * @Description 查询卡车当前行车周期最后一笔运单
+     * @Date 2022/4/24
+     * @Param
+     **/
+    WorkOrder findCurrentWorkOrder(Long truckId);
+
+    /**
+     * @return
      * @Author guoyong
      * @Description 根据卡车id获取待执行运单
-     * @Date  2022/4/22
-     * @Param  userId,当前用户id
-     * @return 
-    **/
-    List<WorkOrderVO> findWorkOrderList(Long userId,WorkOrder workOrder);
+     * @Date 2022/4/22
+     * @Param userId, 当前用户id
+     **/
+    List<WorkOrderVO> findWorkOrderList(Long userId, WorkOrder workOrder);
 
     /**
      * 根据组织id查询运力调度统计汇总信息
+     *
      * @param orgId
      * @return
      */
@@ -45,6 +55,7 @@ public interface WorkOrderService extends IService<WorkOrder> {
 
     /**
      * 分页查询运力调度统计列表
+     *
      * @return
      */
     Result<IPage<TruckOrderManageVO>> getTruckOrderManageList(PageParam<WorkManagePageParam> pageParam);

+ 2 - 1
src/main/java/com/aoyang/tms/service/WorkerService.java

@@ -3,6 +3,7 @@ package com.aoyang.tms.service;
 import com.aoyang.common.result.Result;
 import com.aoyang.tms.controller.vo.LocationVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
+import com.aoyang.tms.entity.TruckCheckInfo;
 import com.aoyang.tms.entity.User;
 import com.aoyang.tms.entity.WorkOrder;
 import com.aoyang.tms.feign.result.Org;
@@ -33,7 +34,7 @@ public interface WorkerService {
      * @Param
      * @return
     **/
-    Boolean starWork(Long userId,String userName, WorkOrder workOrder);
+    Boolean starWork(Long userId,String userName, TruckCheckInfo truckCheckInfo);
     /**
      * @Author guoyong
      * @Description 上报已到达装卸车点

+ 26 - 11
src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java

@@ -2,6 +2,7 @@ package com.aoyang.tms.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.WorkOrderEnum;
 import com.aoyang.tms.controller.vo.LocationVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
 import com.aoyang.tms.entity.*;
@@ -34,24 +35,20 @@ public class CommonServiceImpl implements CommonService {
 
     @Resource
     private StrategyFeignClient strategyFeignClient;
-
     @Resource
     private UserFeignClient userFeignClient;
-
     @Resource
     private MongoTemplate mongoTemplate;
-
     @Resource
     private TruckService truckService;
-
     @Resource
     private TruckDriverService truckDriverService;
-
     @Resource
     private TruckSimCardService truckSimCardService;
-
     @Resource
     private TruckEscortService truckEscortService;
+    @Resource
+    private WorkOrderService workOrderService;
 
     @Override
     public Org findOrg(Long orgId) {
@@ -79,12 +76,30 @@ public class CommonServiceImpl implements CommonService {
             workerInfo.setTrailerNumber(truck.getTrailerNumber());
             workerInfo.setDeptId(truck.getDeptId());
             workerInfo.setDeptName(truck.getDeptName());
+            workerInfo.setIsZhongche("空车");
+            WorkOrder workOrder = workOrderService.findCurrentWorkOrder(truckId);
+            if (workOrder != null) {
+                //装车订单判断
+                if (workOrder.getType() == 1) {
+                    if (workOrder.getOrderStatus().equals(WorkOrderEnum.ZHUANGCHE_RESULT_SUBMIT.orderStatus()) || workOrder.getOrderStatus().equals(WorkOrderEnum.COMPLETED.orderStatus()) || workOrder.getOrderStatus().equals(WorkOrderEnum.CLOSED.orderStatus())) {
+                        workerInfo.setIsZhongche("重车");
+                    } else {
+                        workerInfo.setIsZhongche("空车");
+                    }
+                }
 
-            //已收车
-            if (truck.getTmsStatus() == 0) {
-                workerInfo.setIsZhongche("空车");
-                workerInfo.setZhuangcheNumber(0);
-                workerInfo.setXiecheNumber(0);
+                //卸车订单判断
+                if (workOrder.getType() == 2) {
+                    if (workOrder.getOrderStatus().equals(WorkOrderEnum.COMPLETED.orderStatus())) {
+                        if (Double.valueOf(workOrder.getJingWeight()) > 0) {
+                            workerInfo.setIsZhongche("重车");
+                        } else {
+                            workerInfo.setIsZhongche("空车");
+                        }
+                    } else {
+                        workerInfo.setIsZhongche("空车");
+                    }
+                }
             }
         }
         log.info("findTruckInfo findTruckDrivers 参数:{}", JSON.toJSONString(truckId));

+ 97 - 0
src/main/java/com/aoyang/tms/service/impl/JxlsExportTestServiceImpl.java

@@ -0,0 +1,97 @@
+package com.aoyang.tms.service.impl;
+
+
+import com.aoyang.tms.entity.TmsGasFee;
+import com.aoyang.tms.service.CommonService;
+import com.aoyang.tms.service.JxlsExportTestService;
+import com.aoyang.tms.service.TmsGasFeeService;
+import com.aoyang.tms.util.FileUtil;
+import com.aoyang.tms.util.JxlsUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class JxlsExportTestServiceImpl implements JxlsExportTestService {
+
+    @Resource
+    private TmsGasFeeService tmsGasFeeService;
+
+    @Override
+    public StreamingResponseBody download(TmsGasFee param, HttpServletResponse response) throws IOException {
+
+
+        TmsGasFee tmsGasFee = tmsGasFeeService.getById(param);
+        byte imageBytes[] = getImageBytes("/cn/chendd/examples/images/splash.jpg");
+
+        // 获取模板文件
+        String tplfileName = "circle_sign_tpl.xlsx";
+        String tmpFileName = FileUtil.getTmpFileName(FileUtil.getFilePrefix(tplfileName));
+        String tmpFilePath = FileUtils.getTempDirectoryPath() + File.separator + tmpFileName;
+        // 写文件
+        OutputStream os = new FileOutputStream(tmpFilePath);
+        InputStream inputStream = FileUtil.getFileTplInputStream(tplfileName);
+        log.info("tmpFilePath :{}", tmpFilePath);
+        log.info("tplfileName :{}", tplfileName);
+        if (os != null && inputStream != null) {
+            Map<String, Object> model = new HashMap<String, Object>();
+            model.put("tmsGasFee", tmsGasFee);
+            JxlsUtils.exportExcel(inputStream, os, model);
+            os.close();
+        }
+        // 导出
+        String newFileName = "circleSign.xlsx";
+        // 输出文件
+        response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", newFileName));
+
+        response.setHeader("content-type", "application/octet-stream");
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(new File(tmpFilePath)));
+        return new StreamingResponseBody() {
+            @Override
+            public void writeTo(OutputStream outputStream) throws IOException {
+                int nRead;
+                long startTime = System.currentTimeMillis();
+
+                byte[] bytes = new byte[1024];
+                while ((nRead = bufferedInputStream.read(bytes, 0, bytes.length)) != -1) {
+                    outputStream.write(bytes, 0, nRead);
+                }
+                long userTime = System.currentTimeMillis() - startTime;
+                log.info("orgAccountLogList使用时间" + userTime);
+            }
+        };
+
+    }
+
+    //获取图片的字节码,临时使用
+    private static byte[] getImageBytes(String imagePath) throws IOException {
+        byte imageBytes[] = null;
+        InputStream is = JxlsExportTestServiceImpl.class.getClass().getResourceAsStream(imagePath);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        byte bytes[] = new byte[1024];
+        int lens = -1;
+        try {
+            while ((lens = is.read(bytes)) != -1) {
+                baos.write(bytes, 0, lens);
+            }
+            imageBytes = baos.toByteArray();
+        } catch (IOException e) {
+            throw new IOException(e);
+        } finally {
+            baos.flush();
+            baos.close();
+            is.close();
+        }
+        return imageBytes;
+    }
+}

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

@@ -54,6 +54,16 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     private WorkOrderReadinfoService workOrderReadinfoService;
 
     @Override
+    public WorkOrder findCurrentWorkOrder(Long truckId) {
+        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
+        queryWrapper.eq("truck_id", truckId);
+        queryWrapper.orderByDesc("execute_time");
+        queryWrapper.last("limit 1");
+        WorkOrder workOrder = workOrderMapper.selectOne(queryWrapper);
+        return workOrder;
+    }
+
+    @Override
     public List<WorkOrderVO> findWorkOrderList(Long userId, WorkOrder workOrderParam) {
         QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
         queryWrapper.eq("truck_id", workOrderParam.getTruckId());
@@ -230,6 +240,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             workOrderPageListVO.setSpotName(workOrder.getSpotName());
             workOrderPageListVO.setCreateDate(workOrder.getCreateDate());
             workOrderPageListVO.setCompleteDate(workOrder.getCompleteTime());
+            workOrderPageListVO.setOrderStatus(workOrder.getOrderStatus());
             workOrderPageListVO.setCarAndTrailerNumber("[" + workOrder.getCarNumber() + "]");
             if (workOrder.getTrailerNumber() != null) {
                 workOrderPageListVO.setCarAndTrailerNumber(workOrderPageListVO.getCarAndTrailerNumber() + "-[" + workOrder.getTrailerNumber() + "]");

+ 14 - 8
src/main/java/com/aoyang/tms/service/impl/WorkerServiceImpl.java

@@ -3,12 +3,10 @@ package com.aoyang.tms.service.impl;
 import com.aoyang.tms.common.TmsTruckStatus;
 import com.aoyang.tms.common.WorkOrderEnum;
 import com.aoyang.tms.entity.Truck;
+import com.aoyang.tms.entity.TruckCheckInfo;
 import com.aoyang.tms.entity.WorkCycle;
 import com.aoyang.tms.entity.WorkOrder;
-import com.aoyang.tms.service.TruckService;
-import com.aoyang.tms.service.WorkCycleService;
-import com.aoyang.tms.service.WorkOrderService;
-import com.aoyang.tms.service.WorkerService;
+import com.aoyang.tms.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -33,6 +31,8 @@ public class WorkerServiceImpl implements WorkerService {
     private TruckService truckService;
     @Resource
     private WorkOrderService workOrderService;
+    @Resource
+    private TruckCheckInfoService truckCheckInfoService;
 
     @Override
     @Transactional
@@ -71,17 +71,23 @@ public class WorkerServiceImpl implements WorkerService {
     }
 
     @Override
-    public Boolean starWork(Long userId, String userName, WorkOrder workOrderParam) {
+    public Boolean starWork(Long userId, String userName, TruckCheckInfo truckCheckInfo) {
         Boolean flag = true;
-        //TODO 1.车辆进入作业中状态,2.并记行车日志
+        //TODO 1.车辆进入作业中状态,2.插入车辆检查记录,3.并记行车日志
         try {
-            WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
+            WorkOrder workOrder = workOrderService.getById(truckCheckInfo.getOrderId());
             if (workOrder != null) {
                 //1.车辆进入出车前检车状态
                 Truck truck = truckService.getById(workOrder.getTruckId());
                 truck.setTmsStatus(TmsTruckStatus.WORKING);
                 truckService.updateById(truck);
-                //2 记录日志
+                //2.插入车辆检查数据
+                BeanUtils.copyProperties(workOrder,truckCheckInfo);
+                truckCheckInfo.setCreater(userId);
+                truckCheckInfo.setCreaterName(userName);
+                truckCheckInfo.setCreateDate(LocalDateTime.now());
+                truckCheckInfoService.save(truckCheckInfo);
+                //3 记录日志
                 //TODO
             }
         } catch (Exception e) {

+ 171 - 0
src/main/java/com/aoyang/tms/util/FileUtil.java

@@ -0,0 +1,171 @@
+package com.aoyang.tms.util;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @Description: ${DESCRIPTION}
+ * @Author guoyong
+ * @Date 2020/12/24 10:32
+ * @Version 1.0
+ */
+public class FileUtil {
+
+    private static final boolean isWin = System.getProperty("os.name").toLowerCase().contains("win");
+
+    private static final boolean isLinux = System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0;
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description /获取临时文件路径
+     * @Date 2020/12/25
+     * @Param
+     **/
+    public static String getTempDirectoryPath() {
+        if (isWin) {
+            return FileUtils.getTempDirectoryPath();
+        }
+        if (isLinux) {
+            return "/tmp/";
+        }
+        return "";
+    }
+
+    public static void main(String[] args) {
+
+        String path = "image/M00/00/34/rB86LWDQM6-AZo1RAADrnf2b4e0334.pdf";
+        System.out.println(getFileNameFromPath(path));
+
+
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 根据文件路径获取文件名
+     * @Date 2021/6/21
+     * @Param
+     **/
+    public static String getFileNameFromPath(String path) {
+        String fileName = FilenameUtils.getName(path);
+        return fileName;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 远程URL获取inputstream
+     * @Date 2021/6/21
+     * @Param
+     **/
+    public static InputStream URL2InputStream(URL url) {
+        InputStream inputStream = null;
+        try {
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            //设置超时间为3秒
+            conn.setConnectTimeout(3 * 1000);
+            //防止屏蔽程序抓取而返回403错误
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+            //得到输入流
+            inputStream = conn.getInputStream();
+
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return inputStream;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 获取文件名前缀
+     * @Date 2020/12/24
+     * @Param
+     **/
+    public static String getFilePrefix(String fileName) {
+        if (StringUtils.isBlank(fileName)) {
+            return "";
+        }
+        String prefix = fileName.substring(0, fileName.lastIndexOf("."));
+        return prefix;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 获取文件名后缀
+     * @Date 2020/12/24
+     * @Param
+     **/
+    public static String getFileSuffix(String fileName) {
+        if (StringUtils.isBlank(fileName)) {
+            return "";
+        }
+        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+        return suffix;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 根据获取临时文件名
+     * @Date 2020/12/24
+     * @Param
+     **/
+    public static String getTmpFileName(String tplfileName) {
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssS");
+        String tmpFileName = tplfileName + "_" + formatter.format(new Date()) + ".xlsx";
+        return tmpFileName;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 获取模板文件的File
+     * @Date 2020/12/24
+     * @Param
+     **/
+    public static File getFileTpl(String tplfileName) {
+        File tplFile = null;
+        ClassPathResource classPathResource = new ClassPathResource("exceltpl/" + tplfileName);
+        try {
+            tplFile = classPathResource.getFile();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return tplFile;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 获取模板文件的InputStream
+     * @Date 2020/12/24
+     * @Param
+     **/
+    public static InputStream getFileTplInputStream(String tplfileName) {
+        InputStream tplInputStream = null;
+        ClassPathResource classPathResource = new ClassPathResource("exceltpl/" + tplfileName);
+        try {
+            tplInputStream = classPathResource.getInputStream();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return tplInputStream;
+    }
+
+}

+ 136 - 0
src/main/java/com/aoyang/tms/util/JxlsUtils.java

@@ -0,0 +1,136 @@
+package com.aoyang.tms.util;
+
+import org.jxls.common.Context;
+import org.jxls.expression.JexlExpressionEvaluator;
+import org.jxls.transform.Transformer;
+import org.jxls.transform.poi.PoiTransformer;
+import org.jxls.util.JxlsHelper;
+
+import java.io.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+
+public class JxlsUtils {
+
+    public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException {
+        Context context = PoiTransformer.createInitialContext();
+        if (model != null) {
+            for (String key : model.keySet()) {
+                context.putVar(key, model.get(key));
+            }
+        }
+        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
+        Transformer transformer = jxlsHelper.createTransformer(is, os);
+        //获得配置
+        JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig().getExpressionEvaluator();
+        //设置静默模式,不报警告
+        //evaluator.getJexlEngine().setSilent(true);
+        //函数强制,自定义功能
+        Map<String, Object> funcs = new HashMap<String, Object>();
+        funcs.put("utils", new JxlsUtils());    //添加自定义功能
+        evaluator.getJexlEngine().setFunctions(funcs);
+        //必须要这个,否则表格函数统计会错乱
+        jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer);
+    }
+
+    public static void exportExcel(File xls, File out, Map<String, Object> model) throws FileNotFoundException, IOException {
+        exportExcel(new FileInputStream(xls), new FileOutputStream(out), model);
+    }
+
+    public static void exportExcel(String templatePath, OutputStream os, Map<String, Object> model) throws Exception {
+        File template = getTemplate(templatePath);
+        if (template != null) {
+            exportExcel(new FileInputStream(template), os, model);
+        } else {
+            throw new Exception("Excel 模板未找到。");
+        }
+    }
+
+    //获取jxls模版文件
+    public static File getTemplate(String path) {
+        File template = new File(path);
+        if (template.exists()) {
+            return template;
+        }
+        return null;
+    }
+
+    /**
+     * @return
+     * @Author
+     * @Description 计算 单位利润额
+     * @Date 2021/1/5
+     * @Param
+     **/
+    public static BigDecimal caculateGwayPrice(BigDecimal gwayprice) {
+        try {
+            BigDecimal bignum2 = new BigDecimal("1000");
+            BigDecimal price = null;
+            price = gwayprice.divide(bignum2);
+            return price;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description Long 2 String
+     * @Date 2020/12/31
+     * @Param
+     **/
+    public static String longToStr(Long value) {
+        if (value == null) {
+            return "";
+        }
+        return String.valueOf(value);
+    }
+
+    // 日期格式化
+    public String dateFmt(LocalDateTime localDateTime, String format) {
+        if (localDateTime == null) {
+            return "";
+        }
+        try {
+            DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(format);
+            String strDate2 = dtf2.format(localDateTime);
+            return strDate2;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+
+    // if判断
+    public Object ifelse(boolean b, Object o1, Object o2) {
+        return b ? o1 : o2;
+    }
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description stock_type to String 库存操作类型 1=入库 2=出库 3=库存调整
+     * @Date 2020/12/31
+     * @Param
+     **/
+    public static String stockTypeToStr(Integer value) {
+        String str = "";
+        if (value == 1) {
+            str = "入库气量";
+        }
+        if (value == 2) {
+            str = "销售气量";
+        }
+        if (value == 3) {
+            str = "库存调整";
+        }
+        return str;
+    }
+}

+ 39 - 19
src/main/resources/mapper/TruckCheckInfoMapper.xml

@@ -4,29 +4,49 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.aoyang.tms.entity.TruckCheckInfo">
-        <id column="id" property="id" />
-        <result column="cycle_id" property="cycleId" />
-        <result column="org_id" property="orgId" />
-        <result column="org_name" property="orgName" />
-        <result column="org_short_name" property="orgShortName" />
-        <result column="truck_id" property="truckId" />
-        <result column="car_number" property="carNumber" />
-        <result column="trailer_number" property="trailerNumber" />
-        <result column="type" property="type" />
-        <result column="check_url" property="checkUrl" />
-        <result column="trip" property="trip" />
-        <result column="trip_url" property="tripUrl" />
-        <result column="note" property="note" />
-        <result column="start_time" property="startTime" />
-        <result column="end_time" property="endTime" />
-        <result column="creater" property="creater" />
-        <result column="creater_name" property="createrName" />
-        <result column="create_date" property="createDate" />
+        <id column="id" property="id"/>
+        <result column="cycle_id" property="cycleId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="org_id" property="orgId"/>
+        <result column="org_name" property="orgName"/>
+        <result column="org_short_name" property="orgShortName"/>
+        <result column="truck_id" property="truckId"/>
+        <result column="car_number" property="carNumber"/>
+        <result column="trailer_number" property="trailerNumber"/>
+        <result column="type" property="type"/>
+        <result column="check_url" property="checkUrl"/>
+        <result column="trip" property="trip"/>
+        <result column="trip_url" property="tripUrl"/>
+        <result column="note" property="note"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="creater" property="creater"/>
+        <result column="creater_name" property="createrName"/>
+        <result column="create_date" property="createDate"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, cycle_id, org_id, org_name, org_short_name, truck_id, car_number, trailer_number, type, check_url, trip, trip_url, note, start_time, end_time, creater, creater_name, create_date
+        id
+        ,
+        cycle_id,
+        order_id,
+        org_id,
+        org_name,
+        org_short_name,
+        truck_id,
+        car_number,
+        trailer_number,
+        type,
+        check_url,
+        trip,
+        trip_url,
+        note,
+        start_time,
+        end_time,
+        creater,
+        creater_name,
+        create_date
     </sql>
 
 </mapper>

+ 4 - 1
src/main/resources/mapper/WorkCycleMapper.xml

@@ -22,6 +22,9 @@
         <result column="shipper_name" property="shipperName" />
         <result column="start_time" property="startTime" />
         <result column="end_time" property="endTime" />
+        <result column="driver_one_sign_url" property="driverOneSignUrl" />
+        <result column="driver_two_sign_url" property="driverTwoSignUrl" />
+        <result column="escort_sign_url" property="escortSignUrl" />
         <result column="creater" property="creater" />
         <result column="creater_name" property="createrName" />
         <result column="create_date" property="createDate" />
@@ -29,7 +32,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, status, org_id, org_name, org_short_name, driver_id_one, driver_name_one, driver_id_two, driver_name_two, escort_id, escort_name, truck_id, car_number, trailer_number, shipper_id, shipper_name, start_time, end_time, creater, creater_name, create_date
+        id, status, org_id, org_name, org_short_name, driver_id_one, driver_name_one, driver_id_two, driver_name_two, escort_id, escort_name, truck_id, car_number, trailer_number, shipper_id, shipper_name, start_time, end_time, driver_one_sign_url, driver_two_sign_url, escort_sign_url, creater, creater_name, create_date
     </sql>
 
 </mapper>

+ 5 - 0
src/main/resources/mapper/WorkSpotMapper.xml

@@ -13,6 +13,8 @@
         <result column="type" property="type"/>
         <result column="location" property="location"/>
         <result column="region_data" property="regionData"/>
+        <result column="contact_name" property="contactName"/>
+        <result column="contact_phone" property="contactPhone"/>
         <result column="note" property="note"/>
         <result column="creater" property="creater"/>
         <result column="creater_name" property="createrName"/>
@@ -26,6 +28,9 @@
     <sql id="Base_Column_List">
         spot_id
         ,
+        contact_name,
+        contact_phone
+        ,
         spot_name,
         org_id,
         org_name,