From c946b206b0923e8b9567a529b8fd5d2d684c8265 Mon Sep 17 00:00:00 2001 From: zc <zc@123> Date: 星期六, 17 五月 2025 20:03:42 +0800 Subject: [PATCH] 完成调试 --- src/main/java/com/zy/asrs/controller/DevopsController.java | 205 ++++++++++++ src/main/java/com/zy/asrs/domain/devops/DevopsMessage.java | 16 + src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 42 +- src/main/java/com/zy/asrs/controller/CrnController.java | 14 src/main/java/com/zy/core/model/command/CrnCommand.java | 6 src/main/java/com/zy/common/model/LocTypeDto.java | 18 src/main/webapp/views/crn.html | 16 + src/main/webapp/views/index.html | 4 src/main/java/com/zy/asrs/domain/devops/ErrorType.java | 62 +++ src/main/java/com/zy/core/MainProcess.java | 8 src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java | 5 src/main/webapp/static/css/devops.css | 167 ++++++++++ src/main/webapp/views/devops.html | 354 ++++++++++++++++++++++ src/main/resources/application.yml | 13 14 files changed, 898 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java index e4fcfca..11082d5 100644 --- a/src/main/java/com/zy/asrs/controller/CrnController.java +++ b/src/main/java/com/zy/asrs/controller/CrnController.java @@ -385,7 +385,21 @@ return crnControl(command)?R.ok():R.error(); } + @ManagerAuth(memo = "鎭㈠鑱旀満浠诲姟") + @PostMapping("/operator/taskRe") + public R taskRe(CrnOperatorParam param){ + CrnCommand command = new CrnCommand(); + command.setTaskRe((short)1); + return crnControl(command)?R.ok():R.error(); + } + @ManagerAuth(memo = "娓呴櫎鑱旀満浠诲姟") + @PostMapping("/operator/taskClear") + public R crnTaskClear(CrnOperatorParam param){ + CrnCommand command = new CrnCommand(); + command.setTaskClear((short)1); + return crnControl(command)?R.ok():R.error(); + } // @ManagerAuth(memo = "鏆傚仠") // @PostMapping("/operator/pause") diff --git a/src/main/java/com/zy/asrs/controller/DevopsController.java b/src/main/java/com/zy/asrs/controller/DevopsController.java new file mode 100644 index 0000000..54112ed --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/DevopsController.java @@ -0,0 +1,205 @@ +package com.zy.asrs.controller; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.annotations.ManagerAuth; +import com.core.common.Cools; +import com.core.common.R; +import com.zy.asrs.domain.devops.DevopsMessage; +import com.zy.asrs.domain.devops.ErrorType; +import com.zy.asrs.domain.vo.SiteTableVo; +import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.entity.WrkMast; +import com.zy.asrs.mapper.WrkMastMapper; +import com.zy.asrs.service.BasDevpService; +import com.zy.asrs.service.WrkMastService; +import com.zy.core.CrnThread; +import com.zy.core.DevpThread; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.CrnForkPosType; +import com.zy.core.enums.CrnModeType; +import com.zy.core.enums.CrnStatusType; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.CrnSlave; +import com.zy.core.model.DevpSlave; +import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.StaProtocol; +import com.zy.core.properties.SlaveProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/devops") +public class DevopsController { + + @Autowired + private WrkMastService wrkMastService; + + @Autowired + private SlaveProperties slaveProperties; + + @Autowired + private WrkMastMapper wrkMastMapper; + + @Autowired + private BasDevpService basDevpService; + + @RequestMapping("/wrkMast/list") + public R list() { + List<DevopsMessage> devopsMessages = new ArrayList<>(); + DevopsMessage devopsMessage; + for (CrnSlave crnSlave : slaveProperties.getCrn()) { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnSlave.getId()).orderBy("wrk_sts", false)); + //鍏堟煡璇㈠爢鍨涙満鏄惁鍦ㄥ伐浣� + WrkMast working = wrkMastMapper.selectWorking(crnSlave.getId()); + for (WrkMast wrkMast : wrkMasts) { + devopsMessage = new DevopsMessage(); + devopsMessage.setWrkNo(wrkMast.getWrkNo()); + if (working != null) { + //鍦ㄥ伐浣滐紝鍒欏垽鏂槸鍚︽湭褰撳墠杩欐潯 + if (working.getWrkNo().equals(wrkMast.getWrkNo())) { + devopsMessage.setError("璇ュ伐浣滄。姝e湪鍑哄簱锛岃绋嶅悗"); + } else { + devopsMessage.setError(working.getWrkNo() + "鍙峰伐浣滄。姝e湪鍑哄簱锛岃绋嶅悗"); + } + continue; + } + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo()); + List<ErrorType> staError = isStaError(staProtocol, wrkMast); + for (ErrorType type : staError) { + if (!Cools.isEmpty(devopsMessage.getError())) { + devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); + devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); + } else { + devopsMessage.setError(type.getDesc()); + devopsMessage.setMethod(type.getMethod()); + } + } + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + List<ErrorType> crnError = isCrnError(crnProtocol, wrkMast); + for (ErrorType type : crnError) { + if (!Cools.isEmpty(devopsMessage.getError())) { + devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); + devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); + } else { + devopsMessage.setError(type.getDesc()); + devopsMessage.setMethod(type.getMethod()); + } + } + devopsMessages.add(devopsMessage); + } + } + return R.ok(devopsMessages); + } + + private List<ErrorType> isStaError(StaProtocol staProtocol, WrkMast wrkMast) { + List<ErrorType> types = new ArrayList<>(); + if (staProtocol == null) { + types.add(ErrorType.ERROR); + return types; + } else { + staProtocol = staProtocol.clone(); + } + // 鑷姩 + if (staProtocol.isAutoing()) { + types.add(ErrorType.FEIZIDONG); + } + if (wrkMast.getIoType() > 100) { + // 鍑哄簱鏍¢獙 + // 鏈夌墿 + if (staProtocol.isLoading()) { + types.add(ErrorType.YOUWU); + } // 宸ヤ綔鍙锋槸鍚︿负0 + if (staProtocol.getWorkNo() == 0) { + types.add(ErrorType.GONGZUOHAO); + } + // 鐩爣绔欑偣 + if (staProtocol.getStaNo() == null) { + types.add(ErrorType.STANO); + } + } else { + // 鍏ュ簱鏍¢獙 + + } + return types; + } + + + private List<ErrorType> isCrnError(CrnProtocol crnProtocol, WrkMast wrkMast) { + List<ErrorType> types = new ArrayList<>(); + // 鍫嗗灈鏈烘槸鍚︾┖闂� + if (crnProtocol.getStatusType() == CrnStatusType.IDLE) { + types.add(ErrorType.CRN_NO_IDLE); + } + //浠诲姟鍙锋槸鍚︿负0 + if (crnProtocol.getTaskNo() == 0) { + types.add(ErrorType.WORKING); + } + // 鍫嗗灈鏈烘槸鍚﹁嚜鍔� + if (crnProtocol.getModeType() == CrnModeType.AUTO) { + types.add(ErrorType.CRN_FEIZIDONG); + } + // 杞借揣鍙版湁鐗� + if (crnProtocol.getLoaded() == 0) { + types.add(ErrorType.LOAD); + } + // 鍫嗗灈鏈哄彇璐т腑 + if (crnProtocol.statusType == CrnStatusType.FETCHING) { + types.add(ErrorType.WORKING); + } + // 鏀捐揣涓� + if (crnProtocol.statusType == CrnStatusType.PUTTING) { + types.add(ErrorType.WORKING); + } + // 鍫嗗灈鏈虹瓑寰呯‘璁ょ姸鎬� + if (crnProtocol.statusType == CrnStatusType.WAITING) { + types.add(ErrorType.WORKING); + } + // 璐у弶鏄惁浼氬洖涓� + if (crnProtocol.forkPosType == CrnForkPosType.HOME) { + types.add(ErrorType.HOME); + } + return types; + } + + + @PostMapping("/site/list") + @ManagerAuth(memo = "绔欑偣淇℃伅琛�") + public R siteTable() { + List<SiteTableVo> list = new ArrayList<>(); + // 鍐呭瓨鏁版嵁 + Map<Integer, StaProtocol> station = new HashMap<>(); + for (DevpSlave devp : slaveProperties.getDevp()) { + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + station.putAll(devpThread.getStation()); + } + // 鎸佷箙鏁版嵁 + List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().orderBy("dev_no")); + for (BasDevp devp : basDevps) { + StaProtocol staProtocol = station.get(devp.getDevNo()); + if (null == staProtocol) { + continue; + } + SiteTableVo vo = new SiteTableVo(); + vo.setDevNo(devp.getDevNo()); // 绔欑偣缂栧彿 + vo.setWorkNo(Integer.valueOf(staProtocol.getWorkNo())); // 宸ヤ綔鍙� + vo.setAutoing(staProtocol.isAutoing() ? "鑷姩" : "闈炶嚜鍔�"); // 鑷姩 + vo.setLoading(staProtocol.isLoading() ? "鏈夌墿" : "鏈娴嬪埌鐗╂枡"); // 鏈夌墿 + vo.setInEnable(staProtocol.isInEnable() ? "鍙叆" : "涓嶅彲鍏�"); // 鍙叆 + vo.setOutEnable(staProtocol.isOutEnable() ? "鍙嚭" : "涓嶅彲鍑�"); // 鍙嚭 + vo.setPakMk(staProtocol.isPakMk() ? "鏈�" : "缂哄皯鍏ュ簱鏍囪"); // 鍏ュ簱鏍囪 + vo.setStaNo(staProtocol.getStaNo()); // 鐩爣绔� + vo.setBarcode(staProtocol.getBarcode()); + list.add(vo); + } + return R.ok().add(list); + } +} diff --git a/src/main/java/com/zy/asrs/domain/devops/DevopsMessage.java b/src/main/java/com/zy/asrs/domain/devops/DevopsMessage.java new file mode 100644 index 0000000..7266424 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/devops/DevopsMessage.java @@ -0,0 +1,16 @@ +package com.zy.asrs.domain.devops; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DevopsMessage implements Serializable { + + private Integer wrkNo; + + private String error; + + private String method; + +} diff --git a/src/main/java/com/zy/asrs/domain/devops/ErrorType.java b/src/main/java/com/zy/asrs/domain/devops/ErrorType.java new file mode 100644 index 0000000..80a4e21 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/devops/ErrorType.java @@ -0,0 +1,62 @@ +package com.zy.asrs.domain.devops; + +/** + * 鍫嗗灈鏈虹姸鎬佹灇涓� + */ +public enum ErrorType { + ERROR(10000, "绔欑偣瀵硅薄涓虹┖","鑱旂郴鎶�鏈汉鍛�"), + WUWU(10001, "绔欑偣鏃犵墿", "璇锋鏌ユ墭鐩樻槸鍚﹁蛋鍒颁綅"), + YOUWU(10002, "绔欑偣鏈夌墿", "璇锋鏌ュ厜鐢垫槸鍚﹁惤鐏�"), + STANO(10003, "鐩爣绔欑偣瀛樺湪绔欑偣鍙�", "缂哄皯鐩爣绔欑偣"), + FEIZIDONG(10004, "鐩爣绔欑偣闈炶嚜鍔�", "绔欑偣闈炶嚜鍔ㄧ姸鎬侊紝璇峰垏鎹�"), + GONGZUOHAO(10005, "鐩爣绔欑偣瀛樺湪宸ヤ綔鍙�", "鐩爣绔欑偣瀛樺湪宸ヤ綔鍙凤紝璇锋鏌�"), + + + WORKING(11001, "鍫嗗灈鏈哄伐浣滀腑", "鍫嗗灈鏈哄伐浣滀腑"), + HOME(11002, "璐у弶涓嶅湪鍘熶綅", "璇峰皢璐у弶鍥炰腑"), + CRNGONGZUOHAO(11003, "鍫嗗灈鏈哄瓨鍦ㄥ伐浣滃彿", "鍫嗗灈鏈哄瓨鍦ㄥ伐浣滃彿锛岃妫�鏌ヨ浠诲姟鏄惁宸茬粡瀹屾垚"), + LOAD(11004, "鍫嗗灈鏈虹殑杞界墿鍙版湁鐗�", "鍫嗗灈鏈虹殑杞界墿鍙版湁鐗╋紝璇锋鏌ュ厜鐢�"), + CRN_FEIZIDONG(11004, "鍫嗗灈鏈洪潪鑷姩", "璇峰皢鍫嗗灈鏈哄垏鑷姩"), + CRN_NO_IDLE(11004, "鍫嗗灈鏈洪潪绌洪棽", "璇峰皢鍫嗗灈鏈哄垏鑷姩"), + + + ; + private Integer code; + private String desc; + private String method; + + ErrorType(Integer code, String desc, String method) { + this.code = code; + this.desc = desc; + this.method = method; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + +} + diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java index 77fd04d..bd81f29 100644 --- a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java +++ b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java @@ -34,7 +34,7 @@ // 鐩爣绔� private Short staNo = 0; - + private String barcode; //楂樹綆搴撲綅 private String locType1 = "-"; //鍏ュ簱妯″紡 @@ -45,4 +45,7 @@ private String idle = "-"; //宸插畬鎴愬伐浣滃彿 private String finishWorkNo = "-"; + + // + private String mome = "-"; } 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 4c738c0..a47497c 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -309,6 +309,10 @@ if (wrkMast == null) { return; } + if (wrkMast.getPltType().shortValue() != staProtocol.getFinishWorkNo()) { + log.info("宸ヤ綔妗e拰瀹岀粨宸ヤ綔鍙蜂笉鍖归厤锛寋}锛寋}", wrkMast.getPltType(), staProtocol.getFinishWorkNo()); + return; + } Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "2.5F_Mode")); if (Cools.isEmpty(config) || config.getValue().equals("false")) { return; @@ -352,11 +356,19 @@ // 閬嶅巻鎷f枡鍏ュ簱鍙� for (DevpSlave.Sta pickSta : devp.getPickSta()) { // 鑾峰彇鏉$爜鎵弿浠俊鎭� - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); - if (barcodeThread == null) { +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); +// if (barcodeThread == null) { +// continue; +// } + // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); + if (staProtocol == null) { continue; + } else { + staProtocol = staProtocol.clone(); } - String barcode = barcodeThread.getBarcode(); + String barcode = staProtocol.getBarcode(); if (!Cools.isEmpty(barcode)) { // News.info(""+mark+" - 1"+" - {}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { @@ -366,14 +378,6 @@ continue; } - // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� - SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); - if (staProtocol == null) { - continue; - } else { - staProtocol = staProtocol.clone(); - } // // 鍏ュ嚭搴撴ā寮忓垽鏂� // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } @@ -465,7 +469,7 @@ // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); - staProtocol.setStaNo((short) 161); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.error("杈撻�佺嚎涓嬪彂5锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); @@ -506,11 +510,8 @@ && staProtocol.isPakMk()) { // 鑾峰彇鏉$爜鎵弿浠俊鎭� - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); - if (barcodeThread == null) { - continue; - } - String barcode = barcodeThread.getBarcode(); + + String barcode = staProtocol.getBarcode(); if (!Cools.isEmpty(barcode)) { // log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); if ("00000000".equals(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { @@ -604,7 +605,7 @@ try { // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 staProtocol.setWorkNo(dto.getWorkNo().shortValue()); - staProtocol.setStaNo((short) 161); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); @@ -753,6 +754,9 @@ if (wrkMast == null) { continue; } + if (wrkMast.getWrkNo().shortValue() != staProtocol.getFinishWorkNo()) { + continue; + } // 鍒ゆ柇宸ヤ綔妗f潯浠� if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { continue; @@ -760,7 +764,7 @@ // 涓嬪彂绔欑偣淇℃伅 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); - staProtocol.setStaNo(RouteUtils.CrnStaEnd(1031, 1135)); + staProtocol.setStaNo((short) 1031); if (!MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol))) { log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触222"); continue; diff --git a/src/main/java/com/zy/common/model/LocTypeDto.java b/src/main/java/com/zy/common/model/LocTypeDto.java index 38fb7d2..6044c53 100644 --- a/src/main/java/com/zy/common/model/LocTypeDto.java +++ b/src/main/java/com/zy/common/model/LocTypeDto.java @@ -31,14 +31,18 @@ } public LocTypeDto(StaProtocol staProtocol) { -// if (staProtocol.isHigh() == staProtocol.isLow()) { -// throw new CoolException("plc楂樹綆妫�娴嬪紓甯�"); -// } - if (staProtocol.getSiteId() == 106 || staProtocol.getSiteId() == 159){ - this.locType1 = 2; // 楂樺簱浣� - }else { - this.locType1 = 1; // 浣庡簱浣� + if (staProtocol.isHigh() && !staProtocol.isLow()) { + this.locType1 = 2; + } else if (!staProtocol.isHigh() && staProtocol.isLow()) { + this.locType1 = 1; + } else { + throw new CoolException("plc楂樹綆妫�娴嬪紓甯�"); } +// if (staProtocol.getSiteId() == 106 || staProtocol.getSiteId() == 159){ +// this.locType1 = 2; // 楂樺簱浣� +// }else { +// this.locType1 = 1; // 浣庡簱浣� +// } } /** diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index fe3aa2b..59b8935 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -32,7 +32,7 @@ /** * =====>> 寮�濮嬪伐浣� */ - public void start(){ + public void start() { thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { @@ -51,7 +51,7 @@ // mainService.ioConvert(); // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 -// mainService.stnToCrnStnPick(3); + mainService.stnToCrnStnPick(3); mainService.stnToCrnStnPick2(); // 鍏ュ簱 ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。 @@ -61,7 +61,7 @@ // 鍑哄簱 ===>> 鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯 mainService.crnStnToOutStn(4); - mainService. toSxk(107); + mainService.toSxk(107); // 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 mainService.crnIoExecute(5); // 鍏ュ嚭搴撳寮� ===>> 鍫嗗灈鏈哄懡浠や笅鍙戝悗锛屽紓姝ヤ慨鏀瑰伐浣滄。鐘舵�� @@ -88,7 +88,7 @@ } @PreDestroy - public void shutDown(){ + public void shutDown() { if (thread != null) thread.interrupt(); } diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java index 6b09a73..910a717 100644 --- a/src/main/java/com/zy/core/model/command/CrnCommand.java +++ b/src/main/java/com/zy/core/model/command/CrnCommand.java @@ -20,6 +20,10 @@ // 浠诲姟瀹屾垚纭浣� private Short ackFinish = 0; + private Short taskRe = 0; + + private Short taskClear = 0; + // 浠诲姟鍙� private Short taskNo = 0; @@ -74,6 +78,8 @@ // 浠诲姟纭 0锛氭湭纭 1锛氬凡纭 private Short command = 0; + + private boolean traySize = false; public void setTaskMode(Short taskMode){ diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dd1c3b5..2340d08 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -176,6 +176,19 @@ led: ${wcs-slave.led[3].id} outSta[4]: staNo: 1135 + pickSta[0]: + staNo: 1112 + led: ${wcs-slave.led[0].id} + pickSta[1]: + staNo: 1122 + led: ${wcs-slave.led[2].id} + pickSta[2]: + staNo: 1114 + led: ${wcs-slave.led[1].id} + pickSta[3]: + staNo: 1124 + led: ${wcs-slave.led[3].id} + # 鏉$爜鎵弿浠�1 diff --git a/src/main/webapp/static/css/devops.css b/src/main/webapp/static/css/devops.css new file mode 100644 index 0000000..b40ab7c --- /dev/null +++ b/src/main/webapp/static/css/devops.css @@ -0,0 +1,167 @@ +body { + /*padding: 10px;*/ + background-color: #6CA7A8; +} +main { + background-color: #fff; + height: 96%; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + margin-bottom: 8px; +} +.button-window { + float: left; + width: 100%; + height: 100%; + padding: 10px; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0 0 0 .3); +} +.main-board { + padding-left: 1%; + float: left; + width: 50%; + height: 100%; + overflow: auto; +} +.main-board:first-child { + border-right: 1px solid #cad9ea; +} + +/* 琛ㄦ牸 */ +.plc-log-header { + height: 15%; +} +.plc-log-body { + height: 100%; + overflow: auto; +} + +/* 鍏ュ嚭搴撴ā寮� */ +.io-mode-oper { + height: 100%; + /*overflow: hidden;*/ + padding: 10px 20px; +} +.io-mode-oper fieldset { + padding: 15px 0 10px 0; + border-width: 1px; + border-style: solid; + height: 100%; +} +.io-mode-oper legend { + text-align: center; + padding: 0 10px; + font-size: 16px; + font-weight: 300; +} + +/* 绔欑偣琛ㄦ牸 */ +#site-table { + font-size: 12px; + border-collapse: collapse; + margin: 0 auto; + text-align: center; +} +#site-table td, #site-table th { + border: 1px solid #cad9ea; + color: #666; + height: 25px; +} +#site-table thead th { + background-color: #CCE8EB; + width: 100px; +} +#site-table tr:nth-child(odd) { + background: #fff; +} +#site-table tr:nth-child(even) { + background: #F5FAFA; +} + + + +/* plc寮傚父琛ㄦ牸 */ +#plc-error-table { + font-size: 12px; + border-collapse: collapse; + margin: 0 auto; +} +#plc-error-table td, #plc-error-table th { + border: 1px solid #cad9ea; + color: #666; + height: 25px; + text-align: left; + padding-left: 5px; +} +#plc-error-table thead th { + background-color: #CCE8EB; + width: 100px; +} +#plc-error-table td { + color: red; +} +#plc-error-table tr:nth-child(odd) { + background: #fff; +} +#plc-error-table tr:nth-child(even) { + background: #F5FAFA; +} + + + + +/* 璇︽儏寮瑰嚭灞� */ +#site-detl { + padding: 30px 10px 0 25px; + overflow: hidden; +} +#site-detl form { + overflow: hidden; +} +.form-item { + margin-bottom: 10px; +} +.form-label { + display: inline-block; + width: 70px; + 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; + 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; +} \ No newline at end of file diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html index 7c1731e..d76e511 100644 --- a/src/main/webapp/views/crn.html +++ b/src/main/webapp/views/crn.html @@ -207,6 +207,8 @@ <!-- <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>--> <!-- <button class="item" onclick="coorMove()">鍧愭爣绉昏</button>--> <button class="item" onclick="taskComplete()">浠诲姟瀹屾垚</button> + <button class="item" onclick="taskRe()">鎭㈠鑱旀満浠诲姟</button> + <button class="item" onclick="taskClear()">娓呴櫎鑱旀満浠诲姟</button> <!-- <button class="item" onclick="pause()">鏆傚仠</button>--> <!-- <button class="item" onclick="boot()">鍚姩</button>--> <!-- <button class="item" onclick="clearCommand()">娓呴櫎鍛戒护</button>--> @@ -444,6 +446,20 @@ }); } + // 浠诲姟瀹屾垚 + function taskRe() { + http.post(baseUrl+"/crn/operator/taskRe", getReqParam(), function (res) { + layer.msg(res.msg); + }); + } + + // 浠诲姟瀹屾垚 + function taskClear() { + http.post(baseUrl+"/crn/operator/taskClear", getReqParam(), function (res) { + layer.msg(res.msg); + }); + } + // 鏆傚仠 function pause() { http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) { diff --git a/src/main/webapp/views/devops.html b/src/main/webapp/views/devops.html new file mode 100644 index 0000000..90321ba --- /dev/null +++ b/src/main/webapp/views/devops.html @@ -0,0 +1,354 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>WCS杈撻�佽澶囩鐞�</title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> + <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/css/devops.css?v=1"> + <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../static/js/common.js"></script> + <script type="text/javascript" src="../static/js/layer/layer.js"></script> + <style> + .io-mode-box { + float: left; + width: 16%; + text-align: center; + } + + .io-mode-box label { + font-weight: bolder; + } + + .ioModeBtn { + vertical-align: middle; + width: 50%; + height: 30px; + left: 0; + top: 0; + 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; + } + </style> +</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%"> + <main> + + <!-- plc寮傚父鏃ュ織鐩戞帶鐗� --> + <div id="plc-error" class="main-board" style="padding-left: 10px"> + <div class="plc-log-body"> + <div> + <span style="color: #1E9FFF">宸ヤ綔妗�:</span> + </div> + <table id="plc-error-table"> + <thead> + <tr> + <th style="width: 200px">宸ヤ綔妗e彿</th> + <th style="width: 400px">鍘熷洜</th> + <th style="width: 400px">瑙e喅鏂规硶</th> + </tr> + </thead> + <tbody> + + </tbody> + </table> + </div> + </div> + + <!-- 绔欑偣鐘舵�佹暟鎹洃鎺х増 --> + <div id="site-monitor" class="main-board"> + <div> + <span style="color: #1E9FFF">鏃犳硶鍑哄叆搴撳師鍥犲垽鏂�:</span> + </div> + <!-- 琛ㄦ牸 --> + <!--鍥哄畾琛ㄥご table 鍔爐able-layout: fixed; th 鍔� position:sticky;top: 0;--> + <table id="site-table" style="table-layout: fixed;"> + <!-- 琛ㄥご --> + <thead style="position:sticky;top: 0;"> + <tr> + <th>绔欏彿</th> + <th>宸ヤ綔鍙�</th> + <th>鑷姩</th> + <th>鏈夌墿</th> + <th>鍙叆</th> + <th>鍙嚭</th> + <th>鍏ュ簱鏍囪</th> + <th>鐩爣绔�</th> + <th>鎵樼洏鐮�</th> + <th>淇℃伅</th> + </tr> + </thead> + <!-- 琛ㄦ牸鍐呭 --> + <tbody></tbody> + </table> + </div> + </main> + + + <div id="site-detl" style="display: none"> + <form> + <div class="form-item"> + <label class="form-label">绔欏彿:</label> + <div class="form-input"> + <input id="siteId" name="siteId" class="layui-input" lay-verify="required|number" + autocomplete="off" disabled="disabled"> + </div> + </div> + <div class="form-item"> + <label class="form-label">宸ヤ綔鍙�:</label> + <div class="form-input"> + <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" + autocomplete="off"> + </div> + </div> + <div class="form-item"> + <label class="form-label">鐩爣绔�:</label> + <div class="form-input"> + <input id="staNo" name="staNo" type="number" class="layui-input" lay-verify="number" + autocomplete="off"> + </div> + </div> + <div class="form-item"> + <label class="form-label">鍏ュ簱鏍囪:</label> + <div class="form-input"> + <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off"> + </div> + </div> + <div class="form-item form-button-container"> + <button class="form-button" id="save">淇濆瓨</button> + <button class="form-button" id="cancel" style="background-color: #D0D0D0">鍙栨秷</button> + </div> + </form> + </div> + </div> + +</div> +</body> +<script> + // 鍒濆鍖� + // 绌虹櫧琛屾暟 + var stop = false + var plcErrorTableBlankRows = 0; + var siteTableBlankRows = 0; + // 瀹為檯琛屾暟 + var plcErrorTableFullRows = 0; + var siteTableFullRows = 0; + //var outputDom = document.getElementById("output"); + $(document).ready(function () { + initPlcErrorTable(); + getPlcError(); + initSiteTable(); + getSite(); + }); + // 瀹炴椂璁块棶 + setInterval(function () { + getPlcError(); + starGetSite(); + }, 1000); + setInterval(function () { + //getSiteOutput(); + }, 500); + + function starGetSite() { + if (stop) { + return + } else { + getSite(); + } + } + + + // plc寮傚父淇℃伅琛ㄨ幏鍙� + function getPlcError() { + var tableEl = $('#plc-error-table'); + tableEl.children("tr").children("td").html(""); + $.ajax({ + url: baseUrl + "/devops/wrkMast/list", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200) { + var table = res.data; + for (var i = 1; i <= table.length; i++) { + var tr = tableEl.find("tr").eq(i); + tr.children("td").eq(0).html(table[i - 1].wrkNo); + tr.children("td").eq(1).html(table[i - 1].error); + tr.children("td").eq(2).html(table[i - 1].method); + } + } else if (res.code === 403) { + window.location.href = baseUrl + "/login"; + } else { + console.log(res.msg); + } + } + }); + } + + // 绔欑偣淇℃伅琛ㄨ幏鍙� + function getSite() { + var tableEl = $('#site-table'); + $.ajax({ + url: baseUrl + "/devops/site/list", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200) { + var table = res.data; + if (table.length > siteTableBlankRows && table.length !== siteTableFullRows) { + initSiteTable(table.length - siteTableBlankRows); + siteTableFullRows = 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].devNo); + setVal(tr.children("td").eq(1), table[i - 1].workNo); + setVal(tr.children("td").eq(2), table[i - 1].autoing); + setVal(tr.children("td").eq(3), table[i - 1].loading); + setVal(tr.children("td").eq(4), table[i - 1].inEnable); + setVal(tr.children("td").eq(5), table[i - 1].outEnable); + setVal(tr.children("td").eq(6), table[i - 1].pakMk); + setVal(tr.children("td").eq(7), table[i - 1].staNo); + setVal(tr.children("td").eq(8), table[i - 1].barcode); + setVal(tr.children("td").eq(9), table[i - 1].mome); + } + } else if (res.code === 403) { + window.location.href = baseUrl + "/login"; + } else { + console.log(res.msg); + } + } + }); + } + + // ------------------------------------------------------------------------------------------------ + + // plc寮傚父绌虹櫧琛ㄦ牸娓叉煋 + function initPlcErrorTable(row) { + var line; + if (row === undefined) { + var one = $('#plc-error-table thead').height(); + var total = $('.plc-log-body').height(); + var count = total / one; + count = parseInt(count) - 1; + plcErrorTableBlankRows = count; + line = count; + } else { + line = row; + } + var html = ""; + for (var i = 0; i < line; i++) { + html += " <tr>\n" + + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + + " </tr>\n"; + } + $('#plc-error-table tbody').after(html); + } + + // 绔欑偣绌虹櫧琛ㄦ牸娓叉煋 + function initSiteTable(row) { + var line; + if (row === undefined) { + var one = $('#site-table thead').height(); + var total = $('#site-monitor').height(); + var count = total / one; + count = parseInt(count) - 1; + siteTableBlankRows = count; + line = count; + } else { + line = row; + } + var html = ""; + for (var 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" + + " </tr>\n"; + } + $('#site-table tbody').after(html); + } + + // 璇︽儏鎿嶄綔 ------------------------------------------------------------------------- + var layerDetl; + $(document).on('dblclick ', '#site-table tr', function () { + stop = true + var siteId = $(this).children("td").eq(0).html(); + if (siteId !== null && siteId !== "") { + layerDetl = layer.open({ + type: 1, + title: false, + shadeClose: true, + offset: 'rt', + anim: 5, + shade: [0], + area: ['340px', '255px'], + closeBtn: 0, + content: $("#site-detl"), + success: function (layero, index) { + http.get(baseUrl + "/site/detl/" + siteId, null, function (res) { + $('#siteId').val(siteId); + $('#workNo').val(res.data.workNo); + $('#staNo').val(res.data.staNo); + $('#pakMk').val(res.data.pakMk); + }) + }, + end: function () { + $('#siteId').val(""); + $('#workNo').val(""); + $('#staNo').val(""); + $('#pakMk').val(""); + stop = false + } + }) + } + + }); + + $(document).on('click ', '#save', function () { + http.post(baseUrl + "/site/detl/update", { + siteId: $('#siteId').val(), + workNo: $('#workNo').val(), + staNo: $('#staNo').val(), + pakMk: $('#pakMk').val() + }, function (res) { + layer.msg("淇敼鎴愬姛", {icon: 1,}); + }) + }) + $(document).on('click ', '#cancel', function () { + $('#siteId').val(""); + $('#workNo').val(""); + $('#staNo').val(""); + $('#pakMk').val(""); + layer.close(layerDetl); + }) + +</script> +</html> \ No newline at end of file diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html index be04591..b8b6a5c 100644 --- a/src/main/webapp/views/index.html +++ b/src/main/webapp/views/index.html @@ -24,7 +24,9 @@ <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="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>--> + <li><a id="devops" onclick="nav(this.id)" class="nav-unselect" href="#">鎵ц鐩戞祴</a></li> + + <!-- <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>--> </ul> </div> </div> -- Gitblit v1.9.1