package com.steerinfo.dil.service.impl; import com.steerinfo.dil.feign.IMFeign; import com.steerinfo.dil.mapper.QmsQueueListMapper; import com.steerinfo.dil.mapper.QueueInterfaceMapper; import com.steerinfo.dil.mapper.QueuingRulesMapper; import com.steerinfo.dil.model.QmsQueueList; import com.steerinfo.dil.util.DataChange; import com.steerinfo.dil.model.QmsQueueResult; import com.steerinfo.dil.mapper.QmsQueueResultMapper; import com.steerinfo.dil.service.IQmsQueueResultService; import com.steerinfo.dil.util.ElectronicFenceUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.math.BigDecimal; /** * QmsQueueResult服务实现: * @author generator * @version 1.0-SNAPSHORT 2021-09-14 11:27 * 类描述 * 修订历史: * 日期:2021-09-14 * 作者:generator * 参考: * 描述:QmsQueueResult服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "qmsQueueResultService") public class QmsQueueResultServiceImpl implements IQmsQueueResultService { @Autowired private QmsQueueResultMapper qmsQueueResultMapper; @Autowired private QmsQueueListMapper qmsQueueListMapper; @Autowired QueueInterfaceServiceImpl queueInterfaceService; @Autowired private QmsQueueGridServiceImpl qmsQueueGridService; @Autowired private QueuingRulesMapper queuingRulesMapper; @Autowired private IMFeign imFeign; @Autowired private QueueInterfaceMapper queueInterfaceMapper; private String lonlat = "107.4628199,31.1925279"; //中心点坐标 private String radius = "15000"; //半径 private String lat1 = "31.1925279"; private String lng1 = "107.4628199"; /** * 取消订阅方法 */ public void cancelSub(String capacityNumber){ Map map = new HashMap<>(); map.put("capacityNumber", capacityNumber.split("_")[0] + "_2"); int j = queueInterfaceService.cancelSubsCapacity(map, 0); if(j == -1){ System.out.println("取消订阅失败"); }else if(j == -2){ System.out.println("超过递归次数,取消订阅失败"); }else if(j == 1){ //修改订阅表 表示已取消订阅 queueInterfaceMapper.cancelSubCapacity(capacityNumber.split("_")[0]); } } /** * 特殊情况 查询是否订阅过 如订阅过则需要取消订阅 */ public void judgeCancelSub(String capacityNumber){ //查询订阅表是否已经订阅过如订阅过则取消订阅 Integer subCapacityId = queueInterfaceMapper.getSubCapacity(capacityNumber.split("_")[0]); if(subCapacityId != null){ cancelSub(capacityNumber); } } /** * 新增进厂排队实绩 * @param capacityNumber 车牌号 * @return */ @Override public int addQueueResult(String capacityNumber, String isPDA) { //获取传入的车牌号查找最近的运输订单号 Map mesMap = queuingRulesMapper.getOrderNumberByCapacityNumber(capacityNumber.split("_")[0]); if(mesMap == null){ judgeCancelSub(capacityNumber); //判断是否需要取消订阅 return -1; }else{ if(DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue() != 1){ judgeCancelSub(capacityNumber); //判断是否需要取消订阅 return -3; //非钢材订单不添加排队 } String insertUpdateRemark = String.valueOf(mesMap.get("insertUpdateRemark")); if("电子围栏订阅成功".equals(insertUpdateRemark)){ //如果是电子围栏调用,并且订阅成功了,则取消订阅 cancelSub(capacityNumber); } } Integer resultId = queuingRulesMapper.checkoutQQR(mesMap.get("resultTotalId")); if(resultId != null){ //预防重复新增排队 return -2; } QmsQueueResult qmsQueueResult = new QmsQueueResult(); qmsQueueResult.setId(qmsQueueResultMapper.selectMaxId()); qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(mesMap.get("resultTotalId"))); int materialNum = DataChange.dataToBigDecimal(mesMap.get("materialNum")).intValue(); BigDecimal grid; if(materialNum == 1){ BigDecimal orderId = DataChange.dataToBigDecimal(mesMap.get("orderId")); //单拼添加仓储网格ID 、 通过物资Id查询网格ID grid = qmsQueueResultMapper.getGridIdByOrderId(orderId); if(grid == null){ //新增一个仓储网格实绩 通过订单查询物资ID Integer materialId = qmsQueueResultMapper.getMaterialIdByOrderId(orderId); grid = qmsQueueGridService.addQQR(materialId); } qmsQueueResult.setGridId(grid); qmsQueueResult.setIsSpelling(new BigDecimal(0)); }else { qmsQueueResult.setGridId(new BigDecimal(materialNum)); qmsQueueResult.setIsSpelling(new BigDecimal(1)); } //添加排队实绩表 qmsQueueResult.setResultApplyforTime(new Date()); //系统自动下发 添加下发时间 qmsQueueResult.setResultDownTime(new Date()); qmsQueueResult.setCapacityId(DataChange.dataToBigDecimal(mesMap.get("capacityId"))); qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(mesMap.get("resultTotalId"))); qmsQueueResult.setInsertTime(new Date()); qmsQueueResult.setInsertUsername("admin"); return qmsQueueResultMapper.insertSelective(qmsQueueResult); } /** * 司机通过订单ID查询当前订单的排队实绩 * @param resultTotalId * @return */ public Map getQueueResultByTotalId(String resultTotalId){ Map map = qmsQueueResultMapper.getQueueResultByOrderId(new BigDecimal(resultTotalId)); if(map == null){ return new HashMap<>(); } //是否拼装 int isSpelling = DataChange.dataToBigDecimal(map.get("isSpelling")).intValue(); if(map.get("resultEndTime") != null){ //司机已排队结束 //计算排队时长 Date startTime = (Date) map.get("resultStartTime"); Date endTime = (Date) map.get("resultEndTime"); long differentTime = (endTime.getTime() - startTime.getTime()) / 60000; map.put("differentTime", differentTime + " 分钟"); map.put("status", 3); }else if(map.get("resultStartTime") != null){ //排队开始 Integer num; Date startTime = (Date) map.get("resultStartTime"); long differentTime = (System.currentTimeMillis() - startTime.getTime()) / 60000; map.put("differentTime", differentTime + " 分钟"); if(isSpelling == 0){ num = qmsQueueListMapper.getListSequenceNumber(map); //当前队列排队人数 }else { num = qmsQueueListMapper.getSpellingSequenceNumber(map); //当前多拼队列排队人数 } map.put("orderSeqNum", num); map.put("status", 2); }else { //还未排队 Integer num; if(isSpelling == 0){ num = qmsQueueListMapper.getListGridNumber(map); //当前单拼网格排队人数 }else { num = qmsQueueListMapper.getSpellingGridNumber(map); //当前多拼网格排队人数 } map.put("gridSeqNum", num); map.put("status", 1); } return map; } /** * 查询排队申请 * @param map * @return */ @Override public List> getQueueApply(Map map) { return qmsQueueResultMapper.getQueueApply(map); } /** * 查询排队开始 数据 * 可用 gridId 网格ID * @param map * @return */ @Override public List> getQueueListByQueueUp(Map map) { return qmsQueueResultMapper.getQueueListByQueueUp(map); } public List> getQueueListByQueueUpSpelling(Map map) { return qmsQueueResultMapper.getQueueListByQueueUpSpelling(map); } /** * 查询排队取消数据 * @param map * @return */ @Override public List> getQueueCancel(Map map) { return qmsQueueResultMapper.getQueueCancel(map); } /** * 查询排队结束 * @param map * @return */ @Override public List> getQueueEndResult(Map map) { return qmsQueueResultMapper.getQueueEndResult(map); } public boolean isInCircle(String longitude, String latitude,String CapacityNo) { boolean s = ElectronicFenceUtils.isInRange(15000,new BigDecimal(latitude),new BigDecimal(longitude),new BigDecimal(lat1),new BigDecimal(lng1)); if(s){ int i = addQueueResult(CapacityNo,"否"); System.out.println(i); } return s; } /** * 新增仓库排队实绩 * @param map orderNumber运输订单号 loadingId 装车点 * @return */ // public int addQueueResultByCk(Map map){ // QmsQueueResult qmsQueueResult = new QmsQueueResult(); // //生成主键 // qmsQueueResult.setId(qmsQueueResultMapper.selectMaxId()); // //获取添加网格Id // map.put("queueLocationId", map.get("loadingId")); // map.put("gridType", 1); // BigDecimal gridId = queuingRulesService.getGridIdByGatepostIdAndGridType(map); // qmsQueueResult.setGridId(gridId); // //通过运输订单号查询实绩ID 等数据 // map.putAll(qmsQueueResultMapper.queryCIdAndTIdByOrderNumber((String) map.get("orderNumber"))); // qmsQueueResult.setResultApplyforTime(new Date()); // //系统自动下发 添加下发时间 // qmsQueueResult.setResultDownTime(new Date()); // //添加运力ID和总实绩ID // qmsQueueResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId"))); // qmsQueueResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId"))); // qmsQueueResult.setInsertTime(new Date()); // qmsQueueResult.setInsertUsername("admin"); // pushCKMesToWebSocket(DataChange.dataToBigDecimal(map.get("orderId")).intValue(), gridId.intValue()); // return qmsQueueResultMapper.insertSelective(qmsQueueResult); // } /** * 推送仓库排队消息到websocket */ // public void pushCKMesToWebSocket(Integer orderId, Integer gridId){ // //通过运输订单ID查询推送给司机的数据 // Map mesMap = qmsQueueResultMapper.sendWarehouseMesToWebSocket(orderId); // mesMap.putAll(qmsQueueResultMapper.queryWarehouseNameByPlatformId(gridId)); // HashMap sendMap = new HashMap<>(); // sendMap.put("messageType", 2); // sendMap.put("receivePerson", mesMap.get("capacityNumber")); // sendMap.put("sendPerson", "system"); // sendMap.put("messageContent", mesMap); // sendMap.put("createTime", new Date()); // ArrayList list = new ArrayList<>(); // list.add(sendMap); // HashMap map = new HashMap<>(); // map.put("messages", list); // //调用websocket接口 // String s = imFeign.sendToUser(map); // System.out.println(s); // } /** * 查看排队转移界面 * @param map * @return */ // @Override // public List> getChangeQueueMes(Map map) { // return qmsQueueResultMapper.getChangeQueueMes(map); // } /** * 查询执行中运单 * @param map * @return */ // @Override // public List> getAllExecutionOrder(Map map) { // return qmsQueueResultMapper.getAllExecutionOrder(map); // } /** * 查询指令接收 判断条件:是否有排队结束时间 * @param map * @return */ // @Override // public List> orderReceive(Map map) { // Integer queueType = (Integer) map.get("queueType"); // List> orderReceiveList = null; // switch (queueType){ // case 1: //进厂 // orderReceiveList = qmsQueueResultMapper.getOrderReceive(map); // break; // case 2: //仓库 // orderReceiveList = qmsQueueResultMapper.getWarehouseOrderReceive(map); // } // //遍历数据 通过是否有接收时间 来判断是否接收 // for (Map orderReceiveMap : orderReceiveList) { // if(orderReceiveMap.get("resultAcceptTime") != null){ // orderReceiveMap.put("isReceive", "是"); // }else { // orderReceiveMap.put("isReceive", "否"); // } // } // return orderReceiveList; // } /** * 查询排队详情 * @param map * @return */ // @Override // public List> getQueueMes(Map map) { // return qmsQueueResultMapper.getQueueMes(map); // } /** * 通过实绩ID查询排队取消信息 * @param resultId * @return */ // @Override // public List> getQueueCancelByResultId(Integer resultId) { // return qmsQueueResultMapper.getQueueCancelByResultId(resultId); // } /** * 修改排队取消实绩 * @param qmsQueueResult * @return */ // @Override // public int updateQueueCancel(QmsQueueResult qmsQueueResult) { // qmsQueueResult.setUpdateTime(new Date()); // qmsQueueResult.setUpdateUsername("admin"); // return qmsQueueResultMapper.updateByPrimaryKeySelective(qmsQueueResult); // } /** * 查询排队插队 * @return */ // @Override // public List> getQueueInsert(Map map) { // return qmsQueueResultMapper.getQueueInsert(map); // } /** * 汽车监控 * @param map * @return */ // @Override // public List> capacityMonitor(Map map) { // List> list = qmsQueueResultMapper.capacityMonitor(map); // for (Map capacityMap : list) { // //如果结束时间为空 排队总时长为 // if(capacityMap.get("resultEndTime") == null){ // Date date1 = (Date) capacityMap.get("resultStartTime"); // Date date2; // if(capacityMap.get("resultCancelTime") != null){ //如果取消排队了则以取消排队时间为结束时间 // date2 = (Date) capacityMap.get("resultCancelTime"); // }else { // date2 = new Date(); // } // long differenceTime = (date2.getTime() - date1.getTime()) / 60000; // capacityMap.put("resultQueueAllTime", differenceTime + "min"); // }else { // //否则排队时长为结束时长 - 申请时长 // Date date1 = (Date)capacityMap.get("resultStartTime"); // Date date2 = (Date)capacityMap.get("resultEndTime"); // long differenceTime = (date2.getTime() - date1.getTime()) / 60000; // capacityMap.put("resultQueueAllTime",differenceTime + "min"); // } // } // return list; // } //=========================================仓库排队=========================================== /** * 查看仓库排队申请 * @param map * @return */ // @Override // public List> getWarehouseQueueApply(Map map) { // return qmsQueueResultMapper.getWarehouseQueueApply(map); // } /** * 查看排队开始 * @param map * @return */ // @Override // public List> getWarehouseQueueListByQueueUp(Map map) { // return qmsQueueResultMapper.getWarehouseQueueListByQueueUp(map); // } /** * 查看仓库排队详情 通过运输订单号查询仓库 * @param map * @return */ // @Override // public List> getWarehouseQueueMes(Map map) { // return qmsQueueResultMapper.getWarehouseQueueMes(map); // } /** * 查询仓库排队转移详情 * @param map * @return */ // @Override // public List> getWarehouseQueueChange(Map map) { // return qmsQueueResultMapper.getWarehouseQueueChange(map); // } /** * 查询仓库排队结束 * @param map * @return */ // @Override // public List> getWarehouseQueueEndMes(Map map) { // return qmsQueueResultMapper.getWarehouseQueueEndMes(map); // } //********************************APP********************************************* /** * 根据车牌号查询排队下发 * @param capacityNumber * @return */ // @Override // public List> getOrderReceive2(String capacityNumber) { // BigDecimal gridId = getGridId(capacityNumber); // if (gridId == null) { // List> mapList = new ArrayList<>(); // return mapList; // } // Map map = new HashMap<>(); // map.put("capacityNumber",capacityNumber); // map.put("gridId",gridId); // List> orderReceive = qmsQueueResultMapper.getOrderReceive2(map); // return orderReceive; // } /** * 排队取消 * @param mapValue * @return */ // @Override // public int cancelQueue(Map mapValue) { // String capacityNumber = (String) mapValue.get("capacityNumber"); // String resultCancelReason = (String) mapValue.get("resultCancelReason"); // BigDecimal resultId = qmsQueueResultMapper.getResultIdByCapacityId(capacityNumber); // QmsQueueResult qmsQueueResult = qmsQueueResultMapper.selectByPrimaryKey(resultId); // Map listIdMap = qmsQueueResultMapper.getListIdByResultId(resultId); // BigDecimal listId = (BigDecimal) listIdMap.get("listId"); // QmsQueueList qmsQueueList = qmsQueueListMapper.selectByPrimaryKey(listId); // qmsQueueResult.setResultCancelTime(new Date()); // qmsQueueResult.setResultCancelReason(resultCancelReason); // qmsQueueListMapper.updateByPrimaryKeySelective(qmsQueueList); // return qmsQueueResultMapper.updateByPrimaryKeySelective(qmsQueueResult); // } /** * 通过车牌号得到网格id * @param capacityNumber * @return */ // @Override // public BigDecimal getGridId(String capacityNumber) { // return qmsQueueResultMapper.getGridIdNotNull(capacityNumber); // } /** * 查询各门岗和仓库的排队状态 * @return */ // @Override // public List> getQueueStatusList() { // return qmsQueueResultMapper.getQueueStatusList(); // } // }