184 Commits 3778813064 ... 910acb722e

Author SHA1 Message Date
  王伟宇 910acb722e Merge branch 'master' of auyen/tms into test 4 years ago
  wangweiyu b75b03424d feat:新增卸车派单bug 4 years ago
  wangweiyu f755608f98 feat:新增卸车派单bug 4 years ago
  wangweiyu 2905686374 feat:新增卸车派单bug 4 years ago
  wangweiyu cefee0d5e8 feat:新增卸车派单bug 4 years ago
  wangweiyu d14aa31719 feat:新增卸车派单bug 4 years ago
  wangweiyu f502182ecd Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 01cea9a732 feat:修改运单未更新spotName问题 4 years ago
  guoyong a317142785 联系方式 4 years ago
  wangweiyu 25313601f9 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 3ef44d1c88 feat:行车日志调整 4 years ago
  chengang 37b897726d jxls模板 4 years ago
  chengang 34687f7132 jxls模板 4 years ago
  guoyong 38f66c78fb 车牌号和运单号模糊查询 4 years ago
  guoyong 57b0c5da46 车牌号和运单号模糊查询 4 years ago
  guoyong 4171bcafe8 车牌号和运单号模糊查询 4 years ago
  guoyong d156bc9401 bug 4 years ago
  chengang bc8cb049b4 jxls模板 4 years ago
  guoyong c28d02272c bug 4 years ago
  chengang 9cad8d19cc jxls模板 4 years ago
  guoyong 4c93a01d25 bug 4 years ago
  chengang ebb6a7250d jxls模板 4 years ago
  wangweiyu c78a95b2f7 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu da536c7121 feat:行车日志调整 4 years ago
  guoyong cb145b05db status 4 years ago
  guoyong 32bdf41736 endTrip 4 years ago
  guoyong 28703e80b5 Merge remote-tracking branch 'origin/master' 4 years ago
  guoyong 1bbb75801f endTrip 4 years ago
  wangweiyu 28681ca0be Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu f37e6e9eb4 feat:行车日志调整 4 years ago
  guoyong 51774fbf85 endTrip 4 years ago
  guoyong d308dcf909 endTrip 4 years ago
  guoyong 09039298e3 NPE 4 years ago
  guoyong 316b1b4c5e NPE 4 years ago
  chengang f3cbe89d6c jxls模板 4 years ago
  guoyong 8b3907961f NPE 4 years ago
  wangweiyu 6376885264 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu a48daceaca feat:行车日志调整 4 years ago
  guoyong f16c9b60b3 NPE 4 years ago
  guoyong 8cbdbf5bd8 endTrip 4 years ago
  guoyong c972e50bf5 endTrip 4 years ago
  guoyong 51b401a71e endTrip 4 years ago
  guoyong 54d09e5e1c 离开时作业点时间 4 years ago
  wangweiyu a31ef44766 feat:行车日志调整 4 years ago
  wangweiyu 2490c15a22 feat:行车日志调整 4 years ago
  wangweiyu b1bded3d65 feat:行车日志调整 4 years ago
  wangweiyu f9d1d59d90 feat:行车日志调整 4 years ago
  guoyong 8677818c8b 签名 4 years ago
  guoyong 6971da63df 签名 4 years ago
  guoyong 4f6fc53360 签名 4 years ago
  wangweiyu 7a054ce1e0 feat:行车日志调整 4 years ago
  wangweiyu 0813d19745 Merge remote-tracking branch 'origin/master' 4 years ago
  chengang c6c89d8660 下载配置文件添加 4 years ago
  guoyong 728ef1dac9 出车检查 4 years ago
  chengang 2cfbf07187 下载配置文件添加 4 years ago
  wangweiyu 5989716d25 feat:行车日志调整 4 years ago
  guoyong 198e778134 出车检查 4 years ago
  wangweiyu 1b441179ec feat:行车日志调整 4 years ago
  wangweiyu ab89c6f560 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu bcb2c747a1 feat:行车日志调整 4 years ago
  guoyong 3caa733e85 出车检查 4 years ago
  wangweiyu 46ff9fb494 feat:运力实时调度根据排队号排序 4 years ago
  wangweiyu 6d1c2b6fda feat:运力实时调度根据排队号排序 4 years ago
  wangweiyu 5e6002abab feat:行车日志调整 4 years ago
  wangweiyu 47c80d410f Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu f943d9c9d3 feat:行车日志调整 4 years ago
  chengang 8b819bfa33 workOrder分页查询 4 years ago
  guoyong 97251d4767 出车检查 4 years ago
  guoyong a5e72598da 去掉无用代码 4 years ago
  guoyong 824b560276 终止判断 4 years ago
  wangweiyu 3531f669f6 feat:行车日志调整 4 years ago
  wangweiyu b2b042288a Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 1cc9e8a0d3 feat:行车日志调整 4 years ago
  guoyong f11c740f05 终止判断 4 years ago
  wangweiyu e35bc05fa3 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu bf2b0a3eb0 feat:行车日志调整 4 years ago
  chengang 0897ee60cc workOrderType字段文字展示 4 years ago
  wangweiyu 7f067c9cc3 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 489788e16f feat:行车日志调整 4 years ago
  guoyong 8d5a892155 结束里程 4 years ago
  guoyong 8b03963a1e 开始里程 4 years ago
  wangweiyu 77b7ad9ff9 feat:查询bug 4 years ago
  wangweiyu 40c9811a64 feat:查询bug 4 years ago
  chengang 56d2bdefc3 workOrderType字段文字展示 4 years ago
  chengang 97a21ccef0 根据id修改运单 4 years ago
  guoyong 334ce5e838 NPE 4 years ago
  wangweiyu a151f6d0b6 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu bc5a15d873 feat:无装车运单不能执行出车检查 4 years ago
  guoyong 5bd7b5c6bd NPE 4 years ago
  guoyong 584d4014d9 添加是否在围栏内 4 years ago
  guoyong 7986d37c3e 添加是否在围栏内 4 years ago
  chengang 0d0ccb4d85 运单修改 4 years ago
  wangweiyu e9be654dbf Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu a4781ddfa3 feat:实时调度过滤查询bug 4 years ago
  chengang 6d784800d8 模板修改 4 years ago
  wangweiyu a169392b8b feat:实时调度过滤查询bug 4 years ago
  wangweiyu 44ca13e671 feat:实时调度过滤查询bug 4 years ago
  guoyong bb7a407c8c 行程周期已用时 4 years ago
  guoyong b361113395 行程周期已用时 4 years ago
  guoyong f363cb6df0 行程周期已用时 4 years ago
  wangweiyu 246f27d36c Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu d874abff31 feat:实时调度过滤查询bug 4 years ago
  chengang e95ed59243 TrailerNumber导出 4 years ago
  wangweiyu 9f2d3f9475 feat:实时调度过滤查询bug 4 years ago
  wangweiyu 73b4aac8e3 feat:实时调度过滤查询bug 4 years ago
  guoyong d020818734 空格 4 years ago
  wangweiyu bbcde22265 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu c30ccd16a3 feat:实时调度过滤查询bug 4 years ago
  chengang 76dcae9ecb 导出 4 years ago
  chengang 2499f0cf69 导出 4 years ago
  wangweiyu 9fe33ad8f8 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 95627fa3e1 feat:测试短信 4 years ago
  guoyong b141d25ceb 获取网络图片 4 years ago
  guoyong 9eb0d51b85 bug 4 years ago
  guoyong 4404f43354 bug 4 years ago
  wangweiyu 5af9dbe6d6 feat:实时调度列表查询bug 4 years ago
  wangweiyu 8f10561713 feat:实时调度列表查询bug 4 years ago
  chengang c7f5b0ddaa 添加押运员判断 4 years ago
  guoyong d495d20ee8 bug 4 years ago
  guoyong 7ac04876c2 行车周期 4 years ago
  guoyong be49d0d1e4 已读未读 4 years ago
  chengang f2cef49143 添加truckId 4 years ago
  guoyong c2ea6bf76a 上次更新时间 4 years ago
  guoyong 2de236f2db 上次更新时间 4 years ago
  guoyong 4a7d36f298 已用时 4 years ago
  guoyong 9c47504f24 已用时 4 years ago
  wangweiyu e53c516965 feat:实时调度列表查询bug 4 years ago
  wangweiyu 7c41e7fec0 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 493a120882 feat:实时调度列表查询bug 4 years ago
  chengang 64318ae857 中止运单添加中止原因 4 years ago
  wangweiyu 02d1860569 feat:实时调度列表查询bug 4 years ago
  wangweiyu 2d1d5afd47 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu c41cca119d feat:实时调度列表查询bug 4 years ago
  chengang f6aa131b92 获取没有绑定卡车的押运员列表 4 years ago
  wangweiyu 416dcae166 feat:实时调度列表查询bug 4 years ago
  wangweiyu 17100aa11e Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 54eea53eed feat:实时调度列表查询bug 4 years ago
  guoyong 7f0a20e20a npe 4 years ago
  wangweiyu 28ae89418f feat:实时调度列表查询bug 4 years ago
  wangweiyu 649fe10950 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 748c686def feat:实时调度列表查询bug 4 years ago
  chengang 69e1d6c3cf 获取行车日志导出类 4 years ago
  chengang 5ba7895333 获取行车日志导出类 4 years ago
  guoyong b4823bb2f3 添加行车周期天气 4 years ago
  guoyong bf2f8eb2d2 添加行车周期天气 4 years ago
  wangweiyu a23a4c68b1 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 11746eb4f9 feat:司机未绑定车辆bug 4 years ago
  guoyong 491f09e367 行车周期开始,状态1执行中 4 years ago
  wangweiyu f28288275a feat:司机未绑定车辆bug 4 years ago
  wangweiyu f3cbf4d4c6 feat:司机未绑定车辆bug 4 years ago
  wangweiyu d0cc32d1da feat:修改mongo查询条件 4 years ago
  wangweiyu 9cc5f531ac Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 1ffff28d63 feat:修改mongo查询条件 4 years ago
  guoyong a60f2a9734 去掉无用代码 4 years ago
  guoyong 6e62725aac bug 4 years ago
  guoyong a6154ebeb4 首页订单列表调整,获取未完成的所有订单列表 4 years ago
  wangweiyu 917f613a9f Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 3898305d0a feat:实时调度列表增加cycleId 4 years ago
  chengang daa61ee4f0 jxls模板导出 4 years ago
  wangweiyu c60e3f11eb Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 6ebc06a6cf feat:里程数字段类型修改String->Integer 4 years ago
  guoyong 34af6e18fe 获取当前行程周期接口 4 years ago
  guoyong ee6d5c4874 添加上传签名方法 4 years ago
  wangweiyu fca676a162 feat:增加运单中止行车日志 4 years ago
  wangweiyu e2e9927853 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu df63db0569 feat:增加运单中止行车日志 4 years ago
  guoyong 0e5b506deb 收车检查保存 4 years ago
  wangweiyu e77b2b37f2 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu 222ba49125 feat:增加运单中止行车日志 4 years ago
  chengang 2c12bacd18 jxls模板导出 4 years ago
  chengang 04499d8376 jxls模板导出 4 years ago
  wangweiyu fddf5014ab feat:增加运单中止行车日志 4 years ago
  wangweiyu cb35eb853a Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu a8537e2f6a feat:增加运单中止行车日志 4 years ago
  chengang 1c8d1696df jxls模板 4 years ago
  wangweiyu 98cf83d0b2 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu c94590c5f7 feat:增加运单中止行车日志 4 years ago
  chengang 265f7f3eac jxls模板 4 years ago
  chengang 016d3394d2 jxls导出数据列 4 years ago
  guoyong 131bb97fe7 更新周期净重 4 years ago
  wangweiyu 647243405c feat:增加运单中止行车日志 4 years ago
  wangweiyu 8d1369ec17 feat:增加运单中止行车日志 4 years ago
  wangweiyu 113fbd7577 Merge remote-tracking branch 'origin/master' 4 years ago
  wangweiyu f8dcfed91c feat:行车日志修改 4 years ago
55 changed files with 1640 additions and 700 deletions
  1. 21 279
      src/main/java/com/aoyang/tms/common/ErrCodeEnum.java
  2. 6 0
      src/main/java/com/aoyang/tms/common/WorkLogTypeEnum.java
  3. 1 1
      src/main/java/com/aoyang/tms/common/WorkOrderEnum.java
  4. 30 4
      src/main/java/com/aoyang/tms/controller/JxlsExportTestController.java
  5. 73 2
      src/main/java/com/aoyang/tms/controller/TestController.java
  6. 30 1
      src/main/java/com/aoyang/tms/controller/TruckEscortController.java
  7. 3 3
      src/main/java/com/aoyang/tms/controller/TruckMongoInfoController.java
  8. 49 6
      src/main/java/com/aoyang/tms/controller/WorkCycleController.java
  9. 62 10
      src/main/java/com/aoyang/tms/controller/WorkOrderController.java
  10. 104 23
      src/main/java/com/aoyang/tms/controller/WorkOrderManageController.java
  11. 136 58
      src/main/java/com/aoyang/tms/controller/WorkerController.java
  12. 26 0
      src/main/java/com/aoyang/tms/controller/param/UpSignParam.java
  13. 18 0
      src/main/java/com/aoyang/tms/controller/param/WorkCycleVO.java
  14. 9 1
      src/main/java/com/aoyang/tms/controller/param/WorkManagePageParam.java
  15. 3 7
      src/main/java/com/aoyang/tms/controller/vo/AddWorkOrderVO.java
  16. 6 0
      src/main/java/com/aoyang/tms/controller/vo/TruckHistoryTripVO.java
  17. 12 5
      src/main/java/com/aoyang/tms/controller/vo/TruckOrderManageVO.java
  18. 8 1
      src/main/java/com/aoyang/tms/controller/vo/WorkOrderPageListVO.java
  19. 3 0
      src/main/java/com/aoyang/tms/controller/vo/WorkOrderVO.java
  20. 2 3
      src/main/java/com/aoyang/tms/controller/vo/WorkerInfo.java
  21. 1 1
      src/main/java/com/aoyang/tms/entity/TruckCheckInfo.java
  22. 29 0
      src/main/java/com/aoyang/tms/entity/WorkCycle.java
  23. 3 0
      src/main/java/com/aoyang/tms/entity/WorkLog.java
  24. 13 4
      src/main/java/com/aoyang/tms/entity/WorkOrder.java
  25. 26 0
      src/main/java/com/aoyang/tms/feign/MessageFeign.java
  26. 2 1
      src/main/java/com/aoyang/tms/feign/UserFeignClient.java
  27. 34 0
      src/main/java/com/aoyang/tms/feign/fallback/MessageFeignFallBack.java
  28. 2 1
      src/main/java/com/aoyang/tms/feign/fallback/UserFeignFallBack.java
  29. 70 0
      src/main/java/com/aoyang/tms/feign/result/SmsSendLog.java
  30. 2 2
      src/main/java/com/aoyang/tms/job/SpotCheckJob.java
  31. 2 0
      src/main/java/com/aoyang/tms/mapper/TruckMapper.java
  32. 19 6
      src/main/java/com/aoyang/tms/service/CommonService.java
  33. 2 3
      src/main/java/com/aoyang/tms/service/JxlsExportTestService.java
  34. 8 0
      src/main/java/com/aoyang/tms/service/TruckEscortService.java
  35. 12 4
      src/main/java/com/aoyang/tms/service/WorkOrderReadinfoService.java
  36. 3 21
      src/main/java/com/aoyang/tms/service/WorkOrderService.java
  37. 39 27
      src/main/java/com/aoyang/tms/service/WorkerService.java
  38. 105 20
      src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java
  39. 122 40
      src/main/java/com/aoyang/tms/service/impl/JxlsExportTestServiceImpl.java
  40. 21 0
      src/main/java/com/aoyang/tms/service/impl/TruckEscortServiceImpl.java
  41. 118 22
      src/main/java/com/aoyang/tms/service/impl/WorkLogServiceImpl.java
  42. 20 0
      src/main/java/com/aoyang/tms/service/impl/WorkOrderReadinfoServiceImpl.java
  43. 47 52
      src/main/java/com/aoyang/tms/service/impl/WorkOrderServiceImpl.java
  44. 152 59
      src/main/java/com/aoyang/tms/service/impl/WorkerServiceImpl.java
  45. 15 0
      src/main/java/com/aoyang/tms/util/DateUtils.java
  46. 39 0
      src/main/java/com/aoyang/tms/util/JxlsUtils.java
  47. 30 0
      src/main/java/com/aoyang/tms/util/RegionUtil.java
  48. 3 1
      src/main/profiles/dev/bootstrap.yml
  49. 1 1
      src/main/profiles/local/bootstrap.yml
  50. 3 1
      src/main/profiles/prod/bootstrap.yml
  51. 3 1
      src/main/profiles/test/bootstrap.yml
  52. BIN
      src/main/resources/exceltpl/work_log_tpl.xlsx
  53. 31 3
      src/main/resources/mapper/TruckMapper.xml
  54. 59 25
      src/main/resources/mapper/WorkCycleMapper.xml
  55. 2 1
      src/main/resources/mapper/WorkOrderMapper.xml

+ 21 - 279
src/main/java/com/aoyang/tms/common/ErrCodeEnum.java

