OmstruckOrderSeparateServiceImpl.java 32 KB

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