QmsQueueResultServiceImpl.java 21 KB

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