@@ -14,231 +14,25 @@ public enum ErrCodeEnum {
      */
     BAD_PARAM(2000, "参数错误!"),
     /**
-     * token无效
+     * 收车中不能执行运单
      */
-    TOKEN_ERROR(2001, "token无效"),
+    CAN_NOT_DO_ORDER(2001, "收车中不能执行运单"),
     /**
-     * 系统配置错误
-     */
-    BAD_SYSTEM_CONFIG(2003, "系统配置错误,请联系客服人员"),
-    /**
-     * orgId
-     */
-    BAD_ORG_ID_PARAM(2002, "找不到对应的企业信息!"),
-    /**
-     * 参数错误
-     */
-    ORDER_UPDATE_ERROR(2003, "更新运单失败"),
-    /**
-     * 获取openid失败
-     */
-    OPENID_ERROR(2010, "获取openid失败"),
-    /**
-     * 微信统一下单失败
-     */
-    UNIFIEDORDER_ERROR(2011, "微信统一下单失败"),
-    /**
-     * 微信统一下单失败返回信息
-     */
-    WX_ORDER_ERROR(2012, "下单失败"),
-    /**
-     * 尚未实名认证
-     */
-    USER_NOT_AUTH_ERROR(3006, "尚未实名认证"),
-    /**
-     * 实名认证通过
-     */
-    USER_AUTH_PASSED(0, "实名认证成功"),
-    /**
-     * 已签协议
-     */
-    USER_CONTRACT_DONE(0, "已签协议"),
-    /**
-     * 会员账号信息不存在
-     */
-    TSY_NOT_EXIST_ERROR(3009, "信息不存在"),
-
-    /**
-     * 消费余额不足提示
-     */
-    BALANCE_NOT_ENOUGH(3010, "账户余额不足"),
-
-    /**
-     * 提现限额不足提示
-     */
-    WITHDRAW_QUOTA_NOT_ENOUGH(3017, "为保证业务正常进行,请确保提现后账户余额大于"),
-
-    /**
-     * 绑定openid失败
-     */
-    BIND_OPENID_FAIL(3011, "绑定openid失败"),
-
-    /**
-     * 注册用户失败
-     */
-    CREATE_MEMBER_FAIL(3016, "注册用户失败"),
-    /**
-     * 校验码错误
-     */
-    BAD_VERIFY_CODE(3012, "校验码错误"),
-
-    /**
-     * 获取签约协议失败
-     */
-    GET_SIGN_CONTRACT_CODE(3013, "获取签约协议失败"),
-
-    /**
-     * 调用通联出错
+     * 运单已中止
      */
-    ALLINPAY_RESPONSE_NULL(3014, "调用通联返回空"),
-
-    /**
-     * 调用通联出错
-     */
-    ALLINPAY_ERROR(3015, "调用通联出错"),
-
-    /**
-     * 支付成功判断
-     */
-    GASORDER_PAY_SUCCESS(3018, "订单已支付,请不要重复支付"),
-
-    /**
-     * 大象平台支付失败
-     */
-    GASORDER_PAY_FAIL(3019, "大象平台支付失败,请联系客服人员"),
-
-    /**
-     * 下载电子回单失败
-     */
-    DOWNLOAD_WITHDRAW_RECEIPT_ERROR(3016, "下载电子回单失败"),
-
-    /**
-     * 下载电子回单失败
-     */
-    COM_PAY_TRANSFER_ERROR(3020, "组合支付,物流公司余额不足"),
-    /**
-     * 数据库错误
-     */
-    DB_PARAM(2201, "数据库错误!"),
-    /**
-     * 远程请求错误
-     */
-    REMOTE_PARAM(2202, "远程请求错误"),
-    /**
-     * 非法服务费率
-     */
-    INVALID_FREE(2210, "非法服务费率"),
+    CLOSED_ORDER(2223, "运单已中止"),
     /**
-     * 非法气价
+     * 系统配置错误
      */
-    INVALID_PRICE(2211, "非法气价"),
+    BAD_SYSTEM_CONFIG(2003, "系统配置错误,请联系客服人员"),
     /**
      * 非法卡车
      */
     INVALID_TRUCK(2212, "非法卡车"),
     /**
-     * 非法加气站
-     */
-    INVALID_GASSTATION(2213, "非法加气站"),
-    /**
-     * 非法订单
-     */
-    INVALID_ORDER(2214, "非法订单"),
-    /**
-     * 司机和订单不匹配
-     */
-    NO_RELATION(2215, "司机和订单不匹配"),
-    /**
-     * 账户余额不足
-     */
-    NO_ENOUGH_MONEY(2216, "账户余额不足"),
-    /**
-     * 自动划账失败
-     */
-    AUTO_TRANSFER_FAIL(2217, "自动划账失败"),
-    /**
-     * 支付失败
-     */
-    PAY_FAIL(2218, "支付失败"),
-    /**
      * 订单状态不对
      */
     ORDER_STATUS_ERROR(2219, "订单状态不对"),
-    /**
-     * 审批人不对
-     */
-    ORDER_AUDIT_ERROR(2220, "审批人不对"),
-    /**
-     * 非法金额
-     */
-    INVALID_AMOUNT(2221, "非法金额"),
-    /**
-     * 卡车有未支付订单
-     */
-    UNPAY_ORDER(2222, "卡车有未支付订单"),
-    /**
-     * 订单已取消
-     */
-    CANCEL_ORDER(2223, "订单已取消"),
-    /**
-     * 订单已支付
-     */
-    PAY_ORDER(2224, "订单已支付"),
-    /**
-     * 卡车不属于该企业
-     */
-    INVALID_TRUCK_ORG(2225, "卡车不属于该企业"),
-
-    /**
-     * 收银员与加气站绑定关系异常
-     */
-    CASHIER_GASSTATION_ERROR(2226, "收银员与加气站绑定关系异常"),
-
-    /**
-     * 卡车与司机绑定关系异常
-     */
-    DRIVER_TRUCK_ERROR(2227, "卡车与司机绑定关系异常"),
-    /**
-     * 平台结算价格异常,小于等于0
-     */
-    PLATFORM_PRICE_ERROR(2228, "平台结算价格异常,小于等于0"),
-
-    /**
-     * 实际结算价格异常,小于等于0
-     */
-    ACTUAL_PRICE_ERROR(2229, "实际结算价格异常,小于等于0"),
-
-    /**
-     * 圈存金额需大于0
-     */
-    TRANSFER_AMOUNT_ERROR(2230, "圈存金额需大于0"),
-
-    /**
-     * 卡车已停用
-     */
-    TRUCK_IS_STOP(2231, "卡车已停用"),
-
-    /**
-     * 用户已停用
-     */
-    CASHIER_IS_STOP(2232, "收银员已停用"),
-    /**
-     * 司机已停用
-     */
-    DRIVER_IS_STOP(2233, "司机已停用"),
-    /**
-     * 订单价格计算错误
-     */
-    ORDER_SUM_ERROR(2234, "订单金额计算出错"),
-
-    /**
-     * 加气站没有通过认证
-     */
-    GASSTATION_UNAUTH(2235, "加气站没有认证"),
-    /**
-     * 物流公司没有通过认证
-     */
-    CARRIER_UNAUTH(2236, "物流公司没有认证"),
 
     /**
      * 用户不存在
@@ -255,96 +49,44 @@ public enum ErrCodeEnum {
      */
     GET_USER_FAIL(2239, "获取用户信息失败"),
 
-    /**
-     * 企业账户不匹配
-     */
-    ORG_ACCOUNT_ID_IS_WRONG(2239, "企业账户不匹配"),
-
-    /**
-     * 银行卡错误,查无此卡
-     */
-    BANK_CAR_NUMBER_IS_ERROR(2240, "银行卡错误,查无此卡"),
 
-    /**
-     * 申请绑卡失败,请联系运营人员
-     */
-    APPYL_BINK_CARD_FAIL_ERROR(2241, "申请绑卡失败,请联系运营人员"),
-    /**
-     * 确认绑卡失败,请联系运营人员
-     */
-    BINK_CARD_FAIL_ERROR(2242, "确认绑卡失败,请联系运营人员"),
-
-    /**
-     * 解绑银行卡失败,请联系运营人员
-     */
-    UNBINK_CARD_FAIL_ERROR(2243, "解绑银行卡失败,请联系管理员"),
-
-    /**
-     * 查询绑定银行卡失败,请联系运营人员
-     */
-    QUERY_BINK_CARD_FAIL_ERROR(2244, "解绑银行卡失败,请联系管理员"),
-
-    /**
-     * 查询订单是否已经完成返现失败, 请稍后再试
-     */
-    GAS_ORDER_CASHBACK_CHECK_ERROR(2301, "查询订单是否已经完成失败, 请稍后再试"),
-
-    /**
-     * 此订单已完成返现,不能再次返现了
-     */
-    GAS_ORDER_HAS_CASHBACK(2302, "此订单已完成返现,不能再次返现了"),
-
-    /**
-     * 查询营销组织信息失败
-     */
-    QUERY_MARKETING_ORG_ERROR(2303, "查询营销组织信息失败"),
-
-    /**
-     * 查询默认组织信息失败
-     */
-    QUERY_DEFAULT_ORG_ERROR(2304, "查询默认组织信息失败"),
+    USERSERVER_ERROR(3301, "进入USER熔断"), USER_ADD_ERROR(2323, "新增司机失败"), DRIVER_MODIFY_FAIL(2323, "修改司机信息失败"),
 
-    /**
-     * 返现转账失败
-     */
-    CASHBACK_TRANSFER_ACCOUNT_ERROR(2305, "返现转账失败"),
 
     /**
-     * 严重错误:散户首次消费返现,通联账户已划账完成,大象加气本地划账失败
+     * 该部门下面存在卡车
      */
-    CASHBACK_TRANSFER_ACCOUNT_ERROR_2(2306, "本地资金账户返现失败,请联系运营处理"),
-
-    USERSERVER_ERROR(3301, "进入USER熔断"), USER_ADD_ERROR(2323, "新增司机失败"), DRIVER_MODIFY_FAIL(2323, "修改司机信息失败"),
+    DEPARTMENT_EXIST_TRUCK(2309, "该部门下面存在卡车"),
 
     /**
-     * 直销模式的卡车不能在经销模式加气站加气
+     * 该运单状态下不允许中止
      */
-    DIRECT_TRUCK_CAN_NOT_GAS_IN_NODIRECTGASSTATION(2307, "该车辆已参加‘直销加气’,请在 直销加气站 加气 !"),
+    NO_STOP(2310, "该运单状态下不允许中止"),
 
     /**
-     * 直销模式充值限额
+     * 已完成运单状态下才允许关闭
      */
-    DIRECT_RECHARGE_LIMIT(2308, "低于直销模式最小充值限额"),
+    NO_CLOSE(2311, "已完成运单状态下才允许关闭"),
 
     /**
-     * 该部门下面存在卡车
+     * 该运单状态下不修改
      */
-    DEPARTMENT_EXIST_TRUCK(2309, "该部门下面存在卡车"),
+    NO_UPDATE(2312, "该运单状态下不修改"),
 
     /**
-     * 该运单状态下不允许中止
+     * 已完成周期才可以导出行车日志
      */
-    NO_STOP(2310, "该运单状态下不允许中止"),
+    CAN_NOT_EXPORT(2313, "已完成周期才可以导出行车日志"),
 
     /**
-     * 已完成运单状态下才允许关闭
+     * 该卡车下已经有一个押运员
      */
-    NO_CLOSE(2311, "已完成运单状态下才允许关闭"),
+    ONLY_ONE_ESCORT(2314, "该卡车下已经有一个押运员"),
 
     /**
-     * 该运单状态下不修改
+     * 该卡车下已经有一个押运员
      */
-    NO_UPDATE(2312, "该运单状态下不修改")
+    EXECUTE_WEIGHT_ERROR(2315, "执行运单失败"),
     ;
 
     private int code;

+ 6 - 0
src/main/java/com/aoyang/tms/common/WorkLogTypeEnum.java

@@ -13,6 +13,8 @@ public enum WorkLogTypeEnum {
      */
     LOAD_ORDER_START(1, "执行 装车运单, 开始\"出车前检查\""),
 
+    LOAD_ORDER_NEW_START(2, "执行新的装车运单, 此次行车结束"),
+
     ENGIN_ON(2, "车辆启动"),
 
     FINISH_PRE_CHECK(10, "完成\"出车前检查\",开始\"出车作业\""),
@@ -30,6 +32,8 @@ public enum WorkLogTypeEnum {
 
     LOAD_COMPLETE(30, "完成 装车运单"),
 
+    LOAD_CANCELED(31, "装车运单 中止"),
+
 
     UNLOAD_ORDER_START(40, "执行 卸车运单, 前往卸车点"),
 
@@ -45,6 +49,8 @@ public enum WorkLogTypeEnum {
 
     UNLOAD_COMPLETE(60, "完成 卸车运单"),
 
+    UNLOAD_CANCELED(61, "卸车运单 中止"),
+
 
     RETURN_POINT_ARRIVED(70, "到达 收车点,开始\"收车后检查\""),
 

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

@@ -35,7 +35,7 @@ public enum WorkOrderEnum {
     CLOSED(50, "已关闭"),
 
     //已作废
-    CONCELED(60, "已作废");
+    CONCELED(60, "已中止");
 
 
     private Integer orderStatus;

+ 30 - 4
src/main/java/com/aoyang/tms/controller/JxlsExportTestController.java

@@ -1,8 +1,13 @@
 package com.aoyang.tms.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.aoyang.tms.entity.TmsGasFee;
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.entity.WorkCycle;
+import com.aoyang.tms.entity.WorkOrder;
+import com.aoyang.tms.entity.WorkSpot;
 import com.aoyang.tms.service.JxlsExportTestService;
+import com.aoyang.tms.service.WorkCycleService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -31,14 +36,20 @@ public class JxlsExportTestController {
 
     @Resource
     private JxlsExportTestService jxlsExportTestService;
+    @Resource
+    private WorkCycleService workCycleService;
 
-    @ApiOperation(value = "下载行车日志,测试自用")
+    @ApiOperation(value = "下载行车日志,导出专用")
     @PostMapping("/download_test")
-    public StreamingResponseBody download(HttpServletResponse response, @RequestBody TmsGasFee param) {
+    public StreamingResponseBody download(HttpServletResponse response, @RequestBody WorkOrder param) {
         log.info("下载行车日志,导出专用,调用/tms/jxls_export/download_test,参数:{}", JSON.toJSONString(param));
-        if (null == param) {
+        if (null == param || param.getCycleId() == null) {
             log.error("download_list param is null");
         }
+        WorkCycle workCycle = workCycleService.getById(param.getCycleId());
+        if (workCycle == null || workCycle.getStatus() != 2) {
+            log.error("已完成周期才可以导出行车日志");
+        }
         try {
             return jxlsExportTestService.download(param, response);
         } catch (Exception e) {
@@ -46,4 +57,19 @@ public class JxlsExportTestController {
         }
         return null;
     }
+
+    @ApiOperation(value = "获取行车日志导出类", notes = "必传参数:cycleId")
+    @PostMapping("/get_get_work_log_tpl_vo")
+    public Result getWorkLogTplVO(@RequestBody WorkOrder param) {
+        log.info("获取行车日志导出类,调用/tms/jxls_export/get_get_work_log_tpl_vo,参数:{}", JSON.toJSONString(param));
+        if (param == null || param.getCycleId() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkCycle workCycle = workCycleService.getById(param.getCycleId());
+        if (workCycle == null || workCycle.getStatus() != 2) {
+            return new Result<>(ErrCodeEnum.CAN_NOT_EXPORT.getCode(), ErrCodeEnum.CAN_NOT_EXPORT.getMessage());
+        }
+        return new Result<>(jxlsExportTestService.getWorkLogTplVO(param));
+    }
+
 }

+ 73 - 2
src/main/java/com/aoyang/tms/controller/TestController.java

@@ -1,8 +1,11 @@
 package com.aoyang.tms.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.aoyang.common.result.Result;
-import com.aoyang.tms.entity.WorkSpot;
+import com.aoyang.tms.entity.*;
+import com.aoyang.tms.feign.MessageFeign;
+import com.aoyang.tms.feign.result.SmsSendLog;
 import com.aoyang.tms.feign.result.TmsMongoDoc;
 import com.aoyang.tms.service.*;
 import com.aoyang.tms.util.RegionUtil;
@@ -38,7 +41,13 @@ public class TestController {
     @Resource
     private MongoTemplate mongoTemplate;
     @Resource
+    private MessageFeign messageFeign;
+    @Resource
     private CommonService commonService;
+    @Resource
+    private TruckEscortService truckEscortService;
+    @Resource
+    private TruckDriverService truckDriverService;
 
     @ApiOperation(value = "mongo查询车辆最新位置", notes = "")
     @PostMapping("/query_truck")
@@ -79,7 +88,7 @@ public class TestController {
             lon[i] = Double.valueOf(split[0]);
             lat[i] = Double.valueOf(split[1]);
         }
-        Criteria criteria = Criteria.where("clientId").is(clientId);
+        Criteria criteria = Criteria.where("clientId").is(clientId).and("messageId").is(512);
         criteria.andOperator(Criteria.where("createTime").gt(LocalDateTime.now().minusDays(1)));
         Query query = new Query(criteria);
         List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);
@@ -120,4 +129,66 @@ public class TestController {
         return new Result<>(commonService.longitudeToAddress(lat, lon));
     }
 
+    @ApiOperation(value = "测试发送运单短信", notes = "根据经纬度查询位置")
+    @PostMapping("/testSms")
+    public Result testSms(@RequestParam Long truckId) {
+        Truck truck = new Truck();
+        truck.setTruckId(truckId);
+        StringBuffer monbiles = new StringBuffer();
+        TruckEscort query = new TruckEscort();
+        query.setTruckId(truck.getTruckId());
+        TruckEscort truckEscort = truckEscortService.findTruckEscort(query);
+        if (truckEscort != null) {
+            log.info("Test truckEscort :{}", JSON.toJSONString(truckEscort));
+            monbiles.append("," + truckEscort.getMobile());
+        }
+        log.info("Test truckDrivers param truckId:{}", truck.getTruckId());
+        List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
+        log.info("Test truckDrivers:{}", JSON.toJSONString(truckDrivers));
+        if (truckDrivers != null && truckDrivers.size() > 0) {
+            User user = commonService.findUser(truckDrivers.get(0).getDriverId());
+            log.info("Test get Dirver user:{} , param:{}", JSON.toJSONString(user), truckDrivers.get(0).getDriverId());
+            if (user != null) {
+                monbiles.append("," + user.getMobile());
+            }
+            if (truckDrivers.size() > 1) {
+                User user2 = commonService.findUser(truckDrivers.get(1).getDriverId());
+                if (user2 != null) {
+                    monbiles.append("," + user2.getMobile());
+                }
+            }
+        }
+
+        if (monbiles.length() > 0) {
+            // 发送短信
+            SmsSendLog smsSend = new SmsSendLog();
+            smsSend.setType(30);
+            JSONObject content = new JSONObject();
+            content.put("type", "装");
+            content.put("order_id", "测试Test运单");
+            smsSend.setContent(JSON.toJSONString(content));
+            smsSend.setMobile(monbiles.substring(1));
+            log.info("Test 发送装车运单短信:{}", JSON.toJSONString(smsSend));
+            Result<Boolean> send = messageFeign.send(smsSend, null, null, null);
+            return send;
+        }
+        return new Result<>(false);
+    }
+
+    @ApiOperation(value = "测试运单短信模板", notes = "根据经纬度查询位置")
+    @PostMapping("/testSmsTemp")
+    public Result testSmsTemp(@RequestParam String monbiles) {
+        // 发送短信
+        SmsSendLog smsSend = new SmsSendLog();
+        smsSend.setType(30);
+        JSONObject content = new JSONObject();
+        content.put("type", "装装");
+        content.put("order_id", "1652456512246");
+        smsSend.setContent(JSON.toJSONString(content));
+        smsSend.setMobile(monbiles.substring(1));
+        log.info("Test 测试短信模板运单:{}", JSON.toJSONString(smsSend));
+        Result<Boolean> send = messageFeign.send(smsSend, null, null, null);
+        return send;
+    }
+
 }

+ 30 - 1
src/main/java/com/aoyang/tms/controller/TruckEscortController.java

@@ -89,6 +89,16 @@ public class TruckEscortController {
         param.setCreaterName(utf8Name);
         param.setCreateDate(LocalDateTime.now());
 
+        if (param.getTruckId() != null) {
+            TruckEscortListParam truckEscortListParam = new TruckEscortListParam();
+            truckEscortListParam.setTruckId(param.getTruckId());
+            List<TruckEscort> list = truckEscortService.list(truckEscortListParam);
+            if (list != null && list.size() > 0) {
+                return new Result<>(ErrCodeEnum.ONLY_ONE_ESCORT.getCode(), ErrCodeEnum.ONLY_ONE_ESCORT.getMessage());
+
+            }
+        }
+
         return new Result<>(truckEscortService.add(param));
     }
 
@@ -97,7 +107,7 @@ public class TruckEscortController {
     public Result update(@RequestHeader(value = "userId") Long userId,
                          @RequestHeader(value = "userName") String userName,
                          @RequestBody TruckEscort param) {
-        log.info("修改作业点,调用/tms/truck_escort/update,参数:{}", JSON.toJSONString(param));
+        log.info("修改车辆押运员,调用/tms/truck_escort/update,参数:{}", JSON.toJSONString(param));
         if (param == null || param.getEscortId() == null) {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
@@ -110,6 +120,15 @@ public class TruckEscortController {
         param.setUpdaterName(utf8Name);
         param.setUpdateDate(LocalDateTime.now());
 
+        if (param.getTruckId() != null) {
+            TruckEscortListParam truckEscortListParam = new TruckEscortListParam();
+            truckEscortListParam.setTruckId(param.getTruckId());
+            List<TruckEscort> list = truckEscortService.list(truckEscortListParam);
+            if (list != null && list.size() > 0) {
+                return new Result<>(ErrCodeEnum.ONLY_ONE_ESCORT.getCode(), ErrCodeEnum.ONLY_ONE_ESCORT.getMessage());
+
+            }
+        }
         return new Result<>(truckEscortService.edit(param));
     }
 
@@ -134,4 +153,14 @@ public class TruckEscortController {
         return new Result<>(truckEscortService.getById(param));
     }
 
+    @ApiOperation(value = "获取没有绑定卡车的押运员列表", notes = "必传参数:orgId,选填参数:keyWord(查escortName,mobile)")
+    @PostMapping("/no_truck_list")
+    public Result noTruckList(@RequestBody TruckEscortListParam param) {
+        log.info("获取没有绑定卡车的押运员列表,调用/tms/truck_escort/no_truck_list,参数:{}", JSON.toJSONString(param));
+        if (param == null || param.getOrgId() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        return new Result<>(truckEscortService.noTruckList(param));
+    }
+
 }

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

@@ -79,7 +79,7 @@ public class TruckMongoInfoController {
         if (truckSimCard == null) {
             return new Result<>(ErrCodeEnum.INVALID_TRUCK.getCode(), "卡车无simcard信息");
         }
-        Query query = new Query(Criteria.where("clientId").is(truckSimCard.getSimCard()));
+        Query query = new Query(Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512));
         query.with(new Sort(Sort.Direction.DESC, "dateTime"));
         TmsMongoDoc tmsMongoDoc = mongoTemplate.findOne(query, TmsMongoDoc.class);
         log.info("查询位置信息 truck:{}, location:{}", truckSimCard.getCarNumber(), JSON.toJSONString(tmsMongoDoc));
@@ -116,7 +116,7 @@ public class TruckMongoInfoController {
             return new Result<>(ErrCodeEnum.INVALID_TRUCK.getCode(), "卡车无simcard信息");
         }
 
-        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
         criteria.andOperator(Criteria.where("createTime").gt(format.format(param.getStartTime())),
                 Criteria.where("createTime").lt(format.format(param.getEndTime())));
         Query query = new Query(criteria);
@@ -156,7 +156,7 @@ public class TruckMongoInfoController {
         }
         Date queryDate = param.getLocalDate();
         String dateStr = format.format(queryDate);
-        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
         criteria.andOperator(Criteria.where("createTime").gt(dateStr));
         Query query = new Query(criteria);
         query.with(new Sort(Sort.Direction.ASC, "dateTime"));

+ 49 - 6
src/main/java/com/aoyang/tms/controller/WorkCycleController.java

@@ -1,27 +1,36 @@
 package com.aoyang.tms.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.controller.param.WorkCycleVO;
+import com.aoyang.tms.util.DateUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.web.bind.annotation.RestController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
-import java.util.*;
+
 import javax.annotation.Resource;
-import  com.aoyang.tms.service.WorkCycleService;
-import  com.aoyang.tms.entity.WorkCycle;
+
+import com.aoyang.tms.service.WorkCycleService;
+import com.aoyang.tms.entity.WorkCycle;
 import com.aoyang.common.result.Result;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.aoyang.common.param.PageParam;
 
+import java.time.LocalDateTime;
+
 
 /**
  * <p>
-    * 行程周期表,行程开始到行程结束,包含一装多卸周期 控制器
-    * </p>
+ * 行程周期表,行程开始到行程结束,包含一装多卸周期 控制器
+ * </p>
  *
  * @author guoyong
  * @since 2022-04-21
@@ -35,7 +44,41 @@ public class WorkCycleController {
     @Resource
     private WorkCycleService workCycleService;
 
-    @ApiOperation(value = "获取历史行车列表",notes="")
+    @ApiOperation(value = "查询当前行程周期", notes = "必传参数:truckId")
+    @PostMapping("/find")
+    public Result find(@RequestBody WorkCycle workCycleParam) {
+        log.info("查询当前行程周期,/tms/work_cycle/find,参数:{}", JSON.toJSONString(workCycleParam));
+        if (workCycleParam == null || workCycleParam.getTruckId() == null) {
+            return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkCycleVO workCycleVo = new WorkCycleVO();
+        WorkCycle workCycle = workCycleService.findCurrentWorkCycle(workCycleParam.getTruckId());
+        if (workCycle != null) {
+            BeanUtils.copyProperties(workCycle, workCycleVo);
+            if (workCycle.getStatus() == 1) {
+                workCycleVo.setTime(DateUtils.betweenTime(workCycle.getStartTime(), LocalDateTime.now()));
+            }
+            if (workCycle.getStatus() == 2) {
+                workCycleVo.setTime(DateUtils.betweenTime(workCycle.getStartTime(), workCycle.getEndTime()));
+            }
+        }
+        return new Result<>(workCycleVo);
+    }
+
+    @ApiOperation(value = "更新前行程周期天气", notes = "必传参数:id和天气信息")
+    @PostMapping("/update_weather")
+    public Result updateWeather(@RequestBody WorkCycle workCycleParam) {
+        log.info("前行程周期,/tms/work_cycle/update,参数:{}", JSON.toJSONString(workCycleParam));
+        if (workCycleParam == null || workCycleParam.getId() == null || StringUtils.isBlank(workCycleParam.getWeather())) {
+            return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkCycle workCycle = workCycleService.getById(workCycleParam.getId());
+        workCycle.setWeather(workCycleParam.getWeather());
+        Boolean flag = workCycleService.updateById(workCycle);
+        return new Result<>(flag);
+    }
+
+    @ApiOperation(value = "获取历史行车列表", notes = "")
     @PostMapping("/list")
     public Result list(@RequestBody PageParam<WorkCycle> pageParam) {
         Page<WorkCycle> page = new Page<>(pageParam.getPage(), pageParam.getSize());

+ 62 - 10
src/main/java/com/aoyang/tms/controller/WorkOrderController.java

@@ -4,7 +4,15 @@ package com.aoyang.tms.controller;
 import com.alibaba.fastjson.JSON;
 import com.aoyang.tms.common.ErrCodeEnum;
 import com.aoyang.tms.controller.param.WorkOrderPageParam;
+import com.aoyang.tms.controller.vo.LocationVO;
 import com.aoyang.tms.controller.vo.WorkOrderVO;
+import com.aoyang.tms.entity.Truck;
+import com.aoyang.tms.entity.WorkOrderReadinfo;
+import com.aoyang.tms.entity.WorkSpot;
+import com.aoyang.tms.service.*;
+import com.aoyang.tms.util.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -19,7 +27,6 @@ import java.time.LocalDateTime;
 import java.util.*;
 import javax.annotation.Resource;
 
-import com.aoyang.tms.service.WorkOrderService;
 import com.aoyang.tms.entity.WorkOrder;
 import com.aoyang.common.result.Result;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -44,6 +51,14 @@ public class WorkOrderController {
 
     @Resource
     private WorkOrderService workOrderService;
+    @Resource
+    private WorkSpotService workSpotService;
+    @Resource
+    private WorkOrderReadinfoService workOrderReadinfoService;
+    @Resource
+    private TruckService truckService;
+    @Resource
+    private CommonService commonService;
 
     @ApiOperation(value = "运单详情", notes = "获取司机或押运员的运单详情")
     @PostMapping("/find_work_order_info")
@@ -53,10 +68,31 @@ public class WorkOrderController {
         if (workOrder == null || workOrder.getId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
-
         WorkOrder workOrder1 = workOrderService.getById(workOrder.getId());
         WorkOrderVO vo = new WorkOrderVO();
         BeanUtils.copyProperties(workOrder1, vo);
+        WorkSpot workSpot = workSpotService.getById(workOrder1.getSpotId());
+        vo.setXiecheContactName(workSpot.getContactName());
+        vo.setXiecheContactPhone(workSpot.getContactPhone());
+        vo.setSpotAddress(workSpot.getAddress());
+        Truck truck = truckService.getById(workOrder1.getTruckId());
+        vo.setTruckStatus(truck.getTmsStatus());
+        WorkOrderReadinfo readinfo = workOrderReadinfoService.getOne(
+                new QueryWrapper<WorkOrderReadinfo>().eq("truck_id", workOrder1.getTruckId()).eq("user_id", userId));
+        vo.setReadFlag(readinfo == null ? 0 : 1);
+        List<String> routeGps = commonService.getLocationtrip(workOrder.getTruckId(), workOrder.getGotoSpotTime(), LocalDateTime.now());
+        vo.setRouteGps(routeGps);
+        LocationVO locationVO = commonService.getLocationByDate(workOrder.getTruckId(), workOrder.getExecuteTime());
+        if (locationVO != null) {
+            vo.setTime(DateUtils.betweenTime(locationVO.getDate(), LocalDateTime.now()));
+            vo.setLatitude(locationVO.getLatitude());
+            vo.setLongitude(locationVO.getLongitude());
+        } else {
+            if (workOrder.getExecuteTime() != null) {
+                vo.setTime(DateUtils.betweenTime(workOrder.getExecuteTime(), LocalDateTime.now()));
+            }
+        }
+        log.info("运单详情,/tms/work_order/find_work_order_info,vo:{}", JSON.toJSONString(vo));
         return new Result<>(vo);
     }
 
@@ -86,7 +122,7 @@ public class WorkOrderController {
     public Result stop(@RequestHeader(value = "userId") Long userId,
                        @RequestHeader(value = "userName") String userName,
                        @RequestBody WorkOrder param) {
-        if (param == null || param.getId() == null || param.getOrderStatus() != 60) {
+        if (param == null || param.getId() == null || param.getOrderStatus() != 60 || param.getStopNote() == null) {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
 
@@ -105,7 +141,7 @@ public class WorkOrderController {
         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));
+        return new Result<>(workOrderService.cancelWorkOrder(param));
     }
 
     @ApiOperation(value = "根据id关闭运单(运单分页列表PC端)", notes = "必传参数:id,orderStatus=50")
@@ -135,12 +171,12 @@ public class WorkOrderController {
         return new Result<>(workOrderService.saveOrUpdate(param));
     }
 
-    @ApiOperation(value = "根据id修改运单(运单分页列表PC端,待执行0已完成40已关闭50运单可改)", notes = "必传参数:id,orderStatus=60")
+    @ApiOperation(value = "根据id修改运单(运单分页列表PC端,待执行0已完成40已关闭50运单可改)", notes = "必传参数:id")
     @PostMapping("/pc_update")
     public Result pcUpdate(@RequestHeader(value = "userId") Long userId,
                            @RequestHeader(value = "userName") String userName,
-                           @RequestBody WorkOrder param) {
-        if (param == null || param.getId() == null || param.getOrderStatus() != 50) {
+                           @RequestBody WorkOrderVO param) {
+        if (param == null || param.getId() == null) {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
 
@@ -152,12 +188,28 @@ public class WorkOrderController {
         param.setUpdater(userId);
         param.setUpdaterName(utf8Name);
         param.setUpdateDate(LocalDateTime.now());
-        log.info("根据id修改运单(运单分页列表PC端,已完成已关闭运单可改),调用/tms/work_order/pc_update,参数:{}", JSON.toJSONString(param));
+        log.info("根据id修改运单(运单分页列表PC端,待执行已完成已关闭运单可改),调用/tms/work_order/pc_update,参数:{}", JSON.toJSONString(param));
 
-        WorkOrder workOrder = workOrderService.getById(param);
-        if (workOrder.getOrderStatus() != 0 || workOrder.getOrderStatus() != 40 && workOrder.getOrderStatus() != 50) {
+        WorkOrder workOrder = workOrderService.getById(param.getId());
+        if (workOrder.getOrderStatus() != 0 && workOrder.getOrderStatus() != 40 && workOrder.getOrderStatus() != 50) {
             return new Result<>(ErrCodeEnum.NO_UPDATE.getCode(), ErrCodeEnum.NO_UPDATE.getMessage());
         }
+        if (param.getSpotId() != null) {
+            WorkSpot spot = workSpotService.getById(param.getSpotId());
+            if (spot == null) {
+                return new Result<>(ErrCodeEnum.NO_UPDATE.getCode(), "作业点信息错误");
+            }
+            param.setSpotName(spot.getSpotName());
+        }
+        if (StringUtils.isNotBlank(param.getXiecheContactName()) || StringUtils.isNotBlank(param.getXiecheContactPhone())
+                || StringUtils.isNotBlank(param.getSpotAddress()) || StringUtils.isNotBlank(param.getSpotName())) {
+            WorkSpot spot = workSpotService.getById(workOrder.getSpotId());
+            spot.setContactPhone(param.getXiecheContactPhone());
+            spot.setContactName(param.getXiecheContactName());
+            spot.setAddress(param.getSpotAddress());
+            spot.setSpotName(param.getSpotName());
+            workSpotService.updateById(spot);
+        }
         return new Result<>(workOrderService.saveOrUpdate(param));
     }
 

+ 104 - 23
src/main/java/com/aoyang/tms/controller/WorkOrderManageController.java

@@ -14,27 +14,25 @@ import com.aoyang.tms.controller.vo.TruckHistoryTripVO;
 import com.aoyang.tms.controller.vo.TruckOrderManageVO;
 import com.aoyang.tms.controller.vo.TruckOrderStatisticsVO;
 import com.aoyang.tms.entity.*;
+import com.aoyang.tms.feign.MessageFeign;
+import com.aoyang.tms.feign.result.SmsSendLog;
 import com.aoyang.tms.service.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.beans.BeanUtils;
-import org.springframework.cloud.netflix.ribbon.apache.HttpClientUtils;
 import org.springframework.web.bind.annotation.*;
-import sun.net.www.http.HttpClient;
 
 import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
-import java.net.URL;
 import java.net.URLDecoder;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Random;
 
 
 /**
@@ -65,6 +63,10 @@ public class WorkOrderManageController {
     private WorkCycleService workCycleService;
     @Resource
     private WorkLogService workLogService;
+    @Resource
+    private CommonService commonService;
+    @Resource
+    private MessageFeign messageFeign;
 
     @ApiOperation(value = "获取运力调度列表",notes="")
     @PostMapping("/list")
@@ -91,7 +93,8 @@ public class WorkOrderManageController {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
         log.info("获取车辆历史行程,调用/tms/work_order_manage/history_trip truck:{} ", truck.getTruckId());
-        List<WorkCycle> workCycles = workCycleService.list(new QueryWrapper<WorkCycle>().eq("truck_id", truck.getTruckId()));
+        List<WorkCycle> workCycles = workCycleService.list(
+                new QueryWrapper<WorkCycle>().eq("truck_id", truck.getTruckId()).eq("status", 2));
         List<TruckHistoryTripVO> resultList = new ArrayList<>();
         for (WorkCycle workCycle : workCycles) {
             TruckHistoryTripVO vo = new TruckHistoryTripVO();
@@ -100,10 +103,12 @@ public class WorkOrderManageController {
             queryWrapper.eq("cycle_id", workCycle.getId());
             queryWrapper.eq("type", 1);
             vo.setLoadCount(workOrderService.count(queryWrapper));
-            queryWrapper.eq("type", 2);
-            vo.setUnloadCount(workOrderService.count(queryWrapper));
+            vo.setUnloadCount(workOrderService.count(
+                    new QueryWrapper<WorkOrder>().eq("cycle_id", workCycle.getId()).eq("type", 2)));
             vo.setStartTime(workCycle.getStartTime());
             vo.setEndTime(workCycle.getEndTime());
+            vo.setStartTrip(workCycle.getStartTrip());
+            vo.setEndTrip(workCycle.getEndTrip());
             resultList.add(vo);
         }
         return new Result<>(resultList);
@@ -124,11 +129,26 @@ public class WorkOrderManageController {
         return new Result<>(workLogs);
     }
 
+    @ApiOperation(value = "当前车辆行车日志详情",notes="")
+    @PostMapping("/current_trip_detail")
+    public Result<List<WorkLog>> currentTripDetail(@RequestBody IdParam idParam) {
+        log.info("获取车辆历史行程,调用/tms/work_order_manage/current_trip_detail idParam:{} ", JSON.toJSONString(idParam));
+        if (idParam == null || idParam.getId() == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        WorkCycle workCycle = workCycleService.getById(idParam.getId());
+        if (workCycle == null) {
+            return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), "行车周期不存在");
+        }
+        List<WorkLog> workLogs = workLogService.list(new QueryWrapper<WorkLog>().eq("cycle_id", idParam.getId()));
+        return new Result<>(workLogs);
+    }
+
     @ApiOperation(value = "新增装车派单", notes = "调度员派单操作")
     @PostMapping("/add_load_order")
     public Result add(@RequestHeader(value = "orgId") Long orgId,
                       @RequestHeader(value = "userId") Long userId,
-                      @RequestHeader("userName") String userName,
+                      @RequestHeader(value = "userName") String userName,
                       @RequestBody AddWorkOrderVO orderVO) {
         log.info("运力调度派单,调用/tms/work_order_manage/add_order param:{} ", JSON.toJSONString(orderVO));
         if (orderVO == null || orderVO.getShipperId() == null || orderVO.getSpotId() == null ||
@@ -142,7 +162,10 @@ public class WorkOrderManageController {
         String ids = orderVO.getTruckIds();
         String[] truckIds = ids.split(",");
         List<WorkOrder> workOrders = new ArrayList<>(truckIds.length);
+        Random random = new Random(1000);
+        Long timeMillis = System.currentTimeMillis();
         for (String truckId : truckIds) {
+            List<String> monbiles = new ArrayList<>();
             WorkOrder workOrder = new WorkOrder();
             BeanUtils.copyProperties(orderVO, workOrder);
             workOrder.setTruckId(Long.parseLong(truckId));
@@ -163,21 +186,48 @@ public class WorkOrderManageController {
             if (truckEscort != null) {
                 workOrder.setEscortId(truckEscort.getEscortId());
                 workOrder.setEscortName(truckEscort.getEscortName());
+                monbiles.add(truckEscort.getMobile());
             }
             List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
             if (truckDrivers != null && truckDrivers.size() > 0) {
                 workOrder.setDriverIdOne(truckDrivers.get(0).getDriverId());
                 workOrder.setDriverNameOne(truckDrivers.get(0).getDriverName());
+                User user = commonService.findUser(truckDrivers.get(0).getDriverId());
+                if (user != null) {
+                    monbiles.add(user.getMobile());
+                }
                 if (truckDrivers.size() > 1) {
                     workOrder.setDriverIdTwo(truckDrivers.get(1).getDriverId());
                     workOrder.setDriverNameOne(truckDrivers.get(1).getDriverName());
+                    User user2 = commonService.findUser(truckDrivers.get(1).getDriverId());
+                    if (user2 != null) {
+                        monbiles.add(user2.getMobile());
+                    }
                 }
             }
+            String orderNo = timeMillis - random.nextInt() + "";
+            workOrder.setOrderNo(orderNo);
             workOrder.setCreater(userId);
             workOrder.setCreaterName(userName);
             workOrder.setCreateDate(LocalDateTime.now());
+            workOrder.setUpdateDate(LocalDateTime.now());
 
             workOrders.add(workOrder);
+
+            if (monbiles.size() > 0) {
+                // 发送短信
+                for (String mobile : monbiles) {
+                    SmsSendLog smsSend = new SmsSendLog();
+                    smsSend.setType(30);
+                    JSONObject content = new JSONObject();
+                    content.put("type", "装车");
+                    content.put("order_id", orderNo);
+                    smsSend.setContent(JSON.toJSONString(content));
+                    smsSend.setMobile(mobile);
+                    messageFeign.send(smsSend, null, null, null);
+                }
+            }
+
         }
         Boolean flag = workOrderService.saveBatch(workOrders);
         return new Result<>(flag);
@@ -190,20 +240,37 @@ public class WorkOrderManageController {
                             @RequestHeader("userName") String userName,
                             @RequestBody AddWorkOrderVO orderVO) {
         log.info("运力调度派单,调用/tms/work_order_manage/add_unload_order param:{} ", JSON.toJSONString(orderVO));
-        if (orderVO == null || orderVO.getShipperId() == null || orderVO.getSpotId() == null ||
-                orderVO.getTruckIds() == null) {
+        if (orderVO == null || orderVO.getTruckIds() == null) {
             return new Result<>(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
         try {
             userName = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
+
+        // 保存卸车点
+        WorkSpot workSpot = new WorkSpot();
+        workSpot.setOrgId(orgId);
+        workSpot.setType(2);
+        workSpot.setSpotName(orderVO.getSpotName());
+        workSpot.setContactName(orderVO.getContactName());
+        workSpot.setContactPhone(orderVO.getContactPhone());
+        workSpot.setCreater(userId);
+        workSpot.setCreaterName(userName);
+        workSpot.setCreateDate(LocalDateTime.now());
+        workSpotService.save(workSpot);
+
         String ids = orderVO.getTruckIds();
         String[] truckIds = ids.split(",");
         List<WorkOrder> workOrders = new ArrayList<>(truckIds.length);
+        Random random = new Random(1000);
+        Long timeMillis = System.currentTimeMillis();
         for (String truckId : truckIds) {
+            List<String> monbiles = new ArrayList<>();
             WorkOrder workOrder = new WorkOrder();
             BeanUtils.copyProperties(orderVO, workOrder);
+            workOrder.setSpotId(workSpot.getSpotId());
+            workOrder.setSpotName(workSpot.getSpotName());
             workOrder.setTruckId(Long.parseLong(truckId));
             workOrder.setType(2);
             workOrder.setOrderStatus(WorkOrderEnum.TODO.orderStatus());
@@ -222,36 +289,50 @@ public class WorkOrderManageController {
             if (truckEscort != null) {
                 workOrder.setEscortId(truckEscort.getEscortId());
                 workOrder.setEscortName(truckEscort.getEscortName());
+                monbiles.add(truckEscort.getMobile());
             }
             List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(truck.getTruckId());
             if (truckDrivers != null && truckDrivers.size() > 0) {
                 workOrder.setDriverIdOne(truckDrivers.get(0).getDriverId());
                 workOrder.setDriverNameOne(truckDrivers.get(0).getDriverName());
+                User user = commonService.findUser(truckDrivers.get(0).getDriverId());
+                if (user != null) {
+                    monbiles.add(user.getMobile());
+                }
                 if (truckDrivers.size() > 1) {
                     workOrder.setDriverIdTwo(truckDrivers.get(1).getDriverId());
                     workOrder.setDriverNameOne(truckDrivers.get(1).getDriverName());
+                    User user2 = commonService.findUser(truckDrivers.get(1).getDriverId());
+                    if (user2 != null) {
+                        monbiles.add(user2.getMobile());
+                    }
                 }
             }
+            String orderNo = timeMillis - random.nextInt() + "";
+            workOrder.setOrderNo(orderNo);
             workOrder.setCreater(userId);
             workOrder.setCreaterName(userName);
             workOrder.setCreateDate(LocalDateTime.now());
+            workOrder.setUpdateDate(LocalDateTime.now());
 
             workOrders.add(workOrder);
+
+            if (monbiles.size() > 0) {
+                // 发送短信
+                for (String mobile : monbiles) {
+                    SmsSendLog smsSend = new SmsSendLog();
+                    smsSend.setType(30);
+                    JSONObject content = new JSONObject();
+                    content.put("type", "卸车");
+                    content.put("order_id", orderNo);
+                    smsSend.setContent(JSON.toJSONString(content));
+                    smsSend.setMobile(mobile);
+                    messageFeign.send(smsSend, null, null, null);
+                }
+            }
         }
         Boolean flag = workOrderService.saveBatch(workOrders);
 
-        // 保存卸车点
-        WorkSpot workSpot = new WorkSpot();
-        workSpot.setOrgId(orgId);
-        workSpot.setType(2);
-        workSpot.setSpotName(orderVO.getSpotName());
-        workSpot.setContactName(orderVO.getContactName());
-        workSpot.setContactPhone(orderVO.getContactPhone());
-        workSpot.setCreater(userId);
-        workSpot.setCreaterName(userName);
-        workSpot.setCreateDate(LocalDateTime.now());
-        flag = workSpotService.save(workSpot);
-
         return new Result<>(flag);
     }
 

+ 136 - 58
src/main/java/com/aoyang/tms/controller/WorkerController.java

@@ -4,12 +4,17 @@ 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.common.TmsTruckStatus;
+import com.aoyang.tms.common.WorkLogTypeEnum;
+import com.aoyang.tms.common.WorkOrderEnum;
+import com.aoyang.tms.controller.param.UpSignParam;
 import com.aoyang.tms.controller.vo.LocationVO;
 import com.aoyang.tms.controller.vo.WorkOrderVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
 import com.aoyang.tms.entity.*;
 import com.aoyang.tms.service.*;
 import com.aoyang.tms.util.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -58,6 +63,9 @@ public class WorkerController {
     private WorkCycleService workCycleService;
     @Resource
     private TruckRepairInfoService truckRepairInfoService;
+    @Resource
+    private TruckService truckService;
+
 
     @ApiOperation(value = "运力详情", notes = "卡车id必传,包含司机1姓名、司机2姓名、押运员姓名、车辆状态、位置经纬度、位置时间等信息")
     @PostMapping("/find_truck_info")
@@ -74,47 +82,12 @@ public class WorkerController {
     @ApiOperation(value = "运单详情", notes = "必传参数:订单id")
     @PostMapping("/find_order_info")
     public Result<WorkOrderVO> findOrderInfo(@RequestHeader(value = "orgId") Long orgId,
-                                             @RequestHeader(value = "userId") Long userId, @RequestBody WorkOrder workOrderParam) {
+                                             @RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrderParam) {
         log.info("运单详情,/tms/worker/find_order_info,参数:{}", JSON.toJSONString(workOrderParam));
         if (workOrderParam == null || workOrderParam.getId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
-        WorkOrderVO vo = new WorkOrderVO();
-        WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
-        if (workOrder != null) {
-
-            BeanUtils.copyProperties(workOrder, vo);
-
-            //调度员联系电话
-            User user = commonService.findUser(workOrder.getCreater());
-            if (user != null) {
-                vo.setDispatcherPhone(user.getMobile());
-            }
-            //卸车点联系人电话
-            WorkSpot workSpot = workSpotService.getById(workOrder.getSpotId());
-            if (workSpot != null) {
-                vo.setXiecheContactName(workSpot.getContactName());
-                vo.setXiecheContactPhone(workSpot.getContactPhone());
-                vo.setSpotAddress(workSpot.getAddress());
-            }
-            //取ExecuteTime第一条GPS上报时间作为开始运单时间,累计用时
-            LocationVO locationVO = commonService.getLocationByDate(workOrder.getTruckId(), workOrder.getExecuteTime());
-            if (locationVO != null) {
-                vo.setTime(DateUtils.betweenTime(locationVO.getDate(), LocalDateTime.now()));
-                vo.setLatitude(locationVO.getLatitude());
-                vo.setLongitude(locationVO.getLongitude());
-            } else {
-                vo.setTime(DateUtils.betweenTime(workOrder.getExecuteTime(), LocalDateTime.now()));
-            }
-
-            WorkOrderReadinfo workOrderReadinfo = workOrderReadinfoService.findWorkOrderReadinfo(userId, workOrderParam.getId());
-            if (workOrderReadinfo != null) {
-                vo.setReadFlag(1);
-            }
-            List<String> routeGps = commonService.getLocationtrip(workOrder.getTruckId(), workOrder.getGotoSpotTime(), LocalDateTime.now());
-            vo.setRouteGps(routeGps);
-        }
-
+        WorkOrderVO vo = commonService.findOrderInfo(userId, userName, workOrderParam);
         return new Result<>(vo);
     }
 
@@ -147,14 +120,14 @@ public class WorkerController {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
         WorkCycle workCycle = workCycleService.findCurrentWorkCycle(workOrder.getTruckId());
-        if (workCycle != null) {
-
+        if (workCycle == null) {
+            return new Result(ErrCodeEnum.BAD_PARAM.getCode(), "当前车辆无行程周期");
         }
         List<WorkOrder> list = workOrderService.findCycleOrderList(workCycle.getId(), null, null);
         return new Result<>(list);
     }
 
-    @ApiOperation(value = "首页订单列表", notes = "装车运单,只展示当前行车周期未完成的;除非当前已收车,则按排序展示第1个未完成的装车运单;卸车运单,重车时,才展示 ")
+    @ApiOperation(value = "首页订单列表", notes = "查询未完成的所有订单列表,按照计划到达时间由早到晚排序")
     @PostMapping("/find_index_order_list")
     public Result<List<WorkOrderVO>> findIndexOrderList(@RequestHeader(value = "orgId") Long orgId,
                                                         @RequestHeader(value = "userId") Long userId, @RequestBody WorkOrder workOrder) {
@@ -162,7 +135,7 @@ public class WorkerController {
         if (workOrder == null || workOrder.getTruckId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
-        List<WorkOrderVO> list = workOrderService.findWorkOrderList(userId, workOrder);
+        List<WorkOrderVO> list = workOrderService.findNoCompleteOrderList(userId, workOrder);
         return new Result<>(list);
     }
 
@@ -188,7 +161,7 @@ public class WorkerController {
         workOrderReadinfo.setCreater(userId);
         workOrderReadinfo.setCreaterName(utf8Name);
         workOrderReadinfo.setCreateDate(LocalDateTime.now());
-        boolean flag = workOrderReadinfoService.saveOrUpdate(workOrderReadinfo);
+        boolean flag = workOrderReadinfoService.addWorkOrderReadinfo(workOrderReadinfo);
         return new Result<>(flag);
     }
 
@@ -207,13 +180,20 @@ public class WorkerController {
 
         WorkCycle workCycle = workCycleService.getById(restInfo.getCycleId());
         if (workCycle != null) {
-            BeanUtils.copyProperties(workCycle, restInfo);
+            restInfo.setCarNumber(workCycle.getCarNumber());
+            restInfo.setOrgId(workCycle.getOrgId());
+            restInfo.setOrgName(workCycle.getOrgName());
+            restInfo.setTruckId(workCycle.getTruckId());
+            restInfo.setCycleId(workCycle.getId());
             restInfo.setCycleId(workCycle.getId());
         }
         restInfo.setCreater(userId);
         restInfo.setCreaterName(utf8Name);
         restInfo.setCreateDate(LocalDateTime.now());
         Boolean flag = restInfoService.save(restInfo);
+        workLogService.logWorkCycleInfo(WorkLogTypeEnum.REST_START, null, workCycle.getId() + "", workCycle.getTruckId() + "");
+        workLogService.logWorkCycleInfo(WorkLogTypeEnum.REST_START, null, workCycle.getId() + "", workCycle.getTruckId() + "",
+                DateUtils.betweenTime(restInfo.getStartTime(), restInfo.getEndTime()));
         return new Result<>(flag);
     }
 
@@ -232,13 +212,19 @@ public class WorkerController {
 
         WorkCycle workCycle = workCycleService.getById(truckRepairInfo.getCycleId());
         if (workCycle != null) {
-            BeanUtils.copyProperties(workCycle, truckRepairInfo);
+            truckRepairInfo.setCarNumber(workCycle.getCarNumber());
+            truckRepairInfo.setOrgId(workCycle.getOrgId());
+            truckRepairInfo.setOrgName(workCycle.getOrgName());
+            truckRepairInfo.setTruckId(workCycle.getTruckId());
             truckRepairInfo.setCycleId(workCycle.getId());
         }
         truckRepairInfo.setCreater(userId);
         truckRepairInfo.setCreaterName(utf8Name);
         truckRepairInfo.setCreateDate(LocalDateTime.now());
         Boolean flag = truckRepairInfoService.save(truckRepairInfo);
+        workLogService.logWorkCycleInfo(WorkLogTypeEnum.REPAIR_START, null, workCycle.getId() + "", workCycle.getTruckId() + "");
+        workLogService.logWorkCycleInfo(WorkLogTypeEnum.REPAIR_START, null, workCycle.getId() + "", workCycle.getTruckId() + "",
+                DateUtils.betweenTime(truckRepairInfo.getStartTime(), truckRepairInfo.getEndTime()));
         return new Result<>(flag);
     }
 
@@ -257,7 +243,7 @@ public class WorkerController {
     @PostMapping("/add_truck_check_info")
     public Result add_truck_check_info(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody TruckCheckInfo truckCheckInfo) {
         log.info("上报车辆检查信息,/tms/worker/add_truck_check_info,参数:{}", JSON.toJSONString(truckCheckInfo));
-        if (truckCheckInfo == null || truckCheckInfo.getType() == null || truckCheckInfo.getTruckId() == null || StringUtils.isBlank(truckCheckInfo.getTrip()) || StringUtils.isBlank(truckCheckInfo.getCheckUrl()) || StringUtils.isBlank(truckCheckInfo.getTripUrl())) {
+        if (truckCheckInfo == null || truckCheckInfo.getType() == null || truckCheckInfo.getTruckId() == null || truckCheckInfo.getTrip() == null || StringUtils.isBlank(truckCheckInfo.getCheckUrl()) || StringUtils.isBlank(truckCheckInfo.getTripUrl())) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
         String utf8Name = userName;
@@ -326,10 +312,23 @@ public class WorkerController {
     @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));
-        if (workOrder == null || workOrder.getId() == null || StringUtils.isBlank(workOrder.getStartTrip()) || StringUtils.isBlank(workOrder.getStartTripUrl())) {
+        log.info("开始执行装卸车运单,/tms/worker/start_order,参数:{}", JSON.toJSONString(workOrder));
+        if (workOrder == null || workOrder.getId() == null || workOrder.getStartTrip() == null || StringUtils.isBlank(workOrder.getStartTripUrl())) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+
+        WorkOrder workOrderCheck = workOrderService.getById(workOrder.getId());
+
+        Truck truck = truckService.getById(workOrderCheck.getTruckId());
+        if (truck.getTmsStatus().equals(TmsTruckStatus.RETURNING)) {
+            return new Result(ErrCodeEnum.CAN_NOT_DO_ORDER.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+
+
+        if (workOrderCheck.getOrderStatus().equals(WorkOrderEnum.CONCELED.orderStatus())) {
+            return new Result(ErrCodeEnum.CLOSED_ORDER.getCode(), ErrCodeEnum.CLOSED_ORDER.getMessage());
+        }
+
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
@@ -338,16 +337,22 @@ public class WorkerController {
         //1.车辆进入出车前检车状态,2.订单进入前往装车点状态,3.并记行车日志,4.创建行程周期
         workOrder.setExecuteTime(LocalDateTime.now());
         Boolean flag = workerService.startOrder(userId, utf8Name, workOrder);
+        if (!flag) {
+            String str = workOrderCheck.getType() == 1 ? ",当前车辆为重车" : ",当前车辆为空车";
+            return new Result<>(ErrCodeEnum.EXECUTE_WEIGHT_ERROR.getCode(),
+                    ErrCodeEnum.EXECUTE_WEIGHT_ERROR.getMessage() + str);
+        }
         return new Result<>(flag);
     }
 
     @ApiOperation(value = "2.完成出车前检查,开始装卸车作业", notes = "点击-完成出车前检查,开始出车作业-按钮")
     @PostMapping("/start_work")
     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) {
+        log.info("完成出车前检查,开始装卸车作业,/tms/worker/start_work,参数:{}", JSON.toJSONString(truckCheckInfo));
+        if (truckCheckInfo == null || truckCheckInfo.getType() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+
         //1.车辆进入作业中状态,2.订单进入前往装车点状态,3.并记行车日志
 
         //出车检查
@@ -358,16 +363,45 @@ public class WorkerController {
         }
         //出车检查
         if (truckCheckInfo.getType() == 2) {
-            if (StringUtils.isBlank(truckCheckInfo.getTrip()) || StringUtils.isBlank(truckCheckInfo.getTripUrl()) || StringUtils.isBlank(truckCheckInfo.getCheckUrl())) {
+            if (truckCheckInfo.getTrip() == null || StringUtils.isBlank(truckCheckInfo.getTripUrl()) || StringUtils.isBlank(truckCheckInfo.getCheckUrl())) {
                 return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
             }
         }
+        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("truck_id", truckCheckInfo.getTruckId());
+        queryWrapper.and(wrapper -> wrapper.eq("order_status", WorkOrderEnum.GOTO_ZHUANGCHE_SPOT.orderStatus())
+                .or().eq("order_status", WorkOrderEnum.ZHUANGCHE_WAIT.orderStatus()));
+        WorkOrder workOrder = workOrderService.getOne(queryWrapper);
+        log.info("start_work workOrder:{}", JSON.toJSONString(workOrder));
+        if (workOrder == null) {
+            log.error("无执行中装车运单 不能执行出车检查:{}", JSON.toJSONString(truckCheckInfo));
+            return new Result(ErrCodeEnum.BAD_PARAM.getCode(), "当前不能执行出车检查");
+        }
+        truckCheckInfo.setOrderId(workOrder.getId());
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
 
+        //1.车辆进入出车前检车状态
+        Truck truck = truckService.getById(workOrder.getTruckId());
+        truck.setTmsStatus(TmsTruckStatus.WORKING);
+        truckService.updateById(truck);
+        //2.插入车辆检查数据
+        BeanUtils.copyProperties(workOrder, truckCheckInfo);
+        truckCheckInfo.setCreater(userId);
+        truckCheckInfo.setCreaterName(utf8Name);
+        truckCheckInfo.setCreateDate(LocalDateTime.now());
+        truckCheckInfoService.save(truckCheckInfo);
+
+        if (truckCheckInfo.getOrderId() != null) {
+            WorkOrder workOrderCheck = workOrderService.getById(truckCheckInfo.getOrderId());
+            if (workOrderCheck.getOrderStatus().equals(WorkOrderEnum.CONCELED.orderStatus())) {
+                return new Result(ErrCodeEnum.CLOSED_ORDER.getCode(), ErrCodeEnum.CLOSED_ORDER.getMessage());
+            }
+        }
+
         Boolean flag = workerService.starWork(userId, utf8Name, truckCheckInfo);
         return new Result<>(flag);
     }
@@ -379,11 +413,18 @@ public class WorkerController {
         if (workOrder == null || workOrder.getId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+
+        WorkOrder workOrderCheck = workOrderService.getById(workOrder.getId());
+        if (workOrderCheck.getOrderStatus().equals(WorkOrderEnum.CONCELED.orderStatus())) {
+            return new Result(ErrCodeEnum.CLOSED_ORDER.getCode(), ErrCodeEnum.CLOSED_ORDER.getMessage());
+        }
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
+
+
         //1.车辆进入作业中状态,2.订单进入装车等待状态,3.并记行车日志
         Boolean flag = workerService.startWait(userId, utf8Name, workOrder);
         return new Result<>(flag);
@@ -392,15 +433,22 @@ public class WorkerController {
     @ApiOperation(value = "4.结束等待,开始上传磅单", notes = "点击结束等待,开始上传磅单按钮")
     @PostMapping("/submit_result")
     public Result submitResult(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrder) {
-        log.info("上报成果,/tms/worker/submit_result,参数:{}", JSON.toJSONString(workOrder));
+        log.info("结束等待,开始上传磅单,/tms/worker/submit_result,参数:{}", JSON.toJSONString(workOrder));
         if (workOrder == null || workOrder.getId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+
+        WorkOrder workOrderCheck = workOrderService.getById(workOrder.getId());
+        if (workOrderCheck.getOrderStatus().equals(WorkOrderEnum.CONCELED.orderStatus())) {
+            return new Result(ErrCodeEnum.CLOSED_ORDER.getCode(), ErrCodeEnum.CLOSED_ORDER.getMessage());
+        }
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
+
+
         //1.车辆进入作业中状态,2.订单进入成果报备中状态,3.并记行车日志
         Boolean flag = workerService.submitResult(userId, utf8Name, workOrder);
         return new Result<>(flag);
@@ -419,7 +467,7 @@ public class WorkerController {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        //TODO 1.车辆进入收车中状态,2.订单完成状态,3.并记行车日志
+        //1.车辆进入收车中状态,2.订单完成状态,3.并记行车日志
         Boolean flag = workerService.finishOrder(userId, utf8Name, workOrder);
         return new Result<>(flag);
     }
@@ -427,7 +475,7 @@ public class WorkerController {
     @ApiOperation(value = "6.上报已到达收车点", notes = "点击上报已到达收车点")
     @PostMapping("/arrive_terminal")
     public Result arriveTerminal(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrder) {
-        log.info("上报已到达收车点,/tms/worker/arrive_shouchedian,参数:{}", JSON.toJSONString(workOrder));
+        log.info("上报已到达收车点,/tms/worker/arrive_terminal,参数:{}", JSON.toJSONString(workOrder));
         if (workOrder == null || workOrder.getId() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
@@ -436,25 +484,55 @@ public class WorkerController {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        //TODO 1.车辆进入收车后检查状态,2.并记行车日志
+        //1.车辆进入收车后检查状态,2.并记行车日志
         Boolean flag = workerService.arriveTerminal(userId, utf8Name, workOrder);
         return new Result<>(flag);
     }
 
     @ApiOperation(value = "7.完成检查,结束此次行程", notes = "点击完成检查,结束此次行程")
     @PostMapping("/finish_work")
-    public Result finishWork(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody WorkOrder workOrder) {
-        log.info("上报已到达收车点,/tms/worker/arrive_shouchedian,参数:{}", JSON.toJSONString(workOrder));
-        if (workOrder == null || workOrder.getId() == null) {
+    public Result finishWork(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody TruckCheckInfo truckCheckInfo) {
+        log.info("完成检查,结束此次行程,/tms/worker/finish_work,参数:{}", JSON.toJSONString(truckCheckInfo));
+        if (truckCheckInfo == null || truckCheckInfo.getOrderId() == null || truckCheckInfo.getType() == null) {
             return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
         }
+        WorkOrder workOrder = workOrderService.getById(truckCheckInfo.getOrderId());
+        if (workOrder != null) {
+            workOrder.setEndTripUrl(truckCheckInfo.getTripUrl());
+            workOrder.setEndTrip(truckCheckInfo.getTrip());
+        }
         String utf8Name = userName;
         try {
             utf8Name = URLDecoder.decode(userName, "UTF-8");
         } catch (UnsupportedEncodingException ignored) {
         }
-        //TODO 1.车辆进入已经收车状态,3.并记行车日志,4.结束当前行程周期(从收车中到出车检查也结束当前行程周期)
+
+        //保存收车检查信息
+        truckCheckInfo.setCreater(userId);
+        truckCheckInfo.setCreaterName(utf8Name);
+        truckCheckInfo.setCreateDate(LocalDateTime.now());
+        truckCheckInfoService.save(truckCheckInfo);
+
+
+        // 1.车辆进入已经收车状态,3.并记行车日志,4.结束当前行程周期(从收车中到出车检查也结束当前行程周期)
         Boolean flag = workerService.finishWork(userId, utf8Name, workOrder);
         return new Result<>(flag);
     }
+
+
+    @ApiOperation(value = "8.上传签名,完成本行车周期,收车", notes = "点击确定结束")
+    @PostMapping("/finish_cycle")
+    public Result finishCycle(@RequestHeader(value = "userId") Long userId, @RequestHeader(value = "userName") String userName, @RequestBody UpSignParam upSignParam) {
+        log.info("上传签名,完成本行车周期,收车 /tms/worker/finish_cycle,参数:{}", JSON.toJSONString(upSignParam));
+        if (upSignParam == null || upSignParam.getTruckId() == null) {
+            return new Result(ErrCodeEnum.BAD_PARAM.getCode(), ErrCodeEnum.BAD_PARAM.getMessage());
+        }
+        String utf8Name = userName;
+        try {
+            utf8Name = URLDecoder.decode(userName, "UTF-8");
+        } catch (UnsupportedEncodingException ignored) {
+        }
+        Boolean flag = workerService.finishCycle(userId, utf8Name, upSignParam);
+        return new Result<>(flag);
+    }
 }

+ 26 - 0
src/main/java/com/aoyang/tms/controller/param/UpSignParam.java

@@ -0,0 +1,26 @@
+package com.aoyang.tms.controller.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description: 上传签名参数类
+ * @Author guoyong
+ * @Date 2022/4/27 11:58
+ * @Version 1.0
+ */
+@Data
+public class UpSignParam {
+
+    @ApiModelProperty(value = "卡车id,必传")
+    private Long truckId;
+
+    @ApiModelProperty(value = "司机1签名图片url")
+    private String driverOneSignUrl;
+
+    @ApiModelProperty(value = "司机2签名图片url")
+    private String driverTwoSignUrl;
+
+    @ApiModelProperty(value = "押运云签名图片url")
+    private String escortSignUrl;
+}

+ 18 - 0
src/main/java/com/aoyang/tms/controller/param/WorkCycleVO.java

@@ -0,0 +1,18 @@
+package com.aoyang.tms.controller.param;
+
+import com.aoyang.tms.entity.WorkCycle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description: 行车周期VO
+ * @Author guoyong
+ * @Date 2022/4/28 11:48
+ * @Version 1.0
+ */
+@Data
+public class WorkCycleVO extends WorkCycle {
+
+    @ApiModelProperty(value = "已用时,如1天1小时16分钟")
+    private String time;
+}

+ 9 - 1
src/main/java/com/aoyang/tms/controller/param/WorkManagePageParam.java

@@ -28,6 +28,9 @@ public class WorkManagePageParam {
     @ApiModelProperty(value = "车牌号")
     private String carNumber;
 
+    @ApiModelProperty(value = "装车地点id")
+    private String spotId;
+
 
     @ApiModelProperty(value = "装车占用运力")
     private Integer loadCount;
@@ -59,7 +62,12 @@ public class WorkManagePageParam {
     @ApiModelProperty(value = "未派单")
     private Integer unAllocated;
 
+    @ApiModelProperty(value = "空车未派装车单")
+    private Integer emptyUnAllocated;
+
+    @ApiModelProperty(value = "重车未派卸车单")
+    private Integer heavyUnAllocated;
+
     @ApiModelProperty(value = "未执行运单")
     private Integer unExecuted;
-
 }

+ 3 - 7
src/main/java/com/aoyang/tms/controller/vo/AddWorkOrderVO.java

@@ -23,20 +23,16 @@ import java.time.LocalDateTime;
  * @since 2022-04-21
  */
 @Data
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@TableName("tms_work_order")
-@ApiModel(value="WorkOrder对象", description="运单运单表")
+@ApiModel(value="AddWorkOrderVO对象", description="运单运单表")
 public class AddWorkOrderVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "分配卡车id,批量id以逗号分隔")
-    @TableField("truck_id")
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private String truckIds;
 
-    @ApiModelProperty(value = "运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已报废60")
+    @ApiModelProperty(value = "运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已中止60")
     private Integer orderStatus;
 
     @ApiModelProperty(value = "运单号")
@@ -95,7 +91,7 @@ public class AddWorkOrderVO implements Serializable {
     private String note;
 
     @ApiModelProperty(value = "结算里程(km)")
-    private String settleTrip;
+    private Integer settleTrip;
 
 
 }

+ 6 - 0
src/main/java/com/aoyang/tms/controller/vo/TruckHistoryTripVO.java

@@ -36,4 +36,10 @@ public class TruckHistoryTripVO implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime endTime;
 
+    @ApiModelProperty(value = "开始执行运单时车辆里程数")
+    private Integer startTrip;
+
+    @ApiModelProperty(value = "完成行车周期时车辆里程数")
+    private Integer endTrip;
+
 }

+ 12 - 5
src/main/java/com/aoyang/tms/controller/vo/TruckOrderManageVO.java

@@ -20,13 +20,13 @@ import java.util.List;
 public class TruckOrderManageVO implements Serializable {
 
     @ApiModelProperty(value = "卡车id")
-    private Long truckId;
+    private String truckId;
 
-    @ApiModelProperty(value = "运力系统车辆状态,状态:1出车检查;2.作业中;3.收车中;4.收车后检查;5.已收车")
+    @ApiModelProperty(value = "运力系统车辆状态,状态:1出车检查;2.作业中;3.收车中;4.收车后检查;0.已收车")
     private Integer tmsStatus;
 
     @ApiModelProperty(value = "物流公司id")
-    private Long orgId;
+    private String orgId;
 
     @ApiModelProperty(value = "物流公司名")
     private String orgName;
@@ -59,10 +59,10 @@ public class TruckOrderManageVO implements Serializable {
      * 执行中运单
      */
     @ApiModelProperty(value = "运单id")
-    private Long orderId;
+    private String orderId;
 
     @ApiModelProperty(value = "行程周期id")
-    private Long cycleId;
+    private String cycleId;
 
     @ApiModelProperty(value = "运单状态:0-待执行 1-前往 2-等待 3-成果报备 4-已完成 5-已关闭")
     private Integer orderStatus;
@@ -96,4 +96,11 @@ public class TruckOrderManageVO implements Serializable {
     @ApiModelProperty(value = "空车重车状态:0-空车 1-重车")
     private Integer weightFlag;
 
+    @ApiModelProperty(value = "托运方id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long shipperId;
+
+    @ApiModelProperty(value = "托运方名称")
+    private String shipperName;
+
 }

+ 8 - 1
src/main/java/com/aoyang/tms/controller/vo/WorkOrderPageListVO.java

@@ -47,7 +47,14 @@ public class WorkOrderPageListVO {
     @ApiModelProperty(value = "已读未读信息")
     private List<ReadInfo> readInfos;
 
-    @ApiModelProperty(value = "(操作可能需要此状态)运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已报废60")
+    @ApiModelProperty(value = "(操作可能需要此状态)运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已中止60")
     private Integer orderStatus;
 
+    @ApiModelProperty(value = "中止原因")
+    private String stopNote;
+
+    @ApiModelProperty(value = "分配卡车id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long truckId;
+
 }

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

@@ -60,5 +60,8 @@ public class WorkOrderVO extends WorkOrder implements Serializable {
     @ApiModelProperty(value = "线路GPS数据")
     private List<String> routeGps;
 
+    @ApiModelProperty(value = "判断车辆是否在围栏内,是true,否false")
+    private Boolean isInPolygon = false;
+
 
 }

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

@@ -78,8 +78,8 @@ public class WorkerInfo {
     @ApiModelProperty(value = "车辆状态,已收车0,出车前检查1,出车作业中2,收车中3,收车后检查4")
     private Integer truckStatus;
 
-    @ApiModelProperty(value = "已用时,单位分")
-    private int time;
+    @ApiModelProperty(value = "已用时,格式时分秒")
+    private String time;
 
     @ApiModelProperty(value = "直接返回文字空车或重车")
     private String isZhongche;
@@ -102,5 +102,4 @@ public class WorkerInfo {
     @ApiModelProperty(value = "上次位置更新时间")
     private String lastTime;
 
-
 }

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

@@ -81,7 +81,7 @@ public class TruckCheckInfo implements Serializable {
 
     @ApiModelProperty(value = "车辆里程数")
     @TableField("trip")
-    private String trip;
+    private Integer trip;
 
     @ApiModelProperty(value = "车辆里程数照片url")
     @TableField("trip_url")

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

@@ -101,6 +101,10 @@ public class WorkCycle implements Serializable {
     @TableField("shipper_name")
     private String shipperName;
 
+    @ApiModelProperty(value = "周期开始时天气")
+    @TableField("weather")
+    private String weather;
+
     @ApiModelProperty(value = "周期开始时间")
     @TableField("start_time")
     private LocalDateTime startTime;
@@ -109,6 +113,14 @@ public class WorkCycle implements Serializable {
     @TableField("end_time")
     private LocalDateTime endTime;
 
+    @ApiModelProperty(value = "开始执行运单时车辆里程数照片url")
+    @TableField("start_trip")
+    private Integer startTrip;
+
+    @ApiModelProperty(value = "周期完成时车辆里程数")
+    @TableField("end_trip")
+    private Integer endTrip;
+
     @ApiModelProperty(value = "司机1签字url")
     @TableField("driver_one_sign_url")
     private String driverOneSignUrl;
@@ -138,5 +150,22 @@ public class WorkCycle implements Serializable {
     @TableField("create_date")
     private LocalDateTime createDate;
 
+    @ApiModelProperty(value = "修改人id")
+    @TableField("updater")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long updater;
+
+    @ApiModelProperty(value = "修改人姓名")
+    @TableField("updater_name")
+    private String updaterName;
+
+    @ApiModelProperty(value = "修改日期时间")
+    @TableField("update_date")
+    private LocalDateTime updateDate;
+
+    @ApiModelProperty(value = "总共公里数(导出用)")
+    @TableField(exist = false)
+    private Integer sumKilometre;
+
 
 }

+ 3 - 0
src/main/java/com/aoyang/tms/entity/WorkLog.java

@@ -127,5 +127,8 @@ public class WorkLog implements Serializable {
     @TableField("create_date")
     private LocalDateTime createDate;
 
+    @ApiModelProperty(value = "图片地址url")
+    @TableField("url")
+    private String url;
 
 }

+ 13 - 4
src/main/java/com/aoyang/tms/entity/WorkOrder.java

@@ -40,7 +40,7 @@ public class WorkOrder implements Serializable {
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long cycleId;
 
-    @ApiModelProperty(value = "运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已报废60")
+    @ApiModelProperty(value = "运单状态:待执行0,前往装车点10,装车等待20,装车成果报备中30,前往卸车点10,卸车等待20,卸车成果报备30,已完成40,已关闭50,已中止60")
     @TableField("order_status")
     private Integer orderStatus;
 
@@ -174,7 +174,7 @@ public class WorkOrder implements Serializable {
 
     @ApiModelProperty(value = "开始执行运单时车辆里程数")
     @TableField("start_trip")
-    private String startTrip;
+    private Integer startTrip;
 
     @ApiModelProperty(value = "开始执行运单时车辆里程数照片url")
     @TableField("start_trip_url")
@@ -182,7 +182,7 @@ public class WorkOrder implements Serializable {
 
     @ApiModelProperty(value = "装卸车等待时车辆里程数")
     @TableField("end_trip")
-    private String endTrip;
+    private Integer endTrip;
 
     @ApiModelProperty(value = "装卸车等待时车辆里程数数照片url")
     @TableField("end_trip_url")
@@ -234,7 +234,12 @@ public class WorkOrder implements Serializable {
 
     @ApiModelProperty(value = "结算里程(km)")
     @TableField("settle_trip")
-    private String settleTrip;
+    private Integer settleTrip;
+
+    @ApiModelProperty(value = "中止原因")
+    @TableField("stop_note")
+    private String stopNote;
+
 
     @ApiModelProperty(value = "创建人id")
     @TableField("creater")
@@ -262,5 +267,9 @@ public class WorkOrder implements Serializable {
     @TableField("update_date")
     private LocalDateTime updateDate;
 
+    @ApiModelProperty(value = "总计时间(导出用)")
+    @TableField(exist = false)
+    private  String betweenTime;
+
 
 }

+ 26 - 0
src/main/java/com/aoyang/tms/feign/MessageFeign.java

@@ -0,0 +1,26 @@
+package com.aoyang.tms.feign;
+
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.feign.result.SmsSendLog;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+/**
+ * @author liujiren
+ */
+@FeignClient(name = "message")
+public interface MessageFeign {
+    /**
+     * 发送短信通知
+     *
+     * @param smsSendLog 发送内容
+     * @return 成功或失败信息
+     */
+    @PostMapping(value = "/message/notify/send")
+    Result<Boolean> send(@RequestBody SmsSendLog smsSendLog,
+                         @RequestHeader(value = "orgId", required = false) String orgId,
+                         @RequestHeader(value = "userId", required = false) String userId,
+                         @RequestHeader(value = "clientId", required = false) String clientId);
+}

+ 2 - 1
src/main/java/com/aoyang/tms/feign/UserFeignClient.java

@@ -1,6 +1,7 @@
 package com.aoyang.tms.feign;
 
 import com.aoyang.common.result.Result;
+import com.aoyang.tms.entity.IdParam;
 import com.aoyang.tms.entity.User;
 import com.aoyang.tms.feign.result.Org;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -23,7 +24,7 @@ public interface UserFeignClient {
     Result<Boolean> delete(@RequestParam("userId") Long userId);
 
     @PostMapping("/user/user/find_by_id")
-    Result<User> find(@RequestBody User user);
+    Result<User> find(@RequestBody IdParam idParam);
 
     @PostMapping("/user/user/org/find")
     Result<Org> findOrg(@RequestBody Org org);

+ 34 - 0
src/main/java/com/aoyang/tms/feign/fallback/MessageFeignFallBack.java

@@ -0,0 +1,34 @@
+package com.aoyang.tms.feign.fallback;
+
+import com.aoyang.common.result.Result;
+import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.feign.MessageFeign;
+import com.aoyang.tms.feign.result.SmsSendLog;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author liujiren
+ */
+@Component
+@Slf4j
+public class MessageFeignFallBack implements FallbackFactory<MessageFeign> {
+
+    @Override
+    public MessageFeign create(Throwable cause) {
+        String msg = cause == null ? "" : cause.getMessage();
+        if (!StringUtils.isEmpty(msg)) {
+            log.error("AccountFeign error : {}", msg);
+        }
+        return new MessageFeign() {
+            @Override
+            public Result<Boolean> send(SmsSendLog smsSendLog, String orgId, String userId, String clientId) {
+                return new Result(ErrCodeEnum.BAD_SYSTEM_CONFIG.getCode(),
+                        ErrCodeEnum.BAD_SYSTEM_CONFIG.getMessage());
+
+            }
+        };
+    }
+}

+ 2 - 1
src/main/java/com/aoyang/tms/feign/fallback/UserFeignFallBack.java

@@ -2,6 +2,7 @@ package com.aoyang.tms.feign.fallback;
 
 import com.aoyang.common.result.Result;
 import com.aoyang.tms.common.ErrCodeEnum;
+import com.aoyang.tms.entity.IdParam;
 import com.aoyang.tms.entity.User;
 import com.aoyang.tms.feign.UserFeignClient;
 import com.aoyang.tms.feign.result.Org;
@@ -41,7 +42,7 @@ public class UserFeignFallBack implements FallbackFactory<UserFeignClient> {
             }
 
             @Override
-            public Result<User> find(User user) {
+            public Result<User> find(IdParam user) {
                 return new Result<>(ErrCodeEnum.USERSERVER_ERROR.getCode(), ErrCodeEnum.USERSERVER_ERROR.getMessage());
             }
 

+ 70 - 0
src/main/java/com/aoyang/tms/feign/result/SmsSendLog.java

@@ -0,0 +1,70 @@
+package com.aoyang.tms.feign.result;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+    * 
+    * </p>
+ *
+ * @author panenming
+ * @since 2020-03-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sms_send_log")
+@ApiModel(value="SmsSendLog对象", description="")
+public class SmsSendLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long id;
+
+    @ApiModelProperty(value = "组织id(user.org.org_id)")
+    @TableField("org_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long orgId;
+
+    @ApiModelProperty(value = "用户id(user.user.user_id)")
+    @TableField("user_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long userId;
+
+    @ApiModelProperty(value = "哪一端")
+    @TableField("client_id")
+    private String clientId;
+
+    @ApiModelProperty(value = "0.身份验证1.登录确认2.注册用户3.修改密码 ")
+    @TableField("type")
+    private Integer type;
+
+    @ApiModelProperty(value = "手机号")
+    @TableField("mobile")
+    private String mobile;
+
+    @ApiModelProperty(value = "发送内容")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty(value = "发送日期")
+    @TableField("send_time")
+    private LocalDateTime sendTime;
+
+
+}

+ 2 - 2
src/main/java/com/aoyang/tms/job/SpotCheckJob.java

@@ -104,7 +104,7 @@ public class SpotCheckJob {
                     }
                     if (workOrder.getEnterTime() == null) {
                         // 未进入围栏
-                        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+                        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
                         criteria.andOperator(Criteria.where("createTime").gt(workStartTime));
                         Query query = new Query(criteria);
                         List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);
@@ -127,7 +127,7 @@ public class SpotCheckJob {
 
                     } else if (workOrder.getLeaveTime() == null) {
                         // 已进入围栏 无进入围栏标识,则无需判断离开围栏
-                        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+                        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
                         criteria.andOperator(Criteria.where("createTime").gt(workOrder.getEnterTime()));
                         Query query = new Query(criteria);
                         List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);

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

@@ -25,6 +25,8 @@ public interface TruckMapper extends BaseMapper<Truck> {
 
     Page<Truck> listUnAllocatedTruck(@Param("page") Page page, @Param("orgId") Long orgId);
 
+    int getUnExecutedOrderTruckCount(@Param("orgId") Long orgId);
+
     int getUnAllocatedTruckCount(@Param("orgId") Long orgId);
 
     int getUnAllocatedOrderCount(@Param("orgId") Long orgId, @Param("orderType") Integer type);

+ 19 - 6
src/main/java/com/aoyang/tms/service/CommonService.java

@@ -2,8 +2,10 @@ package com.aoyang.tms.service;
 
 import com.aoyang.common.result.Result;
 import com.aoyang.tms.controller.vo.LocationVO;
+import com.aoyang.tms.controller.vo.WorkOrderVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
 import com.aoyang.tms.entity.User;
+import com.aoyang.tms.entity.WorkOrder;
 import com.aoyang.tms.feign.result.Org;
 
 import java.time.LocalDateTime;
@@ -16,15 +18,15 @@ import java.util.List;
  * @Version 1.0
  */
 public interface CommonService {
-    
-    
+
+
     /**
+     * @return
      * @Author guoyong
      * @Description 根据车辆判断车辆当前是空车还是重车,false空,true重
-     * @Date  2022/4/25
-     * @Param  
-     * @return 
-    **/
+     * @Date 2022/4/25
+     * @Param
+     **/
     boolean checkTruckZhong(Long truckId);
 
 
@@ -48,6 +50,16 @@ public interface CommonService {
     WorkerInfo findTruckInfo(Long truckId);
 
     /**
+     * @return
+     * @Author guoyong
+     * @Description 查询实时运单详情
+     * @Date 2022/4/28
+     * @Param
+     **/
+
+    WorkOrderVO findOrderInfo(Long userId, String userName, WorkOrder workOrder);
+
+    /**
      * 获取物流公司下卡车数或者物流公司部门下卡车数
      *
      * @param
@@ -128,6 +140,7 @@ public interface CommonService {
 
     /**
      * 经纬度转位置信息
+     *
      * @param lat 纬度
      * @param lng 经度
      * @return

+ 2 - 3
src/main/java/com/aoyang/tms/service/JxlsExportTestService.java

@@ -1,7 +1,6 @@
 package com.aoyang.tms.service;
 
 import com.aoyang.tms.controller.vo.WorkLogTplVO;
-import com.aoyang.tms.entity.TmsGasFee;
 import com.aoyang.tms.entity.WorkOrder;
 import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
 
@@ -18,7 +17,7 @@ public interface JxlsExportTestService {
      * @Date 2022/4/13
      * @Param
      **/
-    WorkLogTplVO workLogTplVO(WorkOrder param);
+    WorkLogTplVO getWorkLogTplVO(WorkOrder param);
 
     /**
      * @return
@@ -27,5 +26,5 @@ public interface JxlsExportTestService {
      * @Date 2022/4/13
      * @Param
      **/
-    StreamingResponseBody download(TmsGasFee param, HttpServletResponse response) throws IOException;
+    StreamingResponseBody download(WorkOrder param, HttpServletResponse response) throws IOException;
 }

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

@@ -66,4 +66,12 @@ public interface TruckEscortService extends IService<TruckEscort> {
      **/
     boolean edit(TruckEscort param);
 
+    /**
+     * @return
+     * @Author chengang
+     * @Description 获取没有绑定卡车的押运员列表
+     * @Date 2021/11/9
+     * @Param
+     **/
+    List<TruckEscort> noTruckList(TruckEscortListParam param);
 }

+ 12 - 4
src/main/java/com/aoyang/tms/service/WorkOrderReadinfoService.java

@@ -14,14 +14,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface WorkOrderReadinfoService extends IService<WorkOrderReadinfo> {
 
-
     /**
      * @Author guoyong
-     * @Description 获取已读数据
-     * @Date  2022/4/23
+     * @Description 添加已读未读
+     * @Date  2022/4/28
      * @Param
      * @return
     **/
-    WorkOrderReadinfo  findWorkOrderReadinfo(Long userId, Long orderId);
+    Boolean addWorkOrderReadinfo(WorkOrderReadinfo workOrderReadinfo);
+
+    /**
+     * @return
+     * @Author guoyong
+     * @Description 获取已读数据
+     * @Date 2022/4/23
+     * @Param
+     **/
+    WorkOrderReadinfo findWorkOrderReadinfo(Long userId, Long orderId);
 
 }

+ 3 - 21
src/main/java/com/aoyang/tms/service/WorkOrderService.java

@@ -37,24 +37,6 @@ public interface WorkOrderService extends IService<WorkOrder> {
     /**
      * @return
      * @Author guoyong
-     * @Description 查询待执行装卸车运单
-     * @Date 2022/4/25
-     * @Param
-     **/
-    List<WorkOrder> findTodoOrderList(Long truckId, Integer orderType);
-
-    /**
-     * @return
-     * @Author guoyong
-     * @Description 查找最早分配的待执行的装卸车运单,
-     * @Date 2022/4/24
-     * @Param
-     **/
-    WorkOrder findFirstTodoOrder(Long truckId, Integer orderType);
-
-    /**
-     * @return
-     * @Author guoyong
      * @Description 查询执行中的装卸车运单
      * @Date 2022/4/24
      * @Param
@@ -73,11 +55,11 @@ public interface WorkOrderService extends IService<WorkOrder> {
     /**
      * @return
      * @Author guoyong
-     * @Description 根据卡车id获取待执行运单
+     * @Description 根据卡车id获取查询未完成的所有订单列表,按照计划到达时间由早到晚排序
      * @Date 2022/4/22
      * @Param userId, 当前用户id
      **/
-    List<WorkOrderVO> findWorkOrderList(Long userId, WorkOrder workOrder);
+    List<WorkOrderVO> findNoCompleteOrderList(Long userId, WorkOrder workOrder);
 
     /**
      * 根据组织id查询运力调度统计汇总信息
@@ -95,7 +77,7 @@ public interface WorkOrderService extends IService<WorkOrder> {
     Result<IPage<TruckOrderManageVO>> getTruckOrderManageList(PageParam<WorkManagePageParam> pageParam);
 
     /**
-     * 运营端止运单
+     * 运营端止运单
      *
      * @return
      */

+ 39 - 27
src/main/java/com/aoyang/tms/service/WorkerService.java

@@ -1,6 +1,7 @@
 package com.aoyang.tms.service;
 
 import com.aoyang.common.result.Result;
+import com.aoyang.tms.controller.param.UpSignParam;
 import com.aoyang.tms.controller.vo.LocationVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
 import com.aoyang.tms.entity.TruckCheckInfo;
@@ -20,64 +21,75 @@ import java.time.LocalDateTime;
 public interface WorkerService {
 
     /**
+     * @return
      * @Author guoyong
      * @Description 开始执行运单,1.车辆进入出车前检车状态,2.订单进入前往装车点状态,3.并记行车日志,4.创建行程周期
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean startOrder(Long userId, String userName,WorkOrder workOrder);
+     **/
+    Boolean startOrder(Long userId, String userName, WorkOrder workOrder);
+
     /**
+     * @return
      * @Author guoyong
      * @Description 完成出车前检查,开始装卸车作业
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean starWork(Long userId,String userName, TruckCheckInfo truckCheckInfo);
+     **/
+    Boolean starWork(Long userId, String userName, TruckCheckInfo truckCheckInfo);
+
     /**
+     * @return
      * @Author guoyong
      * @Description 上报已到达装卸车点
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean startWait(Long userId, String userName,WorkOrder workOrder);
+     **/
+    Boolean startWait(Long userId, String userName, WorkOrder workOrder);
 
     /**
+     * @return
      * @Author guoyong
      * @Description 上报磅单
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean submitResult(Long userId, String userName,WorkOrder workOrder);
+     **/
+    Boolean submitResult(Long userId, String userName, WorkOrder workOrder);
 
     /**
+     * @return
      * @Author guoyong
      * @Description 确认完成运单
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean finishOrder(Long userId, String userName,WorkOrder workOrder);
+     **/
+    Boolean finishOrder(Long userId, String userName, WorkOrder workOrder);
 
     /**
+     * @return
      * @Author guoyong
      * @Description 上报已到达收车点
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
-     * @return
-    **/
-    Boolean arriveTerminal(Long userId, String userName,WorkOrder workOrder);
+     **/
+    Boolean arriveTerminal(Long userId, String userName, WorkOrder workOrder);
 
     /**
+     * @return
      * @Author guoyong
      * @Description 完成检查,结束此次行程
-     * @Date  2022/4/23
+     * @Date 2022/4/23
      * @Param
+     **/
+    Boolean finishWork(Long userId, String userName, WorkOrder workOrder);
+
+    /**
      * @return
-    **/
-    Boolean finishWork(Long userId, String userName,WorkOrder workOrder);
+     * @Author guoyong
+     * @Description 上传签名,完成当前行程周期
+     * @Date 2022/4/23
+     * @Param
+     **/
+    Boolean finishCycle(Long userId, String userName, UpSignParam upSignParam);
 
 }

+ 105 - 20
src/main/java/com/aoyang/tms/service/impl/CommonServiceImpl.java

@@ -4,6 +4,7 @@ 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.WorkOrderVO;
 import com.aoyang.tms.controller.vo.WorkerInfo;
 import com.aoyang.tms.entity.*;
 import com.aoyang.tms.feign.StrategyFeignClient;
@@ -11,7 +12,10 @@ import com.aoyang.tms.feign.UserFeignClient;
 import com.aoyang.tms.feign.result.Org;
 import com.aoyang.tms.feign.result.TmsMongoDoc;
 import com.aoyang.tms.service.*;
+import com.aoyang.tms.util.DateUtils;
+import com.aoyang.tms.util.RegionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -19,6 +23,7 @@ import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -60,6 +65,14 @@ public class CommonServiceImpl implements CommonService {
     private WorkOrderService workOrderService;
     @Resource
     private WorkCycleService workCycleService;
+    @Resource
+    private CommonService commonService;
+    @Resource
+    private TruckCheckInfoService truckCheckInfoService;
+    @Resource
+    private WorkSpotService workSpotService;
+    @Resource
+    private WorkOrderReadinfoService workOrderReadinfoService;
 
 
     final static String BAIDUMAP_AK = "Zvd6FzmertUwjhZih5Zfq0D8uTUhvqsH";
@@ -71,6 +84,8 @@ public class CommonServiceImpl implements CommonService {
         QueryWrapper<WorkCycle> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("truck_id", truckId);
         queryWrapper.eq("status", 1);
+        queryWrapper.orderByDesc("start_time");
+        queryWrapper.last("limit 1");
         WorkCycle cycle = workCycleService.getOne(queryWrapper);
         return cycle == null ? false : cycle.getJingWeight() > 0;
     }
@@ -96,18 +111,18 @@ public class CommonServiceImpl implements CommonService {
         truckParam.setTruckId(truckId);
         Truck truck = truckService.getById(truckParam);
         log.info("findTruckInfo findTruck 结果:{}", JSON.toJSONString(truck));
-        if (truck != null) {
-            workerInfo.setTruckStatus(truck.getTmsStatus());
-            workerInfo.setCarNumber(truck.getCarNumber());
-            workerInfo.setTrailerNumber(truck.getTrailerNumber());
-            workerInfo.setDeptId(truck.getDeptId());
-            workerInfo.setDeptName(truck.getDeptName());
-            workerInfo.setIsZhongche("空车");
-            boolean zhongFlag = checkTruckZhong(truckId);
-            if (zhongFlag) {
-                workerInfo.setIsZhongche("重车");
-            }
-
+        if (truck == null) {
+            return null;
+        }
+        workerInfo.setTruckStatus(truck.getTmsStatus());
+        workerInfo.setCarNumber(truck.getCarNumber());
+        workerInfo.setTrailerNumber(truck.getTrailerNumber());
+        workerInfo.setDeptId(truck.getDeptId());
+        workerInfo.setDeptName(truck.getDeptName());
+        workerInfo.setIsZhongche("空车");
+        boolean zhongFlag = checkTruckZhong(truckId);
+        if (zhongFlag) {
+            workerInfo.setIsZhongche("重车");
         }
         //司机信息
         log.info("findTruckInfo findTruckDrivers 参数:{}", JSON.toJSONString(truckId));
@@ -149,8 +164,12 @@ public class CommonServiceImpl implements CommonService {
         if (workOrder != null) {
             workerInfo.setOrderId(workOrder.getId());
             workerInfo.setOrderStatus(workOrder.getOrderStatus());
+
+            //已用时,从开始执行运单开始
+            workerInfo.setTime(DateUtils.betweenTime(workOrder.getExecuteTime(), LocalDateTime.now()));
         }
 
+
         //查询当前行车周期
         WorkCycle workCycle = workCycleService.findCurrentWorkCycle(truckId);
         if (workCycle != null) {
@@ -165,19 +184,84 @@ public class CommonServiceImpl implements CommonService {
             if (list != null && list.size() > 0) {
                 workerInfo.setXiecheNumber(list.size());
             }
+            workerInfo.setTime(DateUtils.betweenTime(workCycle.getStartTime(), LocalDateTime.now()));
         }
         //位置信息
-        LocationVO locationVO = getLocationByDate(truckId, LocalDateTime.now());
+        LocationVO locationVO = getLocation(truckId);
         if (locationVO != null) {
             workerInfo.setLatitude(locationVO.getLatitude());
             workerInfo.setLongitude(locationVO.getLongitude());
-            workerInfo.setLocalTime(locationVO.getDate());
+            workerInfo.setLastTime(locationVO.getDate() + "");
         }
 
+
         return workerInfo;
     }
 
     @Override
+    public WorkOrderVO findOrderInfo(Long userId, String userName, WorkOrder workOrderParam) {
+        WorkOrderVO vo = new WorkOrderVO();
+        WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
+        if (workOrder != null) {
+            BeanUtils.copyProperties(workOrder, vo);
+            //调度员联系电话
+            User user = commonService.findUser(workOrder.getCreater());
+            if (user != null) {
+                vo.setDispatcherPhone(user.getMobile());
+            }
+            //卸车点联系人电话
+            String regionData = "";
+            WorkSpot workSpot = workSpotService.getById(workOrder.getSpotId());
+            if (workSpot != null) {
+                vo.setXiecheContactName(workSpot.getContactName());
+                vo.setXiecheContactPhone(workSpot.getContactPhone());
+                vo.setSpotAddress(workSpot.getAddress());
+                regionData = workSpot.getRegionData();
+            }
+            //取ExecuteTime第一条GPS上报时间作为开始运单时间,累计用时
+            LocationVO locationVO = commonService.getLocationByDate(workOrder.getTruckId(), workOrder.getExecuteTime());
+            if (locationVO != null) {
+                vo.setTime(DateUtils.betweenTime(locationVO.getDate(), LocalDateTime.now()));
+                vo.setLatitude(locationVO.getLatitude());
+                vo.setLongitude(locationVO.getLongitude());
+            } else {
+                if (workOrder.getExecuteTime() != null) {
+                    vo.setTime(DateUtils.betweenTime(workOrder.getExecuteTime(), LocalDateTime.now()));
+                }
+            }
+
+            WorkOrderReadinfo workOrderReadinfo = workOrderReadinfoService.findWorkOrderReadinfo(userId, workOrderParam.getId());
+            if (workOrderReadinfo != null) {
+                vo.setReadFlag(1);
+            }
+            List<String> routeGps = commonService.getLocationtrip(workOrder.getTruckId(), workOrder.getGotoSpotTime(), LocalDateTime.now());
+            vo.setRouteGps(routeGps);
+
+            //判断是否在当前围栏
+            LocationVO location = getLocation(workOrder.getTruckId());
+            if (location != null) {
+                double pointLon = Double.valueOf(location.getLongitude());
+                double pointLat = Double.valueOf(location.getLatitude());
+                if (StringUtils.isNotBlank(regionData)) {
+                    regionData = regionData.replace("\"", "");
+                    regionData = regionData.replace("[", "");
+                    regionData = regionData.replace("]", "");
+                    String[] regionDataArray = regionData.split(";");
+                    Double[] lon = new Double[regionDataArray.length];
+                    Double[] lat = new Double[regionDataArray.length];
+                    for (int i = 0; i < regionDataArray.length; i++) {
+                        lon[i] = Double.valueOf(regionDataArray[i].split(",")[0]);
+                        lat[i] = Double.valueOf(regionDataArray[i].split(",")[1]);
+                    }
+                    boolean flag = RegionUtil.isInPolygon(pointLon, pointLat, lon, lat);
+                    vo.setIsInPolygon(flag);
+                }
+            }
+        }
+        return vo;
+    }
+
+    @Override
     public Integer findOrgTruckNumber(Long orgId, Long deptId) {
         Truck truck = new Truck();
         truck.setOrgId(orgId);
@@ -205,9 +289,10 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public User findUser(Long userId) {
-        User user = new User();
-        user.setUserId(userId);
-        Result<User> result = userFeignClient.find(user);
+        IdParam param = new IdParam();
+        param.setId(userId);
+        Result<User> result = userFeignClient.find(param);
+        log.info("根据id查询用户信息 param:{}, result:{}", userId, JSON.toJSONString(result));
         if (verifyResult(result)) {
             return result.getData();
         }
@@ -256,7 +341,7 @@ public class CommonServiceImpl implements CommonService {
             log.error("绑定信息不存在 truckId:{}", truckId);
             return location;
         }
-        Query query = new Query(Criteria.where("clientId").is(truckSimCard.getSimCard()));
+        Query query = new Query(Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512));
         query.with(new Sort(Sort.Direction.DESC, "dateTime"));
         TmsMongoDoc tmsMongoDoc = mongoTemplate.findOne(query, TmsMongoDoc.class);
         if (tmsMongoDoc != null) {
@@ -280,7 +365,7 @@ public class CommonServiceImpl implements CommonService {
             log.error("绑定信息不存在 truckId:{}", truckId);
             return location;
         }
-        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
         criteria.andOperator(Criteria.where("createTime").gt(date));
         Query query = new Query(criteria);
         query.with(new Sort(Sort.Direction.ASC, "dateTime"));
@@ -308,7 +393,7 @@ public class CommonServiceImpl implements CommonService {
         if (truckSimCard == null) {
             return Collections.EMPTY_LIST;
         }
-        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard());
+        Criteria criteria = Criteria.where("clientId").is(truckSimCard.getSimCard()).and("messageId").is(512);
         criteria.andOperator(Criteria.where("createTime").gt(startDate), Criteria.where("createTime").lt(endDate));
         Query query = new Query(criteria);
         List<TmsMongoDoc> tmsMongoDocs = mongoTemplate.find(query, TmsMongoDoc.class);

+ 122 - 40
src/main/java/com/aoyang/tms/service/impl/JxlsExportTestServiceImpl.java

@@ -4,19 +4,22 @@ package com.aoyang.tms.service.impl;
 import com.aoyang.tms.controller.vo.*;
 import com.aoyang.tms.entity.*;
 import com.aoyang.tms.service.*;
+import com.aoyang.tms.util.DateUtils;
 import com.aoyang.tms.util.FileUtil;
 import com.aoyang.tms.util.JxlsUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 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.net.HttpURLConnection;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -44,14 +47,22 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
     private TruckRepairInfoService truckRepairInfoService;
     @Resource
     private TruckCheckInfoService truckCheckInfoService;
+    @Value("${domain_url}")
+    private String domainUrl;
 
     @Override
-    public WorkLogTplVO workLogTplVO(WorkOrder param) {
+    public WorkLogTplVO getWorkLogTplVO(WorkOrder param) {
         WorkLogTplVO workLogTplVO = new WorkLogTplVO();
 
         WorkCycle workCycle = workCycleService.getById(param.getCycleId());
+        workCycle.setSumKilometre(workCycle.getEndTrip() - workCycle.getStartTrip());
+        param.setTruckId(workCycle.getTruckId());
         workLogTplVO.setWorkCycle(workCycle);
-
+        workLogTplVO.setBetweenTime(DateUtils.betweenTime(workCycle.getStartTime(), workCycle.getEndTime()));
+        int year = DateUtils.getCurrentYear(workCycle.getCreateDate());
+        int month = DateUtils.getCurrentMonths(workCycle.getCreateDate());
+        int day = DateUtils.getCurrentDay(workCycle.getCreateDate());
+        workLogTplVO.setLogDate(year + " 年" + month + " 月" + day + " 日");
         //根据行程周期获取运单列表,按时间正序,第一单为装单,接下来为顺序卸单
         QueryWrapper<WorkOrder> workOrderQueryWrapper = new QueryWrapper<WorkOrder>();
         if (param.getCycleId() != null) {
@@ -59,14 +70,22 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
         }
         List<WorkOrder> workOrderList = workOrderService.list(workOrderQueryWrapper.orderByAsc("execute_time"));
         //根据每个运单以及行程周期获取各个log日志,拿取且赋值
-        List<WorkOrder> workOrders = new ArrayList<>();
-        int listSize = workOrderList.size();
-        for (int i = 0; i < listSize; i++) {
-            WorkOrder workOrderParam = workOrderList.get(i);
-            workOrders.add(workOrderParam);
-        }
-        workLogTplVO.setWorkOrderList(workOrders);
+        if (workOrderList != null && workOrderList.size() > 0) {
+            List<WorkOrder> workOrders = new ArrayList<>();
+            int listSize = workOrderList.size();
+            for (int i = 0; i < listSize; i++) {
+                WorkOrder workOrderParam = workOrderList.get(i);
+                if (workOrderParam.getType() == 2) {
+                    if (workOrderParam.getExecuteTime() != null) {
+                        workOrderParam.setGotoSpotTime(workOrderParam.getExecuteTime());
+                    }
 
+                }
+                workOrderParam.setBetweenTime(DateUtils.betweenTime(workOrderParam.getActualReachTime(), workOrderParam.getActualLeaveTime()));
+                workOrders.add(workOrderParam);
+            }
+            workLogTplVO.setWorkOrderList(workOrders);
+        }
         //根据行程周期和卡车id获取行程费用、加气费用、其他费用
 
         //行程费用
@@ -74,39 +93,46 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
         tmsLineCost.setTruckId(param.getTruckId());
         tmsLineCost.setCycleId(param.getCycleId());
         List<TmsLineCostListVO> tmsLineCostList = tmsLineCostService.list(tmsLineCost);
-        for (TmsLineCostListVO tmsLineCostListVO : tmsLineCostList) {
-            TmsLineCost tmsLineCostParam = new TmsLineCost();
-            tmsLineCostParam.setId(tmsLineCostListVO.getId());
-            List<TmsLineCostOther> tmsLineCostOtherList = tmsLineCostOtherService.list(tmsLineCostParam);
-            tmsLineCostListVO.setLineOtherCost("其他费用:");
-            for (TmsLineCostOther tmsLineCostOther : tmsLineCostOtherList) {
-                tmsLineCostListVO.setLineOtherCost(tmsLineCostListVO.getLineOtherCost() + tmsLineCostOther.getCostName() + tmsLineCostOther.getCostFee() + ";");
+        if (tmsLineCostList != null && tmsLineCostList.size() > 0) {
+            for (TmsLineCostListVO tmsLineCostListVO : tmsLineCostList) {
+                TmsLineCost tmsLineCostParam = new TmsLineCost();
+                tmsLineCostParam.setId(tmsLineCostListVO.getId());
+                List<TmsLineCostOther> tmsLineCostOtherList = tmsLineCostOtherService.list(tmsLineCostParam);
+                if (tmsLineCostOtherList != null && tmsLineCostOtherList.size() > 0) {
+                    tmsLineCostListVO.setLineOtherCost("其他费用:");
+                    for (TmsLineCostOther tmsLineCostOther : tmsLineCostOtherList) {
+                        tmsLineCostListVO.setLineOtherCost(tmsLineCostListVO.getLineOtherCost() + tmsLineCostOther.getCostName() + tmsLineCostOther.getCostFee() + ";");
+                    }
+                }
             }
+            workLogTplVO.setTmsLineCostList(tmsLineCostList);
         }
-        workLogTplVO.setTmsLineCostList(tmsLineCostList);
+
 
         //加气费用
         TmsGasFee tmsGasFee = new TmsGasFee();
         tmsGasFee.setTruckId(param.getTruckId());
         tmsGasFee.setCycleId(param.getCycleId());
         List<TmsGasFee> tmsGasFeeList = tmsGasFeeService.list(tmsGasFee);
-        List<TmsGasFeeVO> tmsGasFeeVOList = new ArrayList<>();
-        for (TmsGasFee tmsGasFee1 : tmsGasFeeList) {
-            TmsGasFeeVO tmsGasFeeVO = new TmsGasFeeVO();
-            BeanUtils.copyProperties(tmsGasFee1, tmsGasFeeVO);
-            //(1现金2大象加气3固定加气站)
-            if (tmsGasFee1.getType() == 1) {
-                tmsGasFeeVO.setTplCash(tmsGasFee1.getGasQtyFee());
-            }
-            if (tmsGasFee1.getType() == 2) {
-                tmsGasFeeVO.setTplGasElephant(tmsGasFee1.getGasQtyFee());
-            }
-            if (tmsGasFee1.getType() == 3) {
-                tmsGasFeeVO.setTplGasStation(tmsGasFee1.getGasQtyFee());
+        if (tmsGasFeeList != null && tmsGasFeeList.size() > 0) {
+            List<TmsGasFeeVO> tmsGasFeeVOList = new ArrayList<>();
+            for (TmsGasFee tmsGasFee1 : tmsGasFeeList) {
+                TmsGasFeeVO tmsGasFeeVO = new TmsGasFeeVO();
+                BeanUtils.copyProperties(tmsGasFee1, tmsGasFeeVO);
+                //(1现金2大象加气3固定加气站)
+                if (tmsGasFee1.getType() == 1) {
+                    tmsGasFeeVO.setTplCash(tmsGasFee1.getGasQtyFee());
+                }
+                if (tmsGasFee1.getType() == 2) {
+                    tmsGasFeeVO.setTplGasElephant(tmsGasFee1.getGasQtyFee());
+                }
+                if (tmsGasFee1.getType() == 3) {
+                    tmsGasFeeVO.setTplGasStation(tmsGasFee1.getGasQtyFee());
+                }
+                tmsGasFeeVOList.add(tmsGasFeeVO);
             }
-            tmsGasFeeVOList.add(tmsGasFeeVO);
+            workLogTplVO.setTmsGasFeeList(tmsGasFeeVOList);
         }
-        workLogTplVO.setTmsGasFeeList(tmsGasFeeVOList);
 
         //其他费用
         TmsOtherFee tmsOtherFee = new TmsOtherFee();
@@ -138,14 +164,19 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
     }
 
     @Override
-    public StreamingResponseBody download(TmsGasFee param, HttpServletResponse response) throws IOException {
+    public StreamingResponseBody download(WorkOrder param, HttpServletResponse response) throws IOException {
 
-        WorkLogTplVO workLogTplVO = new WorkLogTplVO();
-        TmsGasFee tmsGasFee = tmsGasFeeService.getById(param);
-        byte imageBytes[] = getImageBytes("/cn/chendd/examples/images/splash.jpg");
+        WorkLogTplVO workLogTplVO = getWorkLogTplVO(param);
+        if (workLogTplVO == null) {
+            log.info("workLogTplVO is null:{}");
+            return null;
+        }
+        byte driverOneSignUrl[] = getImageBytes(domainUrl + workLogTplVO.getWorkCycle().getDriverOneSignUrl());
+        byte driverTwoSignUrl[] = getImageBytes(domainUrl + workLogTplVO.getWorkCycle().getDriverTwoSignUrl());
+        byte escortSignUrl[] = getImageBytes(domainUrl + workLogTplVO.getWorkCycle().getEscortSignUrl());
 
         // 获取模板文件
-        String tplfileName = "circle_sign_tpl.xlsx";
+        String tplfileName = "work_log_tpl.xlsx";
         String tmpFileName = FileUtil.getTmpFileName(FileUtil.getFilePrefix(tplfileName));
         String tmpFilePath = FileUtils.getTempDirectoryPath() + File.separator + tmpFileName;
         // 写文件
@@ -156,11 +187,45 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
         if (os != null && inputStream != null) {
             Map<String, Object> model = new HashMap<String, Object>();
             model.put("workLogTplVO", workLogTplVO);
+//            if (workLogTplVO.getWorkOrderList() != null && workLogTplVO.getWorkOrderList().size() > 0) {
+//                model.put("workOrderList", workLogTplVO.getWorkOrderList());
+//            }
+//            if (workLogTplVO.getTmsGasFeeList() != null && workLogTplVO.getTmsGasFeeList().size() > 0) {
+//                model.put("tmsGasFeeList", workLogTplVO.getTmsGasFeeList());
+//            }
+//
+//            if (workLogTplVO.getTmsLineCostList() != null && workLogTplVO.getTmsLineCostList().size() > 0) {
+//                model.put("tmsLineCostList", workLogTplVO.getTmsLineCostList());
+//            }
+//
+//            if (workLogTplVO.getTruckRepairInfoList() != null && workLogTplVO.getTruckRepairInfoList().size() > 0) {
+//                model.put("truckRepairInfoList", workLogTplVO.getTruckRepairInfoList());
+//            }
+//
+//            if (workLogTplVO.getRestInfoList() != null && workLogTplVO.getRestInfoList().size() > 0) {
+//                model.put("restInfoList", workLogTplVO.getRestInfoList());
+//            }
+//
+//            if (workLogTplVO.getTruckCheckInfoList() != null && workLogTplVO.getTruckCheckInfoList().size() > 0) {
+//                model.put("truckCheckInfoList", workLogTplVO.getTruckCheckInfoList());
+//            }
+
+            model.put("workOrderList", workLogTplVO.getWorkOrderList());
+            model.put("tmsGasFeeList", workLogTplVO.getTmsGasFeeList());
+            model.put("tmsLineCostList", workLogTplVO.getTmsLineCostList());
+            model.put("truckRepairInfoList", workLogTplVO.getTruckRepairInfoList());
+            model.put("restInfoList", workLogTplVO.getRestInfoList());
+            model.put("truckCheckInfoList", workLogTplVO.getTruckCheckInfoList());
+
+            model.put("driverOneSignUrl", driverOneSignUrl);
+            model.put("driverTwoSignUrl", driverTwoSignUrl);
+            model.put("escortSignUrl", escortSignUrl);
+
             JxlsUtils.exportExcel(inputStream, os, model);
             os.close();
         }
         // 导出
-        String newFileName = "circleSign.xlsx";
+        String newFileName = "workLog.xlsx";
         // 输出文件
         response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", newFileName));
 
@@ -184,10 +249,27 @@ public class JxlsExportTestServiceImpl implements JxlsExportTestService {
 
     }
 
+    /**
+     * 从http中获得 Inputstream
+     *
+     * @param url http地址
+     * @return inputstream
+     * @throws java.io.IOException IOException
+     */
+    private static InputStream getInputStreamFromHttp(String url) throws IOException {
+        URL downUrl = new URL(url);
+        HttpURLConnection connection = (HttpURLConnection) downUrl.openConnection();
+        connection.connect();
+        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
+            return connection.getInputStream();
+        }
+        return null;
+    }
+
     //获取图片的字节码,临时使用
     private static byte[] getImageBytes(String imagePath) throws IOException {
         byte imageBytes[] = null;
-        InputStream is = JxlsExportTestServiceImpl.class.getClass().getResourceAsStream(imagePath);
+        InputStream is = getInputStreamFromHttp(imagePath);
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         byte bytes[] = new byte[1024];
         int lens = -1;

+ 21 - 0
src/main/java/com/aoyang/tms/service/impl/TruckEscortServiceImpl.java

@@ -11,6 +11,7 @@ import com.aoyang.tms.service.CommonService;
 import com.aoyang.tms.service.TruckEscortService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -132,4 +133,24 @@ public class TruckEscortServiceImpl extends ServiceImpl<TruckEscortMapper, Truck
         }
         return updateById(param);
     }
+
+    @Override
+    public List<TruckEscort> noTruckList(TruckEscortListParam param) {
+        QueryWrapper<TruckEscort> queryWrapper = new QueryWrapper<>();
+        if (param.getOrgId() != null) {
+            queryWrapper.eq("org_id", param.getOrgId());
+        }
+        queryWrapper.isNull("truck_id");
+        if (param.getCarNumber() != null) {
+            queryWrapper.like("car_number", param.getCarNumber());
+        }
+        if (param.getKeyWord() != null) {
+            queryWrapper.like("escort_name", param.getKeyWord()).or().like("mobile", param.getKeyWord());
+        }
+        if (StringUtils.isNotBlank(param.getEscortName())) {
+            queryWrapper.like("escort_name", param.getEscortName());
+        }
+        List<TruckEscort> list = list(queryWrapper.orderByDesc("update_date"));
+        return list;
+    }
 }

+ 118 - 22
src/main/java/com/aoyang/tms/service/impl/WorkLogServiceImpl.java

@@ -5,6 +5,8 @@ import com.aoyang.tms.entity.WorkLog;
 import com.aoyang.tms.entity.WorkOrder;
 import com.aoyang.tms.mapper.WorkLogMapper;
 import com.aoyang.tms.service.WorkLogService;
+import com.aoyang.tms.util.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -25,8 +27,6 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
     @Override
     public Boolean logWorkCycleInfo(WorkLogTypeEnum logType, WorkOrder workOrder, String ... args) {
         WorkLog workLog = new WorkLog();
-        workLog.setTitle(logType.workLogTitle);
-        workLog.setType(logType.type);
         if (logType.equals(WorkLogTypeEnum.ENTER_LOAD_SPOT) || logType.equals(WorkLogTypeEnum.LEAVE_LOAD_SPOT)
                 || logType.equals(WorkLogTypeEnum.ENTER_UNLOAD_SPOT) || logType.equals(WorkLogTypeEnum.LEAVE_UNLOAD_SPOT)) {
             // 进入离开围栏日志
@@ -38,6 +38,7 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             workLog.setId(null);
             // 日志内容
             workLog.setNote(logType.workLogTitle + " " + workOrder.getSpotName());
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreaterName("自动上报");
             workLog.setCreateDate(workOrder.getType() == 1? workOrder.getEnterTime() : workOrder.getLeaveTime());
         } else if (logType.equals(WorkLogTypeEnum.LOAD_ORDER_START) || logType.equals(WorkLogTypeEnum.UNLOAD_ORDER_START)) {
@@ -49,10 +50,24 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
             // 日志内容
-            String content = "里程数:" + workOrder.getStartTrip() + "  < a href='" + workOrder.getStartTripUrl()
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>里程表照片</ a>"
-                    + " 运单号:" + workOrder.getOrderNo();
+            String content = "里程数:" + workOrder.getStartTrip() + " <br/>运单号:" + workOrder.getOrderNo();
+            workLog.setUrl(workOrder.getStartTripUrl());
             workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
+            workLog.setCreaterName(workLog.getCreaterName());
+            workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.LOAD_ORDER_NEW_START)) {
+            // 执行新的装车运单,原行车周期结束
+            if (workOrder == null) {
+                log.error("记录执行装车订单日志错误:运单不存在");
+                return false;
+            }
+            BeanUtils.copyProperties(workOrder, workLog);
+            workLog.setId(null);
+            // 日志内容
+            workLog.setNote("");
+            workLog.setUrl(workOrder.getStartTripUrl());
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreaterName(workLog.getCreaterName());
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.FINISH_PRE_CHECK)) {
@@ -64,9 +79,10 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
             // 日志内容
-            String content = "< a href='" + args[0]
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>检查表</ a>";
-            workLog.setNote(content);
+            String content = "";
+            workLog.setUrl(args[0]);
+            workLog.setNote("(用时" + DateUtils.betweenTime(workOrder.getExecuteTime(), LocalDateTime.now()) + ")");
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreaterName(workLog.getCreaterName());
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.LOAD_POINT_ARRIVED)) {
@@ -78,9 +94,7 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
             // 日志内容
-            String content = "装车排队号:" + workOrder.getQueueNo() + "  < a href='" + workOrder.getStartTripUrl()
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>里程表照片</ a>";
-            workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreaterName(workLog.getCreaterName());
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.LOAD_START)) {
@@ -89,10 +103,22 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
                 log.error("记录开始装车日志错误:运单不存在");
                 return false;
             }
+            QueryWrapper queryWrapper = new QueryWrapper();
+            queryWrapper.eq("cycle_id", workOrder.getCycleId());
+            queryWrapper.eq("type", WorkLogTypeEnum.LOAD_POINT_ARRIVED.type);
+            queryWrapper.orderByDesc("id");
+            queryWrapper.last("limit 1");
+            WorkLog workLogArrived = this.baseMapper.selectOne(queryWrapper);
+            String content = "装车排队号:" + workOrder.getQueueNo() + " <br/>里程数:" + workOrder.getEndTrip();
+            workLogArrived.setNote(content);
+            workLogArrived.setUrl(workOrder.getStartTripUrl());
+            this.baseMapper.updateById(workLogArrived);
+
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
             workLog.setCycleId(workOrder.getCycleId());
             workLog.setNote("开始装车");
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.LOAD_END)) {
             // 结束作业,成果上报完成
@@ -104,6 +130,7 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             workLog.setId(null);
             workLog.setCycleId(workOrder.getCycleId());
             workLog.setNote("结束装车");
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.LOAD_COMPLETE)) {
             // 装车运单完成
@@ -115,9 +142,10 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             workLog.setId(null);
             workLog.setCycleId(workOrder.getCycleId());
             // 日志内容
-            String content = "装车净重:" + workOrder.getJingWeight() + "  < a href='" + workOrder.getWeightingListUrl()
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>磅单信息</ a>";
+            String content = "装车净重:" + workOrder.getJingWeight();
+            workLog.setUrl(workOrder.getWeightingListUrl());
             workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.UNLOAD_POINT_ARRIVED)) {
             // 执行卸车运单
@@ -128,12 +156,49 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
             // 日志内容
-            String content = "里程数:" + workOrder.getEndTrip() + "  < a href='" + workOrder.getStartTripUrl()
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>里程表照片</ a>"
-                    + " 运单号:" + workOrder.getOrderNo();
+//            String content = "里程数:" + workOrder.getEndTrip() + " 运单号:" + workOrder.getOrderNo();
+//            workLog.setUrl(workOrder.getStartTripUrl());
+//            workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
+            workLog.setCreaterName(workLog.getCreaterName());
+            workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.UNLOAD_START)) {
+            // 开始卸车
+            if (workOrder == null) {
+                log.error("记录执行车日志错误:运单不存在");
+                return false;
+            }
+            QueryWrapper queryWrapper = new QueryWrapper();
+            queryWrapper.eq("cycle_id", workOrder.getCycleId());
+            queryWrapper.eq("type", WorkLogTypeEnum.UNLOAD_POINT_ARRIVED.type);
+            queryWrapper.orderByDesc("id");
+            queryWrapper.last("limit 1");
+            WorkLog workLogArrived = this.baseMapper.selectOne(queryWrapper);
+            workLogArrived.setNote("里程数:" + workOrder.getEndTrip());
+            workLogArrived.setUrl(workOrder.getEndTripUrl());
+            this.baseMapper.updateById(workLogArrived);
+
+            BeanUtils.copyProperties(workOrder, workLog);
+            workLog.setId(null);
+            // 日志内容
+            String content = "";
+            workLog.setUrl(workOrder.getStartTripUrl());
             workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreaterName(workLog.getCreaterName());
             workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.UNLOAD_END)) {
+            // 卸车完成
+            if (workOrder == null) {
+                log.error("记录结束作业订单日志错误:运单不存在");
+                return false;
+            }
+            BeanUtils.copyProperties(workOrder, workLog);
+            workLog.setId(null);
+            workLog.setCycleId(workOrder.getCycleId());
+            workLog.setNote("(用时" + DateUtils.betweenTime(workOrder.getWorkStartTime(), LocalDateTime.now()) + ")");
+            workLog.setOrderId(workOrder.getId()+"");
+            workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.UNLOAD_COMPLETE)) {
             // 报备完成,结束卸车
             if (workOrder == null) {
@@ -142,9 +207,12 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             }
             BeanUtils.copyProperties(workOrder, workLog);
             workLog.setId(null);
+            workLog.setUrl(workOrder.getWeightingListUrl());
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCycleId(workOrder.getCycleId());
             // 日志内容
-            workLog.setNote("结束卸车");
+            String content = "卸车净重:" + workOrder.getJingWeight();
+            workLog.setNote(content);
             workLog.setCreateDate(LocalDateTime.now());
         } else if (logType.equals(WorkLogTypeEnum.CLOSED)) {
             // 完成收车后检查
@@ -154,11 +222,35 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
                 return false;
             }
             // 日志内容
-            String content = "< a href='" + args[0]
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>《检查表》</a>"
-                    + " 里程数:" + args[1]
-                    + "  < a href='" + workOrder.getStartTripUrl()
-                    + "' target='_blank' style='color: #409EFF;display: inline-block;padding: 0 5px;'>里程表照片</a>";
+            String content = " 里程数:" + workOrder.getEndTrip();
+            workLog.setUrl(workOrder.getEndTripUrl());
+            workLog.setNote(content);
+            workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.LOAD_CANCELED) || logType.equals(WorkLogTypeEnum.UNLOAD_CANCELED)) {
+            // 装卸车运单中止
+            workLog.setCycleId(workOrder.getCycleId());
+            if (workOrder == null) {
+                log.error("记录行车日志错误:运单不存在");
+                return false;
+            }
+            BeanUtils.copyProperties(workOrder, workLog);
+            workLog.setId(null);
+            // 日志内容
+            String content = " 运单号:" + workOrder.getOrderNo();
+            workLog.setNote(content);
+            workLog.setOrderId(workOrder.getId()+"");
+            workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.REPAIR_START) || logType.equals(WorkLogTypeEnum.REST_START)) {
+            // 开始"途中维修"
+            workLog.setCycleId(Long.parseLong(args[0]));
+            workLog.setTruckId(Long.parseLong(args[1]));
+            workLog.setCreateDate(LocalDateTime.now());
+        } else if (logType.equals(WorkLogTypeEnum.REPAIR_END) || logType.equals(WorkLogTypeEnum.REST_END)) {
+            // 结束"途中维修"
+            workLog.setCycleId(Long.parseLong(args[0]));
+            workLog.setTruckId(Long.parseLong(args[1]));
+            // 日志内容
+            String content = "(用时" + args[2] + ")";
             workLog.setNote(content);
             workLog.setCreateDate(LocalDateTime.now());
         } else {
@@ -172,9 +264,13 @@ public class WorkLogServiceImpl extends ServiceImpl<WorkLogMapper, WorkLog> impl
             // 行车周期cycleId必传
             workLog.setCycleId(workOrder.getCycleId());
             workLog.setNote(null);
+            workLog.setOrderId(workOrder.getId()+"");
             workLog.setCreateDate(LocalDateTime.now());
         }
 
+        workLog.setTitle(logType.workLogTitle);
+        workLog.setType(logType.type);
+
         return save(workLog);
     }
 }

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

@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 /**
  * <p>
  * 运单已读信息表 服务实现类
@@ -19,6 +21,24 @@ import org.springframework.stereotype.Service;
 @Service
 public class WorkOrderReadinfoServiceImpl extends ServiceImpl<WorkOrderReadinfoMapper, WorkOrderReadinfo> implements WorkOrderReadinfoService {
 
+    @Resource
+    WorkOrderReadinfoMapper workOrderReadinfoMapper;
+
+    @Override
+    public Boolean addWorkOrderReadinfo(WorkOrderReadinfo workOrderReadinfo) {
+        QueryWrapper<WorkOrderReadinfo> queryWrapper = Wrappers.query();
+        queryWrapper.eq("user_id", workOrderReadinfo.getUserId());
+        queryWrapper.eq("order_id", workOrderReadinfo.getOrderId());
+        queryWrapper.last("limit 1");
+        WorkOrderReadinfo readinfo = this.getOne(queryWrapper);
+        //先查,如果有返回,如果没有,插入
+        if (readinfo != null) {
+            return true;
+        } else {
+            return save(workOrderReadinfo);
+        }
+    }
+
     @Override
     public WorkOrderReadinfo findWorkOrderReadinfo(Long userId, Long orderId) {
         QueryWrapper<WorkOrderReadinfo> queryWrapper = Wrappers.query();

+ 47 - 52
src/main/java/com/aoyang/tms/service/impl/WorkOrderServiceImpl.java

@@ -3,6 +3,7 @@ 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.WorkLogTypeEnum;
 import com.aoyang.tms.common.WorkOrderEnum;
 import com.aoyang.tms.controller.param.WorkManagePageParam;
 import com.aoyang.tms.controller.vo.*;
@@ -49,7 +50,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     @Resource
     private TruckMapper truckMapper;
     @Resource
-    private WorkOrderService workOrderService;
+    private WorkLogService workLogService;
     @Resource
     private WorkOrderMapper workOrderMapper;
     @Resource
@@ -69,29 +70,6 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     }
 
     @Override
-    public List<WorkOrder> findTodoOrderList(Long truckId, Integer orderType) {
-        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
-        queryWrapper.eq("truck_id", truckId);
-        queryWrapper.eq("type", orderType);
-        queryWrapper.eq("order_status", WorkOrderEnum.TODO.orderStatus());
-        //计划到达时间 由先及后 排序
-        queryWrapper.orderByAsc("plan_reach_time");
-        return workOrderMapper.selectList(queryWrapper);
-    }
-
-    @Override
-    public WorkOrder findFirstTodoOrder(Long truckId, Integer orderType) {
-        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
-        queryWrapper.eq("truck_id", truckId);
-        queryWrapper.eq("type", orderType);
-        queryWrapper.eq("order_status", WorkOrderEnum.TODO.orderStatus());
-        //计划到达时间 由先及后 排序
-        queryWrapper.orderByAsc("plan_reach_time");
-        queryWrapper.last("limit 1");
-        return workOrderMapper.selectOne(queryWrapper);
-    }
-
-    @Override
     public WorkOrder findWorkingOrder(Long truckId, Integer orderType) {
         QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
         queryWrapper.eq("truck_id", truckId);
@@ -118,27 +96,17 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     }
 
     @Override
-    public List<WorkOrderVO> findWorkOrderList(Long userId, WorkOrder workOrderParam) {
-
-        List<WorkOrder> list = new ArrayList<>();
-        boolean zhongFlag = commonService.checkTruckZhong(workOrderParam.getTruckId());
-        // 如果当前车辆是空车,查找执行中的装车运单,有显示;如果没有,则查找第一个按照计划从早到晚的待执行装车;
-        if (!zhongFlag) {
-            WorkOrder workOrder = findWorkingOrder(workOrderParam.getTruckId(), 1);
-            if (workOrder == null) {
-                workOrder = findFirstTodoOrder(workOrderParam.getTruckId(), 1);
-            }
-
-            if (workOrder != null) {
-                list.add(workOrder);
-            }
-        }
-
-        // 如果当前车辆是重车,查找所有待执行卸车单
-        if (zhongFlag) {
-            list = findTodoOrderList(workOrderParam.getTruckId(), 2);
-        }
-
+    public List<WorkOrderVO> findNoCompleteOrderList(Long userId, WorkOrder workOrderParam) {
+        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>();
+        queryWrapper.eq("truck_id", workOrderParam.getTruckId());
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(WorkOrderEnum.TODO.orderStatus());
+        statusList.add(WorkOrderEnum.GOTO_ZHUANGCHE_SPOT.orderStatus());
+        statusList.add(WorkOrderEnum.ZHUANGCHE_WAIT.orderStatus());
+        statusList.add(WorkOrderEnum.ZHUANGCHE_RESULT_SUBMIT.orderStatus());
+        queryWrapper.in("order_status", statusList);
+        queryWrapper.orderByAsc("plan_reach_time");
+        List<WorkOrder> list = workOrderMapper.selectList(queryWrapper);
         List<WorkOrderVO> vos = new ArrayList<WorkOrderVO>();
         if (list != null && list.size() > 0) {
             for (WorkOrder workOrder : list) {
@@ -168,7 +136,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         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.setLoadCount(vo.getLoadWait() + vo.getLoadGotoSpot() + vo.getLoadSubmit());
         //卸车
         vo.setUnloadWait(getOrgOrderCount(orgId, 2, WorkOrderEnum.XIECHE_WAIT.orderStatus()));
         vo.setUnloadGotoSpot(getOrgOrderCount(orgId, 2, WorkOrderEnum.GOTO_XIECHE_SPOT.orderStatus()));
@@ -177,7 +145,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         //剩余运力
         vo.setSurplusCount(vo.getTotal() - vo.getLoadCount() - vo.getUnloadCount());
         //未执行运单
-        vo.setUnExecuted(getOrgOrderCount(orgId, null, WorkOrderEnum.TODO.orderStatus()));
+        vo.setUnExecuted(truckMapper.getUnExecutedOrderTruckCount(orgId));
         //未派单
         vo.setUnAllocated(truckMapper.getUnAllocatedTruckCount(orgId));
         //空车未派装车单
@@ -189,7 +157,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
 
     private int getOrgOrderCount(Long orgId, Integer type, Integer status) {
         QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<WorkOrder>().eq("org_id", orgId).
-                eq("order_status", status);
+                eq("order_status", status).lt("order_status", 40);
         if (type != null) {
             queryWrapper.eq("type", type);
         }
@@ -206,7 +174,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         IPage<TruckOrderManageVO> truckOrderRecords = truckMapper.listTmsManageTruck(page, pageParam.getParam());
         List<TruckOrderManageVO> truckOrderList = truckOrderRecords.getRecords();
         for (TruckOrderManageVO vo : truckOrderList) {
-            LocationVO location = commonService.getLocation(vo.getTruckId());
+            LocationVO location = commonService.getLocation(Long.valueOf(vo.getTruckId()));
             if (location != null) {
                 vo.setLatitude(location.getLatitude());
                 vo.setLongitude(location.getLongitude());
@@ -214,7 +182,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             }
             if (vo.getOrderId() != null) {
                 // 设置已读未读信息
-                List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(vo.getTruckId());
+                List<TruckDriver> truckDrivers = truckDriverService.findTruckDrivers(Long.valueOf(vo.getTruckId()));
                 List<ReadInfo> readInfos = new ArrayList<>();
                 for (TruckDriver driver : truckDrivers) {
                     QueryWrapper queryWrapper = new QueryWrapper<>();
@@ -253,6 +221,8 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
                     }
                     readInfos.add(readInfo);
                 }
+
+                vo.setReadInfos(readInfos);
             }
 
         }
@@ -272,7 +242,11 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         }
 
         order.setOrderStatus(WorkOrderEnum.CONCELED.orderStatus());
+        workLogService.logWorkCycleInfo(order.getType() == 1 ? WorkLogTypeEnum.LOAD_CANCELED : WorkLogTypeEnum.UNLOAD_CANCELED, order);
 
+        if (workOrder.getStopNote() != null) {
+            order.setStopNote(workOrder.getStopNote());
+        }
         return new Result<>(updateById(order));
     }
 
@@ -291,8 +265,10 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             queryWrapper.ge("complete_date", workOrderPageParam.getCompleteDateFrom());
             queryWrapper.le("complete_date", workOrderPageParam.getCompleteDateTo());
         }
-        if (workOrderParam.getOrderNo() != null) {
-            queryWrapper.eq("order_no", workOrderParam.getOrderNo());
+
+        //根据订单号或者车牌号可以模糊查询,前端传orderNO即可
+        if (StringUtils.isNotBlank(workOrderParam.getOrderNo())) {
+            queryWrapper.and(wrapper -> wrapper.like("car_number", workOrderParam.getOrderNo()).or().like("order_no", workOrderParam.getOrderNo()));
         }
         if (workOrderParam.getOrgId() != null) {
             queryWrapper.eq("org_id", workOrderParam.getOrgId());
@@ -300,6 +276,13 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         if (workOrderParam.getType() != null) {
             queryWrapper.eq("type", workOrderParam.getType());
         }
+        if (workOrderParam.getTrailerNumber() != null) {
+            queryWrapper.like("trailer_number", workOrderParam.getTrailerNumber());
+        }
+        if (workOrderParam.getOrderStatus() != null) {
+            queryWrapper.eq("order_status", workOrderParam.getOrderStatus());
+        }
+
         if (workOrderParam.getShipperName() != null) {
             queryWrapper.like("shipper_name", workOrderParam.getShipperName());
         }
@@ -322,9 +305,15 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             workOrderPageListVO.setCompleteDate(workOrder.getCompleteTime());
             workOrderPageListVO.setOrderStatus(workOrder.getOrderStatus());
             workOrderPageListVO.setCarAndTrailerNumber("[" + workOrder.getCarNumber() + "]");
+            if (workOrder.getStopNote() != null) {
+                workOrderPageListVO.setStopNote(workOrder.getStopNote());
+            }
             if (workOrder.getTrailerNumber() != null) {
                 workOrderPageListVO.setCarAndTrailerNumber(workOrderPageListVO.getCarAndTrailerNumber() + "-[" + workOrder.getTrailerNumber() + "]");
             }
+            if (workOrder.getTruckId() != null) {
+                workOrderPageListVO.setTruckId(workOrder.getTruckId());
+            }
             workOrderPageListVO.setTruckDeptName(workOrder.getDeptName());
 
             // TODO运单作业状态
@@ -339,6 +328,12 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             }
             if (workOrder.getType() == 2) {
                 workOrderPageListVO.setWorkOrderType("卸车·" + WorkOrderEnum.getOrderStatusName(workOrder.getOrderStatus()));
+                if (workOrder.getOrderStatus().equals(WorkOrderEnum.XIECHE_WAIT.orderStatus())) {
+                    workOrderPageListVO.setWorkOrderType("卸车·卸车等待");
+                }
+                if (workOrder.getOrderStatus().equals(WorkOrderEnum.GOTO_XIECHE_SPOT.orderStatus())) {
+                    workOrderPageListVO.setWorkOrderType("卸车·前往卸车点");
+                }
             }
             if (workOrder.getId() != null) {
                 // 设置已读未读信息

+ 152 - 59
src/main/java/com/aoyang/tms/service/impl/WorkerServiceImpl.java

@@ -1,8 +1,10 @@
 package com.aoyang.tms.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.aoyang.tms.common.TmsTruckStatus;
 import com.aoyang.tms.common.WorkLogTypeEnum;
 import com.aoyang.tms.common.WorkOrderEnum;
+import com.aoyang.tms.controller.param.UpSignParam;
 import com.aoyang.tms.entity.Truck;
 import com.aoyang.tms.entity.TruckCheckInfo;
 import com.aoyang.tms.entity.WorkCycle;
@@ -36,8 +38,6 @@ public class WorkerServiceImpl implements WorkerService {
     @Resource
     private WorkOrderService workOrderService;
     @Resource
-    private TruckCheckInfoService truckCheckInfoService;
-    @Resource
     private WorkLogService workLogService;
 
     @Override
@@ -47,54 +47,90 @@ public class WorkerServiceImpl implements WorkerService {
         WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
         Truck truck = truckService.getById(workOrder.getTruckId());
         WorkCycle workCycleOld = workCycleService.getOne(
-                new QueryWrapper<WorkCycle>().eq("truck_id", workOrder.getTruckId()).eq("status", 1));
+                new QueryWrapper<WorkCycle>().eq("truck_id", workOrder.getTruckId()).eq("status", 1).last("limit 1"));
+        Boolean zhongFlag = workCycleOld == null ? false : workCycleOld.getJingWeight() > 0;
         if (workOrder.getType() == 1) {
+            if (zhongFlag) {
+                log.error("当前为重车,不能执行装车运单 param:", JSON.toJSONString(workOrderParam));
+                return false;
+            }
             boolean cancelFlag = false;
             if (truck.getTmsStatus() == 1 || truck.getTmsStatus() == 2) {
                 // 行车状态已开始行车周期
                 // 查询当前是否有中止的装车运单
-                QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
-                queryWrapper.eq("cycle_id", workCycleOld.getId());
-                queryWrapper.eq("status", 60);
-                queryWrapper.eq("type", 1);
-                List<WorkOrder> calcelList = workOrderService.list(queryWrapper);
-                if (calcelList != null && calcelList.size() > 0) {
-                    cancelFlag = true;
+                if (workCycleOld != null) {
+                    QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.eq("cycle_id", workCycleOld.getId());
+                    queryWrapper.eq("order_status", 60);
+                    queryWrapper.eq("type", 1);
+                    queryWrapper.orderByDesc("id");
+                    List<WorkOrder> calcelList = workOrderService.list(queryWrapper);
+                    if (calcelList != null && calcelList.size() > 0) {
+                        cancelFlag = true;
+                    }
                 }
             }
             if (cancelFlag) {
                 workOrder.setCycleId(workCycleOld.getId());
             } else {
+                if (workCycleOld != null && truck.getTmsStatus() == 3) {
+                    // 完成原行车周期
+                    workCycleOld.setStatus(2);
+                    workCycleOld.setEndTrip(workOrderParam.getStartTrip());
+                    workCycleService.updateById(workCycleOld);
+                    WorkOrder logOrder = new WorkOrder();
+                    BeanUtils.copyProperties(workOrder, logOrder);
+                    logOrder.setCreater(userId);
+                    logOrder.setCreaterName(userName);
+                    workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_ORDER_NEW_START, logOrder);
+                }
                 //1.车辆进入出车前检车状态
                 truck.setTmsStatus(TmsTruckStatus.PRE_CHECK);
                 truckService.updateById(truck);
                 //2.创建行程周期
                 WorkCycle workCycle = new WorkCycle();
+                //执行中
+                workCycle.setStatus(1);
                 workCycle.setStartTime(LocalDateTime.now());
                 BeanUtils.copyProperties(truck, workCycle);
                 BeanUtils.copyProperties(workOrder, workCycle);
                 //行车周期执行中
                 workCycle.setStatus(1);
+                workCycle.setStartTrip(workOrderParam.getStartTrip());
                 workCycleService.save(workCycle);
+                log.info("startOrder workCycle:{}", JSON.toJSONString(workCycle));
 
                 workOrder.setCycleId(workCycle.getId());
+
             }
             //3.订单进入前往装车点状态,
             workOrder.setOrderStatus(WorkOrderEnum.GOTO_ZHUANGCHE_SPOT.orderStatus());
             workOrder.setExecuteTime(LocalDateTime.now());
+            workOrder.setStartTrip(workOrderParam.getStartTrip());
+            workOrder.setStartTripUrl(workOrderParam.getStartTripUrl());
             workOrderService.updateById(workOrder);
 
             //插入日志
+            workOrder.setCreater(userId);
+            workOrder.setCreaterName(userName);
             workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_ORDER_START, workOrder);
 
         } else if (workOrder.getType() == 2) {
+            if (!zhongFlag) {
+                log.error("当前为空车,不能执行卸车运单 param:", JSON.toJSONString(workOrderParam));
+                return false;
+            }
             workOrder.setCycleId(workCycleOld.getId());
-            //3.订单进入前往卸车点状态,
+            //3.订单进入前往卸车点状态, 更新开始时里程
+            workOrder.setStartTrip(workOrderParam.getStartTrip());
+            workOrder.setStartTripUrl(workOrderParam.getStartTripUrl());
             workOrder.setOrderStatus(WorkOrderEnum.GOTO_XIECHE_SPOT.orderStatus());
             workOrder.setExecuteTime(LocalDateTime.now());
             workOrderService.updateById(workOrder);
 
             //插入日志
+            workOrder.setCreater(userId);
+            workOrder.setCreaterName(userName);
             workLogService.logWorkCycleInfo(WorkLogTypeEnum.UNLOAD_ORDER_START, workOrder);
         }
 
@@ -110,24 +146,16 @@ public class WorkerServiceImpl implements WorkerService {
         try {
             WorkOrder workOrder = workOrderService.getById(truckCheckInfo.getOrderId());
             if (workOrder != null) {
-                //1.车辆进入出车前检车状态
-                Truck truck = truckService.getById(workOrder.getTruckId());
-                truck.setTmsStatus(TmsTruckStatus.WORKING);
-                truckService.updateById(truck);
-                //2.插入车辆检查数据
-                BeanUtils.copyProperties(workOrder, truckCheckInfo);
-                truckCheckInfo.setCreater(userId);
-                truckCheckInfo.setCreaterName(userName);
-                truckCheckInfo.setCreateDate(LocalDateTime.now());
-                truckCheckInfoService.save(truckCheckInfo);
                 //3.更新订单,更新前往装车点时间
                 workOrder.setGotoSpotTime(LocalDateTime.now());
                 workOrderService.updateById(workOrder);
                 //4 记录日志
+                workOrder.setCreater(userId);
+                workOrder.setCreaterName(userName);
                 workLogService.logWorkCycleInfo(WorkLogTypeEnum.FINISH_PRE_CHECK, workOrder, truckCheckInfo.getCheckUrl());
             }
         } catch (Exception e) {
-            log.error("startOrder:{}", e.getStackTrace());
+            log.error("startOrder:{}", e);
             return false;
         }
 
@@ -141,19 +169,18 @@ public class WorkerServiceImpl implements WorkerService {
         try {
             WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
             if (workOrder != null) {
-                //1.车辆进入出车前检车状态
-                Truck truck = truckService.getById(workOrder.getTruckId());
-                truck.setTmsStatus(TmsTruckStatus.PRE_CHECK);
-                truckService.updateById(truck);
-                //2.订单进入装车等待状态,
+                //1.订单进入装车等待状态,
                 if (workOrder.getType() == 1) {
                     workOrder.setOrderStatus(WorkOrderEnum.ZHUANGCHE_WAIT.orderStatus());
                 } else {
                     workOrder.setOrderStatus(WorkOrderEnum.XIECHE_WAIT.orderStatus());
                 }
+                workOrder.setActualReachTime(LocalDateTime.now());
                 workOrderService.updateById(workOrder);
 
-                //3 记录日志
+                //2 记录日志
+                workOrder.setCreater(userId);
+                workOrder.setCreaterName(userName);
                 if (workOrder.getType() == 1) {
                     workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_POINT_ARRIVED, workOrder);
                 } else {
@@ -161,7 +188,7 @@ public class WorkerServiceImpl implements WorkerService {
                 }
             }
         } catch (Exception e) {
-            log.error("startOrder:{}", e.getStackTrace());
+            log.error("startOrder:{}", e);
             return false;
         }
 
@@ -171,15 +198,22 @@ public class WorkerServiceImpl implements WorkerService {
     @Override
     @Transactional
     public Boolean submitResult(Long userId, String userName, WorkOrder workOrderParam) {
+        log.info("submitResult workOrderParam:{}", JSON.toJSONString(workOrderParam));
         Boolean flag = true;
         try {
             WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
             if (workOrder != null) {
-                workOrder.setQueueNo(workOrderParam.getQueueNo());
                 workOrder.setEndTrip(workOrderParam.getEndTrip());
                 workOrder.setEndTripUrl(workOrderParam.getEndTripUrl());
                 workOrder.setWorkStartTime(workOrderParam.getWorkStartTime());
                 workOrder.setWorkEndTime(workOrderParam.getWorkEndTime());
+
+                //更新cycle 结束里程数
+                WorkCycle workCycle = workCycleService.getById(workOrder.getCycleId());
+                workCycle.setEndTrip(workOrderParam.getEndTrip());
+                workCycleService.updateById(workCycle);
+                log.info("submitResult workCycle:{}", JSON.toJSONString(workCycle));
+
                 //1.车辆进入作业中状态
                 Truck truck = truckService.getById(workOrder.getTruckId());
                 truck.setTmsStatus(TmsTruckStatus.WORKING);
@@ -193,9 +227,8 @@ public class WorkerServiceImpl implements WorkerService {
                 workOrderService.updateById(workOrder);
 
                 //3 记录日志
-                workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_START, workOrder);
-
-                //3 记录日志
+                workOrder.setCreater(userId);
+                workOrder.setCreaterName(userName);
                 if (workOrder.getType() == 1) {
                     workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_START, workOrder);
                 } else {
@@ -203,7 +236,7 @@ public class WorkerServiceImpl implements WorkerService {
                 }
             }
         } catch (Exception e) {
-            log.error("startOrder:{}", e.getStackTrace());
+            log.error("startOrder:{}", e);
             return false;
         }
 
@@ -219,8 +252,6 @@ public class WorkerServiceImpl implements WorkerService {
             if (workOrder != null) {
                 //1.车辆进入收车中状态
                 Truck truck = truckService.getById(workOrder.getTruckId());
-                truck.setTmsStatus(TmsTruckStatus.RETURNING);
-                truckService.updateById(truck);
 
                 //2.订单完成状态
                 workOrder.setOrderStatus(WorkOrderEnum.COMPLETED.orderStatus());
@@ -230,14 +261,32 @@ public class WorkerServiceImpl implements WorkerService {
                 workOrder.setPiWeight(workOrderParam.getPiWeight());
                 workOrder.setMaoWeight(workOrderParam.getMaoWeight());
                 workOrder.setJingWeight(workOrderParam.getJingWeight());
+                workOrder.setActualWeight(workOrderParam.getJingWeight());
+                workOrder.setActualLeaveTime(LocalDateTime.now());
                 workOrderService.updateById(workOrder);
 
                 //3.更新行车周期中的净重
                 WorkCycle workCycle = workCycleService.getById(workOrder.getCycleId());
-                workCycle.setJingWeight(Integer.valueOf(workOrderParam.getJingWeight()));
+                int jingWeight = workCycle.getJingWeight();
+                if (workOrder.getType() == 1) {
+                    jingWeight = jingWeight + Integer.valueOf(workOrderParam.getJingWeight());
+                } else {
+                    jingWeight = jingWeight - Integer.valueOf(workOrderParam.getJingWeight());
+                    // 卸车后磅单 装车净重 与 累计 卸车净重 之差 在 ± 1000 kg 以内,则由 重车 变为 空车;
+                    if (jingWeight < 1000) {
+                        jingWeight = 0;
+                        // 卸车完成,行车状态进入收车中状态
+                        truck.setTmsStatus(TmsTruckStatus.RETURNING);
+                        truckService.updateById(truck);
+                    }
+                }
+                workCycle.setJingWeight(jingWeight);
                 workCycleService.updateById(workCycle);
+                log.info("finishOrder workCycle:{}", JSON.toJSONString(workCycle));
 
                 //3.并记行车日志
+                workOrder.setCreater(userId);
+                workOrder.setCreaterName(userName);
                 if (workOrder.getType() == 1) {
                     workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_END, workOrder);
                     workLogService.logWorkCycleInfo(WorkLogTypeEnum.LOAD_COMPLETE, workOrder);
@@ -267,6 +316,8 @@ public class WorkerServiceImpl implements WorkerService {
                 truck.setTmsStatus(TmsTruckStatus.AFTER_CHECK);
                 truckService.updateById(truck);
                 //2 记录日志
+                workOrder.setCreater(userId);
+                workOrder.setCreaterName(userName);
                 workLogService.logWorkCycleInfo(WorkLogTypeEnum.RETURN_POINT_ARRIVED, workOrder);
             }
         } catch (Exception e) {
@@ -280,35 +331,77 @@ public class WorkerServiceImpl implements WorkerService {
     @Override
     @Transactional
     public Boolean finishWork(Long userId, String userName, WorkOrder workOrderParam) {
+        log.info("workOrderParam:{}", JSON.toJSONString(workOrderParam));
         Boolean flag = true;
         try {
-            WorkOrder workOrder = workOrderService.getById(workOrderParam.getId());
-            if (workOrder != null) {
-                //1.车辆进入已经收车状态
-                Truck truck = truckService.getById(workOrder.getTruckId());
-                truck.setTmsStatus(TmsTruckStatus.DONE);
-                truckService.updateById(truck);
-                //2.结束当前行程周期(从收车中到出车检查也结束当前行程周期)
-                WorkCycle workCycle = workCycleService.findCurrentWorkCycle(workOrder.getTruckId());
-                workCycle.setEndTime(LocalDateTime.now());
-                BeanUtils.copyProperties(truck, workCycle);
-                BeanUtils.copyProperties(workOrder, workCycle);
-                workCycleService.updateById(workCycle);
+            //1.车辆进入已经收车状态
+            Truck truck = truckService.getById(workOrderParam.getTruckId());
+            //2.上传订单信息
+            workOrderParam.setWeightingListNo(workOrderParam.getWeightingListNo());
+            workOrderParam.setWeightingListUrl(workOrderParam.getWeightingListUrl());
+            workOrderParam.setPiWeight(workOrderParam.getPiWeight());
+            workOrderParam.setMaoWeight(workOrderParam.getMaoWeight());
+            workOrderParam.setJingWeight(workOrderParam.getJingWeight());
+            workOrderParam.setActualWeight(workOrderParam.getJingWeight());
+            workOrderParam.setEndTrip(workOrderParam.getEndTrip());
+            workOrderParam.setEndTripUrl(workOrderParam.getEndTripUrl());
+            workOrderService.updateById(workOrderParam);
+            log.info("finishWork workOrderParam:{}", JSON.toJSONString(workOrderParam));
 
-                workOrder.setWeightingListNo(workOrderParam.getWeightingListNo());
-                workOrder.setWeightingListUrl(workOrderParam.getWeightingListUrl());
-                workOrder.setPiWeight(workOrderParam.getPiWeight());
-                workOrder.setMaoWeight(workOrderParam.getMaoWeight());
-                workOrder.setJingWeight(workOrderParam.getJingWeight());
-                workOrderService.updateById(workOrder);
-                //3 记录日志
-                workLogService.logWorkCycleInfo(WorkLogTypeEnum.CLOSED, workOrder);
-            }
+
+            //3.结束当前行程周期(从收车中到出车检查也结束当前行程周期)
+            WorkCycle workCycle = workCycleService.findCurrentWorkCycle(workOrderParam.getTruckId());
+            workCycle.setOrgId(workOrderParam.getOrgId());
+            workCycle.setOrgName(workOrderParam.getOrgName());
+            workCycle.setShipperId(workOrderParam.getShipperId());
+            workCycle.setShipperName(workOrderParam.getShipperName());
+            workCycle.setEndTime(LocalDateTime.now());
+            workCycle.setTruckId(workOrderParam.getTruckId());
+            workCycle.setEndTrip(workOrderParam.getEndTrip());
+            workCycle.setCarNumber(workOrderParam.getCarNumber());
+            workCycle.setTrailerNumber(workOrderParam.getTrailerNumber());
+            workCycle.setDriverIdOne(workOrderParam.getDriverIdOne());
+            workCycle.setDriverNameOne(workOrderParam.getDriverNameOne());
+            workCycle.setEscortId(workOrderParam.getEscortId());
+            workCycle.setEscortName(workOrderParam.getEscortName());
+            workCycleService.updateById(workCycle);
+            log.info("finishWork workCycle:{}", JSON.toJSONString(workCycle));
+
+
+            //4 记录日志
+            workOrderParam.setCreater(userId);
+            workOrderParam.setCreaterName(userName);
+            workLogService.logWorkCycleInfo(WorkLogTypeEnum.CLOSED, workOrderParam);
         } catch (Exception e) {
-            log.error("startOrder:{}", e.getStackTrace());
+            log.error("startOrder:{}", e);
             return false;
         }
 
         return flag;
     }
+
+    @Override
+    public Boolean finishCycle(Long userId, String userName, UpSignParam upSignParam) {
+        Truck truck = truckService.getById(upSignParam.getTruckId());
+        if (truck != null) {
+            WorkCycle workCycle = workCycleService.findCurrentWorkCycle(upSignParam.getTruckId());
+            if (workCycle != null) {
+                workCycle.setDriverOneSignUrl(upSignParam.getDriverOneSignUrl());
+                workCycle.setDriverTwoSignUrl(upSignParam.getDriverTwoSignUrl());
+                workCycle.setEscortSignUrl(upSignParam.getEscortSignUrl());
+                workCycle.setStatus(2);
+                workCycle.setEndTime(LocalDateTime.now());
+                workCycle.setUpdater(userId);
+                workCycle.setUpdaterName(userName);
+                workCycle.setUpdateDate(LocalDateTime.now());
+                workCycleService.updateById(workCycle);
+                log.info("finishCycle workCycle:{}", JSON.toJSONString(workCycle));
+
+                //已收车
+                truck.setTmsStatus(TmsTruckStatus.DONE);
+                truckService.updateById(truck);
+            }
+        }
+        return null;
+    }
 }

+ 15 - 0
src/main/java/com/aoyang/tms/util/DateUtils.java

@@ -190,6 +190,21 @@ public class DateUtils {
 
     }
 
+    public static int getCurrentMonths(LocalDateTime localDate) {
+        int currentMonth = localDate.getMonth().getValue();
+        return currentMonth;
+    }
+
+    public static int getCurrentYear(LocalDateTime localDate) {
+        int currentYear = localDate.getYear();
+        return currentYear;
+    }
+
+    public static int getCurrentDay(LocalDateTime localDate) {
+        int currentDay = localDate.getDayOfMonth();
+        return currentDay;
+    }
+
     public static void main(String[] args) {
         LocalDateTime now = LocalDateTime.of(2022, 4, 24, 11, 9, 38);
         LocalDateTime end = LocalDateTime.of(2022, 4, 25, 14, 12, 32);

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

@@ -133,4 +133,43 @@ public class JxlsUtils {
         }
         return str;
     }
+
+    /**
+     * @return
+     * @Author chengang
+     * @Description id转换
+     * @Date 2022/4/27
+     * @Param
+     **/
+    public static String idToName(Long id, Integer type) {
+        String str = "";
+        if (id != null && type == 1) {
+            str = "休息:";
+        }
+        if (id != null && type == 2) {
+            str = "维修:";
+        }
+        if (id != null && type == 3) {
+            str = "检查:";
+        }
+        return str;
+    }
+
+    /**
+     * @return
+     * @Author chengang
+     * @Description 前往装卸车点转换
+     * @Date 2022/4/27
+     * @Param
+     **/
+    public static String idToGoSpot(Long id, Integer type) {
+        String str = "";
+        if (id != null && type == 1) {
+            str = "前往装车点";
+        }
+        if (id != null && type == 2) {
+            str = "前往卸车点:";
+        }
+        return str;
+    }
 }

File diff suppressed because it is too large
+ 30 - 0
src/main/java/com/aoyang/tms/util/RegionUtil.java


+ 3 - 1
src/main/profiles/dev/bootstrap.yml

@@ -45,4 +45,6 @@ spring:
       password: xqkj@ayzl
 auyen:
   mongo:
-    tms-collection: tms_dev
+    tms-collection: tms_dev
+
+domain_url: https://dwx.auyen.com/

+ 1 - 1
src/main/profiles/local/bootstrap.yml

@@ -64,4 +64,4 @@ combination:
       top: 10.0
 auyen:
   default-org-id: 720211180626919424
-  marketing-org-id: 700214075283881984
+  marketing-org-id: 700214075283881984

+ 3 - 1
src/main/profiles/prod/bootstrap.yml

@@ -42,4 +42,6 @@ spring:
       port: 27017
       database: meter
       username: meter
-      password: xqkj@ayzl
+      password: xqkj@ayzl
+
+domain_url: https://wx.auyen.com/

+ 3 - 1
src/main/profiles/test/bootstrap.yml

@@ -42,4 +42,6 @@ spring:
       port: 27017
       database: meter
       username: meter
-      password: xqkj@ayzl
+      password: xqkj@ayzl
+
+domain_url: https://twx.auyen.com/

BIN
src/main/resources/exceltpl/work_log_tpl.xlsx


+ 31 - 3
src/main/resources/mapper/TruckMapper.xml

@@ -57,12 +57,13 @@
 
     <!-- 查询实时调度车辆列表 -->
     <select id="listTmsManageTruck" resultType="com.aoyang.tms.controller.vo.TruckOrderManageVO">
+        SELECT * FROM (
         SELECT
           truck.truck_id as truckId, truck.tms_status as tmsStatus, truck.org_id as orgId, truck.org_name as orgName, truck.org_short_name as orgShortName,
           truck.car_number as carNumber, truck.trailer_number as trailerNumber, truck.dept_id as deptId, truck.dept_name as deptName,
           two.id as orderId, two.order_status as orderStatus, two.order_no as orderNo, two.type, two.spot_id as spotId, two.spot_name as spotName,
-          two.update_date as updateDate, two.create_date as createDate, two.queue_no as queueNo,
-          case when wc.jing_weight > 0 then 1 else 0 end as weightFlag
+          two.shipper_id as shipperId, two.shipper_name as shipperName,  two.update_date as updateDate, two.create_date as createDate, two.queue_no as queueNo, wc.id as cycleId,
+          case when wc.jing_weight > 0 then 1 else 0 end as weightFlag, two.spot_id
         FROM
         truck
         left join (
@@ -91,6 +92,12 @@
         <if test="param!=null and param.unloadSubmit == 1">
             and wo.type = 2 and wo.order_status = 30
         </if>
+        <if test="param!=null and param.emptyUnAllocated == 1">
+            and wo.type = 1
+        </if>
+        <if test="param!=null and param.heavyUnAllocated == 1">
+            and wo.type = 2
+        </if>
         order by order_status desc, plan_reach_time asc
         ) two on truck.truck_id = two.truck_id
         left join tms_work_cycle wc on truck.truck_id = wc.truck_id and wc.status = 1
@@ -106,7 +113,7 @@
                 and two.shipper_id = #{param.shipperId}
             </if>
             <if test="param!=null and param.surplusCount == 1">
-                and two.id is null
+                and (two.id is null or two.order_status = 0)
             </if>
             <if test="param!=null and param.unExecuted == 1">
                 and two.order_status = 0
@@ -118,7 +125,20 @@
             param.unloadCount == 1 or param.unloadGotoSpot == 1 or param.unloadWait == 1 or param.unloadSubmit == 1">
                 and two.id is not null
             </if>
+            <if test="param!=null and param.emptyUnAllocated == 1">
+                and (wc.jing_weight = 0 or wc.jing_weight is null) and two.id is null
+            </if>
+            <if test="param!=null and param.heavyUnAllocated == 1">
+                and wc.jing_weight > 0 and two.id is null
+            </if>
         group by truck.truck_id
+        ) tbl
+        <where>
+            <if test="param != null and param.spotId != null">
+                and tbl.spot_id = #{param.spotId}
+                ORDER BY tbl.queueNo is null, tbl.queueNo asc
+            </if>
+        </where>
     </select>
 
     <!-- 查询未派单车辆 -->
@@ -130,6 +150,14 @@
         WHERE truck.org_id = #{orgId} and wo.id is null
     </select>
 
+    <!-- 查询未执行派单车辆 -->
+    <select id="getUnExecutedOrderTruckCount" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM ( select id from truck left join tms_work_order wo on truck.truck_id = wo.truck_id and wo.order_status = 0
+        WHERE truck.org_id = #{orgId} and wo.id is not null
+        group by truck.truck_id ) tbl
+    </select>
+
     <!-- 查询未派单车辆 -->
     <select id="getUnAllocatedTruckCount" resultType="java.lang.Integer">
         SELECT count(1)

+ 59 - 25
src/main/resources/mapper/WorkCycleMapper.xml

@@ -4,35 +4,69 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.aoyang.tms.entity.WorkCycle">
-        <id column="id" property="id" />
-        <result column="status" property="status" />
-        <result column="org_id" property="orgId" />
-        <result column="org_name" property="orgName" />
-        <result column="org_short_name" property="orgShortName" />
-        <result column="driver_id_one" property="driverIdOne" />
-        <result column="driver_name_one" property="driverNameOne" />
-        <result column="driver_id_two" property="driverIdTwo" />
-        <result column="driver_name_two" property="driverNameTwo" />
-        <result column="escort_id" property="escortId" />
-        <result column="escort_name" property="escortName" />
-        <result column="truck_id" property="truckId" />
-        <result column="car_number" property="carNumber" />
-        <result column="trailer_number" property="trailerNumber" />
-        <result column="shipper_id" property="shipperId" />
-        <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" />
+        <id column="id" property="id"/>
+        <result column="status" property="status"/>
+        <result column="org_id" property="orgId"/>
+        <result column="org_name" property="orgName"/>
+        <result column="org_short_name" property="orgShortName"/>
+        <result column="driver_id_one" property="driverIdOne"/>
+        <result column="driver_name_one" property="driverNameOne"/>
+        <result column="driver_id_two" property="driverIdTwo"/>
+        <result column="driver_name_two" property="driverNameTwo"/>
+        <result column="escort_id" property="escortId"/>
+        <result column="escort_name" property="escortName"/>
+        <result column="truck_id" property="truckId"/>
+        <result column="car_number" property="carNumber"/>
+        <result column="trailer_number" property="trailerNumber"/>
+        <result column="shipper_id" property="shipperId"/>
+        <result column="shipper_name" property="shipperName"/>
+        <result column="weather" property="weather"/>
+        <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"/>
+        <result column="updater" property="updater"/>
+        <result column="updater_name" property="updaterName"/>
+        <result column="update_date" property="updateDate"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <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, driver_one_sign_url, driver_two_sign_url, escort_sign_url, 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,
+        weather,
+        shipper_name,
+        start_time,
+        end_time,
+        driver_one_sign_url,
+        driver_two_sign_url,
+        escort_sign_url,
+        start_trip,
+        end_trip,
+        creater,
+        creater_name,
+        create_date,
+        updater,
+        updater_name,
+        update_date
     </sql>
 
 </mapper>

File diff suppressed because it is too large
+ 2 - 1
src/main/resources/mapper/WorkOrderMapper.xml