src/main/java/com/zy/asrs/controller/ConsoleController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/WrkMastService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/action/ForkLiftAction.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/WrkMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/console.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -7,17 +7,26 @@ import com.core.common.R; import com.zy.asrs.domain.param.SystemSwitchParam; import com.zy.asrs.entity.BasMap; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasMapService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.MapNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.utils.NavigateMapData; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.model.ForkLiftSlave; import com.zy.core.model.ShuttleSlave; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.model.protocol.ShuttleProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.properties.SystemProperties; import com.zy.core.thread.ForkLiftThread; import com.zy.core.thread.ShuttleThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -33,15 +42,15 @@ public class ConsoleController { @Autowired private SlaveProperties slaveProperties; @Autowired private BasMapService basMapService; @Autowired private RedisUtil redisUtil; @Value("${super.pwd}") private String superPwd; @Autowired private NavigateMapData navigateMapData; @Autowired private WrkMastService wrkMastService; @Autowired private SlaveProperties slaveProperties; @PostMapping("/system/running/status") @ManagerAuth(memo = "系统运行状态") @@ -122,4 +131,48 @@ return R.ok(); } /** * 任务检测 */ @GetMapping("/checkTask") @ManagerAuth(memo = "任务检测") public R checkTask() { List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>()); if (!wrkMasts.isEmpty()) { return R.error("存在未结束任务"); } for (ShuttleSlave slave : slaveProperties.getShuttle()) { ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); if (shuttleThread == null) { continue; } ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { continue; } if (shuttleProtocol.getTaskNo() > 0) { return R.error(slave.getId() + "号小车存在工作号"); } } for (ForkLiftSlave slave : slaveProperties.getForkLift()) { ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, slave.getId()); if (forkLiftThread == null) { continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { continue; } if (forkLiftProtocol.getTaskNo() > 0) { return R.error(slave.getId() + "号货叉提升机存在工作号"); } } return R.ok(); } } src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -28,14 +28,14 @@ List<WrkMast> selectBy2125(); //查询指定楼层待分配车辆的任务 List<WrkMast> selectNoShuttleWrkByLev(String lev); //查询指定楼层任务 List<WrkMast> selectWrkByLev(String lev); List<WrkMast> selectShuttleWrkByLev(String lev); List<WrkMast> selectShuttleOutWrkByLev(String lev); WrkMast selectLiftWrkMast(Integer liftNo); List<WrkMast> selectLiftWrkMast(Integer liftNo); List<WrkMast> selectLocToLocWrkMast();//查询库位移转工作档 src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -11,8 +11,8 @@ Boolean judgeInbound(WrkMast wrkMast); //查询指定楼层待分配车辆的任务 List<WrkMast> selectNoShuttleWrkByLev(Integer lev); //查询指定楼层任务 List<WrkMast> selectWrkByLev(Integer lev); //查询指定楼层已分配车辆的任务 List<WrkMast> selectShuttleWrkByLev(Integer lev); @@ -32,6 +32,6 @@ List<WrkMast> selectShuttleMoveWrk(); WrkMast selectLiftWrkMast(Integer liftNo); List<WrkMast> selectLiftWrkMast(Integer liftNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -681,6 +681,13 @@ News.taskInfo(wrkMast.getWrkNo(), "{}任务,未找到匹配的提升机", wrkMast.getWrkNo()); return false; } //申请提升机资源 boolean applyForkLift = forkLiftAction.applyForkLift(liftNo, wrkMast.getWrkNo()); if(!applyForkLift) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,申请提升机资源失败,禁止入库", wrkMast.getWrkNo()); return false; } } ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); @@ -700,15 +707,6 @@ if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,提升机不处于入库模式,禁止入库", wrkMast.getWrkNo()); return false; } //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 } } //检测楼层是否有可用穿梭车 @@ -754,7 +752,6 @@ assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//提升机搬运中 1.生成入库任务 ==> 3.提升机搬运中 wrkMast.setLiftNo(liftNo); wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { @@ -835,6 +832,12 @@ News.taskInfo(wrkMast.getWrkNo(), "{}任务,未找到匹配的提升机", wrkMast.getWrkNo()); return false; } //申请提升机资源 boolean applyForkLift = forkLiftAction.applyForkLift(liftSta.getLiftNo(), wrkMast.getWrkNo()); if(!applyForkLift) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,申请提升机资源失败,禁止执行出库", wrkMast.getWrkNo()); return false; } } ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); @@ -854,15 +857,6 @@ if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,提升机不处于出库模式,禁止出库", wrkMast.getWrkNo()); return false; } //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 } } //请求上级系统,是否允许出库 @@ -885,7 +879,6 @@ assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//提升机搬运中 103.生成入库任务 ==> 104.提升机搬运中 wrkMast.setLiftNo(liftNo); wrkMast.setShuttleNo(null);//释放小车 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(new Date()); @@ -1545,18 +1538,12 @@ } if (wrkMast.getLiftNo() == null) { //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机) WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo()); if (liftWrkMast != null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftSta.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 //申请提升机资源(该任务需要换层必须提前独占提升机) boolean applyForkLift = forkLiftAction.applyForkLift(liftSta.getLiftNo(), wrkMast.getWrkNo()); if(!applyForkLift) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,申请提升机资源失败,禁止移动至站点", wrkMast.getWrkNo()); return false; } wrkMast.setModiTime(now); wrkMast.setLiftNo(liftSta.getLiftNo());//提前锁定提升机 wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); return false; } //*************尝试锁定目标站路径*************** @@ -1632,14 +1619,6 @@ if (!forkLiftThread.isIdle()) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 } } //获取源站 @@ -1940,9 +1919,9 @@ continue; } //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { //申请提升机资源 boolean applyForkLift = forkLiftAction.applyForkLift(liftNo, null); if(!applyForkLift) { continue;//提升机已被绑定,不再执行预调度任务 } src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -44,8 +44,8 @@ } @Override public List<WrkMast> selectNoShuttleWrkByLev(Integer lev) { return this.baseMapper.selectNoShuttleWrkByLev("%" + lev); public List<WrkMast> selectWrkByLev(Integer lev) { return this.baseMapper.selectWrkByLev("%" + lev); } @Override @@ -122,7 +122,7 @@ } @Override public WrkMast selectLiftWrkMast(Integer liftNo) { public List<WrkMast> selectLiftWrkMast(Integer liftNo) { return this.baseMapper.selectLiftWrkMast(liftNo); } } src/main/java/com/zy/core/action/ForkLiftAction.java
@@ -154,4 +154,36 @@ return response; } //申请提升机资源 public synchronized boolean applyForkLift(Integer liftNo, Integer waitBindTaskNo) { ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { return false; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { return false; } if (!forkLiftThread.isIdle()) { return false; } List<WrkMast> wrkMasts = wrkMastService.selectLiftWrkMast(liftNo); if (!wrkMasts.isEmpty()) { return false; } if (waitBindTaskNo != null) { WrkMast wrkMast = wrkMastService.selectByWorkNo(waitBindTaskNo); if (wrkMast == null) { return false; } wrkMast.setLiftNo(liftNo); wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); } return true; } } src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -168,7 +168,8 @@ //当前穿梭车库位号 String currentLocNo = shuttleProtocol.getCurrentLocNo(); int currentLev = Utils.getLev(currentLocNo); List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车 //判断当前楼层是否有任务,如果有则不分配这辆车 List<WrkMast> wrkMasts1 = wrkMastService.selectWrkByLev(currentLev); int shuttleCount = this.getShuttleCountByLev(currentLev);//获取穿梭车楼层车辆数量 if (!wrkMasts1.isEmpty() && shuttleCount <= 1) { //存在其他任务且可用小车数量小于等于1,跳过这辆车 src/main/resources/mapper/WrkMastMapper.xml
@@ -73,10 +73,10 @@ order by io_pri desc,wrk_sts desc </select> <select id="selectNoShuttleWrkByLev" resultMap="BaseResultMap"> <select id="selectWrkByLev" resultMap="BaseResultMap"> select * from asr_wrk_mast where shuttle_no is null and ((wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 101 and source_loc_no like #{lev})) where 1=1 and ((loc_no like #{lev}) or (source_loc_no like #{lev})) order by io_pri desc,wrk_sts desc </select> @@ -97,8 +97,6 @@ <select id="selectLiftWrkMast" resultMap="BaseResultMap"> select * from asr_wrk_mast where lift_no = #{liftNo} and wrk_sts not in (9,10,109,110,210,311,410) limit 0,1 </select> <select id="selectLocToLocWrkMast" resultMap="BaseResultMap"> src/main/webapp/views/console.html
@@ -78,6 +78,7 @@ <div> <!-- <el-button @click="testMove()">测试移动车</el-button>--> <el-button @click="resetMap()">重置地图</el-button> <el-button @click="checkTask()">任务检测</el-button> <!-- <el-button @click="initLoc()">初始化库位</el-button>--> </div> </div> @@ -664,6 +665,30 @@ } }) }, checkTask() { let that = this $.ajax({ url:baseUrl+"/console/checkTask", headers:{ 'token': localStorage.getItem('token') }, data:{}, method:'get', success:function (res) { if (res.code === 200) { that.$message({ message: res.msg, type: 'success' }); } else { that.$message({ message: res.msg, type: 'error' }); } } }) }, initLev(){ let that = this $.ajax({