OmstruckOrderSeparateServiceImpl.java 30 KB

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