package com.zy.common.utils;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.SpringUtils;
|
import com.zy.asrs.utils.Utils;
|
import com.zy.common.model.NavigateNode;
|
import com.zy.common.model.enums.NavigationMapType;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.model.ForkLiftSlave;
|
import com.zy.core.model.LiftSlave;
|
import com.zy.core.model.protocol.ForkLiftStaProtocol;
|
import com.zy.core.model.protocol.LiftProtocol;
|
import com.zy.core.model.protocol.LiftStaProtocol;
|
import com.zy.core.model.protocol.ShuttleProtocol;
|
import com.zy.core.properties.SlaveProperties;
|
import com.zy.core.thread.ForkLiftThread;
|
import com.zy.core.thread.LiftThread;
|
import com.zy.core.thread.ShuttleThread;
|
import com.zy.core.thread.impl.NyLiftThread;
|
import com.zy.system.entity.Config;
|
import com.zy.system.service.ConfigService;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
/**
|
* 提升机工具类
|
*/
|
public class LiftUtils {
|
|
//获取提升机站点
|
public static LiftStaProtocol getLiftStaByStaNo(Integer staNo) {
|
SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
|
for (LiftSlave liftSlave : slaveProperties.getLift()) {
|
LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
|
if (liftThread == null) {
|
return null;
|
}
|
|
for (LiftStaProtocol liftStaProtocol : liftThread.getLiftStaProtocols()) {
|
if (liftStaProtocol.getStaNo().equals(staNo)) {
|
return liftStaProtocol;
|
}
|
}
|
}
|
|
return null;
|
}
|
|
//获取提升机站点
|
public static LiftStaProtocol getLiftStaByLev(Integer liftNo, Integer lev) {
|
LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
|
if (liftThread == null) {
|
return null;
|
}
|
|
for (LiftStaProtocol liftStaProtocol : liftThread.getLiftStaProtocols()) {
|
if (liftStaProtocol.getLev().equals(lev)) {
|
return liftStaProtocol;
|
}
|
}
|
|
return null;
|
}
|
|
//获取提升机输送站及其前一站节点
|
public static List<NavigateNode> getLiftStaNodes(Integer staNo) {
|
List<NavigateNode> targetNodes = new ArrayList<>();
|
//获取目标站
|
LiftStaProtocol targetLiftSta = LiftUtils.getLiftStaByStaNo(staNo);
|
if (targetLiftSta == null) {
|
return null;//找不到站点
|
}
|
NavigateNode targetNode = NavigatePositionConvert.locNoToNode(targetLiftSta.getLocNo());//目标节点
|
String targetLastLocNo = Utils.getLocNo(Utils.getRow(targetLiftSta.getLocNo()) - 1, Utils.getBay(targetLiftSta.getLocNo()), Utils.getLev(targetLiftSta.getLocNo()));//目标节点前一站
|
NavigateNode targetLastNode = NavigatePositionConvert.locNoToNode(targetLastLocNo);//目标节点前一站
|
targetNodes.add(targetNode);
|
targetNodes.add(targetLastNode);
|
|
return targetNodes;
|
}
|
|
//通过输送线站号获取对应提升机号
|
public static Integer getConveyorBindLiftNo(Integer staNo) {
|
ConfigService configService = SpringUtils.getBean(ConfigService.class);
|
if (configService == null) {
|
return null;
|
}
|
|
Config conveyorLiftBindConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "conveyorLiftBind"));
|
if(conveyorLiftBindConfig == null) {
|
return null;
|
}
|
|
List<JSONObject> list = JSON.parseArray(conveyorLiftBindConfig.getValue(), JSONObject.class);
|
if (list.isEmpty()) {
|
return null;
|
}
|
|
for (JSONObject data : list) {
|
if(data.getInteger("staNo").equals(staNo)) {
|
return data.getInteger("liftNo");
|
}
|
}
|
|
return null;
|
}
|
|
//请求上级系统,是否允许出库
|
//查询是否有出库权限
|
public static boolean queryOutMission(Integer staNo) {
|
ConfigService configService = SpringUtils.getBean(ConfigService.class);
|
if (configService == null) {
|
return false;
|
}
|
|
Config queryOutMissionPathEnableConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryOutMissionPathEnable"));
|
if (queryOutMissionPathEnableConfig != null) {
|
String queryOutMissionPathEnable = queryOutMissionPathEnableConfig.getValue();
|
if (!queryOutMissionPathEnable.equals("Y")) {
|
return true;//关闭查询出库权限功能
|
}
|
}
|
|
Config superSystemUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "superSystemUri"));
|
if (superSystemUriConfig == null) {
|
return false;
|
}
|
String superSystemUri = superSystemUriConfig.getValue();
|
|
Config queryOutMissionPathConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryOutMissionPath"));
|
if (queryOutMissionPathConfig == null) {
|
return false;
|
}
|
String missionPath = queryOutMissionPathConfig.getValue();
|
|
try {
|
HashMap<String, Object> data = new HashMap<>();
|
data.put("staNo", staNo);
|
|
String response = new HttpHandler.Builder()
|
.setUri(superSystemUri)
|
.setPath(missionPath)
|
.setJson(JSON.toJSONString(data))
|
.build()
|
.doPost();
|
if (response.equals("ok")) {
|
return true;//有出库权限
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
//请求上级系统,是否允许入库
|
//查询是否有入库权限
|
public static boolean queryInMission(Integer sourceStaNo, Integer liftNo, String superTaskNo) {
|
ConfigService configService = SpringUtils.getBean(ConfigService.class);
|
if (configService == null) {
|
return false;
|
}
|
|
Config queryInMissionPathEnableConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryInMissionPathEnable"));
|
if (queryInMissionPathEnableConfig != null) {
|
String queryInMissionPathEnable = queryInMissionPathEnableConfig.getValue();
|
if (!queryInMissionPathEnable.equals("Y")) {
|
return true;//关闭查询入库权限功能
|
}
|
}
|
|
Config superSystemUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "superSystemUri"));
|
if (superSystemUriConfig == null) {
|
return false;
|
}
|
String superSystemUri = superSystemUriConfig.getValue();
|
|
Config queryInMissionPathConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryInMissionPath"));
|
if (queryInMissionPathConfig == null) {
|
return false;
|
}
|
String missionPath = queryInMissionPathConfig.getValue();
|
|
try {
|
HashMap<String, Object> data = new HashMap<>();
|
data.put("staNo", sourceStaNo);
|
data.put("liftNo", liftNo);
|
data.put("superTaskNo", superTaskNo);
|
|
String response = new HttpHandler.Builder()
|
.setUri(superSystemUri)
|
.setPath(missionPath)
|
.setJson(JSON.toJSONString(data))
|
.build()
|
.doPost();
|
if (response.equals("ok")) {
|
return true;//有入库权限
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
/**
|
* 获取坐标最近且正常的提升机
|
*/
|
public static LiftThread getRecentLift(String locNo) {
|
SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
|
NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
|
|
String currentLocNo = locNo;
|
Integer recentAllDistance = 9999999;
|
LiftThread recentLift = null;//最近站点
|
for (LiftSlave slave : slaveProperties.getLift()) {
|
LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
|
if (liftThread == null) {
|
continue;
|
}
|
LiftProtocol liftProtocol = liftThread.getStatus();
|
if (liftProtocol == null) {
|
continue;
|
}
|
|
if (!liftThread.isDeviceIdle()) {
|
continue;
|
}
|
|
//搜索距离小车最近的提升机
|
String liftLocNo = liftThread.getLiftLocNo(Utils.getLev(locNo));
|
if (locNo.equals(liftLocNo)) {
|
return liftThread;
|
}
|
|
//目标地点距离
|
List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, liftLocNo, NavigationMapType.NORMAL.id, null, null);//使用正常通道地图
|
if (currentShuttlePath == null) {
|
continue;
|
}
|
Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
|
if (currentAllDistance < recentAllDistance) {
|
//如果当前楼层的路径更小,则更新最近站点
|
recentLift = liftThread;
|
recentAllDistance = currentAllDistance;
|
}
|
}
|
|
return recentLift;
|
}
|
|
}
|