QmsQueueResultServiceImpl.java 19 KB

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