OmstruckOrderSeparateServiceImpl.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. package com.steerinfo.dil.service.impl;
  2. import com.fasterxml.jackson.databind.ObjectReader;
  3. import com.steerinfo.dil.feign.IMFeign;
  4. import com.steerinfo.dil.feign.TmsTruckFeign;
  5. import com.steerinfo.dil.mapper.AmsSaleOrderMaterialMapper;
  6. import com.steerinfo.dil.mapper.OmstruckOrderMapper;
  7. import com.steerinfo.dil.mapper.OmstruckOrderMaterialMapper;
  8. import com.steerinfo.dil.mapper.OmstruckOrderSeparateMapper;
  9. import com.steerinfo.dil.model.OmstruckOrder;
  10. import com.steerinfo.dil.model.OmstruckOrderMaterial;
  11. import com.steerinfo.dil.service.IOmstruckOrderSeparateService;
  12. import com.steerinfo.dil.util.DataChange;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import org.springframework.web.bind.annotation.RequestBody;
  17. import java.math.BigDecimal;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. /**
  21. * 运输订单第二个 impl
  22. * @ author :TXF
  23. * @ time :2021/12/3 13:14
  24. */
  25. @Service
  26. public class OmstruckOrderSeparateServiceImpl implements IOmstruckOrderSeparateService {
  27. @Autowired
  28. private OmstruckOrderSeparateMapper omstruckOrderSeparateMapper;
  29. @Autowired
  30. AmsSaleOrderMaterialMapper amsSaleOrderMaterialMapper;
  31. @Autowired
  32. private OmstruckOrderMapper omstruckOrderMapper;
  33. @Autowired
  34. private OmstruckOrderServiceImpl omstruckOrderService;
  35. @Autowired
  36. private TmsTruckFeign tmsTruckFeign;
  37. @Autowired
  38. OmstruckOrderMaterialMapper omstruckOrderMaterialMapper;
  39. @Autowired
  40. IMFeign imFeign;
  41. /**
  42. * 通过线路子表路线图生成各实绩
  43. * @param map
  44. * @return
  45. */
  46. public int addAllSonResult(Map<String, Object> map){
  47. Integer resultTotalId = DataChange.dataToBigDecimal(map.get("resultTotalId")).intValue();
  48. Integer lineId = DataChange.dataToBigDecimal(map.get("lineId")).intValue();
  49. int result = 0;
  50. //通过总实绩Id 查询关联的线路子表顺序
  51. List<Map<String, Object>> segmentList = omstruckOrderSeparateMapper.getLineMesByOrderId(lineId);
  52. Map<String,Object> totalIdMap = new HashMap<>();
  53. totalIdMap.put("resultTotalId",resultTotalId);
  54. totalIdMap.put("lineId", lineId);
  55. // 遍历路段顺序号子表
  56. int count = 0;
  57. BigDecimal lineType = (BigDecimal) segmentList.get(0).get("lineType");
  58. if (lineType.intValue() == 4) {
  59. count++;
  60. }
  61. //存放皮重路段顺序号和毛重路段顺序号map
  62. Map<String, Object> tareAndGrossSegmentMap = new HashMap<>();
  63. for (Map<String,Object> segmentMap : segmentList) {
  64. BigDecimal segmentSqe = (BigDecimal) segmentMap.get("segmentSqe");
  65. String linkName = (String) segmentMap.get("linkName");
  66. totalIdMap.put("segmentSqe",segmentSqe);
  67. // 判断是否是计毛
  68. if (linkName.equals("计毛")) {
  69. // 如果是计量则加一
  70. count ++;
  71. tareAndGrossSegmentMap.put("grossSegmentSqe", segmentSqe);
  72. // 有两个计量的时候则新增实绩
  73. if (count == 2) {
  74. totalIdMap.putAll(tareAndGrossSegmentMap);//将皮重顺序号和毛重路段顺序号放进去
  75. tmsTruckFeign.addWeightResult(totalIdMap);
  76. // 新增一次则对计数器清零
  77. count = 0;
  78. tareAndGrossSegmentMap.clear(); // 清空毛重皮重 map
  79. result++;
  80. }
  81. }
  82. // 判断是否是计皮
  83. if (linkName.equals("计皮")) {
  84. // 如果是计皮则加一
  85. count ++;
  86. tareAndGrossSegmentMap.put("tareSegmentSqe", segmentSqe);
  87. // 有两个计量的时候则新增实绩
  88. if (count == 2) {
  89. totalIdMap.putAll(tareAndGrossSegmentMap);
  90. tmsTruckFeign.addWeightResult(totalIdMap);
  91. // 新增一次则对计数器清零
  92. count = 0;
  93. tareAndGrossSegmentMap.clear(); // 清空毛重皮重 map
  94. result++;
  95. }
  96. }
  97. // 进厂
  98. if (linkName.equals("进厂")) {
  99. tmsTruckFeign.addEnFactoryResult(totalIdMap);
  100. result++;
  101. }
  102. // 出厂
  103. if (linkName.equals("出厂")) {
  104. tmsTruckFeign.addLeaveFactory(totalIdMap);
  105. result++;
  106. }
  107. // 装货
  108. if (linkName.equals("装货")) {
  109. tmsTruckFeign.addLoadResult(totalIdMap);
  110. result++;
  111. }
  112. // 卸货
  113. if (linkName.equals("卸货")) {
  114. tmsTruckFeign.addUnloadResult(totalIdMap);
  115. result++;
  116. }
  117. // 退货
  118. if (linkName.equals("退货")) {
  119. totalIdMap.put("returnReason", map.get("returnReason")); //退货原因 仅退货有用
  120. totalIdMap.put("orderId", map.get("orderId")); //添加新订单ID
  121. tmsTruckFeign.addReturnGoodsResult(totalIdMap);
  122. result++;
  123. }
  124. }
  125. return result;
  126. }
  127. /**
  128. * 添加退货实绩关闭当前订单
  129. * @param map
  130. * @return
  131. */
  132. @Transactional
  133. public int returnOrderCloseOrder(Map<String, Object> map){
  134. //通过运输订单ID关闭运输订单(修改状态为退货关闭:9)
  135. map.put("orderStatus", 9);
  136. int i = omstruckOrderSeparateMapper.updateOrderStatusByOrderNum(map);
  137. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  138. //查询之前订单所有的信息
  139. Map<String, Object> orderMap = omstruckOrderSeparateMapper.getOmstruckOrderResult(orderId);
  140. // 获得运单信息
  141. Map<String,Object> orderMessaggeMap = omstruckOrderSeparateMapper.getOrderMessagge(orderId);
  142. //添加新运输订单 运输订单号
  143. OmstruckOrder omstruckOrder = new OmstruckOrder();
  144. BigDecimal newOrderId = omstruckOrderMapper.selectMaxId();
  145. // 卸货点
  146. BigDecimal unloadPointId = (BigDecimal) orderMessaggeMap.get("unloadPointId");
  147. omstruckOrder.setOrderId(newOrderId);
  148. omstruckOrder.setOrderType(DataChange.dataToBigDecimal(orderMessaggeMap.get("orderType")));
  149. omstruckOrder.setLineId(DataChange.dataToBigDecimal(map.get("lineId")));
  150. omstruckOrder.setOrderPlanId(DataChange.dataToBigDecimal(orderMessaggeMap.get("orderPlanId")));
  151. omstruckOrder.setOrderStatus(new BigDecimal(5)); //执行中(已接收)
  152. omstruckOrder.setCapacityId(DataChange.dataToBigDecimal(orderMessaggeMap.get("capacityId")));
  153. omstruckOrder.setOrderNumber(orderMessaggeMap.get("orderNumber") + "-1");
  154. omstruckOrder.setOrderIssueTime(new Date());
  155. omstruckOrder.setOrderReceiveRefuseTime(new Date());
  156. omstruckOrder.setInsertTime(new Date());
  157. omstruckOrder.setInsertUsername("admin");
  158. omstruckOrder.setUnloadPointId(unloadPointId);
  159. omstruckOrderMapper.insertSelective(omstruckOrder);
  160. //添加运输订单子表
  161. Map<String, Object> mesMap = new HashMap<>();
  162. mesMap.put("orderId", newOrderId);
  163. omstruckOrderService.addOrderMaterial(orderMap, newOrderId);
  164. //添加总实绩
  165. Integer totalId = tmsTruckFeign.addTotalResult(mesMap);
  166. // 添加各种实绩
  167. mesMap.put("resultTotalId", totalId);
  168. mesMap.put("lineId", map.get("lineId"));
  169. mesMap.put("returnReason", map.get("returnResult"));
  170. int result = addAllSonResult(mesMap);
  171. // 推送消息给司机
  172. pushMesToWebsocket(mesMap);
  173. return result;
  174. }
  175. /**
  176. * 发送消息到 websocket 推送消息
  177. * orderId 订单Id
  178. * @return
  179. */
  180. public String pushMesToWebsocket(Map<String, Object> map) {
  181. Map<String, Object> mesMap = omstruckOrderMapper.pushMesToWebsocket(map);
  182. //添加消息实体
  183. HashMap<Object, Object> mapp = new HashMap<>();
  184. mapp.put("messageType", 3);
  185. mapp.put("sendPerson", "system");
  186. mapp.put("receivePerson", mesMap.get("capacityNumber"));
  187. mapp.put("messageContent",(String) mesMap.get("orderNumber") + new Date());
  188. mapp.put("createTime", new Date());
  189. ArrayList<Object> list = new ArrayList<>();
  190. list.add(mapp);
  191. //调用websocket接口推送
  192. HashMap<Object, Object> sendMap = new HashMap<>();
  193. //将消息实体放入list中存到map中
  194. sendMap.put("messages", list);
  195. String s = imFeign.sendToUser(sendMap);
  196. System.out.println(s);
  197. return s;
  198. }
  199. /**
  200. * 通过运单id查询所有实绩点
  201. * @param orderId
  202. * @return
  203. */
  204. public List<Map<String,Object>> getOrderResult(BigDecimal orderId) {
  205. List<Map<String,Object>> segmentList = omstruckOrderSeparateMapper.getSegmentList(orderId);
  206. //通过订单ID查询总实绩ID
  207. Integer resultTotalId = omstruckOrderSeparateMapper.getTotalIdByOrderId(orderId);
  208. if(segmentList != null)
  209. for (Map<String, Object> map : segmentList) {
  210. //获取路段类型
  211. String linkName = (String) map.get("linkName");
  212. //获取路段顺序号
  213. int segmentSqe = DataChange.dataToBigDecimal(map.get("segmentSqe")).intValue();
  214. Map<String, Object> mesMap = new HashMap<>(); //查询条件Map
  215. mesMap.put("segmentSqe", segmentSqe);
  216. mesMap.put("resultTotalId", resultTotalId);
  217. switch (linkName) {
  218. case "进厂":
  219. //通过总实绩ID和路段顺序号查询
  220. Map<String, Object> mes1 = omstruckOrderSeparateMapper.getEnFactoryMes(mesMap);
  221. if(mes1 != null)
  222. map.putAll(mes1);
  223. break;
  224. case "计毛":
  225. Map<String, Object> mes2 = omstruckOrderSeparateMapper.getMaoWeightMes(mesMap);
  226. if(mes2 != null)
  227. map.putAll(mes2);
  228. break;
  229. case "计皮":
  230. Map<String, Object> mes3 = omstruckOrderSeparateMapper.getPiWeightMes(mesMap);
  231. if(mes3 != null)
  232. map.putAll(mes3);
  233. break;
  234. case "卸货":
  235. Map<String, Object> mes4 = omstruckOrderSeparateMapper.getUnloadMes(mesMap);
  236. if(mes4 != null)
  237. map.putAll(mes4);
  238. break;
  239. case "装货":
  240. Map<String, Object> mes5 = omstruckOrderSeparateMapper.getLoadMes(mesMap);
  241. if(mes5 != null)
  242. map.putAll(mes5);
  243. break;
  244. case "出厂":
  245. Map<String, Object> mes6 = omstruckOrderSeparateMapper.getOutFactoryMes(mesMap);
  246. if(mes6 != null)
  247. map.putAll(mes6);
  248. break;
  249. case "退货":
  250. Map<String, Object> mes7 = omstruckOrderSeparateMapper.getReturnMes(mesMap);
  251. if(mes7 != null)
  252. map.putAll(mes7);
  253. }
  254. }
  255. return segmentList;
  256. }
  257. /**
  258. * 查询运输进程,通过实绩ID
  259. * @Author TXF
  260. * @Date 2022/2/18 16:46
  261. * @param map
  262. * @return
  263. **/
  264. public List<Map<String, Object>> getAllOrderResult(Map<String, Object> map){
  265. //通过订单Id查询总实绩Id
  266. Integer resultTotalId = omstruckOrderSeparateMapper.getTotalIdByOrderIdOrOrderNum(map);
  267. //通过总实绩ID查询所有的实绩:包括进厂、出厂、计重、装卸货
  268. List<Map<String, Object>> allMesList = new ArrayList<>(20);
  269. allMesList.addAll(omstruckOrderSeparateMapper.getAllEnFactoryResultMesByTotalId(resultTotalId));
  270. allMesList.addAll(omstruckOrderSeparateMapper.getAllOutFactoryResultMesByTotalId(resultTotalId));
  271. allMesList.addAll(omstruckOrderSeparateMapper.getAllLoadResultMesByTotalId(resultTotalId));
  272. allMesList.addAll(omstruckOrderSeparateMapper.getAllUnloadResultMesByTotalId(resultTotalId));
  273. allMesList.addAll(omstruckOrderSeparateMapper.getAllMaoWeightResultMesByTotalId(resultTotalId));
  274. allMesList.addAll(omstruckOrderSeparateMapper.getAllPiWeightResultMesByTotalId(resultTotalId));
  275. //对列表中数据路段顺序号进行排序
  276. allMesList.sort(new Comparator<Map<String, Object>>() {
  277. @Override
  278. public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  279. BigDecimal b1 = DataChange.dataToBigDecimal(o1.get("segmenSqe"));
  280. BigDecimal b2 = DataChange.dataToBigDecimal(o2.get("segmenSqe"));
  281. return b1.compareTo(b2);
  282. }
  283. });
  284. return allMesList;
  285. }
  286. /**
  287. * 通过运输订单号查询实绩位置
  288. * @param orderNumber
  289. * @return
  290. */
  291. public List<Map<String, Object>> getOrderNumberResult(String orderNumber) {
  292. String substring = orderNumber.substring(0, orderNumber.length() - 1);
  293. BigDecimal orderId = omstruckOrderSeparateMapper.getOrderIdByOrderNumber(substring);
  294. List<Map<String, Object>> orderResult = getOrderResult(orderId);
  295. return orderResult;
  296. }
  297. /**
  298. * 查看承运商所属的订单
  299. * @param mapValue
  300. * @return
  301. */
  302. @Override
  303. public List<Map<String, Object>> getInputOrderList(Map<String, Object> mapValue) {
  304. return omstruckOrderSeparateMapper.getInputOrderList(mapValue);
  305. }
  306. /**
  307. * 查询所有的未下发的需要分配车辆的订单
  308. * @param map
  309. * @return
  310. */
  311. public List<Map<String, Object>> getOthersOrderMesToSend(Map<String, Object> map){
  312. return omstruckOrderSeparateMapper.getOthersOrderMesToSend(map);
  313. }
  314. /**
  315. * 根据运输订单id修改运力id
  316. * @param omstruckOrder
  317. * @return
  318. */
  319. @Override
  320. public int updateOmstruckOrder(OmstruckOrder omstruckOrder) {
  321. return omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  322. }
  323. //根据运输订单号查物资
  324. @Override
  325. public List<Map<String,Object>> getUnloadOrderMaterial(Map<String, Object> map) {
  326. return omstruckOrderMaterialMapper.getUnloadOrderMaterial(map);
  327. }
  328. /**
  329. * 承运商销售分派运输订单给司机
  330. * @param mapValue
  331. * @return
  332. */
  333. @Override
  334. public Integer addSaleTruckOrder(Map<String, Object> mapValue) {
  335. // Integer orderType = (Integer) mapValue.get("orderType");
  336. Integer lineId = (Integer) mapValue.get("lineId");
  337. // 根据lineId查询是否是钢材
  338. BigDecimal isSteel = omstruckOrderMapper.getIsSteel(new BigDecimal(lineId));
  339. BigDecimal dispatchId = DataChange.dataToBigDecimal(mapValue.get("dispatchId"));
  340. //通过定向派单ID查询车序号表中的priceId 价格ID
  341. BigDecimal priceId = omstruckOrderMapper.getPriceIdByDispatchId(dispatchId);
  342. String capacityNumber = (String) mapValue.get("capacityNumber");
  343. OmstruckOrder omstruckOrder = new OmstruckOrder();
  344. omstruckOrder.setPriceId(priceId);
  345. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  346. Map<String,Object> orderIdMap = new HashMap<>();
  347. orderIdMap.put("orderId",orderId);
  348. tmsTruckFeign.addTotalResult(orderIdMap);
  349. omstruckOrder.setOrderId(orderId);
  350. BigDecimal saleOrderMaterialId = omstruckOrderMapper.getSaleMaterialId(dispatchId);
  351. // 查询销售订单中是物资重量还是件数
  352. List<Map<String, Object>> materialMapList = omstruckOrderSeparateMapper.getWeightOrNumber(saleOrderMaterialId);
  353. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  354. String orderNumber = DataChange.generateEightDigitsNumber("WYSDD", orderId.intValue());
  355. omstruckOrder.setOrderNumber(orderNumber);
  356. omstruckOrder.setLineId(new BigDecimal(lineId));
  357. omstruckOrder.setOrderIssueTime(new Date());
  358. // 如果线路类型为3或者4(危化品和焦炭)则为非钢材
  359. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  360. omstruckOrder.setOrderType(new BigDecimal(2));
  361. }
  362. // 否则为钢材
  363. else {
  364. omstruckOrder.setOrderType(new BigDecimal(1));
  365. }
  366. omstruckOrder.setOrderStatus(new BigDecimal(4));
  367. omstruckOrder.setInsertTime(new Date());
  368. omstruckOrder.setUpdateTime(new Date());
  369. omstruckOrder.setInsertUsername("admin");
  370. omstruckOrder.setUpdateUsername("admin");
  371. omstruckOrder.setInsertUpdateRemark("无");
  372. omstruckOrder.setDeleted(new BigDecimal(0));
  373. BigDecimal capacityId = omstruckOrderMapper.getCapacityId(capacityNumber);
  374. omstruckOrder.setCapacityId(capacityId);
  375. List<Map<String, Object>> mapList = omstruckOrderMapper.getMaterialMessages(dispatchId);
  376. if (mapList != null && mapList.size() != 0) {
  377. for (Map<String, Object> map : mapList) {
  378. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  379. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  380. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  381. omstruckOrderMaterial.setOrderId(orderId);
  382. omstruckOrderMaterial.setInsertTime(new Date());
  383. omstruckOrderMaterial.setUpdateTime(new Date());
  384. omstruckOrderMaterial.setInsertUsername("admin");
  385. omstruckOrderMaterial.setUpdateUsername("admin");
  386. omstruckOrderMaterial.setInsertUpdateRemark("无");
  387. if (map != null) {
  388. BigDecimal saleOrderMaterialNumber = (BigDecimal) map.get("saleOrderMaterialNumber");
  389. BigDecimal materialId = (BigDecimal) map.get("materialId");
  390. omstruckOrderMaterial.setMaterialId(materialId);
  391. // 判断是重量还是件数
  392. if (materialMapList != null) {
  393. BigDecimal saleMaterialNumber = (BigDecimal) materialMapList.get(0).get("materialNumber");
  394. if (saleMaterialNumber != null && saleMaterialNumber.toString().length() != 0) {
  395. omstruckOrderMaterial.setOrderMaterialNumber(saleOrderMaterialNumber);
  396. }
  397. else {
  398. omstruckOrderMaterial.setOrderMaterialWeight(saleOrderMaterialNumber);
  399. }
  400. }
  401. }
  402. omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  403. }
  404. }
  405. int result = omstruckOrderMapper.insertSelective(omstruckOrder);
  406. // 调用websocket推送数据给司机
  407. pushMesToWebsocket(orderIdMap);
  408. return result;
  409. }
  410. @Override
  411. public int updateTimes(BigDecimal orderPlanId, int times) {
  412. return omstruckOrderSeparateMapper.updateTimes(orderPlanId, times);
  413. }
  414. /**
  415. * 根据运单id关闭运输订单
  416. * @param orderId
  417. * @return
  418. */
  419. @Override
  420. public int closeOrder(Integer orderId) {
  421. OmstruckOrder omstruckOrder = new OmstruckOrder();
  422. omstruckOrder.setOrderId(new BigDecimal(orderId));
  423. omstruckOrder.setOrderStatus(new BigDecimal(8));
  424. int result = omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  425. return result;
  426. }
  427. /**
  428. * @Author TXF
  429. * @Date 2021/12/30 16:15
  430. * @param capacityNumber 车牌号
  431. * @return 查询当前车辆之前所有已完成的订单号 以及 订单ID
  432. **/
  433. public List<Map<String, Object>> getCapacityAllOrder(String capacityNumber){
  434. return omstruckOrderSeparateMapper.getCapacityAllOrder(capacityNumber);
  435. }
  436. // @Override
  437. // public int updateTimes(BigDecimal orderPlanId, int times) {
  438. // return omstruckOrderSeparateMapper.updateTimes(orderPlanId,times);
  439. // }
  440. /**
  441. * 根据运单id查询出所有销售数据
  442. * @param orderId
  443. * @return
  444. */
  445. @Override
  446. public Map<String, Object> getSaleAllMessages(BigDecimal orderId) {
  447. // 销售订单id
  448. Map<String,Object> mapValue = omstruckOrderSeparateMapper.getSaleAllMessages(orderId);
  449. BigDecimal saleOrderId = (BigDecimal) mapValue.get("saleOrderId");
  450. // 车序号
  451. List<Map<String, Object>> truckList = omstruckOrderSeparateMapper.getMaxTruckNo(saleOrderId);
  452. Map<String, Object> map = truckList.get(0);
  453. mapValue.putAll(map);
  454. // mapList中的数据
  455. List<Map<String,Object>> mapList = omstruckOrderSeparateMapper.getMapList(orderId);
  456. mapValue.put("mapList",mapList);
  457. return mapValue;
  458. }
  459. /**
  460. * 新增一个新的运输订单(一车多趟)
  461. * @Author TXF
  462. * @Date 2022/1/14 21:10
  463. * @param orderId
  464. * @return
  465. **/
  466. public int addNewTransportOrder(BigDecimal orderId){
  467. //根据运输订单ID查询 订单信息
  468. OmstruckOrder omstruckOrder = omstruckOrderMapper.selectByPrimaryKey(orderId);
  469. BigDecimal newOrderId = updateTruckOrder(omstruckOrder);
  470. omstruckOrderMapper.insertSelective(omstruckOrder);
  471. //通过订单ID查询物资子表信息
  472. OmstruckOrderMaterial omstruckOrderMaterial = omstruckOrderMaterialMapper.selectByOrderIdPrimaryKey(orderId);
  473. //更新物资子表中的订单ID
  474. omstruckOrderMaterial.setOrderId(newOrderId);
  475. updateTruckOrderMaterial(omstruckOrderMaterial);
  476. omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  477. //远程调用新增新的总实绩ID
  478. Map<String, Object> map = new HashMap<>();
  479. map.put("orderId", newOrderId);
  480. tmsTruckFeign.addTotalResult(map);
  481. return 1;
  482. }
  483. /**
  484. * 批量关闭运输订单
  485. * @param mapList
  486. * @return
  487. */
  488. @Override
  489. public int batchCloseOrder(List<Map<String, Object>> mapList) {
  490. int result = 0;
  491. // 遍历主键
  492. for (Map<String, Object> map : mapList) {
  493. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  494. OmstruckOrder omstruckOrder = new OmstruckOrder();
  495. omstruckOrder.setOrderId(orderId);
  496. omstruckOrder.setOrderStatus(new BigDecimal(7));
  497. result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  498. }
  499. return result;
  500. }
  501. /**
  502. * 更新新订单信息 (一车多趟)
  503. * @Author TXF
  504. * @Date 2022/1/14 21:35
  505. * @param omstruckOrder
  506. * @return
  507. **/
  508. private BigDecimal updateTruckOrder(OmstruckOrder omstruckOrder){
  509. //设置新的运输订单号和主键
  510. BigDecimal newOrderId = omstruckOrderMapper.selectMaxId();
  511. omstruckOrder.setOrderId(newOrderId);
  512. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD", newOrderId.intValue()));
  513. //设置订单状态为已下发 司机未接收时间 路段顺序号 订单确认状态
  514. omstruckOrder.setOrderStatus(new BigDecimal(4));
  515. Date nowDate = new Date();
  516. omstruckOrder.setOrderIssueTime(nowDate);
  517. omstruckOrder.setOrderLineSequence(null);
  518. omstruckOrder.setOrderReceiveRefuseTime(null);
  519. omstruckOrder.setDriverConfirmation(null);
  520. omstruckOrder.setOrderEntryTime(new Date(nowDate.getTime() + 7200000));//一车多趟预估进厂时间以当前时间往后推俩小时
  521. //常规字段
  522. omstruckOrder.setInsertTime(nowDate);
  523. omstruckOrder.setInsertUsername("admin");
  524. omstruckOrder.setUpdateTime(null);
  525. omstruckOrder.setUpdateUsername(null);
  526. return newOrderId; //用于更新订单子表信息
  527. }
  528. /**
  529. * 更新订单物资子表信息 (一车多趟)
  530. * @Author TXF
  531. * @Date 2022/1/14 21:40
  532. * @param
  533. * @return
  534. **/
  535. private void updateTruckOrderMaterial(OmstruckOrderMaterial omstruckOrderMaterial){
  536. //更新主键 以及常规字段
  537. omstruckOrderMaterial.setOrderMaterialId(omstruckOrderMaterialMapper.selectMaxId());
  538. omstruckOrderMaterial.setInsertTime(new Date());
  539. omstruckOrderMaterial.setInsertUsername("admin");
  540. omstruckOrderMaterial.setUpdateTime(null);
  541. omstruckOrderMaterial.setUpdateUsername(null);
  542. }
  543. /**
  544. * 批量删除订单
  545. * @Author TXF
  546. * @Date 2022/1/14 23:51
  547. * @param
  548. * @return
  549. **/
  550. @Transactional
  551. public int deleteOrders(Map<String, Object> map){
  552. List<BigDecimal> orderIdList = (List<BigDecimal>) map.get("list");
  553. omstruckOrderMapper.batchDelete(orderIdList);
  554. omstruckOrderMaterialMapper.batchByOrderIdDelete(orderIdList);
  555. omstruckOrderMaterialMapper.batchByOrderIdForTotalDelete(orderIdList);
  556. return orderIdList.size();
  557. }
  558. /**
  559. * 装卸工查询自己所有装了货的订单信息
  560. * @Author TXF
  561. * @Date 2022/1/15 17:07
  562. * @param map
  563. * @return
  564. **/
  565. public List<Map<String, Object>> getAllLoadUnloadResult(@RequestBody(required = false) Map<String, Object> map){
  566. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  567. map.put("limitTime", sdf.format(new Date(new Date().getTime() - 43200000)));
  568. List<Map<String, Object>> allLoaderLoadingOrder = omstruckOrderSeparateMapper.getAllLoaderLoadingOrder(map);
  569. return allLoaderLoadingOrder;
  570. }
  571. @Override
  572. public List<Map<String,Object>> getOrderMaterial(Integer orderId) {
  573. List<Map<String,Object>>maplist = omstruckOrderMaterialMapper.getOrderMaterial(orderId);
  574. for (Map<String,Object>map:maplist
  575. ) {
  576. if(map.get("materialModel") == null){
  577. String materialName = (String)map.get("materialName");
  578. String materialName1 = materialName.replace("()","");
  579. map.replace("materialName",materialName,materialName1);
  580. }
  581. }
  582. return maplist;
  583. }
  584. @Override
  585. public int closeInwardOrder(Integer orderId) {
  586. int i = omstruckOrderSeparateMapper.closeInwardOrder(orderId);
  587. //判断是否需要重新推单
  588. //根据运输订单id查找需求日期是否超过一个月
  589. Map<String, Object> map1 = omstruckOrderMapper.selectInwardTimeByOrderId(new BigDecimal(orderId));
  590. Date dueTime =(Date) map1.get("dueTime");
  591. //当前时间小于截至时间
  592. long DueTime = dueTime.getTime();
  593. //获取当前时间
  594. Date date=new Date();
  595. long nowTime = date.getTime();
  596. if (nowTime < DueTime){
  597. //推送
  598. i+=addNewTransportOrder(new BigDecimal(orderId));
  599. }
  600. return i;
  601. }
  602. }