OmstruckOrderSeparateServiceImpl.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  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){
  229. return getTimeOrderResult(resultTotalId);
  230. }else {
  231. return getNormalOrderResult(resultTotalId);
  232. }
  233. }
  234. /**
  235. * 查看正常实绩流程
  236. * @param resultTotalId
  237. * @return
  238. */
  239. public List<Map<String,Object>> getNormalOrderResult(BigDecimal resultTotalId) {
  240. List<Map<String,Object>> dataList = new ArrayList<>(20);
  241. dataList.addAll(omstruckOrderSeparateMapper.getTwoDateMes(resultTotalId));
  242. dataList.addAll(omstruckOrderSeparateMapper.getThreeDateMes(resultTotalId));
  243. dataList.addAll(omstruckOrderSeparateMapper.getFourDateMes(resultTotalId));
  244. //对列表中数据路段顺序号进行排序
  245. dataList.sort(new Comparator<Map<String, Object>>() {
  246. @Override
  247. public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  248. BigDecimal b1 = DataChange.dataToBigDecimal(o1.get("segmenSqe"));
  249. BigDecimal b2 = DataChange.dataToBigDecimal(o2.get("segmenSqe"));
  250. return b1.compareTo(b2);
  251. }
  252. });
  253. return dataList;
  254. }
  255. /**
  256. * 查询运输进程,通过实绩ID
  257. * @Author TXF
  258. * @Date 2022/2/18 16:46
  259. * @param resultTotalId
  260. * @return
  261. **/
  262. public List<Map<String, Object>> getAllOrderResult(BigDecimal resultTotalId){
  263. //通过总实绩ID查询所有的实绩:包括进厂、出厂、计重、装卸货
  264. List<Map<String, Object>> allMesList = new ArrayList<>(20);
  265. allMesList.addAll(omstruckOrderSeparateMapper.getAllEnOutFactoryResultMesByTotalId(resultTotalId));
  266. allMesList.addAll(omstruckOrderSeparateMapper.getAllLoadUnloadResultMesByTotalId(resultTotalId));
  267. allMesList.addAll(omstruckOrderSeparateMapper.getAllMaoPiWeightResultMesByTotalId(resultTotalId));
  268. //对列表中数据路段顺序号进行排序
  269. allMesList.sort(new Comparator<Map<String, Object>>() {
  270. @Override
  271. public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  272. BigDecimal b1 = DataChange.dataToBigDecimal(o1.get("segmenSqe"));
  273. BigDecimal b2 = DataChange.dataToBigDecimal(o2.get("segmenSqe"));
  274. return b1.compareTo(b2);
  275. }
  276. });
  277. return allMesList;
  278. }
  279. /**
  280. * 计时查看进程方法
  281. * @Author TXF
  282. * @Date 2022/3/18 10:33
  283. * @param resultTotalId
  284. * @return
  285. **/
  286. public List<Map<String, Object>> getTimeOrderResult(BigDecimal resultTotalId){
  287. List<Map<String, Object>> mapList = omstruckOrderSeparateMapper.getTimeOrderResult(resultTotalId);
  288. List<Map<String, Object>> returnMap = new ArrayList<>();
  289. if(mapList.size() == 0){
  290. return null;
  291. }else {
  292. int sqe = 1;
  293. for (Map<String, Object> mesMap : mapList) {
  294. int type = DataChange.dataToBigDecimal(mesMap.get("resultTimeType")).intValue();
  295. switch (type){
  296. case 0:
  297. mesMap.put("linkName", "达兴门岗时间");
  298. mesMap.put("segmenSqe", sqe ++);
  299. break;
  300. case 1:
  301. mesMap.put("linkName", "计时开始");
  302. mesMap.put("segmenSqe", sqe ++);
  303. break;
  304. case 3:
  305. mesMap.put("linkName", "计时结束");
  306. mesMap.put("segmenSqe", sqe ++);
  307. break;
  308. case 5:
  309. mesMap.put("linkName", "开始暂停计时");
  310. mesMap.put("segmenSqe", sqe ++);
  311. break;
  312. case 7:
  313. mesMap.put("linkName", "结束暂停计时");
  314. mesMap.put("segmenSqe", sqe ++);
  315. }
  316. returnMap.add(mesMap);
  317. }
  318. }
  319. return returnMap;
  320. }
  321. /**
  322. * 通过运输订单号查询实绩位置
  323. * @param orderNumber
  324. * @return
  325. */
  326. public List<Map<String, Object>> getOrderNumberResult(String orderNumber) {
  327. String substring = orderNumber.substring(0, orderNumber.length() - 1);
  328. BigDecimal orderId = omstruckOrderSeparateMapper.getOrderIdByOrderNumber(substring);
  329. List<Map<String, Object>> orderResult = getOrderResult(orderId);
  330. return orderResult;
  331. }
  332. /**
  333. * 查看承运商所属的订单
  334. * @param mapValue
  335. * @return
  336. */
  337. @Override
  338. public List<Map<String, Object>> getInputOrderList(Map<String, Object> mapValue) {
  339. return omstruckOrderSeparateMapper.getInputOrderList(mapValue);
  340. }
  341. /**
  342. * 查询所有的未下发的需要分配车辆的订单
  343. * @param map
  344. * @return
  345. */
  346. public List<Map<String, Object>> getOthersOrderMesToSend(Map<String, Object> map){
  347. return omstruckOrderSeparateMapper.getOthersOrderMesToSend(map);
  348. }
  349. /**
  350. * 根据运输订单id修改运力id
  351. * @param omstruckOrder
  352. * @return
  353. */
  354. @Override
  355. public int updateOmstruckOrder(OmstruckOrder omstruckOrder) {
  356. return omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  357. }
  358. //根据运输订单号查物资
  359. @Override
  360. public List<Map<String,Object>> getUnloadOrderMaterial(Map<String, Object> map) {
  361. return omstruckOrderMaterialMapper.getUnloadOrderMaterial(map);
  362. }
  363. /**
  364. * 承运商销售分派运输订单给司机
  365. * @param mapValue
  366. * @return
  367. */
  368. @Override
  369. public Integer addSaleTruckOrder(Map<String, Object> mapValue) {
  370. // Integer orderType = (Integer) mapValue.get("orderType");
  371. Integer lineId = (Integer) mapValue.get("lineId");
  372. // 根据lineId查询是否是钢材
  373. BigDecimal isSteel = omstruckOrderMapper.getIsSteel(new BigDecimal(lineId));
  374. BigDecimal dispatchId = DataChange.dataToBigDecimal(mapValue.get("dispatchId"));
  375. //通过定向派单ID查询车序号表中的priceId 价格ID
  376. BigDecimal priceId = omstruckOrderMapper.getPriceIdByDispatchId(dispatchId);
  377. String capacityNumber = (String) mapValue.get("capacityNumber");
  378. OmstruckOrder omstruckOrder = new OmstruckOrder();
  379. omstruckOrder.setPriceId(priceId);
  380. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  381. Map<String,Object> orderIdMap = new HashMap<>();
  382. orderIdMap.put("orderId",orderId);
  383. tmsTruckFeign.addTotalResult(orderIdMap);
  384. omstruckOrder.setOrderId(orderId);
  385. BigDecimal saleOrderMaterialId = omstruckOrderMapper.getSaleMaterialId(dispatchId);
  386. // 查询销售订单中是物资重量还是件数
  387. List<Map<String, Object>> materialMapList = omstruckOrderSeparateMapper.getWeightOrNumber(saleOrderMaterialId);
  388. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  389. String orderNumber = DataChange.generateEightDigitsNumber("WYSDD", orderId.intValue());
  390. omstruckOrder.setOrderNumber(orderNumber);
  391. omstruckOrder.setLineId(new BigDecimal(lineId));
  392. omstruckOrder.setOrderIssueTime(new Date());
  393. // 如果线路类型为3或者4(危化品和焦炭)则为非钢材
  394. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  395. omstruckOrder.setOrderType(new BigDecimal(2));
  396. }
  397. // 否则为钢材
  398. else {
  399. omstruckOrder.setOrderType(new BigDecimal(1));
  400. }
  401. omstruckOrder.setOrderStatus(new BigDecimal(4));
  402. omstruckOrder.setInsertTime(new Date());
  403. omstruckOrder.setUpdateTime(new Date());
  404. omstruckOrder.setInsertUsername("admin");
  405. omstruckOrder.setUpdateUsername("admin");
  406. omstruckOrder.setInsertUpdateRemark("无");
  407. omstruckOrder.setDeleted(new BigDecimal(0));
  408. BigDecimal capacityId = omstruckOrderMapper.getCapacityId(capacityNumber);
  409. omstruckOrder.setCapacityId(capacityId);
  410. List<Map<String, Object>> mapList = omstruckOrderMapper.getMaterialMessages(dispatchId);
  411. if (mapList != null && mapList.size() != 0) {
  412. for (Map<String, Object> map : mapList) {
  413. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  414. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  415. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  416. omstruckOrderMaterial.setOrderId(orderId);
  417. omstruckOrderMaterial.setInsertTime(new Date());
  418. omstruckOrderMaterial.setUpdateTime(new Date());
  419. omstruckOrderMaterial.setInsertUsername("admin");
  420. omstruckOrderMaterial.setUpdateUsername("admin");
  421. omstruckOrderMaterial.setInsertUpdateRemark("无");
  422. if (map != null) {
  423. BigDecimal saleOrderMaterialNumber = (BigDecimal) map.get("saleOrderMaterialNumber");
  424. BigDecimal materialId = (BigDecimal) map.get("materialId");
  425. omstruckOrderMaterial.setMaterialId(materialId);
  426. // 判断是重量还是件数
  427. if (materialMapList != null) {
  428. BigDecimal saleMaterialNumber = (BigDecimal) materialMapList.get(0).get("materialNumber");
  429. if (saleMaterialNumber != null && saleMaterialNumber.toString().length() != 0) {
  430. omstruckOrderMaterial.setOrderMaterialNumber(saleOrderMaterialNumber);
  431. }
  432. else {
  433. omstruckOrderMaterial.setOrderMaterialWeight(saleOrderMaterialNumber);
  434. }
  435. }
  436. }
  437. omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  438. }
  439. }
  440. int result = omstruckOrderMapper.insertSelective(omstruckOrder);
  441. // 调用websocket推送数据给司机
  442. pushMesToWebsocket(orderIdMap);
  443. return result;
  444. }
  445. @Override
  446. public int updateTimes(BigDecimal orderPlanId, int times) {
  447. return omstruckOrderSeparateMapper.updateTimes(orderPlanId, times);
  448. }
  449. /**
  450. * 根据运单id关闭运输订单
  451. * @param orderId
  452. * @return
  453. */
  454. @Override
  455. public int closeOrder(Integer orderId) {
  456. OmstruckOrder omstruckOrder = new OmstruckOrder();
  457. omstruckOrder.setOrderId(new BigDecimal(orderId));
  458. omstruckOrder.setOrderStatus(new BigDecimal(8));
  459. int result = omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  460. return result;
  461. }
  462. /**
  463. * @Author TXF
  464. * @Date 2021/12/30 16:15
  465. * @param capacityNumber 车牌号
  466. * @return 查询当前车辆之前所有已完成的订单号 以及 订单ID
  467. **/
  468. public List<Map<String, Object>> getCapacityAllOrder(Map<String,Object>map){
  469. return omstruckOrderSeparateMapper.getCapacityAllOrder(map);
  470. }
  471. // @Override
  472. // public int updateTimes(BigDecimal orderPlanId, int times) {
  473. // return omstruckOrderSeparateMapper.updateTimes(orderPlanId,times);
  474. // }
  475. /**
  476. * 根据运单id查询出所有销售数据
  477. * @param orderId
  478. * @return
  479. */
  480. @Override
  481. public Map<String, Object> getSaleAllMessages(BigDecimal orderId) {
  482. // 销售订单id
  483. Map<String,Object> mapValue = omstruckOrderSeparateMapper.getSaleAllMessages(orderId);
  484. BigDecimal saleOrderId = (BigDecimal) mapValue.get("saleOrderId");
  485. // 车序号
  486. List<Map<String, Object>> truckList = omstruckOrderSeparateMapper.getMaxTruckNo(saleOrderId);
  487. Map<String, Object> map = truckList.get(0);
  488. mapValue.putAll(map);
  489. // mapList中的数据
  490. List<Map<String,Object>> mapList = omstruckOrderSeparateMapper.getMapList(orderId);
  491. mapValue.put("mapList",mapList);
  492. return mapValue;
  493. }
  494. /**
  495. * 新增一个新的运输订单(一车多趟)
  496. * @Author TXF
  497. * @Date 2022/1/14 21:10
  498. * @param orderId
  499. * @return
  500. **/
  501. public int addNewTransportOrder(BigDecimal orderId){
  502. //根据运输订单ID查询 订单信息
  503. OmstruckOrder omstruckOrder = omstruckOrderMapper.selectByPrimaryKey(orderId);
  504. BigDecimal newOrderId = updateTruckOrder(omstruckOrder);
  505. omstruckOrderMapper.insertSelective(omstruckOrder);
  506. //通过订单ID查询物资子表信息
  507. OmstruckOrderMaterial omstruckOrderMaterial = omstruckOrderMaterialMapper.selectByOrderIdPrimaryKey(orderId);
  508. //更新物资子表中的订单ID
  509. omstruckOrderMaterial.setOrderId(newOrderId);
  510. updateTruckOrderMaterial(omstruckOrderMaterial);
  511. omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  512. //远程调用新增新的总实绩ID
  513. Map<String, Object> map = new HashMap<>();
  514. map.put("orderId", newOrderId);
  515. tmsTruckFeign.addTotalResult(map);
  516. return 1;
  517. }
  518. /**
  519. * 批量关闭运输订单
  520. * @param mapList
  521. * @return
  522. */
  523. @Override
  524. public int batchCloseOrder(List<Map<String, Object>> mapList) {
  525. int result = 0;
  526. // 遍历主键
  527. for (Map<String, Object> map : mapList) {
  528. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  529. OmstruckOrder omstruckOrder = new OmstruckOrder();
  530. omstruckOrder.setOrderId(orderId);
  531. omstruckOrder.setOrderStatus(new BigDecimal(7));
  532. result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  533. }
  534. return result;
  535. }
  536. /**
  537. * 更新新订单信息 (一车多趟)
  538. * @Author TXF
  539. * @Date 2022/1/14 21:35
  540. * @param omstruckOrder
  541. * @return
  542. **/
  543. private BigDecimal updateTruckOrder(OmstruckOrder omstruckOrder){
  544. //设置新的运输订单号和主键
  545. BigDecimal newOrderId = omstruckOrderMapper.selectMaxId();
  546. omstruckOrder.setOrderId(newOrderId);
  547. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD", newOrderId.intValue()));
  548. //设置订单状态为已下发 司机未接收时间 路段顺序号 订单确认状态
  549. omstruckOrder.setOrderStatus(new BigDecimal(4));
  550. Date nowDate = new Date();
  551. omstruckOrder.setOrderIssueTime(nowDate);
  552. omstruckOrder.setOrderLineSequence(null);
  553. omstruckOrder.setOrderReceiveRefuseTime(null);
  554. omstruckOrder.setDriverConfirmation(null);
  555. omstruckOrder.setOrderEntryTime(new Date(nowDate.getTime() + 7200000));//一车多趟预估进厂时间以当前时间往后推俩小时
  556. //常规字段
  557. omstruckOrder.setInsertTime(nowDate);
  558. omstruckOrder.setInsertUsername("admin");
  559. omstruckOrder.setUpdateTime(null);
  560. omstruckOrder.setUpdateUsername(null);
  561. return newOrderId; //用于更新订单子表信息
  562. }
  563. /**
  564. * 更新订单物资子表信息 (一车多趟)
  565. * @Author TXF
  566. * @Date 2022/1/14 21:40
  567. * @param
  568. * @return
  569. **/
  570. private void updateTruckOrderMaterial(OmstruckOrderMaterial omstruckOrderMaterial){
  571. //更新主键 以及常规字段
  572. omstruckOrderMaterial.setOrderMaterialId(omstruckOrderMaterialMapper.selectMaxId());
  573. omstruckOrderMaterial.setMaterialMeassion(null);
  574. omstruckOrderMaterial.setInsertTime(new Date());
  575. omstruckOrderMaterial.setInsertUsername("admin");
  576. omstruckOrderMaterial.setUpdateTime(null);
  577. omstruckOrderMaterial.setUpdateUsername(null);
  578. }
  579. /**
  580. * 批量删除订单
  581. * @Author TXF
  582. * @Date 2022/1/14 23:51
  583. * @param
  584. * @return
  585. **/
  586. @Transactional
  587. public int deleteOrders(Map<String, Object> map){
  588. List<BigDecimal> orderIdList = (List<BigDecimal>) map.get("list");
  589. omstruckOrderMapper.batchDelete(orderIdList);
  590. omstruckOrderMaterialMapper.batchByOrderIdDelete(orderIdList);
  591. omstruckOrderMaterialMapper.batchByOrderIdForTotalDelete(orderIdList);
  592. return orderIdList.size();
  593. }
  594. /**
  595. * 装卸工查询自己所有装了货的订单信息
  596. * @Author TXF
  597. * @Date 2022/1/15 17:07
  598. * @param map
  599. * @return
  600. **/
  601. public List<Map<String, Object>> getAllLoadUnloadResult(@RequestBody(required = false) Map<String, Object> map){
  602. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  603. map.put("limitTime", sdf.format(new Date(new Date().getTime() - 43200000)));
  604. List<Map<String, Object>> allLoaderLoadingOrder = omstruckOrderSeparateMapper.getAllLoaderLoadingOrder(map);
  605. return allLoaderLoadingOrder;
  606. }
  607. @Override
  608. public List<Map<String,Object>> getOrderMaterial(Integer orderId) {
  609. List<Map<String,Object>>maplist = omstruckOrderMaterialMapper.getOrderMaterial(orderId);
  610. for (Map<String,Object>map:maplist
  611. ) {
  612. if(map.get("materialModel") == null){
  613. String materialName = (String)map.get("materialName");
  614. String materialName1 = materialName.replace("()","");
  615. map.replace("materialName",materialName,materialName1);
  616. }
  617. }
  618. return maplist;
  619. }
  620. @Override
  621. public int closeInwardOrder(Integer orderId, Integer sqe, String resultNetWeight) {
  622. int i = omstruckOrderSeparateMapper.closeInwardOrder(orderId, sqe);
  623. Map<String, Object> map = omstruckOrderMapper.selectInwardTimeByOrderId(new BigDecimal(orderId));
  624. //根据运输订单id查找需求日期是否超过一个月
  625. if (map != null && i != 0) {
  626. if (DataChange.dataToBigDecimal(map.get("orderType")).intValue() == 11) {
  627. Date dueDate = (Date) map.get("dueTime");
  628. //当前时间小于截至日期
  629. long DueTime = dueDate.getTime() + 86400000;
  630. //获取当前时间
  631. Date date = new Date();
  632. long nowTime = date.getTime();
  633. if (nowTime < DueTime) {
  634. //推送
  635. i += addNewTransportOrder(new BigDecimal(orderId));
  636. }
  637. }
  638. if (DataChange.dataToBigDecimal(map.get("orderType")).intValue() == 15 || DataChange.dataToBigDecimal(map.get("orderType")).intValue() == 16) {
  639. Integer planEnableStatus = DataChange.dataToBigDecimal(map.get("planEnableStatus")).intValue();
  640. if (planEnableStatus == 1) {
  641. //推送
  642. i += addNewTransportOrder(new BigDecimal(orderId));
  643. }
  644. }
  645. }
  646. //根据订单ID查找需求里面的承运范围和物资ID、物资品类ID
  647. try {
  648. Map<String,Object> priceMap = omstruckOrderSeparateMapper.getPriceInfo(orderId);
  649. Map<String,Object> priceValueMap = null;
  650. if(priceMap != null){
  651. priceValueMap = amsFeign.getInwardPriceBy(priceMap);
  652. }
  653. if(priceValueMap != null){
  654. priceValueMap.put("netWeight", resultNetWeight);
  655. priceValueMap.put("orderId",orderId);
  656. RESTfulResult resTfulResult = bmsTruckFeign.addDetailsOrder(priceValueMap);
  657. }
  658. } catch (Exception e) {
  659. e.printStackTrace();
  660. System.out.println(e.getMessage());
  661. }
  662. return i;
  663. }
  664. //根据用户id和运输订单号查找已经计时完成的订单
  665. @Override
  666. public List<Map<String, Object>> getTimeTaskEnd(Map<String, Object> map) {
  667. List<Map<String, Object>> getTimeTaskEndOrder = omstruckOrderSeparateMapper.getTimeTaskEndOrder(map);
  668. return getTimeTaskEndOrder;
  669. }
  670. //根据运输订单号查找运输订单详情
  671. @Override
  672. public List<Map<String, Object>> getTimeTaskEndDetail(Map<String, Object> map) {
  673. List<Map<String,Object>> mapList=omstruckOrderMapper.getTimeTaskEndDetail(map);
  674. return mapList;
  675. }
  676. @Override
  677. public List<Map<String,Object>> getUnloadOrderWarehouseName(Map<String, Object> map) {
  678. return omstruckOrderMaterialMapper.getUnloadOrderWarehouseName(map);
  679. }
  680. //展示暂停总时长
  681. @Override
  682. public List<Map<String, Object>> getPauseTimeTaskDetail(Integer orderId) {
  683. return omstruckOrderMapper.getPauseTimeTaskDetail(orderId);
  684. }
  685. @Override
  686. public List<Map<String, Object>> getLoadForLoadCarResult(Map<String, Object> map) {
  687. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  688. map.put("limitTime", sdf.format(new Date(new Date().getTime() - 43200000)));
  689. String userId =(String) map.get("userId");
  690. String userName = rmsCapacityMapper.selectCapacityNumber(userId);
  691. map.put("userName",userName);
  692. return omstruckOrderMapper.getLoadForLoadCarResult(map);
  693. }
  694. @Override
  695. public Integer getCapacityTypeByUserId(Map<String, Object> map) {
  696. String userId =(String) map.get("userId");
  697. BigDecimal capacityType = rmsCapacityMapper.getCapacityTypeByUserId(userId);
  698. if(capacityType != null){
  699. return capacityType.intValue();
  700. }else{
  701. return -1;
  702. }
  703. }
  704. /**
  705. * Notes:取消装剩余物资
  706. * @Author: TXF
  707. * @DateTime: 2022/3/24 18:53
  708. */
  709. public int cancelLoadMaterialBySteel(BigDecimal orderId){
  710. //将路段顺序号置为路线最大路段顺序号-1:直接到出厂阶段
  711. return omstruckOrderSeparateMapper.cancelLoadMaterialBySteel(orderId);
  712. }
  713. }