OmstruckOrderSeparateServiceImpl.java 31 KB

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