src/main/java/com/zy/asrs/controller/CrnController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/domain/param/CrnDemoParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/CrnSlave.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/css/crn.css | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/crn.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -216,6 +216,7 @@ return R.ok().add(str.toString()); } @PostMapping("/demo/switch") @ManagerAuth(memo = "堆垛机演示") public R crnDemo(CrnDemoParam param) throws InterruptedException { @@ -229,11 +230,17 @@ return R.error("口令错误"); } Thread.sleep(200L); mainService.crnDemoOfLocMove(param.getCrnId()); for (CrnSlave crnSlave : slaveProperties.getCrn()) { if (crnSlave.getId().equals(param.getCrnId())) { crnSlave.setDemo(param.getOpt()); } } // mainService.crnDemoOfLocMove(param.getCrnId()); return R.ok(); } /****************************************************************/ /************************** 手动操作 ******************************/ /****************************************************************/ src/main/java/com/zy/asrs/domain/param/CrnDemoParam.java
@@ -15,4 +15,6 @@ // 密码口令 private String password; private Boolean opt; } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1222,4 +1222,93 @@ } } /** * 堆垛机演示 ===>> 库位移转 */ public synchronized void crnDemoOfLocMove1(){ for (CrnSlave crn : slaveProperties.getCrn()) { if (!crn.getDemo()) { continue; } // 必须为演示状态 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { continue; } // 只有当堆垛机空闲 并且 无任务时才继续执行 if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { // 获取移库工作档信息 WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getId()); if (null != wrkMast) { continue; } LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId()); LocMast loc = locMastService.queryDemoLoc(crn.getId()); if (null == sourceLoc || null == loc) { continue; } String sourceLocNo = sourceLoc.getLocNo(); String locNo = loc.getLocNo(); // 获取工作号 int workNo = commonService.getWorkNo(WorkNoType.PICK.type); // 保存工作档 wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID wrkMast.setIoType(11); // 入出库状态: 11.库格移载 wrkMast.setIoPri(13D); wrkMast.setCrnNo(crn.getId()); wrkMast.setSourceLocNo(sourceLocNo); // 源库位 wrkMast.setLocNo(locNo); // 目标库位 wrkMast.setFullPlt("N"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板 wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码 wrkMast.setLinkMis("N"); wrkMast.setAppeTime(new Date()); wrkMast.setModiTime(new Date()); int res = wrkMastMapper.insert(wrkMast); if (res == 0) { throw new CoolException("保存工作档失败"); } // 工作档明细保存 List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); for (LocDetl locDetl : locDetls) { WrkDetl wrkDetl = new WrkDetl(); wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(new Date()); wrkDetl.setAnfme(locDetl.getAnfme()); VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 wrkDetl.setAppeTime(new Date()); wrkDetl.setModiTime(new Date()); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } } // 修改源库位状态 if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) { sourceLoc.setLocSts("R"); // R.出库预约 sourceLoc.setModiTime(new Date()); if (!locMastService.updateById(sourceLoc)){ throw new CoolException("更新源库位状态失败"); } } else { throw new CoolException("源库位出库失败"); } // 修改目标库位状态 if (loc.getLocSts().equals("O")) { loc.setLocSts("S"); // S.入库预约 loc.setModiTime(new Date()); if (!locMastService.updateById(loc)) { throw new CoolException("更新目标库位状态失败"); } } else { throw new CoolException("移转失败"); } } } } } src/main/java/com/zy/core/MainProcess.java
@@ -39,6 +39,9 @@ continue; } // 演示 mainService.crnDemoOfLocMove1(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile(); // 组托 mainService.generateStoreWrkFile0(); // WMS入库 src/main/java/com/zy/core/model/CrnSlave.java
@@ -20,6 +20,8 @@ private Integer offset; private Boolean demo; // 堆垛机入库站点 private List<CrnStn> crnInStn = new ArrayList<>(); src/main/resources/application.yml
@@ -50,6 +50,7 @@ slot: 1 # 偏移量,当堆垛机站点列号=1时,偏移量=2 offset: 2 demo: false # 堆垛机入库站点 crnInStn[0]: devpPlcId: ${wcs-slave.devp[0].id} @@ -87,6 +88,7 @@ slot: 1 # 偏移量,当堆垛机站点列号=1时,偏移量=2 offset: 2 demo: false # 堆垛机入库站点 crnInStn[0]: devpPlcId: ${wcs-slave.devp[0].id} src/main/webapp/static/css/crn.css
@@ -40,7 +40,7 @@ .crn-command-item input { vertical-align: middle; outline: none; width: 70%; width: 60%; } /* 右 */ src/main/webapp/views/crn.html
@@ -44,18 +44,20 @@ <!-- 日志监控板 --> <div class="log-board"> <!-- 执行命令 --> <!-- 执行命令 --> <div class="command-log"> <h2>执行中的命令</h2> <div class="crn-command-item"> <label>1#</label> <!-- <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)">演示</button>--> <span> </span> <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> <!-- <span> </span>--> <input id="crn1" disabled="disabled"> </div> <div class="crn-command-item"> <label>2#</label> <!-- <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)">演示</button>--> <span> </span> <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> <!-- <span> </span>--> <input id="crn2" disabled="disabled"> </div> </div> @@ -229,6 +231,7 @@ setInterval(function () { getCrnOutput(); operatorBlockShow(); initDemo(); },500); // 判断手动操作模块是否可用 @@ -550,22 +553,45 @@ crnOutputDom.scrollTop = crnOutputDom.scrollHeight; } // function demoSwitch(el) { // var crnId = el.split("-")[1]; // layer.prompt({title: '请输入口令,并开始'+crnId+"号堆垛机演示", formType: 1, shadeClose: true}, function (pass, idx) { // layer.close(idx); // doDemo(crnId, pass); // 停止wcs系统 // }); // } var crnDemoData; function initDemo() { $.ajax({ url: baseUrl+"/crn/demo/status", async: false, method: 'GET', success: function (res) { if (res.code === 200) { crnDemoData = res.data; crnDemoData.forEach(function (e) { $("#demoBtn-"+e.crnNo).html(e.demo?'停止':'演示'); }) } else if (res.code === 403){ parent.location.href = baseUrl+"/login"; } else { layer.msg(res.msg, {icon: 2}); } } }) } function demoSwitch(el) { var crnId = el.split("-")[1]; layer.confirm(crnId + ' 号堆垛机确定开始演示吗?', function(){ doDemo(crnId, 'root'); // 停止wcs系统 var opt; if (crnDemoData == null) { initDemo(); } for (var i = 0; i<crnDemoData.length; i++) { if (Number(crnDemoData[i].crnNo) === Number(crnId)) { opt = !crnDemoData[i].demo; } } layer.confirm(crnId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){ doDemo(crnId, 'root', opt); // 停止wcs系统 }); } function doDemo(crnId, password) { function doDemo(crnId, password, opt) { // 加载tips var index = layer.load(1, { shade: [0.1,'#fff'] @@ -576,7 +602,8 @@ // async: false, data: { crnId: Number(crnId), password: password password: password, opt: opt }, method: 'POST', success: function (res) {