From 87c4efe93e6fe31a9c989b4aa5cc0c8f559b845d Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 31 三月 2023 16:50:47 +0800 Subject: [PATCH] 提升机代码,四向穿梭车线程优化 --- src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 16 src/main/java/com/zy/asrs/mapper/BasLiftMapper.java | 12 src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java | 16 src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java | 223 ++++ src/main/java/com/zy/core/model/command/LiftAssignCommand.java | 40 src/main/java/com/zy/core/model/protocol/LiftProtocol.java | 66 + src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java | 12 src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java | 17 src/main/java/com/zy/common/utils/CommonUtils.java | 4 src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java | 87 + src/main/java/com/zy/asrs/entity/BasLiftOpt.java | 126 ++ src/main/webapp/views/index.html | 2 src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java | 77 - src/main/java/com/zy/core/MainProcess.java | 4 src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java | 12 src/main/webapp/static/css/lift.css | 334 ++++++ src/main/java/com/zy/core/enums/LiftProtocolStatusType.java | 40 src/main/resources/mapper/BasLiftMapper.xml | 38 src/main/java/com/zy/asrs/service/BasLiftOptService.java | 8 src/main/java/com/zy/core/thread/LiftThread.java | 327 +++++- src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java | 13 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 169 +++ src/main/java/com/zy/core/thread/ShuttleThread.java | 64 src/main/resources/mapper/BasLiftOptMapper.xml | 19 src/main/java/com/zy/core/cache/MessageQueue.java | 14 src/main/resources/mapper/WrkMastMapper.xml | 17 src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java | 12 src/main/java/com/zy/asrs/service/BasLiftService.java | 8 src/main/java/com/zy/asrs/entity/BasLift.java | 299 ++++++ src/main/java/com/zy/core/ServerBootstrap.java | 2 src/main/webapp/views/lift.html | 484 ++++++++++ src/main/java/com/zy/core/model/command/LiftCommand.java | 17 src/main/java/com/zy/asrs/controller/ShuttleController.java | 23 src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java | 13 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 4 src/main/java/com/zy/asrs/controller/LiftController.java | 216 ++++ 36 files changed, 2,641 insertions(+), 194 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/LiftController.java b/src/main/java/com/zy/asrs/controller/LiftController.java new file mode 100644 index 0000000..f88ea21 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/LiftController.java @@ -0,0 +1,216 @@ +package com.zy.asrs.controller; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.annotations.ManagerAuth; +import com.core.common.BaseRes; +import com.core.common.Cools; +import com.core.common.R; +import com.core.exception.CoolException; +import com.zy.asrs.domain.param.LiftOperatorParam; +import com.zy.asrs.domain.vo.*; +import com.zy.asrs.entity.BasLift; +import com.zy.asrs.service.BasLiftService; +import com.zy.asrs.service.WrkMastService; +import com.zy.core.cache.MessageQueue; +import com.zy.core.cache.OutputQueue; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.LiftSlave; +import com.zy.core.model.Task; +import com.zy.core.model.command.LiftAssignCommand; +import com.zy.core.model.protocol.LiftProtocol; +import com.zy.core.properties.SlaveProperties; +import com.zy.core.thread.LiftThread; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鎻愬崌鏈烘帴鍙� + */ +@Slf4j +@RestController +@RequestMapping("/lift") +public class LiftController { + + @Autowired + private SlaveProperties slaveProperties; + @Autowired + private BasLiftService basLiftService; + @Autowired + private WrkMastService wrkMastService; + + @PostMapping("/table/lift/state") + @ManagerAuth(memo = "鎻愬崌鏈轰俊鎭〃") + public R liftStateTable(){ + List<LiftStateTableVo> list = new ArrayList<>(); + List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no")); + for (BasLift basLift : lifts) { + // 琛ㄦ牸琛� + LiftStateTableVo vo = new LiftStateTableVo(); + vo.setLiftNo(basLift.getLiftNo()); //鎻愬崌鏈哄彿 + list.add(vo); + // 鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null || liftProtocol.getLiftNo()==null) { + continue; + } + vo.setTaskNo(liftProtocol.getTaskNo()); // 浠诲姟鍙� + vo.setProtocolStatus(liftProtocol.getProtocolStatusType().desc); + vo.setLiftLock(liftProtocol.getLiftLock()); + vo.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback()); + vo.setReady(liftProtocol.getReady()); + vo.setRunning(liftProtocol.getRunning()); + vo.setMode(liftProtocol.getMode()); + vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); + vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); + vo.setReverseFeedback(liftProtocol.getReverseFeedback()); + vo.setMotorOverload(liftProtocol.getMotorOverload()); + vo.setLineEndHasStock(liftProtocol.getLineEndHasStock()); + vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); + vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); + vo.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm()); + vo.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm()); + vo.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck()); + vo.setNotReady(liftProtocol.getNotReady()); + vo.setServoError1(liftProtocol.getServoError1()); + vo.setServoError2(liftProtocol.getServoError2()); + vo.setServoError3(liftProtocol.getServoError3()); + vo.setServoError4(liftProtocol.getServoError4()); + vo.setLiftActualSpeed(liftProtocol.getLiftActualSpeed()); + vo.setPakMk(liftProtocol.getPakMk()); + } + return R.ok().add(list); + } + + @PostMapping("/table/lift/msg") + @ManagerAuth(memo = "鎻愬崌鏈烘暟鎹〃") + public R liftMsgTable(){ + List<LiftMsgTableVo> list = new ArrayList<>(); + List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no")); + for (BasLift basLift : lifts) { + // 琛ㄦ牸琛� + LiftMsgTableVo vo = new LiftMsgTableVo(); + vo.setLiftNo(basLift.getLiftNo()); // 鎻愬崌鏈哄彿 + list.add(vo); + // 鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + continue; + } + + vo.setWorkNo(liftProtocol.getTaskNo().intValue());//浠诲姟鍙� + vo.setPakMk(liftProtocol.getPakMk()?"Y" : "N"); // 浣滀笟鏍囪 + vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); + vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); + vo.setReverseFeedback(liftProtocol.getReverseFeedback()); + vo.setMotorOverload(liftProtocol.getMotorOverload()); + vo.setLineEndHasStock(liftProtocol.getLineEndHasStock()); + vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); + vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); + } + return R.ok().add(list); + } + + @PostMapping("/output/lift") + @ManagerAuth + public R liftOutput(){ + StringBuilder str = new StringBuilder(); + String s; + int i = 0; + while((s = OutputQueue.LIFT.poll()) != null && i <=10) { + str.append("\n").append(s); + i++; + } + return R.ok().add(str.toString()); + } + + @GetMapping("/detl/{liftNo}") + public R liftDetl(@PathVariable("liftNo") Integer liftNo){ + LiftDataVo vo = new LiftDataVo(); + for (LiftSlave liftSlave : slaveProperties.getLift()) { + if (liftNo.equals(liftSlave.getId())) { + vo.setLiftNo(liftSlave.getId()); + BasLift basLift = basLiftService.selectById(liftSlave.getId()); + if (!Cools.isEmpty(basLift)) { + vo.setWorkNo(basLift.getWrkNo()); + vo.setPakMk(basLift.getPakMk()); + } + break; + } + } + return R.ok().add(vo); + } + + @GetMapping("/sensor/detl/{liftNo}") + public R liftSensorDetl(@PathVariable("liftNo") Integer liftNo){ + LiftSensorDataVo vo = new LiftSensorDataVo(); + for (LiftSlave liftSlave : slaveProperties.getLift()) { + if (liftNo.equals(liftSlave.getId())) { + vo.setLiftNo(liftSlave.getId()); + // 鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + if (liftThread == null) { + return R.error("璁惧涓嶅湪绾�"); + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return R.error("璁惧涓嶅湪绾�"); + } + + break; + } + } + return R.ok().add(vo); + } + + /****************************************************************/ + /************************** 鎵嬪姩鎿嶄綔 ******************************/ + /****************************************************************/ + + @ManagerAuth(memo = "鎵嬪姩鎿嶄綔") + @PostMapping("/operator/lift") + public R liftOperator(LiftOperatorParam param){ + if (Cools.isEmpty(param.getLiftNo())) { + return R.parse(BaseRes.PARAM); + } + + for (LiftSlave liftSlave : slaveProperties.getLift()) { + if (param.getLiftNo().equals(liftSlave.getId())) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + if (liftThread == null) { + throw new CoolException("鎻愬崌鏈轰笉鍦ㄧ嚎"); + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + throw new CoolException("鎻愬崌鏈轰笉鍦ㄧ嚎"); + } + + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setLiftNo(liftSlave.getId().shortValue()); // 鎻愬崌鏈虹紪鍙� + assignCommand.setTaskNo((short) 9999); + assignCommand.setTaskMode(param.getLiftTaskMode().shortValue()); + assignCommand.setAuto(false);//鎵嬪姩妯″紡 + + if (MessageQueue.offer(SlaveType.Lift, liftSlave.getId(), new Task(3, assignCommand))) { + return R.ok(); + } else { + throw new CoolException("鍛戒护涓嬪彂澶辫触"); + } + } + } + return R.error(); + } + +} diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java index bb931f7..58cfaed 100644 --- a/src/main/java/com/zy/asrs/controller/ShuttleController.java +++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Random; /** * 鍥涘悜绌挎杞︽帴鍙� @@ -246,8 +245,14 @@ return R.parse(BaseRes.PARAM); } - if (Cools.isEmpty(param.getSourceLocNo(), param.getDistLocNo())) { - return R.parse(BaseRes.PARAM); + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + + if (param.getShuttleTaskMode() == 1 || param.getShuttleTaskMode() == 2) { + if (Cools.isEmpty(param.getSourceLocNo(), param.getDistLocNo())) { + return R.parse(BaseRes.PARAM); + } + assignCommand.setSourceLocNo(param.getSourceLocNo()); + assignCommand.setLocNo(param.getDistLocNo()); } for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { @@ -262,14 +267,12 @@ } ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode()); - ShuttleAssignCommand command = new ShuttleAssignCommand(); - command.setShuttleNo(shuttleSlave.getId().shortValue()); // 鍥涘悜绌挎杞︾紪鍙� - command.setTaskMode(shuttleTaskModeType.id.shortValue()); - command.setSourceLocNo(param.getSourceLocNo()); - command.setLocNo(param.getDistLocNo()); - command.setTaskNo((short) 9999); + assignCommand.setShuttleNo(shuttleSlave.getId().shortValue()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(shuttleTaskModeType.id.shortValue()); + assignCommand.setTaskNo((short) 9999); + assignCommand.setAuto(false);//鎵嬪姩妯″紡 - if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, command))) { + if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, assignCommand))) { return R.ok(); } else { throw new CoolException("鍛戒护涓嬪彂澶辫触"); diff --git a/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java b/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java new file mode 100644 index 0000000..433cd17 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java @@ -0,0 +1,17 @@ +package com.zy.asrs.domain.param; + +import lombok.Data; + +@Data +public class LiftOperatorParam { + + // 鎻愬崌鏈哄彿 + private Integer liftNo; + + // 浠诲姟鍙� + private Integer taskNo = 0; + + //鎿嶄綔妯″紡 + private Integer liftTaskMode; + +} diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java new file mode 100644 index 0000000..12bef47 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java @@ -0,0 +1,16 @@ +package com.zy.asrs.domain.vo; + +import lombok.Data; + +@Data +public class LiftDataVo { + + // 鎻愬崌鏈哄彿 + private Integer liftNo; + + // 宸ヤ綔鍙� + private Integer workNo; + + private Boolean pakMk; + +} diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java new file mode 100644 index 0000000..b09be1e --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java @@ -0,0 +1,87 @@ +package com.zy.asrs.domain.vo; + +import lombok.Data; + +@Data +public class LiftMsgTableVo { + + // 鎻愬崌鏈哄彿 + private Integer liftNo; + + // 宸ヤ綔鍙� + private Integer workNo = 0; + + // 浣滀笟鏍囪 + private String pakMk = "-"; + + /** + * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣 + * 鏈夎揣涓�1锛屾棤璐т负0锛堝墠绔寚闈犺繎璐ф灦渚э級 + */ + private Boolean lineFrontHasStock; + + /** + * 杈撻�佺嚎姝h浆鍙嶉 + * 姝h浆杩愯涓�1锛屽惁鍒欎负0 + */ + private Boolean forwardRotationFeedback; + + /** + * 杈撻�佺嚎鍙嶈浆鍙嶉 + * 鍙嶈浆杩愯涓�1锛屽惁鍒欎负0 + */ + private Boolean reverseFeedback; + + /** + * 杈撻�佺嚎鐢垫満杩囪浇 + * 杩囪浇涓�0锛屾甯镐负1 + */ + private Boolean motorOverload; + + /** + * 杈撻�佺嚎鏈鍏夌數鏈夎揣 + * 鏈夎揣涓�1锛屾棤璐т负0 + */ + private Boolean lineEndHasStock; + + /** + * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀� + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean inConveyLineCardTrayAlarm; + + /** + * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀� + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean outConveyLineCardTrayAlarm; + + public String getLineFrontHasStock$() { + return this.lineFrontHasStock ? "Y" : "N"; + } + + public String getForwardRotationFeedback$() { + return this.forwardRotationFeedback ? "Y" : "N"; + } + + public String getReverseFeedback$() { + return this.reverseFeedback ? "Y" : "N"; + } + + public String getMotorOverload$() { + return this.motorOverload ? "Y" : "N"; + } + + public String getLineEndHasStock$() { + return this.lineEndHasStock ? "Y" : "N"; + } + + public String getInConveyLineCardTrayAlarm$() { + return this.inConveyLineCardTrayAlarm ? "Y" : "N"; + } + + public String getOutConveyLineCardTrayAlarm$() { + return this.outConveyLineCardTrayAlarm ? "Y" : "N"; + } + +} diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java new file mode 100644 index 0000000..e88b0e7 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java @@ -0,0 +1,13 @@ +package com.zy.asrs.domain.vo; + +import lombok.Data; + +@Data +public class LiftSensorDataVo { + + /** + * 鎻愬崌鏈哄彿 + */ + private Integer liftNo; + +} diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java new file mode 100644 index 0000000..3a43152 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java @@ -0,0 +1,223 @@ +package com.zy.asrs.domain.vo; + +import com.zy.core.enums.LiftProtocolStatusType; +import lombok.Data; + +@Data +public class LiftStateTableVo { + + // 鎻愬崌鏈哄彿 + private Integer liftNo; + + /** + * 浠诲姟鍙� + */ + private Short taskNo = 0; + + /** + * 褰撳墠鎻愬崌鏈虹姸鎬侊紙鍐呴儴鑷垜缁存姢锛� + */ + private String protocolStatus; + + /** + * 鎻愬崌鏈洪攣瀹� + */ + private Boolean liftLock; + + /** + * 浣嶇疆鍒拌揪鍙嶉 + */ + private Short positionArrivalFeedback; + + /** + * 鍑嗗灏辩华 + * 灏辩华涓�1锛屾湭灏辩华涓�0 + */ + private Boolean ready; + + /** + * 杩愯涓� + * 杩愯涓负1锛屾湭杩愯涓�0 + */ + private Boolean running; + + /** + * 鑱旀満/鍗曟満 + * 鑱旀満涓�1锛屽崟鏈轰负0 + */ + private Boolean mode; + + /** + * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣 + * 鏈夎揣涓�1锛屾棤璐т负0锛堝墠绔寚闈犺繎璐ф灦渚э級 + */ + private Boolean lineFrontHasStock; + + /** + * 杈撻�佺嚎姝h浆鍙嶉 + * 姝h浆杩愯涓�1锛屽惁鍒欎负0 + */ + private Boolean forwardRotationFeedback; + + /** + * 杈撻�佺嚎鍙嶈浆鍙嶉 + * 鍙嶈浆杩愯涓�1锛屽惁鍒欎负0 + */ + private Boolean reverseFeedback; + + /** + * 杈撻�佺嚎鐢垫満杩囪浇 + * 杩囪浇涓�0锛屾甯镐负1 + */ + private Boolean motorOverload; + + /** + * 杈撻�佺嚎鏈鍏夌數鏈夎揣 + * 鏈夎揣涓�1锛屾棤璐т负0 + */ + private Boolean lineEndHasStock; + + /** + * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀� + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean inConveyLineCardTrayAlarm; + + /** + * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀� + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean outConveyLineCardTrayAlarm; + + /** + * 骞冲彴浣嶇疆鍋忓樊鎶ヨ + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean platPositionDeviationAlarm; + + /** + * 骞冲彴鎵煩鍋忓樊鎶ヨ + * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0 + */ + private Boolean platTorqueDeviationAlarm; + + /** + * 骞冲彴鍥涘悜杞︽娴� + * 鏈夎溅涓�1锛屾棤杞︿负0 + */ + private Boolean platShuttleCheck; + + /** + * 鏈氨缁姸鎬� + * 1. 涓嶅湪鎸囧畾灞� + * 2. 鍥涜酱涓嶅悓姝� + * 3. 骞冲彴鍓嶉檺鍏夌數琚尅鍒帮紙闈犺繎璐ф灦锛� + * 4. 骞冲彴鍚庨檺鍏夌數琚尅鍒帮紙杩滅璐ф灦锛� + * 5. 骞冲彴涓婇檺浣嶆姤璀� + * 6. 骞冲彴涓嬮檺浣嶆姤璀� + * 7. 鐢垫煖鎬ュ仠鎶ヨ + * 8. 杈撻�佺嚎鍓嶉檺浣嶈鎸″埌锛堥潬杩戣揣鏋讹級 + * 9. 杈撻�佺嚎鍚庨檺浣嶈鎸″埌锛堣繙绂昏揣鏋讹級 + * 10. 瑙︽懜灞忕揣鎬ュ仠姝㈣鎸変笅 + * 11. 鍥涜酱鍔ㄥ姏绾挎柇绾� + * 12. 鍗曟満妯″紡 + * 13. 鍥涜酱鎶ヨ + * 14. 浣嶇疆鍋忓樊杩囧ぇ + * 15. 鎵煩鍋忓樊杩囧ぇ + * 16. 杈撻�佺嚎杩囪浇 + * 17. 杩涙彁鍗囨満鍗℃墭鐩� + * 18. 鍑烘彁鍗囨満鍗℃墭鐩� + */ + private Short notReady; + + /** + * 浼烘湇1閿欒 + */ + private Short servoError1; + + /** + * 浼烘湇2閿欒 + */ + private Short servoError2; + + /** + * 浼烘湇3閿欒 + */ + private Short servoError3; + + /** + * 浼烘湇4閿欒 + */ + private Short servoError4; + + /** + * 鎻愬崌鏈哄疄闄呴�熷害鍙嶉 + */ + private Short liftActualSpeed; + + /** + * 浣滀笟鏍囪 + */ + private Boolean pakMk = true; + + public String getLiftLock$() { + return this.liftLock ? "Y" : "N"; + } + + public String getReady$() { + return this.ready ? "Y" : "N"; + } + + public String getRunning$() { + return this.running ? "Y" : "N"; + } + + public String getMode$() { + return this.mode ? "Y" : "N"; + } + + public String getLineFrontHasStock$() { + return this.lineFrontHasStock ? "Y" : "N"; + } + + public String getForwardRotationFeedback$() { + return this.forwardRotationFeedback ? "Y" : "N"; + } + + public String getReverseFeedback$() { + return this.reverseFeedback ? "Y" : "N"; + } + + public String getMotorOverload$() { + return this.motorOverload ? "Y" : "N"; + } + + public String getLineEndHasStock$() { + return this.lineEndHasStock ? "Y" : "N"; + } + + public String getInConveyLineCardTrayAlarm$() { + return this.inConveyLineCardTrayAlarm ? "Y" : "N"; + } + + public String getOutConveyLineCardTrayAlarm$() { + return this.outConveyLineCardTrayAlarm ? "Y" : "N"; + } + + public String getPlatPositionDeviationAlarm$() { + return this.platPositionDeviationAlarm ? "Y" : "N"; + } + + public String getPlatTorqueDeviationAlarm$() { + return this.platTorqueDeviationAlarm ? "Y" : "N"; + } + + public String getPlatShuttleCheck$() { + return this.platShuttleCheck ? "Y" : "N"; + } + + public String getPakMk$() { + return this.pakMk ? "Y" : "N"; + } + +} diff --git a/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java index 03ef340..2af7d20 100644 --- a/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java +++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java @@ -10,81 +10,4 @@ */ private Integer shuttleNo; - // 浠诲姟淇℃伅 --------------------------------------------------------- - /** - * 96.鍏ュ簱浠诲姟涓� - */ - private boolean pakInTask; - - /** - * 97. 鍑哄簱浠诲姟涓� - */ - private boolean pakOutTask; - - /** - * 98. 绉诲簱浠诲姟涓� - */ - private boolean pakMoveTask; - - /** - * 99. 鍥炲師鐐逛换鍔′腑 - */ - private boolean goHpTask; - - /** - * 100. 鍘诲弽鍘熺偣浠诲姟涓� - */ - private boolean goOHpTask; - - /** - * 101. 鍘诲師鐐归伩璁╀綅 - */ - private boolean goHpAvoid; - - /** - * 102. 鍘诲弽鍘熺偣閬胯浣� - */ - private boolean goOHpAvoid; - - /** - * 104. 鍏ュ簱鍙栫┖缁撴潫 - */ - private boolean pakInEmpty; - - /** - * 105. 鍏ュ簱姝e父缁撴潫 - */ - private boolean pakInFinish; - - /** - * 106. 鍑哄簱鍙栫┖缁撴潫 - */ - private boolean pakOutEmpty; - - /** - * 107. 鍑哄簱姝e父缁撴潫 - */ - private boolean pakOutFinish; - - /** - * 108. 鍘诲師鐐归伩璁╁畬鎴� - */ - private boolean goHpAvoidFinish; - - /** - * 109. 鍘诲弽鍘熺偣閬胯瀹屾垚 - */ - private boolean goOHpAvoidFinish; - - /** - * 110. 鍘诲師鐐归伩璁╁畬鎴� - */ - private boolean goHpAvoidErr; - - /** - * 111. 鍘诲弽鍘熺偣閬胯瀹屾垚 - */ - private boolean goOHpAvoidErr; - - } diff --git a/src/main/java/com/zy/asrs/entity/BasLift.java b/src/main/java/com/zy/asrs/entity/BasLift.java new file mode 100644 index 0000000..0276d84 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasLift.java @@ -0,0 +1,299 @@ +package com.zy.asrs.entity; + +import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.enums.IdType; +import com.baomidou.mybatisplus.annotations.TableField; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; +import com.core.common.SpringUtils; +import com.zy.system.service.UserService; +import com.zy.system.entity.User; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotations.TableName; +import java.io.Serializable; + +@Data +@TableName("asr_bas_lift") +public class BasLift implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 鎻愬崌鏈哄彿 + */ + @ApiModelProperty(value= "鎻愬崌鏈哄彿") + @TableId(value = "lift_no", type = IdType.INPUT) + @TableField("lift_no") + private Integer liftNo; + + /** + * 褰撳墠浠诲姟鐘舵�� + */ + @ApiModelProperty(value= "褰撳墠浠诲姟鐘舵��") + @TableField("status") + private Integer status; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value= "浠诲姟鍙�") + @TableField("wrk_no") + private Integer wrkNo; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("update_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + @TableField("update_by") + private Long updateBy; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value= "澶囨敞") + private String memo; + + /** + * 浣滀笟鏍囪 + */ + @ApiModelProperty(value= "浣滀笟鏍囪") + @TableField("pak_mk") + private Boolean pakMk; + + /** + * 鎻愬崌鏈洪攣瀹� + */ + @ApiModelProperty(value= "鎻愬崌鏈洪攣瀹�") + @TableField("lift_lock") + private Boolean liftLock; + + /** + * 浣嶇疆鍒拌揪鍙嶉 + */ + @ApiModelProperty(value= "浣嶇疆鍒拌揪鍙嶉") + @TableField("position_arrival_feedback") + private Integer positionArrivalFeedback; + + /** + * 鍑嗗灏辩华 + */ + @ApiModelProperty(value= "鍑嗗灏辩华") + private Boolean ready; + + /** + * 杩愯涓� + */ + @ApiModelProperty(value= "杩愯涓�") + private Boolean running; + + /** + * 鑱旀満/鍗曟満 + */ + @ApiModelProperty(value= "鑱旀満/鍗曟満") + private Boolean mode; + + /** + * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣 + */ + @ApiModelProperty(value= "杈撻�佺嚎鍓嶇鍏夌數鏈夎揣") + @TableField("line_front_has_stock") + private Boolean lineFrontHasStock; + + /** + * 杈撻�佺嚎姝h浆鍙嶉 + */ + @ApiModelProperty(value= "杈撻�佺嚎姝h浆鍙嶉") + @TableField("forward_rotation_feedback") + private Boolean forwardRotationFeedback; + + /** + * 杈撻�佺嚎鍙嶈浆鍙嶉 + */ + @ApiModelProperty(value= "杈撻�佺嚎鍙嶈浆鍙嶉") + @TableField("reverse_feedback") + private Boolean reverseFeedback; + + /** + * 杈撻�佺嚎鐢垫満杩囪浇 + */ + @ApiModelProperty(value= "杈撻�佺嚎鐢垫満杩囪浇") + @TableField("motor_overload") + private Boolean motorOverload; + + /** + * 杈撻�佺嚎鏈鍏夌數鏈夎揣 + */ + @ApiModelProperty(value= "杈撻�佺嚎鏈鍏夌數鏈夎揣") + @TableField("line_end_has_stock") + private Boolean lineEndHasStock; + + /** + * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀� + */ + @ApiModelProperty(value= "杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�") + @TableField("in_convey_line_card_tray_alarm") + private Boolean inConveyLineCardTrayAlarm; + + /** + * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀� + */ + @ApiModelProperty(value= "鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�") + @TableField("out_convey_line_card_tray_alarm") + private Boolean outConveyLineCardTrayAlarm; + + /** + * 骞冲彴浣嶇疆鍋忓樊鎶ヨ + */ + @ApiModelProperty(value= "骞冲彴浣嶇疆鍋忓樊鎶ヨ") + @TableField("plat_position_deviation_alarm") + private Boolean platPositionDeviationAlarm; + + /** + * 骞冲彴鎵煩鍋忓樊鎶ヨ + */ + @ApiModelProperty(value= "骞冲彴鎵煩鍋忓樊鎶ヨ") + @TableField("plat_torque_deviation_alarm") + private Boolean platTorqueDeviationAlarm; + + /** + * 骞冲彴鍥涘悜杞︽娴� + */ + @ApiModelProperty(value= "骞冲彴鍥涘悜杞︽娴�") + @TableField("plat_shuttle_check") + private Boolean platShuttleCheck; + + /** + * 鏈氨缁姸鎬� + */ + @ApiModelProperty(value= "鏈氨缁姸鎬�") + @TableField("not_ready") + private Integer notReady; + + /** + * 浼烘湇1閿欒 + */ + @ApiModelProperty(value= "浼烘湇1閿欒") + @TableField("servo_error1") + private Integer servoError1; + + /** + * 浼烘湇2閿欒 + */ + @ApiModelProperty(value= "浼烘湇2閿欒") + @TableField("servo_error2") + private Integer servoError2; + + /** + * 浼烘湇3閿欒 + */ + @ApiModelProperty(value= "浼烘湇3閿欒") + @TableField("servo_error3") + private Integer servoError3; + + /** + * 浼烘湇4閿欒 + */ + @ApiModelProperty(value= "浼烘湇4閿欒") + @TableField("servo_error4") + private Integer servoError4; + + /** + * 鎻愬崌鏈哄疄闄呴�熷害鍙嶉 + */ + @ApiModelProperty(value= "鎻愬崌鏈哄疄闄呴�熷害鍙嶉") + @TableField("lift_actual_speed") + private Integer liftActualSpeed; + + public BasLift() {} + + public BasLift(Integer liftNo,Integer status,Integer wrkNo,Date updateTime,Long updateBy,String memo,Boolean pakMk,Boolean liftLock,Integer positionArrivalFeedback,Boolean ready,Boolean running,Boolean mode,Boolean lineFrontHasStock,Boolean forwardRotationFeedback,Boolean reverseFeedback,Boolean motorOverload,Boolean lineEndHasStock,Boolean inConveyLineCardTrayAlarm,Boolean outConveyLineCardTrayAlarm,Boolean platPositionDeviationAlarm,Boolean platTorqueDeviationAlarm,Boolean platShuttleCheck,Integer notReady,Integer servoError1,Integer servoError2,Integer servoError3,Integer servoError4,Integer liftActualSpeed) { + this.liftNo = liftNo; + this.status = status; + this.wrkNo = wrkNo; + this.updateTime = updateTime; + this.updateBy = updateBy; + this.memo = memo; + this.pakMk = pakMk; + this.liftLock = liftLock; + this.positionArrivalFeedback = positionArrivalFeedback; + this.ready = ready; + this.running = running; + this.mode = mode; + this.lineFrontHasStock = lineFrontHasStock; + this.forwardRotationFeedback = forwardRotationFeedback; + this.reverseFeedback = reverseFeedback; + this.motorOverload = motorOverload; + this.lineEndHasStock = lineEndHasStock; + this.inConveyLineCardTrayAlarm = inConveyLineCardTrayAlarm; + this.outConveyLineCardTrayAlarm = outConveyLineCardTrayAlarm; + this.platPositionDeviationAlarm = platPositionDeviationAlarm; + this.platTorqueDeviationAlarm = platTorqueDeviationAlarm; + this.platShuttleCheck = platShuttleCheck; + this.notReady = notReady; + this.servoError1 = servoError1; + this.servoError2 = servoError2; + this.servoError3 = servoError3; + this.servoError4 = servoError4; + this.liftActualSpeed = liftActualSpeed; + } + +// BasLift basLift = new BasLift( +// null, // 鎻愬崌鏈哄彿[闈炵┖] +// null, // 褰撳墠鎻愬崌鏈虹姸鎬� +// null, // 浠诲姟鍙� +// null, // 淇敼鏃堕棿 +// null, // 淇敼浜哄憳 +// null, // 澶囨敞 +// null, // 浣滀笟鏍囪 +// null, // 鎻愬崌鏈洪攣瀹� +// null, // 浣嶇疆鍒拌揪鍙嶉 +// null, // 鍑嗗灏辩华 +// null, // 杩愯涓� +// null, // 鑱旀満/鍗曟満 +// null, // 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣 +// null, // 杈撻�佺嚎姝h浆鍙嶉 +// null, // 杈撻�佺嚎鍙嶈浆鍙嶉 +// null, // 杈撻�佺嚎鐢垫満杩囪浇 +// null, // 杈撻�佺嚎鏈鍏夌數鏈夎揣 +// null, // 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀� +// null, // 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀� +// null, // 骞冲彴浣嶇疆鍋忓樊鎶ヨ +// null, // 骞冲彴鎵煩鍋忓樊鎶ヨ +// null, // 骞冲彴鍥涘悜杞︽娴� +// null, // 鏈氨缁姸鎬� +// null, // 浼烘湇1閿欒 +// null, // 浼烘湇2閿欒 +// null, // 浼烘湇3閿欒 +// null, // 浼烘湇4閿欒 +// null // 鎻愬崌鏈哄疄闄呴�熷害鍙嶉 +// ); + + public String getUpdateTime$(){ + if (Cools.isEmpty(this.updateTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); + } + + public String getUpdateBy$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.updateBy); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getUsername()); + } + return null; + } + + +} diff --git a/src/main/java/com/zy/asrs/entity/BasLiftOpt.java b/src/main/java/com/zy/asrs/entity/BasLiftOpt.java new file mode 100644 index 0000000..932332f --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasLiftOpt.java @@ -0,0 +1,126 @@ +package com.zy.asrs.entity; + +import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.enums.IdType; +import com.baomidou.mybatisplus.annotations.TableField; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import com.core.common.SpringUtils; +import com.zy.system.service.UserService; +import com.zy.system.entity.User; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotations.TableName; +import java.io.Serializable; + +@Data +@TableName("asr_bas_lift_opt") +public class BasLiftOpt implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value= "") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value= "浠诲姟鍙�") + @TableField("wrk_no") + private Integer wrkNo; + + /** + * 鎻愬崌鏈哄彿 + */ + @ApiModelProperty(value= "鎻愬崌鏈哄彿") + @TableField("lift_no") + private Integer liftNo; + + /** + * 涓嬪彂鏃堕棿 + */ + @ApiModelProperty(value= "涓嬪彂鏃堕棿") + @TableField("send_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date sendTime; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("update_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + @TableField("update_by") + private Long updateBy; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value= "澶囨敞") + private String memo; + + /** + * 鍛戒护 + */ + @ApiModelProperty(value= "鍛戒护") + private String command; + + public BasLiftOpt() {} + + public BasLiftOpt(Integer wrkNo,Integer liftNo,Date sendTime,Date updateTime,Long updateBy,String memo,String command) { + this.wrkNo = wrkNo; + this.liftNo = liftNo; + this.sendTime = sendTime; + this.updateTime = updateTime; + this.updateBy = updateBy; + this.memo = memo; + this.command = command; + } + +// BasLiftOpt basLiftOpt = new BasLiftOpt( +// null, // 浠诲姟鍙� +// null, // 鎻愬崌鏈哄彿 +// null, // 涓嬪彂鏃堕棿 +// null, // 浣滀笟 +// null, // 淇敼鏃堕棿 +// null, // 淇敼浜哄憳 +// null, // 澶囨敞 +// null // 鍛戒护 +// ); + + public String getSendTime$(){ + if (Cools.isEmpty(this.sendTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime); + } + + public String getUpdateTime$(){ + if (Cools.isEmpty(this.updateTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); + } + + public String getUpdateBy$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.updateBy); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getUsername()); + } + return null; + } + + +} diff --git a/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java b/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java new file mode 100644 index 0000000..158122e --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.zy.asrs.entity.BasLift; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasLiftMapper extends BaseMapper<BasLift> { + +} diff --git a/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java b/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java new file mode 100644 index 0000000..0acb88d --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.zy.asrs.entity.BasLiftOpt; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasLiftOptMapper extends BaseMapper<BasLiftOpt> { + +} diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java index 80a0f32..43d11a3 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java @@ -99,4 +99,8 @@ WrkMast selectRackInStep48(Short workNo,Integer sourceStaNo); WrkMast selectByWorkNo59(Integer workNo); + + WrkMast selectLiftStep6(); + + WrkMast selectByWorkNo7(Integer workNo); } diff --git a/src/main/java/com/zy/asrs/service/BasLiftOptService.java b/src/main/java/com/zy/asrs/service/BasLiftOptService.java new file mode 100644 index 0000000..40961e0 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasLiftOptService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.zy.asrs.entity.BasLiftOpt; +import com.baomidou.mybatisplus.service.IService; + +public interface BasLiftOptService extends IService<BasLiftOpt> { + +} diff --git a/src/main/java/com/zy/asrs/service/BasLiftService.java b/src/main/java/com/zy/asrs/service/BasLiftService.java new file mode 100644 index 0000000..5f39b02 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasLiftService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.zy.asrs.entity.BasLift; +import com.baomidou.mybatisplus.service.IService; + +public interface BasLiftService extends IService<BasLift> { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java new file mode 100644 index 0000000..a581c4b --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java @@ -0,0 +1,12 @@ +package com.zy.asrs.service.impl; + +import com.zy.asrs.mapper.BasLiftOptMapper; +import com.zy.asrs.entity.BasLiftOpt; +import com.zy.asrs.service.BasLiftOptService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("basLiftOptService") +public class BasLiftOptServiceImpl extends ServiceImpl<BasLiftOptMapper, BasLiftOpt> implements BasLiftOptService { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java new file mode 100644 index 0000000..868706d --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java @@ -0,0 +1,12 @@ +package com.zy.asrs.service.impl; + +import com.zy.asrs.mapper.BasLiftMapper; +import com.zy.asrs.entity.BasLift; +import com.zy.asrs.service.BasLiftService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("basLiftService") +public class BasLiftServiceImpl extends ServiceImpl<BasLiftMapper, BasLift> implements BasLiftService { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 8bb3c30..0db902b 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -23,10 +23,7 @@ import com.zy.core.enums.*; import com.zy.core.model.*; import com.zy.core.model.command.*; -import com.zy.core.model.protocol.CrnProtocol; -import com.zy.core.model.protocol.ShuttleProtocol; -import com.zy.core.model.protocol.StaProtocol; -import com.zy.core.model.protocol.SteProtocol; +import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; import lombok.extern.slf4j.Slf4j; @@ -673,9 +670,8 @@ //鍏ュ嚭搴撴ā寮� assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue()); //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - Short currentCode = shuttleProtocol.getCurrentCode(); - LocMast currentLocMast = locMastService.queryByQrCode(currentCode.toString()); - assignCommand.setSourceLocNo(currentLocMast.getLocNo()); + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + assignCommand.setSourceLocNo(currentLocNo); if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) { //鍚屼竴灞� @@ -688,7 +684,6 @@ //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿 //灏忚溅褰撳墠灞傞珮 - String currentLocNo = currentLocMast.getLocNo(); Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); //鑾峰彇鎻愬崌鏈� @@ -736,9 +731,7 @@ continue; } - Short currentCode = shuttleProtocol.getCurrentCode();//鍥涘悜绌挎杞﹀綋鍓嶄綅缃簩缁寸爜 - LocMast shuttleLocMast = locMastService.queryByQrCode(currentCode.toString());//鎵惧埌浜岀淮鐮佸搴旂殑搴撲綅璁板綍 - String shuttleLocNo = shuttleLocMast.getLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 + String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 String shuttleLocNoLay = shuttleLocNo.substring(shuttleLocNo.length() - 2, shuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� if (lay.equals(shuttleLocNoLay)) { //褰撳墠鍥涘悜绌挎杞﹀拰宸ヤ綔妗d换鍔″湪鍚屼竴灞傦紝鍒欒皟閰嶈杞﹁締 @@ -752,9 +745,7 @@ recentShuttle = shuttleThread; }else { ShuttleProtocol recentShuttleProtocol = recentShuttle.getShuttleProtocol();//鐩墠鏈�杩戠┛姊溅 - Short recentShuttleCurrentCode = recentShuttleProtocol.getCurrentCode();//鐩墠鏈�杩戠┛姊溅浣嶇疆浜岀淮鐮� - LocMast recentShuttleLocMast = locMastService.queryByQrCode(recentShuttleCurrentCode.toString());//鎵惧埌浜岀淮鐮佸搴旂殑搴撲綅璁板綍 - String recentShuttleLocNo = recentShuttleLocMast.getLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 + String recentShuttleLocNo = recentShuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay); @@ -838,7 +829,9 @@ shuttleProtocol.setLocNo(null); //鏍囪澶嶄綅 shuttleProtocol.setPakMk(true); - News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚爢鍨涙満鍙�={}", shuttleProtocol.getShuttleNo()); + //浠诲姟鎸囦护娓呴浂 + shuttleProtocol.setAssignCommand(null); + News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); } else { News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); } @@ -849,6 +842,152 @@ } /** + * 鎻愬崌鏈轰换鍔� + */ + public synchronized void liftIoExecute() { + for (LiftSlave liftSlave : slaveProperties.getLift()) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + continue; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬� + if (!liftProtocol.isIdle()) { + continue; + } + + //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� + WrkMast wrkMast = wrkMastMapper.selectLiftStep6(); + if (wrkMast == null) { + continue; + } + + //缁欐彁鍗囨満鍒嗛厤浠诲姟 + liftProtocol.setLiftLock(true);//閿佸畾鎻愬崌鏈� + liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙� + liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� + + //鎵惧埌鍥涘悜绌挎杞︾殑绾跨▼ + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, liftProtocol.getShuttleNo().intValue()); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + continue; + } + + //鍛戒护list + ArrayList<LiftCommand> commands = new ArrayList<>(); + + //褰撳墠绌挎杞﹀簱浣嶅彿 + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + //褰撳墠绌挎杞︽ゼ灞� + int currentLocNoLey = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); + + //宸ヤ綔妗g洰鏍囧簱浣嶅彿 + String wrkMastLocNo = wrkMast.getLocNo(); + //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� + int wrkMastLocNoLey = Integer.parseInt(wrkMastLocNo.substring(wrkMastLocNo.length() - 2, wrkMastLocNo.length())); + + //鎻愬崌鏈哄綋鍓嶆ゼ灞� + int liftLev = liftProtocol.getLev().intValue(); + if (liftLev != currentLocNoLey) { + //涓嶅悓妤煎眰 + LiftCommand command1 = new LiftCommand(); + command1.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿 + command1.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙� + command1.setRun((short) 1);//鍗囬檷 + command1.setDistPosition((short) currentLocNoLey);//鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�) + command1.setLiftLock(true);//閿佸畾鎻愬崌鏈� + + commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list + } + + //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵 + LiftCommand command2 = new LiftCommand(); + command2.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿 + command2.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙� + command2.setRun((short) 6);//杈撻�佺嚎杩愪綔 + command2.setLiftLock(true);//閿佸畾鎻愬崌鏈� + + commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list + + //鎻愬崌鏈烘惉杩愬洓鍚戠┛姊溅 + LiftCommand command3 = new LiftCommand(); + command3.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿 + command3.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙� + command3.setRun((short) 1);//鍗囬檷 + command3.setDistPosition((short) wrkMastLocNoLey);//宸ヤ綔妗g洰鏍囨ゼ灞� + command3.setLiftLock(true);//閿佸畾鎻愬崌鏈� + + commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list + + //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲嚭鍘� + //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵 + LiftCommand command4 = new LiftCommand(); + command4.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿 + command4.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙� + command4.setRun((short) 3);//杈撻�佺嚎杩愪綔 + command4.setLiftLock(true);//閿佸畾鎻愬崌鏈� + + commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list + + wrkMast.setWrkSts(7L);//绉诲姩浠诲姟 + //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣� + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(liftProtocol.getTaskNo()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + } + } + } + + /** + * 鎻愬崌鏈轰换鍔″畬鎴� + */ + public synchronized void liftFinished() { + for (LiftSlave liftSlave : slaveProperties.getLift()) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + continue; + } + + //鎻愬崌鏈轰负绛夊緟纭 + if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0) { + //灏嗕换鍔℃。鏍囪涓哄畬鎴� + WrkMast wrkMast = wrkMastMapper.selectByWorkNo7(liftProtocol.getTaskNo().intValue()); + if (wrkMast != null) { + wrkMast.setWrkSts(8L); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + liftProtocol.setTaskNo((short) 0); + //鏍囪澶嶄綅 + liftProtocol.setPakMk(true); + //浠诲姟鎸囦护娓呴浂 + liftProtocol.setAssignCommand(null); + News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); + } else { + News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); + } + } + } + } + } + + /** * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 */ public synchronized void crnIoExecute(){ diff --git a/src/main/java/com/zy/common/utils/CommonUtils.java b/src/main/java/com/zy/common/utils/CommonUtils.java index 7d850db..2b371c0 100644 --- a/src/main/java/com/zy/common/utils/CommonUtils.java +++ b/src/main/java/com/zy/common/utils/CommonUtils.java @@ -40,4 +40,8 @@ return new short[]{byteToShort2, byteToShort}; } + public static boolean shortToBoolean(Short num) { + return num != 0; + } + } diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index a2f1a1d..b032df4 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -61,6 +61,10 @@ mainService.shuttleIoExecute(); //鍥涘悜绌挎杞︿换鍔″畬鎴� mainService.shuttleFinished(); + //鎻愬崌鏈轰换鍔� + mainService.liftIoExecute(); + //鎻愬崌鏈轰换鍔″畬鎴� + mainService.liftFinished(); // 鍏ュ簱 ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗g殑瀹屾垚鎿嶄綔 mainService.storeFinished(); // 鍏ュ簱 ===>> 鎵ц绌挎杞﹀宸ヤ綔妗g殑瀹屾垚鎿嶄綔 diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index 48d373b..665d92d 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -108,7 +108,7 @@ // 鍒濆鍖栨彁鍗囨満 News.info("鍒濆鍖栨彁鍗囨満........................................................"); for (LiftSlave liftSlave : slaveProperties.getLift()) { - LiftThread liftThread = new LiftThread(liftSlave); + LiftThread liftThread = new LiftThread(liftSlave, redisUtil); new Thread(liftThread).start(); SlaveConnection.put(SlaveType.Lift, liftSlave.getId(), liftThread); } diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java index bc17bec..cad0ffb 100644 --- a/src/main/java/com/zy/core/cache/MessageQueue.java +++ b/src/main/java/com/zy/core/cache/MessageQueue.java @@ -31,6 +31,8 @@ private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>(); //鍥涘悜绌挎杞q浜ゆ崲鏈� private static final Map<Integer, ConcurrentLinkedQueue<Task>> SHUTTLE_EXCHANGE = new ConcurrentHashMap<>(); + //鎻愬崌鏈簃q浜ゆ崲鏈� + private static final Map<Integer, ConcurrentLinkedQueue<Task>> LIFT_EXCHANGE = new ConcurrentHashMap<>(); /** * mq 浜ゆ崲鏈哄垵濮嬪寲 @@ -61,6 +63,9 @@ case Shuttle: SHUTTLE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); break; + case Lift: + LIFT_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); + break; default: break; } @@ -88,6 +93,8 @@ return CAR_EXCHANGE.get(id).offer(task); case Shuttle: return SHUTTLE_EXCHANGE.get(id).offer(task); + case Lift: + return LIFT_EXCHANGE.get(id).offer(task); default: return false; } @@ -115,6 +122,8 @@ return CAR_EXCHANGE.get(id).poll(); case Shuttle: return SHUTTLE_EXCHANGE.get(id).poll(); + case Lift: + return LIFT_EXCHANGE.get(id).poll(); default: return null; } @@ -141,6 +150,8 @@ return CAR_EXCHANGE.get(id).peek(); case Shuttle: return SHUTTLE_EXCHANGE.get(id).peek(); + case Lift: + return LIFT_EXCHANGE.get(id).peek(); default: return null; } @@ -172,6 +183,9 @@ case Shuttle: SHUTTLE_EXCHANGE.get(id).clear(); break; + case Lift: + LIFT_EXCHANGE.get(id).clear(); + break; default: break; } diff --git a/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java b/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java new file mode 100644 index 0000000..f3c8e67 --- /dev/null +++ b/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java @@ -0,0 +1,40 @@ +package com.zy.core.enums; + +public enum LiftProtocolStatusType { + IDLE(1, "绌洪棽"), + WORKING(2, "浣滀笟涓�"), + WAITING(3, "绛夊緟纭"), + ; + + public Integer id; + public String desc; + + LiftProtocolStatusType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static LiftProtocolStatusType get(Integer id) { + if (null == id) { + return null; + } + for (LiftProtocolStatusType type : LiftProtocolStatusType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static LiftProtocolStatusType get(LiftProtocolStatusType type) { + if (null == type) { + return null; + } + for (LiftProtocolStatusType type2 : LiftProtocolStatusType.values()) { + if (type2 == type) { + return type2; + } + } + return null; + } +} diff --git a/src/main/java/com/zy/core/model/command/LiftAssignCommand.java b/src/main/java/com/zy/core/model/command/LiftAssignCommand.java new file mode 100644 index 0000000..f164e46 --- /dev/null +++ b/src/main/java/com/zy/core/model/command/LiftAssignCommand.java @@ -0,0 +1,40 @@ +package com.zy.core.model.command; + +import lombok.Data; + +import java.util.List; + +@Data +public class LiftAssignCommand { + + /** + * 鎻愬崌鏈哄彿 + */ + private Short liftNo = 0; + + /** + * 浠诲姟鍙� + */ + private Short taskNo = 0; + + /** + * 鍛戒护list + */ + private List<LiftCommand> commands; + + /** + * 浣滀笟绫诲瀷 + * 1: 涓婂崌涓�灞� + * 2锛� 涓嬮檷涓�灞� + * 3锛� 鏈夎揣姝h浆 + * 4锛� 鏈夎揣鍙嶈浆 + * 5锛� 澶嶄綅 + */ + private Short taskMode = 0; + + /** + * 鏄惁鑷姩锛宼rue锛氳嚜鍔ㄦā寮忥紝false锛氭墜鍔ㄦā寮� + */ + private Boolean auto = true; + +} diff --git a/src/main/java/com/zy/core/model/command/LiftCommand.java b/src/main/java/com/zy/core/model/command/LiftCommand.java index bb1d3d0..b1b1755 100644 --- a/src/main/java/com/zy/core/model/command/LiftCommand.java +++ b/src/main/java/com/zy/core/model/command/LiftCommand.java @@ -12,22 +12,12 @@ /** * 鎻愬崌鏈哄彿 */ - private Integer liftNo = 0; + private Short liftNo = 0; /** * 浠诲姟鍙� */ - private Integer taskNo = 0; - - /** - * 浣滀笟绫诲瀷 - */ - private Short taskMode = 0; - - /** - * 浠诲姟纭 false锛氭湭纭 true锛氬凡纭 - */ - private Boolean complete = Boolean.FALSE; + private Short taskNo = 0; /** * 寮�濮嬭繍琛� @@ -65,6 +55,9 @@ private Boolean liftLock; public Short getLiftLockShortValue() { + if (liftLock == null) { + return (short) 0; + } return liftLock ? (short) 1 : (short) 0; } diff --git a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java index 07c1e2c..623a7e3 100644 --- a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java +++ b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java @@ -2,6 +2,9 @@ import lombok.Data; +import java.util.ArrayList; +import java.util.List; + @Data public class ShuttleAssignCommand { @@ -38,4 +41,14 @@ */ private String locNo; + /** + * 鍛戒护list + */ + private List<ShuttleCommand> commands = new ArrayList<>(); + + /** + * 鏄惁鑷姩锛宼rue锛氳嚜鍔ㄦā寮忥紝false锛氭墜鍔ㄦā寮� + */ + private Boolean auto = true; + } diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java index cd00e23..ff69c13 100644 --- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java @@ -1,5 +1,13 @@ package com.zy.core.model.protocol; +import com.core.common.SpringUtils; +import com.zy.asrs.service.BasShuttleService; +import com.zy.core.News; +import com.zy.core.enums.LiftProtocolStatusType; +import com.zy.core.enums.ShuttleErrorCodeType; +import com.zy.core.enums.ShuttleProtocolStatusType; +import com.zy.core.enums.ShuttleStatusType; +import com.zy.core.model.command.LiftAssignCommand; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -19,6 +27,21 @@ * 浠诲姟鍙� */ private Short taskNo = 0; + + /** + * 鍥涘悜绌挎杞﹀彿 + */ + private Short shuttleNo = 0; + + /** + * 褰撳墠鎻愬崌鏈虹姸鎬侊紙鍐呴儴鑷垜缁存姢锛� + */ + private Integer protocolStatus = 1; + + /** + * 褰撳墠鎻愬崌鏈虹姸鎬佹灇涓� + */ + private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.IDLE; /** * 灞� @@ -161,8 +184,51 @@ */ private Short liftActualSpeed; + /** + * 浣滀笟鏍囪 + */ + private Boolean pakMk = true; + + /** + * 浠诲姟鍛戒护 + */ + private LiftAssignCommand assignCommand; + public Short getLiftLockShortValue() { return liftLock ? (short) 1 : (short) 0; } + /** + * 璁剧疆鎻愬崌鏈虹姸鎬� + */ + public void setProtocolStatus(Integer status) { + this.protocolStatus = status; + this.protocolStatusType = LiftProtocolStatusType.get(status); + } + + /** + * 璁剧疆鎻愬崌鏈虹姸鎬� + */ + public void setProtocolStatus(LiftProtocolStatusType status) { + this.protocolStatus = status.id; + this.protocolStatusType = status; + } + + // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵�� + public Boolean isIdle() { + boolean res = this.taskNo == 0 + && !this.liftLock + && this.ready + && !this.running + && this.mode + && this.pakMk.equals(true) + ; + return res; + } + + public void setPositionArrivalFeedback(Short position) { + this.lev = position;//灞傞珮 + this.positionArrivalFeedback = position;//浣嶇疆鍒拌揪鍙嶉 + } + } diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java index 8e407ec..d370e72 100644 --- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java @@ -1,7 +1,9 @@ package com.zy.core.model.protocol; import com.core.common.SpringUtils; +import com.zy.asrs.entity.LocMast; import com.zy.asrs.service.BasShuttleService; +import com.zy.asrs.service.LocMastService; import com.zy.core.News; import com.zy.core.enums.ShuttleErrorCodeType; import com.zy.core.enums.ShuttleProtocolStatusType; @@ -228,4 +230,18 @@ } } + //閫氳繃褰撳墠浜岀淮鐮佽幏鍙栧綋鍓嶅簱浣嶅彿 + public String getCurrentLocNo() { + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + if (locMastService == null) { + return null; + } + //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + LocMast currentLocMast = locMastService.queryByQrCode(this.currentCode.toString()); + if (currentLocMast == null) { + return null; + } + return currentLocMast.getLocNo(); + } + } diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java index 0f9a811..34ea0c1 100644 --- a/src/main/java/com/zy/core/thread/LiftThread.java +++ b/src/main/java/com/zy/core/thread/LiftThread.java @@ -5,22 +5,40 @@ import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.ModBus.ModbusTcpNet; import com.alibaba.fastjson.JSON; +import com.core.common.Cools; import com.core.common.DateUtils; +import com.core.common.SpringUtils; import com.core.exception.CoolException; +import com.zy.asrs.entity.BasLift; +import com.zy.asrs.entity.BasLiftOpt; +import com.zy.asrs.entity.BasShuttle; +import com.zy.asrs.entity.BasShuttleOpt; +import com.zy.asrs.service.BasLiftOptService; +import com.zy.asrs.service.BasLiftService; +import com.zy.asrs.service.BasShuttleOptService; +import com.zy.asrs.service.BasShuttleService; +import com.zy.common.utils.CommonUtils; +import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; -import com.zy.core.enums.SlaveType; +import com.zy.core.enums.*; import com.zy.core.model.LiftSlave; import com.zy.core.model.Task; +import com.zy.core.model.command.LiftAssignCommand; import com.zy.core.model.command.LiftCommand; +import com.zy.core.model.command.ShuttleAssignCommand; +import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.protocol.LiftProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.List; /** * 鎻愬崌鏈虹嚎绋� @@ -32,9 +50,11 @@ private ModbusTcpNet modbusTcpNet; private LiftSlave slave; private LiftProtocol liftProtocol; + private RedisUtil redisUtil; - public LiftThread(LiftSlave slave) { + public LiftThread(LiftSlave slave,RedisUtil redisUtil) { this.slave = slave; + this.redisUtil = redisUtil; } @Override @@ -56,6 +76,10 @@ case 2: write((LiftCommand) task.getData()); break; + //鍒嗛厤浠诲姟 + case 3: + assignWork((LiftAssignCommand) task.getData()); + break; default: break; } @@ -70,7 +94,7 @@ public boolean connect() { boolean result = false; //-------------------------鎻愬崌鏈鸿繛鎺ユ柟娉�------------------------// - modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x01); + modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x02); // 褰撲綘闇�瑕佹寚瀹氭牸寮忕殑鏁版嵁瑙f瀽鏃讹紝灏遍渶瑕佽缃笅闈㈢殑杩欎釜淇℃伅 modbusTcpNet.setDataFormat(DataFormat.ABCD); OperateResult connect = modbusTcpNet.ConnectServer(); @@ -94,7 +118,7 @@ private void readStatus() { try { - OperateResultExOne<byte[]> result = modbusTcpNet.Read("29", (short) 17); + OperateResultExOne<byte[]> result = modbusTcpNet.Read("29", (short) 50); if (result.IsSuccess) { if (null == liftProtocol) { liftProtocol = new LiftProtocol(); @@ -105,55 +129,106 @@ //鑾峰彇鏁版嵁 byte[] content = result.Content; //鎻愬崌鏈洪攣瀹� - liftProtocol.setLiftLock(modbusTcpNet.getByteTransform().TransBool(content,0)); + liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0))); //浣嶇疆鍒拌揪鍙嶉 liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2)); //鍑嗗灏辩华 - liftProtocol.setReady(modbusTcpNet.getByteTransform().TransBool(content,3)); + liftProtocol.setReady(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,4))); //杩愯涓� - liftProtocol.setRunning(modbusTcpNet.getByteTransform().TransBool(content,4)); + liftProtocol.setRunning(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,6))); //鑱旀満/鍗曟満 - liftProtocol.setMode(modbusTcpNet.getByteTransform().TransBool(content,5)); + liftProtocol.setMode(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,8))); + + //浠ヤ笅鍙傛暟骞舵湭杩涜璋冩暣(闇�瑕佸悗缁拡瀵瑰疄鏈鸿繘琛岃幏鍙栧拰璋冭瘯) //杈撻�佺嚎鍓嶇鍏夌數鏈夎揣 - liftProtocol.setLineFrontHasStock(modbusTcpNet.getByteTransform().TransBool(content,6)); + liftProtocol.setLineFrontHasStock(modbusTcpNet.getByteTransform().TransBool(content,10)); //杈撻�佺嚎姝h浆鍙嶉 - liftProtocol.setForwardRotationFeedback(modbusTcpNet.getByteTransform().TransBool(content,7)); + liftProtocol.setForwardRotationFeedback(modbusTcpNet.getByteTransform().TransBool(content,12)); //杈撻�佺嚎鍙嶈浆鍙嶉 - liftProtocol.setReverseFeedback(modbusTcpNet.getByteTransform().TransBool(content,8)); + liftProtocol.setReverseFeedback(modbusTcpNet.getByteTransform().TransBool(content,14)); //杈撻�佺嚎鐢垫満杩囪浇 - liftProtocol.setMotorOverload(modbusTcpNet.getByteTransform().TransBool(content,9)); + liftProtocol.setMotorOverload(modbusTcpNet.getByteTransform().TransBool(content,16)); //杈撻�佺嚎鏈鍏夌數鏈夎揣 - liftProtocol.setLineEndHasStock(modbusTcpNet.getByteTransform().TransBool(content,10)); + liftProtocol.setLineEndHasStock(modbusTcpNet.getByteTransform().TransBool(content,18)); //杩涜緭閫佺嚎鍗℃墭鐩樻姤璀� - liftProtocol.setInConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,11)); + liftProtocol.setInConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,20)); //鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀� - liftProtocol.setOutConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,12)); + liftProtocol.setOutConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,22)); //骞冲彴浣嶇疆鍋忓樊鎶ヨ - liftProtocol.setPlatPositionDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,13)); + liftProtocol.setPlatPositionDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,24)); //骞冲彴鎵煩鍋忓樊鎶ヨ - liftProtocol.setPlatTorqueDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,14)); + liftProtocol.setPlatTorqueDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,26)); //骞冲彴鍥涘悜杞︽娴� - liftProtocol.setPlatShuttleCheck(modbusTcpNet.getByteTransform().TransBool(content,15)); + liftProtocol.setPlatShuttleCheck(modbusTcpNet.getByteTransform().TransBool(content,28)); //鏈氨缁姸鎬� - liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,16)); + liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,30)); //浼烘湇1閿欒 - liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,17)); + liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,32)); //浼烘湇2閿欒 - liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,18)); + liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,34)); //浼烘湇3閿欒 - liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,19)); + liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,36)); //浼烘湇4閿欒 - liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,20)); + liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,38)); //鎻愬崌鏈哄疄闄呴�熷害鍙嶉 - liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,21)); + liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,40)); ///璇诲彇鎻愬崌鏈虹姸鎬�-end - OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); -// log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + //灏忚溅澶勪簬杩愯鐘舵�侊紝灏嗘爣璁扮疆涓簍rue + if (liftProtocol.getRunning()) { + liftProtocol.setPakMk(true); + } - // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� - //..... + //鎻愬崌鏈哄浜庨攣瀹氥�佹湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙� + if (liftProtocol.getLiftLock() + && !liftProtocol.getRunning() + && liftProtocol.getReady() + && liftProtocol.getPakMk() + && liftProtocol.getTaskNo() != 0 + && liftProtocol.getAssignCommand() != null) { + //杩樻湁鏈畬鎴愮殑鍛戒护 + executeWork(liftProtocol.getAssignCommand()); + } + + //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴� + BasLiftService liftService = SpringUtils.getBean(BasLiftService.class); + BasLift basLift = liftService.selectById(liftProtocol.getLiftNo()); + if (basLift == null) { + basLift = new BasLift(); + //鎻愬崌鏈哄彿 + basLift.setLiftNo(slave.getId()); + liftService.insert(basLift); + } + basLift.setStatus(liftProtocol.getProtocolStatus()); + basLift.setWrkNo(liftProtocol.getTaskNo().intValue()); + basLift.setUpdateTime(new Date()); + basLift.setPakMk(liftProtocol.getPakMk()); + basLift.setLiftLock(liftProtocol.getLiftLock()); + basLift.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback().intValue()); + basLift.setReady(liftProtocol.getReady()); + basLift.setRunning(liftProtocol.getRunning()); + basLift.setMode(liftProtocol.getMode()); + basLift.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); + basLift.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); + basLift.setReverseFeedback(liftProtocol.getReverseFeedback()); + basLift.setMotorOverload(liftProtocol.getMotorOverload()); + basLift.setLineEndHasStock(liftProtocol.getLineEndHasStock()); + basLift.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); + basLift.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); + basLift.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm()); + basLift.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm()); + basLift.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck()); + basLift.setNotReady(liftProtocol.getNotReady().intValue()); + basLift.setServoError1(liftProtocol.getServoError1().intValue()); + basLift.setServoError2(liftProtocol.getServoError2().intValue()); + basLift.setServoError3(liftProtocol.getServoError3().intValue()); + basLift.setServoError4(liftProtocol.getServoError4().intValue()); + basLift.setLiftActualSpeed(liftProtocol.getLiftActualSpeed().intValue()); + if (liftService.updateById(basLift)) { + OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); +// log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + } }else { OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆憑1}鎻愬崌鏈簆lc鐘舵�佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId())); @@ -171,23 +246,35 @@ return false; } - command.setLiftNo(slave.getId()); + command.setLiftNo(slave.getId().shortValue()); // 寮�濮嬩换鍔� short[] array = new short[30]; //寮�濮嬭繍琛� array[0] = command.getRun(); - //鐩爣浣嶇疆 - array[1] = command.getDistPosition(); - //杩愯閫熷害 - array[2] = command.getSpeed(); - //浜屽眰楂樺害璁惧畾 - array[3] = command.getHeight2(); - //涓夊眰楂樺害璁惧畾 - array[4] = command.getHeight3(); - //鍥涘眰楂樺害璁惧畾 - array[5] = command.getHeight4(); - //鎻愬崌鏈洪攣瀹� - array[29] = command.getLiftLockShortValue(); + if (command.getDistPosition() != null) { + //鐩爣浣嶇疆 + array[1] = command.getDistPosition(); + } + if (command.getSpeed() != null) { + //杩愯閫熷害 + array[2] = command.getSpeed(); + } + if (command.getHeight2() != null) { + //浜屽眰楂樺害璁惧畾 + array[3] = command.getHeight2(); + } + if (command.getHeight3() != null) { + //涓夊眰楂樺害璁惧畾 + array[4] = command.getHeight3(); + } + if (command.getHeight4() != null) { + //鍥涘眰楂樺害璁惧畾 + array[5] = command.getHeight4(); + } + if (command.getLiftLockShortValue() != null) { + //鎻愬崌鏈洪攣瀹� + array[29] = command.getLiftLockShortValue(); + } OperateResult result = modbusTcpNet.Write("0", array);; if (result != null && result.IsSuccess) { @@ -199,6 +286,138 @@ News.error("鍐欏叆鎻愬崌鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } + } + + //鍒嗛厤浠诲姟 + private void assignWork(LiftAssignCommand assignCommand) { + //灏嗘map瀛樺叆redis涓� + HashMap<String, Object> map = new HashMap<>(); + + //鎻愬崌鏈哄彿 + map.put("lift_no", assignCommand.getLiftNo()); + //宸ヤ綔鍙� + map.put("wrk_no", assignCommand.getTaskNo()); + //鍛戒护鎵ц姝ュ簭 + map.put("commandStep", 0); + //鍛戒护 + map.put("assignCommand", assignCommand); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map)); + liftProtocol.setAssignCommand(assignCommand); + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING); + //鎵ц涓嬪彂浠诲姟 + executeWork(assignCommand); + } + + //鎵ц浠诲姟 + private boolean executeWork(LiftAssignCommand assignCommand) { + //璇诲彇redis鏁版嵁 + if (assignCommand == null) { + return false; + } + + //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) + liftProtocol.setPakMk(false); + + //鎵嬪姩妯″紡鎸囦护 + if (!assignCommand.getAuto()) { + LiftCommand command = new LiftCommand(); + //鎻愬崌鏈哄綋鍓嶆ゼ灞� + Short lev = liftProtocol.getLev(); + List<LiftCommand> commands = assignCommand.getCommands(); + if (commands == null) { + commands = new ArrayList<LiftCommand>(); + } + liftProtocol.setTaskNo(assignCommand.getTaskNo()); + switch (assignCommand.getTaskMode()) { + case 1://涓婂崌涓�灞� + command.setRun((short) 1);//鍗囬檷 + command.setDistPosition(++lev); + break; + case 2://涓嬮檷涓�灞� + command.setRun((short) 1);//涓嬮檷 + command.setDistPosition(--lev); + break; + case 3://鏈夎揣姝h浆 + command.setRun((short) 6); + break; + case 4://鏈夎揣鍙嶈浆 + command.setRun((short) 3); + break; + case 5://澶嶄綅 + command.setRun((short) 0); + command.setLiftLock(false); + liftProtocol.setTaskNo((short) 0); + liftProtocol.setShuttleNo((short) 0); + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); + liftProtocol.setPakMk(true); + break; + default: + } + commands.add(command); + assignCommand.setCommands(commands); + } + + Object o = redisUtil.get("lift_wrk_no_" + assignCommand.getTaskNo()); + if (o == null) { + return false; + } + HashMap map = JSON.parseObject(o.toString(), HashMap.class); + List<LiftCommand> commands = assignCommand.getCommands(); + //褰撳墠姝ュ簭 + int commandStep = Integer.parseInt(map.get("commandStep").toString()); + //鎬绘搴� + int size = commands.size(); + + //鍙栧嚭鍛戒护 + LiftCommand command = commands.get(commandStep); + //涓嬪彂鍛戒护 + if (!write(command)) { + News.error("鎻愬崌鏈哄懡浠や笅鍙戝け璐ワ紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); + return false; + }else { + News.info("鎻愬崌鏈哄懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); + + //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 + if (commandStep < size - 1) { + //鏇存柊redis鏁版嵁 + //姝ュ簭澧炲姞 + commandStep++; + map.put("commandStep", commandStep); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("lift_wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map)); + }else { + //宸叉墽琛屽畬鎴� + //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� + BasLiftOptService liftOptService = SpringUtils.getBean(BasLiftOptService.class); + if (liftOptService != null) { + BasLiftOpt opt = new BasLiftOpt( + assignCommand.getTaskNo().intValue(), + assignCommand.getLiftNo().intValue(), + new Date(), + null, + null, + null, + JSON.toJSONString(assignCommand) + ); + liftOptService.insert(opt); + } + //鍒犻櫎redis + redisUtil.del("lift_wrk_no_" + map.get("wrk_no").toString()); + + if (assignCommand.getAuto()) { + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING); + News.info("鎻愬崌鏈轰换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛屾彁鍗囨満鍙�={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); + }else { + //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬� + News.info("鎻愬崌鏈烘墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); + } + + } + } + + return true; } /** @@ -218,19 +437,19 @@ slave.setId(1); slave.setIp("192.168.4.24"); slave.setPort(502); - LiftThread thread = new LiftThread(slave); - thread.connect(); - thread.readStatus(); - - LiftCommand command = new LiftCommand(); - command.setRun((short) 0); - command.setDistPosition((short) 12); - command.setSpeed((short) 300); - command.setHeight2((short) 100); - command.setHeight3((short) 200); - command.setHeight4((short) 303); - command.setLiftLock(true); - thread.write(command); +// LiftThread thread = new LiftThread(slave,); +// thread.connect(); +// thread.readStatus(); +// +// LiftCommand command = new LiftCommand(); +// command.setRun((short) 1); +// command.setDistPosition((short) 12); +// command.setSpeed((short) 300); +// command.setHeight2((short) 100); +// command.setHeight3((short) 200); +// command.setHeight4((short) 303); +// command.setLiftLock(true); +// thread.write(command); } diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index db733ce..73613c9 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -10,7 +10,6 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.BasShuttle; import com.zy.asrs.entity.BasShuttleOpt; -import com.zy.asrs.mapper.BasShuttleMapper; import com.zy.asrs.service.BasShuttleOptService; import com.zy.asrs.service.BasShuttleService; import com.zy.common.model.NavigateNode; @@ -168,8 +167,11 @@ shuttleProtocol.setPakMk(true); } - //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟涓旀爣璁颁负true锛岄渶瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠� - if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getPakMk()) { + //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠� + if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE + && shuttleProtocol.getTaskNo() != 0 + && shuttleProtocol.getPakMk() + && shuttleProtocol.getAssignCommand() != null) { //鎵ц涓嬩竴姝ユ寚浠� executeWork(shuttleProtocol.getAssignCommand()); } @@ -347,19 +349,23 @@ //灏嗘map瀛樺叆redis涓� HashMap<String, Object> map = new HashMap<>(); - //璁$畻璺緞 - List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), assignCommand.getTaskMode().intValue()); - if (calc != null) { - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); - //璺緞鏁版嵁 - map.put("path", data); - //璺緞娆℃暟 - map.put("pathSize", data.size()); - }else { - if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) { - //灞炰簬鍏ュ簱鍑哄簱锛屽繀椤昏璁$畻璺緞锛屽垯鎶涘嚭寮傚父 - throw new Exception("鏈兘鎵惧埌杩愯璺緞"); + if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() + || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) { + //鍏ュ簱鎴栧嚭搴撴ā寮忥紝璁$畻璺緞 + //璁$畻璺緞 + List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), assignCommand.getTaskMode().intValue()); + if (calc != null) { + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); + //璺緞鏁版嵁 + map.put("path", data); + //璺緞娆℃暟 + map.put("pathSize", data.size()); + }else { + if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) { + //灞炰簬鍏ュ簱鍑哄簱锛屽繀椤昏璁$畻璺緞锛屽垯鎶涘嚭寮傚父 + throw new Exception("鏈兘鎵惧埌杩愯璺緞"); + } } } @@ -373,6 +379,7 @@ map.put("assignCommand", assignCommand); shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); shuttleProtocol.setAssignCommand(assignCommand); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); //浠诲姟鏁版嵁淇濆瓨鍒皉edis redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map)); //鎵ц涓嬪彂浠诲姟 @@ -385,7 +392,14 @@ if (assignCommand == null) { return false; } + + //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) + shuttleProtocol.setPakMk(false); + Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo()); + if (o == null) { + return false; + } HashMap map = JSON.parseObject(o.toString(), HashMap.class); //褰撳墠姝ュ簭 int commandStep = Integer.parseInt(map.get("commandStep").toString()); @@ -453,6 +467,8 @@ shuttleProtocol.setTaskNo((short) 0); //鏍囪澶嶄綅 shuttleProtocol.setPakMk(true); + //浠诲姟鎸囦护娓呴浂 + shuttleProtocol.setAssignCommand(null); break; default: } @@ -464,9 +480,6 @@ return false; } else { News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - - //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) - shuttleProtocol.setPakMk(false); //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 if (commandStep < size - 1) { @@ -491,17 +504,22 @@ null, null, null, - JSON.toJSONString(command) + JSON.toJSONString(assignCommand) ); shuttleOptService.insert(opt); } //鍒犻櫎redis redisUtil.del("wrk_no_" + map.get("wrk_no").toString()); - //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + if (!assignCommand.getAuto()) { + //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅 + News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + }else { + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + } - News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); } } diff --git a/src/main/resources/mapper/BasLiftMapper.xml b/src/main/resources/mapper/BasLiftMapper.xml new file mode 100644 index 0000000..8bac418 --- /dev/null +++ b/src/main/resources/mapper/BasLiftMapper.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.BasLiftMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasLift"> + <result column="lift_no" property="liftNo" /> + <result column="lift_status" property="liftStatus" /> + <result column="wrk_no" property="wrkNo" /> + <result column="update_time" property="updateTime" /> + <result column="update_by" property="updateBy" /> + <result column="memo" property="memo" /> + <result column="pak_mk" property="pakMk" /> + <result column="lift_lock" property="liftLock" /> + <result column="position_arrival_feedback" property="positionArrivalFeedback" /> + <result column="ready" property="ready" /> + <result column="running" property="running" /> + <result column="mode" property="mode" /> + <result column="line_front_has_stock" property="lineFrontHasStock" /> + <result column="forward_rotation_feedback" property="forwardRotationFeedback" /> + <result column="reverse_feedback" property="reverseFeedback" /> + <result column="motor_overload" property="motorOverload" /> + <result column="line_end_has_stock" property="lineEndHasStock" /> + <result column="in_convey_line_card_tray_alarm" property="inConveyLineCardTrayAlarm" /> + <result column="out_convey_line_card_tray_alarm" property="outConveyLineCardTrayAlarm" /> + <result column="plat_position_deviation_alarm" property="platPositionDeviationAlarm" /> + <result column="plat_torque_deviation_alarm" property="platTorqueDeviationAlarm" /> + <result column="plat_shuttle_check" property="platShuttleCheck" /> + <result column="not_ready" property="notReady" /> + <result column="servo_error1" property="servoError1" /> + <result column="servo_error2" property="servoError2" /> + <result column="servo_error3" property="servoError3" /> + <result column="servo_error4" property="servoError4" /> + <result column="lift_actual_speed" property="liftActualSpeed" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/BasLiftOptMapper.xml b/src/main/resources/mapper/BasLiftOptMapper.xml new file mode 100644 index 0000000..de36cbd --- /dev/null +++ b/src/main/resources/mapper/BasLiftOptMapper.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.BasLiftOptMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasLiftOpt"> + <id column="id" property="id" /> + <result column="wrk_no" property="wrkNo" /> + <result column="lift_no" property="liftNo" /> + <result column="send_time" property="sendTime" /> + <result column="mode" property="mode" /> + <result column="update_time" property="updateTime" /> + <result column="update_by" property="updateBy" /> + <result column="memo" property="memo" /> + <result column="command" property="command" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index f525429..90cfbca 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -247,6 +247,21 @@ </select> <select id="selectByWorkNo59" resultMap="BaseResultMap"> - select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo} and wrk_sts in (5,9) + select top 1 * from dbo.asr_wrk_mast + where wrk_no=#{workNo} + and wrk_sts in (5,9) + </select> + + <select id="selectLiftStep6" resultMap="BaseResultMap"> + select top 1 * from dbo.asr_wrk_mast + where wrk_sts in (6) + and shuttle_no is not null + order by io_pri desc,wrk_sts desc + </select> + + <select id="selectByWorkNo7" resultMap="BaseResultMap"> + select top 1 * from dbo.asr_wrk_mast + where wrk_no=#{workNo} + and wrk_sts in (7) </select> </mapper> diff --git a/src/main/webapp/static/css/lift.css b/src/main/webapp/static/css/lift.css new file mode 100644 index 0000000..c2160f2 --- /dev/null +++ b/src/main/webapp/static/css/lift.css @@ -0,0 +1,334 @@ +body { + background-color: #6CA7A8; +} +.button-window { + float: left; + width: 100%; + height: 100%; + padding: 10px; + background-color: #6CA7A8; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0 0 0 .3); +} +/* -------------------- 绗竴妯″潡 -------------------- */ +.log-board { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + height: 25%; +} +/* 宸� */ +.command-log { + float: left; + height: 100%; + width: 20%; + text-align: center; +} +.command-log h2 { + padding: 10px; +} + +.lift-command-item { + padding: 4px 0; + margin-top: 5px; +} +.lift-command-item label { + font-size: 20px; + font-weight: bold; + vertical-align: middle; +} +.demoBtn { + vertical-align: middle; + /*width: 30%;*/ + height: 30px; + left: 0; + top: 0; + padding: 5px 15px; + text-shadow: inherit; + font-size: 15px; + margin-left: 5px; + margin-right: 5px; + display: inline-block; + background-color: #FF5722; + border: none; + color: #FFF; + box-shadow: 1px 1px 5px #B6B6B6; + border-radius: 3px; + cursor: pointer; +} +.demoBtn:hover { + opacity: 0.8 +} +.demoBtn:focus { + outline: 0; +} + +/* 鍙� */ +.lift-state { + float: left; + height: 100%; + width: 80%; + overflow: auto; +} +/* 绌挎杞︾姸鎬佽〃 */ +#lift-state-table { + font-size: 12px; + border-collapse: collapse; + margin: 0 auto; + text-align: center; +} +#lift-state-table td, #lift-state-table th { + border: 1px solid #cad9ea; + color: #666; + height: 25px; +} +#lift-state-table thead th { + background-color: #CCE8EB; + width: 300px; +} +#lift-state-table tr:nth-child(odd) { + background: #fff; +} +#lift-state-table tr:nth-child(even) { + background: #F5FAFA; +} + +/* -------------------- 绗簩妯″潡 -------------------- */ +.lift-msg { + /*overflow: auto;*/ + margin-top: 10px; + height: 23%; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); +} +/* 鍫嗗灈鏈虹姸鎬佷俊鎭〃 */ +#lift-msg-table { + font-size: 12px; + border-collapse: collapse; + margin: 0 auto; + text-align: center; +} +#lift-msg-table td, #lift-msg-table th { + border: 1px solid #f1f1f1; + color: #666; + height: 30px; +} +#lift-msg-table thead th { + background-color: #fff; + width: 400px; +} +#lift-msg-table tr:nth-child(odd) { + background: #fff; +} +#lift-msg-table tr:nth-child(even) { + background: #fff; +} + +/* -------------------- 绗笁妯″潡 -------------------- */ + +.lift-operation { + position: relative; + margin-top: 10px; + height: 25%; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); +} + +/* 浠诲姟璁惧閫夋嫨妗� */ +.task-select { + width: 13%; + height: 100%; + overflow: hidden; + display: inline-block; + padding: 20px 0 10px 20px; + /*clear: right;*/ +} +.operator-item { + display: inline-block; + height: 100%; + text-align: center; + position: relative; + vertical-align: middle; + padding: 0 20px; +} +.operator-item .select-title { + display: inline-block; + position: absolute; + top: -11px; + left: 50%; + transform: translate(-50%, 0); + background-color: #fff; + color: #2e95d3; + font-size: 12px; + border: 1px solid #8d8d8d; + border-radius: 5px; + padding: 5px; + z-index: 999; +} +.operator-item .select-container { + padding: 30px 0; + height: 100%; + border: 1px solid #8d8d8d; + border-radius: 5px; +} +#lift-select .select-container label { + display: block; + padding: 5px 40px; + vertical-align: middle; margin-top:-2px; margin-bottom:1px; + +} +.select-container input { + display: inline-block; + font-size: 12px; + vertical-align: middle; margin-top:-2px; margin-bottom:1px; +} +.select-container-item { + display: inline-block; + padding: 0 10px; +} +.select-container-item input { + height: 20px; + border: 1px solid #8D8D8D; + border-radius: 3px; + width: 80px; + outline: none; +} + +/* 浠诲姟浣滀笟閫夋嫨妗� */ +.task-operator { + width: 86%; + height: 100%; + overflow: hidden; + padding: 5px 0 10px 20px; + display: inline-block; + margin-right: 10px; +} +.task-operator fieldset { + padding: 15px 20px 5px 50px; + /*border-width: 1px;*/ + /*border-style: solid;*/ + height: 100%; + border: 1px solid #8d8d8d; + border-radius: 5px; +} +.task-operator legend { + background-color: #fff; + color: #2e95d3; + font-size: 12px; + border: 1px solid #8d8d8d; + border-radius: 5px; + padding: 5px; + z-index: 999; +} +button.item { + margin-top: 5px; + border: 1px solid #333; + font-size: 13px; + padding: 1px 1px 1px 1px; + width: 100px; + height: 40px; + outline: none; + cursor: pointer; + color: #333; + background-color: transparent; + margin-right: 5px; + border-radius: 5px; +} +button.item:hover { + background-color: #333; + color: #fff; +} + +/* 鎵嬪姩鎿嶄綔閬僵 */ +.lift-operation-shade { + position: absolute; + height: 100%; + width: 100%; + z-index: 1000; + text-align: center; + padding: 80px 0; +} +.lift-operation-shade-span { + font-size: xx-large; + font-weight: bold; + color: red; +} + +/* -------------------- 绗洓妯″潡 -------------------- */ +.lift-output-board { + margin-top: 10px; + height: 20%; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); +} +#lift-output { + border-left: none; + border-right: none; + border-top: 1px solid #9d9d9d; + border-bottom: 1px solid #333; + width: 100%; + height: 100%; + overflow: auto; + resize:none; + color: #666; +} + + +/* 璇︽儏寮瑰嚭灞� */ +#lift-detl { + padding: 30px 10px 0 25px; + overflow: hidden; +} +#lift-detl form { + overflow: hidden; +} +.form-item { + margin-bottom: 10px; +} +.form-label { + display: inline-block; + width: 130px; + text-align: right; +} +.form-input { + display: inline-block; + padding-left: 15px; +} +.form-input input { + outline-style: none ; + border: 1px solid #ccc; + border-radius: 3px; + padding: 5px 8px; + width: 150px; + height: 30px; + font-size: 14px; + font-weight: bolder; +} +.form-input input:focus{ + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6) +} +.form-button-container { + text-align: center; +} +.form-button { + margin: 10px 10px; + width: 50px; + height: 30px; + color:white; + background-color:cornflowerblue; + border-radius: 3px; + border-width: 0; + outline: none; + font-size: 15px; + text-align: center; + cursor: pointer; +} +.form-button:hover { + opacity: 0.7; +} diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html index bbbf794..c1cbf39 100644 --- a/src/main/webapp/views/index.html +++ b/src/main/webapp/views/index.html @@ -20,7 +20,7 @@ <ul class="cl-effect-4"> <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">涓绘帶鍥�</a></li> <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">杈撻�佽澶�</a></li> -<!-- <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">鍫嗗灈鏈�</a></li>--> + <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">鎻愬崌鏈�</a></li> <!-- <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">绌挎杞�</a></li>--> <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">鍥涘悜绌挎杞�</a></li> </ul> diff --git a/src/main/webapp/views/lift.html b/src/main/webapp/views/lift.html new file mode 100644 index 0000000..43e400e --- /dev/null +++ b/src/main/webapp/views/lift.html @@ -0,0 +1,484 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>鎻愬崌鏈虹洃鎺х鐞�</title> + <link rel="stylesheet" type="text/css" href="../static/css/normalize.css"> + <link rel="stylesheet" type="text/css" href="../static/css/common.css"> + <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css"> + <link rel="stylesheet" href="../static/css/lift.css"> + <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../static/js/layer/layer.js"></script> + <script type="text/javascript" src="../static/layui/layui.js"></script> + <script type="text/javascript" src="../static/js/common.js"></script> +</head> +<body> +<div style="padding: 10px;height: 100%;float: left;width: 6%"> + <div class="button-window"></div> +</div> +<div style="height: 100%;padding-left: 6%"> + <div style="padding: 10px;height: 100%"> + <!-- 鏃ュ織鐩戞帶鏉� --> + <div class="log-board"> + <div class="command-log" id="commandLogId"> + </div> + <div class="lift-state"> + <table id="lift-state-table"> + <thead> + <tr> + <th>鎻愬崌鏈�</th> + <th>宸ヤ綔鍙�</th> + <th>浠诲姟鐘舵��</th> + <th>鎻愬崌鏈洪攣瀹�</th> + <th>浣嶇疆鍒拌揪鍙嶉</th> + <th>鍑嗗灏辩华</th> + <th>杩愯涓�</th> + <th>鑱旀満/鍗曟満</th> + <th>骞冲彴浣嶇疆鍋忓樊鎶ヨ</th> + <th>骞冲彴鎵煩鍋忓樊鎶ヨ</th> + <th>骞冲彴鍥涘悜杞︽娴�</th> + <th>鏈氨缁姸鎬�</th> + <th>浼烘湇1閿欒</th> + <th>浼烘湇2閿欒</th> + <th>浼烘湇3閿欒</th> + <th>浼烘湇4閿欒</th> + <th>鎻愬崌鏈哄疄闄呴�熷害鍙嶉</th> + </tr> + </thead> + <tbody> + </tbody> + </table> + </div> + </div> + <!-- 鎻愬崌鏈虹姸鎬� --> + <div class="lift-msg"> + <table id="lift-msg-table"> + <thead> + <tr> + <th>鎻愬崌鏈�</th> + <th>宸ヤ綔鍙�</th> + <th>杈撻�佺嚎鍓嶇鍏夌數鏈夎揣</th> + <th>杈撻�佺嚎姝h浆鍙嶉</th> + <th>杈撻�佺嚎鍙嶈浆鍙嶉</th> + <th>杈撻�佺嚎鐢垫満杩囪浇</th> + <th>杈撻�佺嚎鏈鍏夌數鏈夎揣</th> + <th>杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�</th> + <th>鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�</th> + <th>浣滀笟鏍囪</th> + </tr> + </thead> + <tbody> + </tbody> + </table> + </div> + <!-- 鎵嬪姩鎿嶄綔 --> + <div class="lift-operation"> + <!-- 閬僵灞� --> + <div class="lift-operation-shade"> + <span class="lift-operation-shade-span"> + WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔 + </span> + </div> + <!-- 璁惧浠诲姟閫夋嫨 --> + <div class="task-select"> + <!-- 閫夋嫨 --> + <div id="lift-select" class="operator-item"> + <span class="select-title">鎻愬崌鏈哄彿</span> + <div class="select-container" id="liftRadioBoxId"> + <!-- <label><input type="radio" name="liftSelect" value="1" checked> 1鍙锋彁鍗囨満</label>--> + </div> + </div> + </div> + + <!-- 璁惧浠诲姟鎿嶄綔 --> + <div class="task-operator"> + <fieldset> + <legend>鎵嬪姩鎿嶄綔</legend> + <div class="button-group"> + <button class="item" onclick="liftOperator(1)">涓婂崌涓�灞�</button> + <button class="item" onclick="liftOperator(2)">涓嬮檷涓�灞�</button> + <button class="item" onclick="liftOperator(3)">鏈夎揣姝h浆</button> + <button class="item" onclick="liftOperator(4)">鏈夎揣鍙嶈浆</button> + <button class="item" onclick="liftOperator(5)">澶嶄綅</button> + </div> + </fieldset> + </div> + + </div> + <!-- 鎻愬崌鏈烘棩蹇楄緭鍑� --> + <div class="lift-output-board"> + <textarea id="lift-output"></textarea> + </div> + </div> +</div> +</body> +</html> +<script> + // 绌虹櫧琛屾暟 + var liftStateTableBlankRows = 0; + var liftMsgTableBlankRows = 0; + // 瀹為檯琛屾暟 + var liftStateTableFullRows = 0; + var liftMsgTableFullRows = 0; + // 鍒濆鍖� + var liftOutputDom = document.getElementById("lift-output"); + $(document).ready(function() { + initliftStateTable(); + getliftStateInfo(); + initliftMsgTable(); + getliftMsgInfo(); + operatorBlockShow(); + setliftRadio(); + }); + + setInterval(function () { + getliftStateInfo() + getliftMsgInfo(); + },1000) + setInterval(function () { + getliftOutput(); + operatorBlockShow(); + },500); + + // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤 + function operatorBlockShow() { + if (parent.systemRunning) { + $('.lift-operation').css("opacity", "0.5"); + $('.lift-operation-shade').show(); + $('.lift-operation-shade-span').show(); + } else { + $('.lift-operation').css("opacity", "1"); + $('.lift-operation-shade').hide(); + $('.lift-operation-shade-span').hide(); + } + } + + var layerIdx; + $(document).on('click ','.pos-btn', function () { + let liftNo = Number($(this).parent().attr("data-liftNo")); + layerIdx = layer.open({ + type: 1, + title: false, + shadeClose: true, + offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'], + anim: 5, + shade: [0], + area: ['310px', '370px'], + closeBtn: 0, + content: $("#lift-detl"), + success: function(layero, index){ + http.get(baseUrl+ "/lift/detl/"+liftNo, null, function (res) { + $('#liftNo').val(liftNo); + $('#workNo').val(res.data.workNo); + $('#row').val(res.data.row); + $('#bay').val(res.data.bay); + $('#lev').val(res.data.lev); + $('#crnNo').val(res.data.crnNo); + $('#pakMk').val(res.data.pakMk); + }) + }, + end: function () { + $('#liftNo').val(""); + $('#workNo').val(""); + $('#row').val(""); + $('#bay').val(""); + $('#lev').val(""); + $('#crnNo').val(""); + $('#pakMk').val(""); + } + }) + }) + + var layerIdx0; + $(document).on('click ','.mode-btn', function () { + let liftNo = Number($(this).parent().attr("data-liftNo")); + layerIdx0 = layer.open({ + type: 1, + title: false, + shadeClose: true, + offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'], + anim: 5, + shade: [0], + area: ['70%', '85%'], + closeBtn: 0, + content: $("#lift-detl2"), + success: function(layero, index){ + console.log(liftNo) + http.get(baseUrl+ "/lift/sensor/detl/"+liftNo, null, function (res) { + $('#liftNo1').val(res.data.liftNo); + getColor(res.data.pakInTask,'#pakInTask'); + getColor(res.data.pakOutTask,'#pakOutTask'); + getColor(res.data.pakMoveTask,'#pakMoveTask'); + getColor(res.data.goHpTask,'#goHpTask'); + getColor(res.data.goOHpTask,'#goOHpTask'); + getColor(res.data.goHpAvoid,'#goHpAvoid'); + getColor(res.data.goOHpAvoid,'#goOHpAvoid'); + getColor(res.data.pakInEmpty,'#pakInEmpty'); + getColor(res.data.pakInFinish,'#pakInFinish'); + getColor(res.data.pakOutEmpty,'#pakOutEmpty'); + getColor(res.data.pakOutFinish,'#pakOutFinish'); + getColor(res.data.goHpAvoidFinish,'#goHpAvoidFinish'); + getColor(res.data.goOHpAvoidFinish,'#goOHpAvoidFinish'); + getColor(res.data.goHpAvoidErr,'#goHpAvoidErr'); + getColor(res.data.goOHpAvoidErr,'#goOHpAvoidErr'); + }) + }, + end: function () { + $('#liftNo').val(""); + } + }) + }) + + function getColor(res,e){ + $(e).val(res?"鉁�":"鈥�"); + if (res){ + $(e).attr("style", "color: #FD482C;"); + }else { + $(e).attr("style", "color: #00FF00;"); + } + } + + $(document).on('click ','#save', function () { + http.post(baseUrl+ "/lift/detl/update", { + liftNo: $('#liftNo').val(), + workNo: $('#workNo').val(), + row: $('#row').val(), + bay: $('#bay').val(), + lev: $('#lev').val(), + crnNo: $('#crnNo').val(), + pakMk: $('#pakMk').val(), + }, function (res) { + layer.msg("淇敼鎴愬姛", {icon: 1,}); + layer.close(layerIdx); + }) + }) + + $(document).on('click ','#cancel', function () { + layer.close(layerIdx); + }) + + function setliftRadio() { + $.ajax({ + url: baseUrl+ "/lift/table/lift/state", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200){ + let table = res.data; + for (let i=1;i<=table.length;i++){ + //娓叉煋鎻愬崌鏈洪�夐」html + let liftRadioBox = '<label><input type="radio" name="liftSelect" '; + if (i === 1) { + liftRadioBox += 'checked ' + } + liftRadioBox += 'value="' + table[i - 1].liftNo + '"> ' + table[i - 1].liftNo + '鍙锋彁鍗囨満</label>' + $("#liftRadioBoxId").append(liftRadioBox) + + + //娓叉煋鎻愬崌鏈烘暟鎹淮鎶ゅ拰璁惧淇℃伅html + let liftCommandLogBox = '<div class="lift-command-item" data-liftNo="' + table[i - 1].liftNo + '">\n' + + '<label>' + table[i - 1].liftNo + '#</label>\n' + + '</div>' + $("#commandLogId").append(liftCommandLogBox); + } + } else if (res.code === 403){ + window.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + } + }); + } + + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴 + function getliftStateInfo() { + let tableEl = $('#lift-state-table'); + $.ajax({ + url: baseUrl+ "/lift/table/lift/state", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200){ + let table = res.data; + if (table.length > liftStateTableBlankRows && table.length !== liftStateTableFullRows) { + initliftStateTable(table.length-liftStateTableBlankRows); + liftStateTableFullRows = table.length; + } + for (let i=1;i<=table.length;i++){ + // $("#mode-"+table[i-1].liftNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満'); + let tr = tableEl.find("tr").eq(i); + setVal(tr.children("td").eq(0), table[i-1].liftNo); + setVal(tr.children("td").eq(1), table[i-1].taskNo); + setVal(tr.children("td").eq(2), table[i-1].protocolStatus); + setVal(tr.children("td").eq(3), table[i-1].liftLock$); + setVal(tr.children("td").eq(4), table[i-1].positionArrivalFeedback$); + setVal(tr.children("td").eq(5), table[i-1].ready$); + setVal(tr.children("td").eq(6), table[i-1].running$); + setVal(tr.children("td").eq(7), table[i-1].mode$); + setVal(tr.children("td").eq(8), table[i-1].platPositionDeviationAlarm$); + setVal(tr.children("td").eq(9), table[i-1].platTorqueDeviationAlarm$); + setVal(tr.children("td").eq(10), table[i-1].platShuttleCheck$); + setVal(tr.children("td").eq(11), table[i-1].notReady$); + setVal(tr.children("td").eq(12), table[i-1].servoError1); + setVal(tr.children("td").eq(13), table[i-1].servoError2); + setVal(tr.children("td").eq(14), table[i-1].servoError3); + setVal(tr.children("td").eq(14), table[i-1].servoError4); + setVal(tr.children("td").eq(14), table[i-1].liftActualSpeed); + } + } else if (res.code === 403){ + window.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + } + }); + } + + // 鎻愬崌鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩 + function getliftMsgInfo() { + let tableEl = $('#lift-msg-table'); + $.ajax({ + url: baseUrl+ "/lift/table/lift/msg", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200){ + var table = res.data; + if (table.length > liftMsgTableBlankRows && table.length !== liftMsgTableFullRows) { + initliftMsgTable(table.length-liftMsgTableBlankRows); + liftMsgTableFullRows = table.length; + } + for (var i=1;i<=table.length;i++){ + var tr = tableEl.find("tr").eq(i); + setVal(tr.children("td").eq(0), table[i-1].liftNo); + setVal(tr.children("td").eq(1), table[i-1].workNo); + setVal(tr.children("td").eq(2), table[i-1].lineFrontHasStock$); + setVal(tr.children("td").eq(3), table[i-1].forwardRotationFeedback$); + setVal(tr.children("td").eq(4), table[i-1].reverseFeedback$); + setVal(tr.children("td").eq(5), table[i-1].motorOverload$); + setVal(tr.children("td").eq(6), table[i-1].lineEndHasStock$); + setVal(tr.children("td").eq(7), table[i-1].inConveyLineCardTrayAlarm$); + setVal(tr.children("td").eq(8), table[i-1].outConveyLineCardTrayAlarm$); + setVal(tr.children("td").eq(9), table[i-1].pakMk); + } + } else if (res.code === 403){ + window.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + } + }); + } + + // 鎻愬崌鏈烘棩蹇楄緭鍑� ----------------------------------------------------------------------- + function getliftOutput() { + $.ajax({ + url: baseUrl + "/lift/output/lift", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200) { + liftOutput(res.data); + } else if (res.code === 403) { + window.location.href = baseUrl + "/login"; + } else { + console.log(res.msg); + } + } + }) + } + + // 浠诲姟鎸囦护涓嬪彂 + function liftOperator(liftTaskMode) { + http.post(baseUrl+"/lift/operator/lift", { + liftNo: $('input[name="liftSelect"]:checked').val(), + liftTaskMode: liftTaskMode, + }, function (res) { + layer.msg(res.msg, {icon: 1}); + }); + } + + + // ------------------------------------------------------------------------------------------------ + + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 ----- 琛ㄤ竴 + function initliftStateTable(row) { + let line; + if (row === undefined){ + let one = $('#lift-state-table thead').height(); + let total = $('.lift-state').height(); + let count = total / one; + count = parseInt(count) - 1; + liftStateTableBlankRows = count; + line = count; + } else { + line = row; + } + let html = ""; + for (let i = 0; i < line; i ++){ + html += " <tr>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " </tr>\n"; + } + $('#lift-state-table tbody').after(html); + } + + // 鎻愬崌鏈烘暟鎹〃鑾峰彇 ----- 琛ㄤ簩 + function initliftMsgTable(row) { + let line; + if (row === undefined){ + let one = $('#lift-msg-table thead').height(); + let total = $('.lift-msg').height(); + let count = total / one; + count = parseInt(count) - 1; + liftMsgTableBlankRows = count; + line = count; + } else { + line = row; + } + let html = ""; + for (let i = 0; i < line; i ++){ + html += " <tr>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " </tr>\n"; + } + $('#lift-msg-table tbody').after(html); + } + + // 鏃ュ織杈撳嚭妗� + function liftOutput(content){ + liftOutputDom.value += content; + liftOutputDom.scrollTop = liftOutputDom.scrollHeight; + } + +</script> -- Gitblit v1.9.1