QmsQueueResultServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.IMFeign;
  3. import com.steerinfo.dil.mapper.QmsQueueListMapper;
  4. import com.steerinfo.dil.mapper.QueueInterfaceMapper;
  5. import com.steerinfo.dil.mapper.QueuingRulesMapper;
  6. import com.steerinfo.dil.model.QmsQueueList;
  7. import com.steerinfo.dil.util.DataChange;
  8. import com.steerinfo.dil.model.QmsQueueResult;
  9. import com.steerinfo.dil.mapper.QmsQueueResultMapper;
  10. import com.steerinfo.dil.service.IQmsQueueResultService;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.util.*;
  14. import java.math.BigDecimal;
  15. /**
  16. * QmsQueueResult服务实现:
  17. * @author generator
  18. * @version 1.0-SNAPSHORT 2021-09-14 11:27
  19. * 类描述
  20. * 修订历史:
  21. * 日期:2021-09-14
  22. * 作者:generator
  23. * 参考:
  24. * 描述:QmsQueueResult服务实现
  25. * @see null
  26. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  27. */
  28. @Service(value = "qmsQueueResultService")
  29. public class QmsQueueResultServiceImpl implements IQmsQueueResultService {
  30. @Autowired
  31. private QmsQueueResultMapper qmsQueueResultMapper;
  32. @Autowired
  33. private QmsQueueListMapper qmsQueueListMapper;
  34. @Autowired
  35. QueueInterfaceServiceImpl queueInterfaceService;
  36. @Autowired
  37. private QmsQueueGridServiceImpl qmsQueueGridService;
  38. @Autowired
  39. private QueuingRulesMapper queuingRulesMapper;
  40. @Autowired
  41. private IMFeign imFeign;
  42. @Autowired
  43. private QueueInterfaceMapper queueInterfaceMapper;
  44. /**
  45. * 取消订阅方法
  46. */
  47. public void cancelSub(String capacityNumber){
  48. Map<String, Object> map = new HashMap<>();
  49. map.put("capacityNumber", capacityNumber.split("_")[0] + "_2");
  50. int j = queueInterfaceService.cancelSubsCapacity(map, 0);
  51. if(j == -1){
  52. System.out.println("取消订阅失败");
  53. }else if(j == -2){
  54. System.out.println("超过递归次数,取消订阅失败");
  55. }else if(j == 1){
  56. //修改订阅表 表示已取消订阅
  57. queueInterfaceMapper.cancelSubCapacity(capacityNumber.split("_")[0]);
  58. }
  59. }
  60. /**
  61. * 特殊情况 查询是否订阅过 如订阅过则需要取消订阅
  62. */
  63. public void judgeCancelSub(String capacityNumber){
  64. //查询订阅表是否已经订阅过如订阅过则取消订阅
  65. Integer subCapacityId = queueInterfaceMapper.getSubCapacity(capacityNumber.split("_")[0]);
  66. if(subCapacityId != null){
  67. cancelSub(capacityNumber);
  68. }
  69. }
  70. /**
  71. * 新增进厂排队实绩
  72. * @param capacityNumber 车牌号
  73. * @return
  74. */
  75. @Override
  76. public int addQueueResult(String capacityNumber, String isPDA) {
  77. //获取传入的车牌号查找最近的运输订单号
  78. Map<String, Object> mesMap = queuingRulesMapper.getOrderNumberByCapacityNumber(capacityNumber.split("_")[0]);
  79. if(mesMap == null){
  80. judgeCancelSub(capacityNumber); //判断是否需要取消订阅
  81. return -1;
  82. }else{
  83. if(DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue() != 1){
  84. judgeCancelSub(capacityNumber); //判断是否需要取消订阅
  85. return -3; //非钢材订单不添加排队
  86. }
  87. String insertUpdateRemark = String.valueOf(mesMap.get("insertUpdateRemark"));
  88. if("电子围栏订阅成功".equals(insertUpdateRemark)){
  89. //如果是电子围栏调用,并且订阅成功了,则取消订阅
  90. cancelSub(capacityNumber);
  91. }
  92. }
  93. Integer resultId = queuingRulesMapper.checkoutQQR(mesMap.get("resultTotalId"));
  94. if(resultId != null){ //预防重复新增排队
  95. return -2;
  96. }
  97. QmsQueueResult qmsQueueResult = new QmsQueueResult();
  98. qmsQueueResult.setId(qmsQueueResultMapper.selectMaxId());
  99. qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(mesMap.get("resultTotalId")));
  100. int materialNum = DataChange.dataToBigDecimal(mesMap.get("materialNum")).intValue();
  101. BigDecimal grid;
  102. if(materialNum == 1){
  103. BigDecimal orderId = DataChange.dataToBigDecimal(mesMap.get("orderId"));
  104. //单拼添加仓储网格ID 、 通过物资Id查询网格ID
  105. grid = qmsQueueResultMapper.getGridIdByOrderId(orderId);
  106. if(grid == null){
  107. //新增一个仓储网格实绩 通过订单查询物资ID
  108. Integer materialId = qmsQueueResultMapper.getMaterialIdByOrderId(orderId);
  109. grid = qmsQueueGridService.addQQR(materialId);
  110. }
  111. qmsQueueResult.setGridId(grid);
  112. qmsQueueResult.setIsSpelling(new BigDecimal(0));
  113. }else {
  114. qmsQueueResult.setGridId(new BigDecimal(materialNum));
  115. qmsQueueResult.setIsSpelling(new BigDecimal(1));
  116. }
  117. //添加排队实绩表
  118. qmsQueueResult.setResultApplyforTime(new Date());
  119. //系统自动下发 添加下发时间
  120. qmsQueueResult.setResultDownTime(new Date());
  121. qmsQueueResult.setCapacityId(DataChange.dataToBigDecimal(mesMap.get("capacityId")));
  122. qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(mesMap.get("resultTotalId")));
  123. qmsQueueResult.setInsertTime(new Date());
  124. qmsQueueResult.setInsertUsername("admin");
  125. return qmsQueueResultMapper.insertSelective(qmsQueueResult);
  126. }
  127. /**
  128. * 司机通过订单ID查询当前订单的排队实绩
  129. * @param resultTotalId
  130. * @return
  131. */
  132. public Map<String, Object> getQueueResultByTotalId(String resultTotalId){
  133. Map<String,Object> map = qmsQueueResultMapper.getQueueResultByOrderId(new BigDecimal(resultTotalId));
  134. if(map == null){
  135. return new HashMap<>();
  136. }
  137. //是否拼装
  138. int isSpelling = DataChange.dataToBigDecimal(map.get("isSpelling")).intValue();
  139. if(map.get("resultEndTime") != null){ //司机已排队结束
  140. //计算排队时长
  141. Date startTime = (Date) map.get("resultStartTime");
  142. Date endTime = (Date) map.get("resultEndTime");
  143. long differentTime = (endTime.getTime() - startTime.getTime()) / 60000;
  144. map.put("differentTime", differentTime + " 分钟");
  145. map.put("status", 3);
  146. }else if(map.get("resultStartTime") != null){
  147. //排队开始
  148. Integer num;
  149. Date startTime = (Date) map.get("resultStartTime");
  150. long differentTime = (System.currentTimeMillis() - startTime.getTime()) / 60000;
  151. map.put("differentTime", differentTime + " 分钟");
  152. if(isSpelling == 0){
  153. num = qmsQueueListMapper.getListSequenceNumber(map); //当前队列排队人数
  154. }else {
  155. num = qmsQueueListMapper.getSpellingSequenceNumber(map); //当前多拼队列排队人数
  156. }
  157. map.put("orderSeqNum", num);
  158. map.put("status", 2);
  159. }else {
  160. //还未排队
  161. Integer num;
  162. if(isSpelling == 0){
  163. num = qmsQueueListMapper.getListGridNumber(map); //当前单拼网格排队人数
  164. }else {
  165. num = qmsQueueListMapper.getSpellingGridNumber(map); //当前多拼网格排队人数
  166. }
  167. map.put("gridSeqNum", num);
  168. map.put("status", 1);
  169. }
  170. return map;
  171. }
  172. /**
  173. * 查询排队申请
  174. * @param map
  175. * @return
  176. */
  177. @Override
  178. public List<Map<String, Object>> getQueueApply(Map<String, Object> map) {
  179. return qmsQueueResultMapper.getQueueApply(map);
  180. }
  181. /**
  182. * 查询排队开始 数据
  183. * 可用 gridId 网格ID
  184. * @param map
  185. * @return
  186. */
  187. @Override
  188. public List<Map<String, Object>> getQueueListByQueueUp(Map<String, Object> map) {
  189. return qmsQueueResultMapper.getQueueListByQueueUp(map);
  190. }
  191. public List<Map<String, Object>> getQueueListByQueueUpSpelling(Map<String, Object> map) {
  192. return qmsQueueResultMapper.getQueueListByQueueUpSpelling(map);
  193. }
  194. /**
  195. * 查询排队取消数据
  196. * @param map
  197. * @return
  198. */
  199. @Override
  200. public List<Map<String, Object>> getQueueCancel(Map<String, Object> map) {
  201. return qmsQueueResultMapper.getQueueCancel(map);
  202. }
  203. /**
  204. * 查询排队结束
  205. * @param map
  206. * @return
  207. */
  208. @Override
  209. public List<Map<String, Object>> getQueueEndResult(Map<String, Object> map) {
  210. return qmsQueueResultMapper.getQueueEndResult(map);
  211. }
  212. /**
  213. * 新增仓库排队实绩
  214. * @param map orderNumber运输订单号 loadingId 装车点
  215. * @return
  216. */
  217. // public int addQueueResultByCk(Map<String, Object> map){
  218. // QmsQueueResult qmsQueueResult = new QmsQueueResult();
  219. // //生成主键
  220. // qmsQueueResult.setId(qmsQueueResultMapper.selectMaxId());
  221. // //获取添加网格Id
  222. // map.put("queueLocationId", map.get("loadingId"));
  223. // map.put("gridType", 1);
  224. // BigDecimal gridId = queuingRulesService.getGridIdByGatepostIdAndGridType(map);
  225. // qmsQueueResult.setGridId(gridId);
  226. // //通过运输订单号查询实绩ID 等数据
  227. // map.putAll(qmsQueueResultMapper.queryCIdAndTIdByOrderNumber((String) map.get("orderNumber")));
  228. // qmsQueueResult.setResultApplyforTime(new Date());
  229. // //系统自动下发 添加下发时间
  230. // qmsQueueResult.setResultDownTime(new Date());
  231. // //添加运力ID和总实绩ID
  232. // qmsQueueResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId")));
  233. // qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  234. // qmsQueueResult.setInsertTime(new Date());
  235. // qmsQueueResult.setInsertUsername("admin");
  236. // pushCKMesToWebSocket(DataChange.dataToBigDecimal(map.get("orderId")).intValue(), gridId.intValue());
  237. // return qmsQueueResultMapper.insertSelective(qmsQueueResult);
  238. // }
  239. /**
  240. * 推送仓库排队消息到websocket
  241. */
  242. // public void pushCKMesToWebSocket(Integer orderId, Integer gridId){
  243. // //通过运输订单ID查询推送给司机的数据
  244. // Map<String, Object> mesMap = qmsQueueResultMapper.sendWarehouseMesToWebSocket(orderId);
  245. // mesMap.putAll(qmsQueueResultMapper.queryWarehouseNameByPlatformId(gridId));
  246. // HashMap<String, Object> sendMap = new HashMap<>();
  247. // sendMap.put("messageType", 2);
  248. // sendMap.put("receivePerson", mesMap.get("capacityNumber"));
  249. // sendMap.put("sendPerson", "system");
  250. // sendMap.put("messageContent", mesMap);
  251. // sendMap.put("createTime", new Date());
  252. // ArrayList<Object> list = new ArrayList<>();
  253. // list.add(sendMap);
  254. // HashMap<Object, Object> map = new HashMap<>();
  255. // map.put("messages", list);
  256. // //调用websocket接口
  257. // String s = imFeign.sendToUser(map);
  258. // System.out.println(s);
  259. // }
  260. /**
  261. * 查看排队转移界面
  262. * @param map
  263. * @return
  264. */
  265. // @Override
  266. // public List<Map<String, Object>> getChangeQueueMes(Map<String, Object> map) {
  267. // return qmsQueueResultMapper.getChangeQueueMes(map);
  268. // }
  269. /**
  270. * 查询执行中运单
  271. * @param map
  272. * @return
  273. */
  274. // @Override
  275. // public List<Map<String, Object>> getAllExecutionOrder(Map<String, Object> map) {
  276. // return qmsQueueResultMapper.getAllExecutionOrder(map);
  277. // }
  278. /**
  279. * 查询指令接收 判断条件:是否有排队结束时间
  280. * @param map
  281. * @return
  282. */
  283. // @Override
  284. // public List<Map<String, Object>> orderReceive(Map<String, Object> map) {
  285. // Integer queueType = (Integer) map.get("queueType");
  286. // List<Map<String, Object>> orderReceiveList = null;
  287. // switch (queueType){
  288. // case 1: //进厂
  289. // orderReceiveList = qmsQueueResultMapper.getOrderReceive(map);
  290. // break;
  291. // case 2: //仓库
  292. // orderReceiveList = qmsQueueResultMapper.getWarehouseOrderReceive(map);
  293. // }
  294. // //遍历数据 通过是否有接收时间 来判断是否接收
  295. // for (Map<String, Object> orderReceiveMap : orderReceiveList) {
  296. // if(orderReceiveMap.get("resultAcceptTime") != null){
  297. // orderReceiveMap.put("isReceive", "是");
  298. // }else {
  299. // orderReceiveMap.put("isReceive", "否");
  300. // }
  301. // }
  302. // return orderReceiveList;
  303. // }
  304. /**
  305. * 查询排队详情
  306. * @param map
  307. * @return
  308. */
  309. // @Override
  310. // public List<Map<String, Object>> getQueueMes(Map<String, Object> map) {
  311. // return qmsQueueResultMapper.getQueueMes(map);
  312. // }
  313. /**
  314. * 通过实绩ID查询排队取消信息
  315. * @param resultId
  316. * @return
  317. */
  318. // @Override
  319. // public List<Map<String, Object>> getQueueCancelByResultId(Integer resultId) {
  320. // return qmsQueueResultMapper.getQueueCancelByResultId(resultId);
  321. // }
  322. /**
  323. * 修改排队取消实绩
  324. * @param qmsQueueResult
  325. * @return
  326. */
  327. // @Override
  328. // public int updateQueueCancel(QmsQueueResult qmsQueueResult) {
  329. // qmsQueueResult.setUpdateTime(new Date());
  330. // qmsQueueResult.setUpdateUsername("admin");
  331. // return qmsQueueResultMapper.updateByPrimaryKeySelective(qmsQueueResult);
  332. // }
  333. /**
  334. * 查询排队插队
  335. * @return
  336. */
  337. // @Override
  338. // public List<Map<String, Object>> getQueueInsert(Map<String, Object> map) {
  339. // return qmsQueueResultMapper.getQueueInsert(map);
  340. // }
  341. /**
  342. * 汽车监控
  343. * @param map
  344. * @return
  345. */
  346. // @Override
  347. // public List<Map<String, Object>> capacityMonitor(Map<String, Object> map) {
  348. // List<Map<String, Object>> list = qmsQueueResultMapper.capacityMonitor(map);
  349. // for (Map<String, Object> capacityMap : list) {
  350. // //如果结束时间为空 排队总时长为
  351. // if(capacityMap.get("resultEndTime") == null){
  352. // Date date1 = (Date) capacityMap.get("resultStartTime");
  353. // Date date2;
  354. // if(capacityMap.get("resultCancelTime") != null){ //如果取消排队了则以取消排队时间为结束时间
  355. // date2 = (Date) capacityMap.get("resultCancelTime");
  356. // }else {
  357. // date2 = new Date();
  358. // }
  359. // long differenceTime = (date2.getTime() - date1.getTime()) / 60000;
  360. // capacityMap.put("resultQueueAllTime", differenceTime + "min");
  361. // }else {
  362. // //否则排队时长为结束时长 - 申请时长
  363. // Date date1 = (Date)capacityMap.get("resultStartTime");
  364. // Date date2 = (Date)capacityMap.get("resultEndTime");
  365. // long differenceTime = (date2.getTime() - date1.getTime()) / 60000;
  366. // capacityMap.put("resultQueueAllTime",differenceTime + "min");
  367. // }
  368. // }
  369. // return list;
  370. // }
  371. //=========================================仓库排队===========================================
  372. /**
  373. * 查看仓库排队申请
  374. * @param map
  375. * @return
  376. */
  377. // @Override
  378. // public List<Map<String, Object>> getWarehouseQueueApply(Map<String, Object> map) {
  379. // return qmsQueueResultMapper.getWarehouseQueueApply(map);
  380. // }
  381. /**
  382. * 查看排队开始
  383. * @param map
  384. * @return
  385. */
  386. // @Override
  387. // public List<Map<String, Object>> getWarehouseQueueListByQueueUp(Map<String, Object> map) {
  388. // return qmsQueueResultMapper.getWarehouseQueueListByQueueUp(map);
  389. // }
  390. /**
  391. * 查看仓库排队详情 通过运输订单号查询仓库
  392. * @param map
  393. * @return
  394. */
  395. // @Override
  396. // public List<Map<String, Object>> getWarehouseQueueMes(Map<String, Object> map) {
  397. // return qmsQueueResultMapper.getWarehouseQueueMes(map);
  398. // }
  399. /**
  400. * 查询仓库排队转移详情
  401. * @param map
  402. * @return
  403. */
  404. // @Override
  405. // public List<Map<String, Object>> getWarehouseQueueChange(Map<String, Object> map) {
  406. // return qmsQueueResultMapper.getWarehouseQueueChange(map);
  407. // }
  408. /**
  409. * 查询仓库排队结束
  410. * @param map
  411. * @return
  412. */
  413. // @Override
  414. // public List<Map<String, Object>> getWarehouseQueueEndMes(Map<String, Object> map) {
  415. // return qmsQueueResultMapper.getWarehouseQueueEndMes(map);
  416. // }
  417. //********************************APP*********************************************
  418. /**
  419. * 根据车牌号查询排队下发
  420. * @param capacityNumber
  421. * @return
  422. */
  423. // @Override
  424. // public List<Map<String, Object>> getOrderReceive2(String capacityNumber) {
  425. // BigDecimal gridId = getGridId(capacityNumber);
  426. // if (gridId == null) {
  427. // List<Map<String,Object>> mapList = new ArrayList<>();
  428. // return mapList;
  429. // }
  430. // Map<String,Object> map = new HashMap<>();
  431. // map.put("capacityNumber",capacityNumber);
  432. // map.put("gridId",gridId);
  433. // List<Map<String, Object>> orderReceive = qmsQueueResultMapper.getOrderReceive2(map);
  434. // return orderReceive;
  435. // }
  436. /**
  437. * 排队取消
  438. * @param mapValue
  439. * @return
  440. */
  441. // @Override
  442. // public int cancelQueue(Map<String,Object> mapValue) {
  443. // String capacityNumber = (String) mapValue.get("capacityNumber");
  444. // String resultCancelReason = (String) mapValue.get("resultCancelReason");
  445. // BigDecimal resultId = qmsQueueResultMapper.getResultIdByCapacityId(capacityNumber);
  446. // QmsQueueResult qmsQueueResult = qmsQueueResultMapper.selectByPrimaryKey(resultId);
  447. // Map<String, Object> listIdMap = qmsQueueResultMapper.getListIdByResultId(resultId);
  448. // BigDecimal listId = (BigDecimal) listIdMap.get("listId");
  449. // QmsQueueList qmsQueueList = qmsQueueListMapper.selectByPrimaryKey(listId);
  450. // qmsQueueResult.setResultCancelTime(new Date());
  451. // qmsQueueResult.setResultCancelReason(resultCancelReason);
  452. // qmsQueueListMapper.updateByPrimaryKeySelective(qmsQueueList);
  453. // return qmsQueueResultMapper.updateByPrimaryKeySelective(qmsQueueResult);
  454. // }
  455. /**
  456. * 通过车牌号得到网格id
  457. * @param capacityNumber
  458. * @return
  459. */
  460. // @Override
  461. // public BigDecimal getGridId(String capacityNumber) {
  462. // return qmsQueueResultMapper.getGridIdNotNull(capacityNumber);
  463. // }
  464. /**
  465. * 查询各门岗和仓库的排队状态
  466. * @return
  467. */
  468. // @Override
  469. // public List<Map<String, Object>> getQueueStatusList() {
  470. // return qmsQueueResultMapper.getQueueStatusList();
  471. // }
  472. //
  473. }