OmstruckOrderSeparateServiceImpl.java 27 KB

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