From c80d68ee7d5ceb5f93289220a410737da3a7bf9f Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期二, 23 四月 2024 08:44:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/ssdwcs' into ssdwcs --- src/main/java/com/zy/core/thread/MelsecExtThread.java | 200 ++++++++++++++ src/main/java/com/zy/system/controller/LicenseCreatorController.java | 3 src/main/java/com/zy/asrs/controller/SiteController.java | 23 + src/main/java/com/zy/core/model/protocol/ExtProtocol.java | 26 + src/main/resources/application-prod.yml | 8 src/main/java/com/zy/core/thread/SiemensRgvThread.java | 24 + src/main/webapp/views/deviceOperate/rgvOperate.html | 54 +++ src/main/java/com/zy/common/web/AuthController.java | 10 src/main/java/com/zy/asrs/mapper/BasExtMapper.java | 12 src/main/java/com/zy/core/enums/SlaveType.java | 3 src/main/java/com/zy/core/cache/OutputQueue.java | 2 src/main/java/com/zy/asrs/entity/BasExt.java | 55 +++ src/main/java/com/zy/core/MainProcess.java | 2 src/main/java/com/zy/system/entity/license/LicenseCheckListener.java | 5 src/main/java/com/zy/asrs/controller/RgvController.java | 76 +++++ src/main/java/com/zy/asrs/service/impl/BasExtServiceImpl.java | 12 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 29 + src/main/java/com/zy/core/model/ExtSlave.java | 22 + src/main/java/com/zy/asrs/controller/BasExtController.java | 123 ++++++++ src/main/java/com/zy/common/CodeBuilder.java | 4 src/main/resources/mapper/BasExtMapper.xml | 13 src/main/java/com/zy/core/ServerBootstrap.java | 17 src/main/java/com/zy/core/properties/SlaveProperties.java | 7 src/main/java/com/zy/asrs/service/BasExtService.java | 8 src/main/resources/application.yml | 4 src/main/webapp/views/deviceOperate/extOperate.html | 70 +++++ 26 files changed, 783 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/BasExtController.java b/src/main/java/com/zy/asrs/controller/BasExtController.java new file mode 100644 index 0000000..6b3fd11 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/BasExtController.java @@ -0,0 +1,123 @@ +package com.zy.asrs.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.core.common.DateUtils; +import com.zy.asrs.entity.BasExt; +import com.zy.asrs.service.BasExtService; +import com.core.annotations.ManagerAuth; +import com.core.common.BaseRes; +import com.core.common.Cools; +import com.core.common.R; +import com.zy.common.web.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@RestController +public class BasExtController extends BaseController { + + @Autowired + private BasExtService basExtService; + + @RequestMapping(value = "/basExt/{id}/auth") + @ManagerAuth + public R get(@PathVariable("id") String id) { + return R.ok(basExtService.selectById(String.valueOf(id))); + } + + @RequestMapping(value = "/basExt/list/auth") + @ManagerAuth + public R list(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam(required = false)String orderByField, + @RequestParam(required = false)String orderByType, + @RequestParam Map<String, Object> param){ + EntityWrapper<BasExt> wrapper = new EntityWrapper<>(); + excludeTrash(param); + convert(param, wrapper); + if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} + return R.ok(basExtService.selectPage(new Page<>(curr, limit), wrapper)); + } + + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + String val = String.valueOf(entry.getValue()); + if (val.contains(RANGE_TIME_LINK)){ + String[] dates = val.split(RANGE_TIME_LINK); + wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); + wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else { + wrapper.like(entry.getKey(), val); + } + } + } + + @RequestMapping(value = "/basExt/add/auth") + @ManagerAuth + public R add(BasExt basExt) { + basExtService.insert(basExt); + return R.ok(); + } + + @RequestMapping(value = "/basExt/update/auth") + @ManagerAuth + public R update(BasExt basExt){ + if (Cools.isEmpty(basExt) || null==basExt.getExtNo()){ + return R.error(); + } + basExtService.updateById(basExt); + return R.ok(); + } + + @RequestMapping(value = "/basExt/delete/auth") + @ManagerAuth + public R delete(@RequestParam(value="ids[]") Long[] ids){ + for (Long id : ids){ + basExtService.deleteById(id); + } + return R.ok(); + } + + @RequestMapping(value = "/basExt/export/auth") + @ManagerAuth + public R export(@RequestBody JSONObject param){ + EntityWrapper<BasExt> wrapper = new EntityWrapper<>(); + List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); + Map<String, Object> map = excludeTrash(param.getJSONObject("basExt")); + convert(map, wrapper); + List<BasExt> list = basExtService.selectList(wrapper); + return R.ok(exportSupport(list, fields)); + } + + @RequestMapping(value = "/basExtQuery/auth") + @ManagerAuth + public R query(String condition) { + EntityWrapper<BasExt> wrapper = new EntityWrapper<>(); + wrapper.like("ext_no", condition); + Page<BasExt> page = basExtService.selectPage(new Page<>(0, 10), wrapper); + List<Map<String, Object>> result = new ArrayList<>(); + for (BasExt basExt : page.getRecords()){ + Map<String, Object> map = new HashMap<>(); + map.put("id", basExt.getExtNo()); + map.put("value", basExt.getExtNo()); + result.add(map); + } + return R.ok(result); + } + + @RequestMapping(value = "/basExt/check/column/auth") + @ManagerAuth + public R query(@RequestBody JSONObject param) { + Wrapper<BasExt> wrapper = new EntityWrapper<BasExt>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); + if (null != basExtService.selectOne(wrapper)){ + return R.parse(BaseRes.REPEAT).add(getComment(BasExt.class, String.valueOf(param.get("key")))); + } + return R.ok(); + } + +} diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java index c46f545..b71f6c3 100644 --- a/src/main/java/com/zy/asrs/controller/RgvController.java +++ b/src/main/java/com/zy/asrs/controller/RgvController.java @@ -124,7 +124,7 @@ } // List<Map<String, Object>> res = new ArrayList<>(); for (RgvSlave rgvSlave : slaveProperties.getRgv()) { - if (rgvSlave.getId() == rgvNo){ + if (rgvSlave.getId().equals(rgvNo)){ rgvSlave.setDemo(true); } } @@ -137,13 +137,85 @@ } // List<Map<String, Object>> res = new ArrayList<>(); for (RgvSlave rgvSlave : slaveProperties.getRgv()) { - if (rgvSlave.getId() == rgvNo){ + if (rgvSlave.getId().equals(rgvNo)){ rgvSlave.setDemo(false); } } return R.ok(); } + @GetMapping("/demo/status/rgvStatus") + public R demoStatusTrue1(Integer rgvNo,Integer status){ + if (Cools.isEmpty(rgvNo)){ + return R.error("璇烽�夋嫨rgv"); + } + if (Cools.isEmpty(status)){ + return R.error("閫夋嫨鎸夐挳鏈夎"); + } +// List<Map<String, Object>> res = new ArrayList<>(); + for (RgvSlave rgvSlave : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); + if (rgvThread == null) { + throw new CoolException("RGV涓嶅湪绾�"); + } + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + throw new CoolException("RGV涓嶅湪绾�"); + } + String DB = ""; + if (rgvSlave.getId().equals(rgvNo)){ + switch (status){ + case 5://寮哄埗鍚姩 + DB="4.4"; + break; +// case 6://澶嶄綅淇″彿 +// DB="4.5"; +// break; + case 7://鎶ヨ娑堥煶 + DB="4.6"; + break; + case 8://鍚姩 + DB="4.7"; + break; + case 9://鍋滄 + DB="5.0"; + break; + case 10://鎬ュ仠 + DB="5.1"; + break; + case 11://澶嶄綅鎸夐挳 + DB="5.2"; + break; + case 12://鎵嬪姩 + DB="5.3"; + break; + case 13://鎵嬪姩瀹氫綅 + DB="5.4"; + break; + case 14://鍗曟満 + DB="5.5"; + break; + case 15://鑱旀満 + DB="5.6"; + break; + case 16://璐у弶瀹氫綅鍥炰腑 + DB="5.7"; + break; + default: + return R.error("鎸夐挳涓嶅瓨鍦紵锛燂紵锛燂紒锛侊紒"); + } + if (MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(10, DB))) { + return R.ok(); + } else { + return R.error("鍛戒护涓嬪彂澶辫触"); + } + } + + } + return R.ok(); + } + @PostMapping("/demo/switch") diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java index 1768651..e9cb0fb 100644 --- a/src/main/java/com/zy/asrs/controller/SiteController.java +++ b/src/main/java/com/zy/asrs/controller/SiteController.java @@ -7,18 +7,23 @@ import com.zy.asrs.domain.vo.PlcErrorTableVo; import com.zy.asrs.domain.vo.SiteTableVo; import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.entity.BasExt; import com.zy.asrs.service.BasDevpService; +import com.zy.asrs.service.BasExtService; import com.zy.asrs.utils.CommandUtils; 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.DevpSlave; +import com.zy.core.model.ExtSlave; import com.zy.core.model.Task; +import com.zy.core.model.protocol.ExtProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.DevpThread; import com.zy.core.thread.BarcodeThread; +import com.zy.core.thread.MelsecExtThread; import com.zy.core.thread.SiemensDevpThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -37,6 +42,8 @@ private SlaveProperties slaveProperties; @Autowired private BasDevpService basDevpService; + @Autowired + private BasExtService basExtService; @GetMapping("/io/mode/info/site") @@ -119,6 +126,22 @@ return R.ok().add(list); } + @GetMapping("/list/ext/auth") + @ManagerAuth(memo = "鏈烘鑷備俊鎭�") + public R extList(){ + List<SiteTableVo> list = new ArrayList<>(); + // 鎸佷箙鏁版嵁 + List<BasExt> basExts = basExtService.selectList(new EntityWrapper<BasExt>().orderBy("ext_no")); + for (BasExt ext : basExts) { + SiteTableVo vo = new SiteTableVo(); + vo.setDevNo(ext.getExtNo()); // 绔欑偣缂栧彿 + vo.setInEnable(ext.getExtTask()); // 鍙叆 鍙彇 + vo.setOutEnable(ext.getExtPut()); // 鍙嚭 鍙斁 + list.add(vo); + } + return R.ok().add(list); + } + @PostMapping("/table/plc/errors") @ManagerAuth(memo = "杈撻�佽澶噋lc寮傚父淇℃伅琛�") public R plcErrorTable(){ diff --git a/src/main/java/com/zy/asrs/entity/BasExt.java b/src/main/java/com/zy/asrs/entity/BasExt.java new file mode 100644 index 0000000..5ce23aa --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasExt.java @@ -0,0 +1,55 @@ +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 io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.baomidou.mybatisplus.annotations.TableName; +import java.io.Serializable; + +@Data +@TableName("asr_bas_ext") +public class BasExt implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 缂栧彿 + */ + @ApiModelProperty(value= "缂栧彿") + @TableId(value = "ext_no", type = IdType.INPUT) + @TableField("ext_no") + private Integer extNo; + + /** + * 鍏佽鍙�(checkBox) + */ + @ApiModelProperty(value= "鍏佽鍙�(checkBox)") + @TableField("ext_task") + private String extTask = "N"; + + /** + * 鍏佽鏀�(checkBox) + */ + @ApiModelProperty(value= "鍏佽鏀�(checkBox)") + @TableField("ext_put") + private String extPut = "N"; + + public BasExt() {} + + public BasExt(Integer extNo,String extTask,String extPut) { + this.extNo = extNo; + this.extTask = extTask; + this.extPut = extPut; + } + +// BasExt basExt = new BasExt( +// null, // 缂栧彿[闈炵┖] +// null, // 鍏佽鍙�(checkBox) +// null // 鍏佽鏀�(checkBox) +// ); + + +} diff --git a/src/main/java/com/zy/asrs/mapper/BasExtMapper.java b/src/main/java/com/zy/asrs/mapper/BasExtMapper.java new file mode 100644 index 0000000..5a94d9d --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasExtMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.zy.asrs.entity.BasExt; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasExtMapper extends BaseMapper<BasExt> { + +} diff --git a/src/main/java/com/zy/asrs/service/BasExtService.java b/src/main/java/com/zy/asrs/service/BasExtService.java new file mode 100644 index 0000000..c3d31c6 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasExtService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.zy.asrs.entity.BasExt; +import com.baomidou.mybatisplus.service.IService; + +public interface BasExtService extends IService<BasExt> { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/BasExtServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasExtServiceImpl.java new file mode 100644 index 0000000..e41a7a1 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/BasExtServiceImpl.java @@ -0,0 +1,12 @@ +package com.zy.asrs.service.impl; + +import com.zy.asrs.mapper.BasExtMapper; +import com.zy.asrs.entity.BasExt; +import com.zy.asrs.service.BasExtService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("basExtService") +public class BasExtServiceImpl extends ServiceImpl<BasExtMapper, BasExt> implements BasExtService { + +} 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 c4ae583..af46969 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -29,13 +29,11 @@ import com.zy.core.model.command.LedCommand; import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.ExtProtocol; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; -import com.zy.core.thread.BarcodeThread; -import com.zy.core.thread.LedThread; -import com.zy.core.thread.SiemensDevpThread; -import com.zy.core.thread.SiemensRgvThread; +import com.zy.core.thread.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -87,7 +85,6 @@ for (RgvSlave rgv : slaveProperties.getRgv()) { if (!rgv.getDemo()){ continue; - } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); @@ -361,6 +358,28 @@ } } + public synchronized void ExtTaskAndPut() throws InterruptedException { + for (ExtSlave extSlave : slaveProperties.getExt()) { +// if (!rgv.getDemo()) { +// continue; +// } + MelsecExtThread extThread = (MelsecExtThread) SlaveConnection.get(SlaveType.Ext, extSlave.getId()); + ExtProtocol extProtocol = extThread.getExtProtocol(); + if (extProtocol == null) { + continue; + } +// else { +// extProtocol = extProtocol.clone(); +// } + if (extProtocol.isTake()){//鍏佽鍙� + + }else if (extProtocol.isPut()){//鍏佽鏀� + + } + + } + } + } diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java index 8e2b23d..76a9f94 100644 --- a/src/main/java/com/zy/common/CodeBuilder.java +++ b/src/main/java/com/zy/common/CodeBuilder.java @@ -17,10 +17,10 @@ // generator.table="sys_host"; // sqlserver generator.sqlOsType = SqlOsType.SQL_SERVER; - generator.url="127.0.0.1:1433;databasename=ghtzasrs"; + generator.url="192.168.4.15:1433;databasename=ssdasrs"; generator.username="sa"; generator.password="sa@123"; - generator.table="man_vacuum_mast"; + generator.table="asr_bas_ext"; generator.packagePath="com.zy.asrs"; generator.js = false; generator.html = false; diff --git a/src/main/java/com/zy/common/web/AuthController.java b/src/main/java/com/zy/common/web/AuthController.java index fff96c3..9199bb5 100644 --- a/src/main/java/com/zy/common/web/AuthController.java +++ b/src/main/java/com/zy/common/web/AuthController.java @@ -54,11 +54,11 @@ @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "鐧诲綍") public R loginAction(String mobile, String password){ //楠岃瘉璁稿彲璇佹槸鍚︽湁鏁� - LicenseVerify licenseVerify = new LicenseVerify(); - boolean verify = licenseVerify.verify(); - if (!verify) {//璁稿彲璇佸凡澶辨晥 - return R.parse(CodeRes.SYSTEM_20001); - } +// LicenseVerify licenseVerify = new LicenseVerify(); +// boolean verify = licenseVerify.verify(); +// if (!verify) {//璁稿彲璇佸凡澶辨晥 +// return R.parse(CodeRes.SYSTEM_20001); +// } if (mobile.equals("super") && password.equals(Cools.md5(superPwd))) { Map<String, Object> res = new HashMap<>(); res.put("username", mobile); diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 9428400..3b7faa8 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -47,6 +47,8 @@ // mainService.RGVDemoShow0(); // mainService.RGVDemoShow1(); mainService.RGVDemoShow2(); + //鏈烘鑷傚厑璁稿彇璐с�佸厑璁告斁璐� + mainService.ExtTaskAndPut(); } catch (Exception e) { diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index d67d829..c8fe405 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -3,10 +3,7 @@ import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LedSlave; -import com.zy.core.model.RgvSlave; +import com.zy.core.model.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; import lombok.extern.slf4j.Slf4j; @@ -64,6 +61,11 @@ for (Slave rgv : slaveProperties.getRgv()) { MessageQueue.init(SlaveType.Rgv, rgv); } + + // 鍒濆鍖栨満姊拌噦mq + for (Slave ext : slaveProperties.getExt()) { + MessageQueue.init(SlaveType.Ext, ext); + } // // 鍒濆鍖朙ed鐏痬q // for (Slave led : slaveProperties.getLed()) { // MessageQueue.init(SlaveType.Led, led); @@ -107,6 +109,13 @@ new Thread((Runnable) rgvThread).start(); SlaveConnection.put(SlaveType.Rgv, rgv.getId(), rgvThread); } + // 鍒濆鍖栨満姊拌噦绾跨▼ + log.info("鍒濆鍖朎xt绾跨▼..................................................."); + for (ExtSlave ext : slaveProperties.getExt()) { + MelsecExtThread extThread = new MelsecExtThread(ext); + new Thread(extThread).start(); + SlaveConnection.put(SlaveType.Ext, ext.getId(), extThread); + } // // 鍒濆鍖朙ED绾跨▼ // log.info("鍒濆鍖朙ED绾跨▼..................................................."); // for (LedSlave led : slaveProperties.getLed()) { diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java index a5c050d..48bd3be 100644 --- a/src/main/java/com/zy/core/cache/OutputQueue.java +++ b/src/main/java/com/zy/core/cache/OutputQueue.java @@ -21,4 +21,6 @@ // 鍫嗗灈鏈鸿緭鍑烘棩蹇� public static ArrayBlockingQueue<String> RGV = new ArrayBlockingQueue<>(32); + public static ArrayBlockingQueue<String> Ext = new ArrayBlockingQueue<>(32); + } diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java index 7f64d13..14b192a 100644 --- a/src/main/java/com/zy/core/enums/SlaveType.java +++ b/src/main/java/com/zy/core/enums/SlaveType.java @@ -8,7 +8,8 @@ Led, Scale, Car, - Rgv + Rgv, + Ext ; public static SlaveType findInstance(String s){ diff --git a/src/main/java/com/zy/core/model/ExtSlave.java b/src/main/java/com/zy/core/model/ExtSlave.java new file mode 100644 index 0000000..8b541b2 --- /dev/null +++ b/src/main/java/com/zy/core/model/ExtSlave.java @@ -0,0 +1,22 @@ +package com.zy.core.model; + +import com.zy.core.Slave; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ExtSlave extends Slave { + + private Integer rack; + + private Integer slot; + + private Integer offset; + + private Boolean demo; + +} \ No newline at end of file diff --git a/src/main/java/com/zy/core/model/protocol/ExtProtocol.java b/src/main/java/com/zy/core/model/protocol/ExtProtocol.java new file mode 100644 index 0000000..721810e --- /dev/null +++ b/src/main/java/com/zy/core/model/protocol/ExtProtocol.java @@ -0,0 +1,26 @@ +package com.zy.core.model.protocol; +import lombok.Data; + +/** + * Created by vincent on 2020/8/7 + */ +@Data +public class ExtProtocol { + + private Integer extNo = 1; + + public boolean take = false;//鍏佽鍙栦俊鍙� + + public boolean put = false;//鍏佽鏀句俊鍙� + + @Override + public ExtProtocol clone() { + try { + return (ExtProtocol) super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java index 866ea67..0510d2e 100644 --- a/src/main/java/com/zy/core/properties/SlaveProperties.java +++ b/src/main/java/com/zy/core/properties/SlaveProperties.java @@ -1,10 +1,7 @@ package com.zy.core.properties; import com.zy.core.Slave; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LedSlave; -import com.zy.core.model.RgvSlave; +import com.zy.core.model.*; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @@ -44,4 +41,6 @@ private List<Slave> car = new ArrayList<>(); private List<RgvSlave> rgv = new ArrayList<>(); + + private List<ExtSlave> ext = new ArrayList<>(); } diff --git a/src/main/java/com/zy/core/thread/MelsecExtThread.java b/src/main/java/com/zy/core/thread/MelsecExtThread.java new file mode 100644 index 0000000..0b5805f --- /dev/null +++ b/src/main/java/com/zy/core/thread/MelsecExtThread.java @@ -0,0 +1,200 @@ +package com.zy.core.thread; + +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Core.Types.OperateResultExOne; +import HslCommunication.Profinet.Melsec.MelsecMcNet; +import com.core.common.DateUtils; +import com.core.common.SpringUtils; +import com.core.exception.CoolException; +import com.zy.asrs.entity.BasCrnp; +import com.zy.asrs.entity.BasExt; +import com.zy.asrs.service.BasCrnpService; +import com.zy.asrs.service.BasExtService; +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.model.ExtSlave; +import com.zy.core.model.Task; +import com.zy.core.model.protocol.ExtProtocol; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.text.MessageFormat; +import java.util.Date; + +/** + * 鏈烘鑷傜嚎绋� //Extraman==>鏈烘鑷� + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class MelsecExtThread implements Runnable, ThreadHandler { + + private MelsecMcNet melsecMcNet; + private ExtSlave slave; + private ExtProtocol extProtocol; + private short heartBeatVal = 1; + private boolean resetFlag = false; + + public boolean isRunning = true; + + public MelsecExtThread(ExtSlave slave) { + this.slave = slave; + } + + @Override + @SuppressWarnings("InfiniteLoopStatement") + public void run() { + System.out.println("绾跨▼鍚姩"); + System.out.println("extProtocol:"+extProtocol); + this.connect(); +// try { +// Thread.sleep(2000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + while (isRunning) { + try { + int step = 1; + Task task = MessageQueue.poll(SlaveType.Ext, slave.getId()); + if (task != null) { + step = task.getStep(); + } + switch (step) { + // 璇绘暟鎹� + case 1: + readStatus(); + break; + default: + break; + } + // 蹇冭烦 +// heartbeat(); + Thread.sleep(500); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 鍒濆鍖栨満姊拌噦鐘舵�� + */ + private void initExt() { + if (null == extProtocol) { + extProtocol = new ExtProtocol(); + } + extProtocol.setTake(false); + extProtocol.setPut(false); + } + + @Override + public boolean connect() { + boolean result = false; + melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort()); + OperateResult connect = melsecMcNet.ConnectServer(); + if(connect.IsSuccess){ + result = true; + OutputQueue.Ext.offer(MessageFormat.format( "銆恵0}銆戞満姊拌噦plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.info("MelsecExt"+" - 1"+" - 鏈烘鑷俻lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } else { + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆戞満姊拌噦plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] ", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.error("MelsecExt"+" - 2"+" - 鏈烘鑷俻lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + initExt(); + } +// melsecMcNet.ConnectClose(); + return result; + } + + /** + * 璇诲彇鐘舵�� + */ + private void readStatus(){ + try { + OperateResultExOne<byte[]> result = melsecMcNet.Read("D1035", (short) 56); + if (result.IsSuccess) { + if (null == extProtocol) { + extProtocol = new ExtProtocol(); + extProtocol.setExtNo(slave.getId()); + } + extProtocol.setTake(melsecMcNet.getByteTransform().TransBool(result.Content, 0)); + extProtocol.setPut(melsecMcNet.getByteTransform().TransBool(result.Content, 0)); +// extProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0)); +// extProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2)); + + +// 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + BasExtService extService = SpringUtils.getBean(BasExtService.class); + BasExt basExt = new BasExt(); + basExt.setExtNo(slave.getId()); + basExt.setExtTask(extProtocol.isTake()?"Y":"N"); + basExt.setExtPut(extProtocol.isPut()?"Y":"N"); + if (!extService.updateById(basExt)){ + log.error("MelsecExt"+" - 4"+" - 鏈烘鑷俻lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + }else { + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + } + } else { + BasExtService extService = SpringUtils.getBean(BasExtService.class); + BasExt basExt = new BasExt(); + basExt.setExtNo(slave.getId()); + basExt.setExtTask("N"); + basExt.setExtPut("N"); + extService.updateById(basExt); + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆憑1}鏈烘鑷俻lc鐘舵�佷俊鎭け璐�",DateUtils.convert(new Date()), slave.getId())); + throw new CoolException(MessageFormat.format( "鏈烘鑷俻lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆戣鍙栨満姊拌噦plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.error("MelsecExt"+" - 5"+" - 璇诲彇鏈烘鑷俻lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + initExt(); + } finally { +// sign = System.currentTimeMillis(); + } + + } + + @Override + public void close() { + melsecMcNet.ConnectClose(); + } + + /** + * 蹇冭烦 + */ + private void heartbeat(){ + if (heartBeatVal >= 30000) { + heartBeatVal = -30000; + } else { + heartBeatVal =(short) (heartBeatVal+1); + } + OperateResult write = melsecMcNet.Write("D1011", heartBeatVal); + if (!write.IsSuccess) { + log.error("MelsecExt"+" - 9"+" - 鏈烘鑷俻lc蹇冭烦閫氳澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } + } + + + /******************************************************************************************/ + /**************************************** 娴嬭瘯涓撶敤 *****************************************/ + /*****************************************************************************************/ + public static void main(String[] args) throws InterruptedException { + + } + + // 鎻愪緵涓�涓柟娉曟潵鍋滄绾跨▼ + public void requestStop() { + isRunning = false; + } + + // 鎻愪緵涓�涓柟娉曟潵閲嶅惎绾跨▼ + public Thread restartThread() { + isRunning = true; + Thread newThread = new Thread(this); + newThread.start(); + return newThread; + } + +} diff --git a/src/main/java/com/zy/core/thread/SiemensRgvThread.java b/src/main/java/com/zy/core/thread/SiemensRgvThread.java index c6d7b77..287f1bb 100644 --- a/src/main/java/com/zy/core/thread/SiemensRgvThread.java +++ b/src/main/java/com/zy/core/thread/SiemensRgvThread.java @@ -5,6 +5,7 @@ import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; +import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasRgv; @@ -113,6 +114,9 @@ // commandAvoidanceXY.setDestinationStaNo2((short)0); // 鐩爣绔� commandAvoidanceXY.setCommand((short)0); write(commandAvoidanceXY); + break; + case 10: + write10((String) task.getData()); break; default: break; @@ -460,6 +464,26 @@ } } + //灏忚溅寮哄埗銆佸浣嶃�佹姤璀︽秷闊炽�佸惎鍔ㄣ�佸仠姝€�佹�ュ仠銆佸浣嶃�佹墜鍔ㄣ�佹墜鍔ㄥ畾浣嶃�佸崟鏈恒�佽仈鏈恒�佽揣鍙夊洖涓� + private boolean write10(String status) throws InterruptedException { + if (Cools.isEmpty(status)) { + log.error("RGV鍐欏叆鍛戒护涓虹┖"); + return false; + } + OperateResult result = siemensNet.Write("DB19."+status, true); + if (result != null && result.IsSuccess) { + Thread.sleep(200); + this.readStatus(); + log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("DB19."+status)); + OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), "DB19."+status)); + return true; + } else { + OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [DB鍧楋細{4}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), "DB19."+status)); + log.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [DB鍧楋細{4}]", slave.getId(), slave.getIp(), slave.getPort(), "DB19."+status); + return false; + } + } + @Override public void close() { siemensNet.ConnectClose(); diff --git a/src/main/java/com/zy/system/controller/LicenseCreatorController.java b/src/main/java/com/zy/system/controller/LicenseCreatorController.java index 0aafb3b..3d21663 100644 --- a/src/main/java/com/zy/system/controller/LicenseCreatorController.java +++ b/src/main/java/com/zy/system/controller/LicenseCreatorController.java @@ -61,6 +61,9 @@ */ @RequestMapping(value = "/getLicenseDays") public R getLicenseDays() { + if (true){ + return R.ok().add(0); + } LicenseVerify licenseVerify = new LicenseVerify(); LicenseContent verifyInfo = licenseVerify.getVerifyInfo(); if (verifyInfo == null) { diff --git a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java index 1659df2..071ef11 100644 --- a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java +++ b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java @@ -79,11 +79,12 @@ LicenseVerify licenseVerify = new LicenseVerify(); //瀹夎璇佷功 - LicenseContent install = licenseVerify.install(param); +// LicenseContent install = licenseVerify.install(param); logger.info("++++++++ 璁稿彲璇佸姞杞界粨鏉� ++++++++"); - return install != null; +// return install != null; + return true; } catch (Exception e) { return false; } diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 6c71edd..c8ff53d 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -10,6 +10,14 @@ rack: 0 slot: 0 demo: false + # EXT绌挎杞�1 + ext[0]: + id: 1 + ip: 10.10.10.200 + port: 6000 + rack: 0 + slot: 0 + demo: false crn[0]: #鍫嗗灈鏈�1 id: 1 ip: 172.17.91.2 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 219a0df..218745a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -8,7 +8,7 @@ name: @pom.build.finalName@ datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://127.0.0.1:1433;databasename=ghtzasrs + url: jdbc:sqlserver://192.168.4.15:1433;databasename=ssdasrs username: sa password: sa@123 mvc: @@ -37,7 +37,7 @@ #License鐩稿叧閰嶇疆 license: - subject: ghtzwcs + subject: ssdwcs publicAlias: publicCert storePass: public_zhongyang_123456789 licensePath: license.lic diff --git a/src/main/resources/mapper/BasExtMapper.xml b/src/main/resources/mapper/BasExtMapper.xml new file mode 100644 index 0000000..ebfde0a --- /dev/null +++ b/src/main/resources/mapper/BasExtMapper.xml @@ -0,0 +1,13 @@ +<?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.BasExtMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasExt"> + <result column="ext_no" property="extNo" /> + <result column="ext_task" property="extTask" /> + <result column="ext_put" property="extPut" /> + + </resultMap> + +</mapper> diff --git a/src/main/webapp/views/deviceOperate/extOperate.html b/src/main/webapp/views/deviceOperate/extOperate.html new file mode 100644 index 0000000..c59d53c --- /dev/null +++ b/src/main/webapp/views/deviceOperate/extOperate.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <title>Ext璁惧</title> + <link rel="stylesheet" href="../../static/wcs/css/element.css"> + <script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../../static/wcs/js/common.js"></script> + <script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script> + <script type="text/javascript" src="../../static/wcs/js/element.js"></script> +</head> + +<body> + <div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;"> + <div style="width: 100%;"> + <el-table border ref="singleTable" :data="tableData" highlight-current-row + max-height="450" style="width: 100%"> + <el-table-column property="devNo" label="鏈烘鑷傜紪鍙�"> + </el-table-column> + <el-table-column property="inEnable" label="鍏佽鍙�"> + </el-table-column> + <el-table-column property="outEnable" label="鍏佽鏀�"> + </el-table-column> + </el-table> + </div> + </div> + <script> + var app = new Vue({ + el: '#app', + data: { + tableData: [], + }, + created() { + this.init() + }, + watch: { + + }, + methods: { + init() { + this.getTableData() + + setInterval(() => { + this.getTableData() + }, 1000) + }, + getTableData() { + let that = this; + $.ajax({ + url: baseUrl + "/site/list/ext/auth", + headers: { + 'token': localStorage.getItem('token') + }, + data: {}, + dataType: 'json', + contentType: 'application/json;charset=UTF-8', + method: 'GET', + success: function (res) { + console.log(res) + that.tableData = res.data + } + }); + } + } + }) + </script> +</body> + +</html> \ No newline at end of file diff --git a/src/main/webapp/views/deviceOperate/rgvOperate.html b/src/main/webapp/views/deviceOperate/rgvOperate.html index a28b408..dc6b8b2 100644 --- a/src/main/webapp/views/deviceOperate/rgvOperate.html +++ b/src/main/webapp/views/deviceOperate/rgvOperate.html @@ -54,8 +54,25 @@ </el-form> <div> - <el-button v-if="demo === 'N' " @click="demos('true')" type="warning">婕旂ず</el-button> - <el-button v-if="demo === 'Y' " @click="demos('false')" type="warning">鍙栨秷婕旂ず</el-button> + <el-button v-if="demo === 'N' " @click="demos('true')" type="info">婕旂ず</el-button> + <el-button v-if="demo === 'Y' " @click="demos('false')" type="info">鍙栨秷婕旂ず</el-button> + </div> + <div style="margin: 10px auto 10px auto" v-if="demo === 'N' "> + <el-button @click="rgvStatus(8)" type="primary">鍚姩</el-button> + <el-button @click="rgvStatus(9)" type="primary">鍋滄</el-button> + <el-button @click="rgvStatus(14)" type="primary">鍗曟満</el-button> + <el-button @click="rgvStatus(15)" type="primary">鑱旀満</el-button> + <el-button @click="rgvStatus(11)" type="primary">澶嶄綅鎸夐挳</el-button> + </div> + <div style="margin: 10px auto 10px auto" v-if="demo === 'N' "> + <el-button @click="rgvStatus(7)" type="warning">鎶ヨ娑堥煶</el-button> + <el-button @click="rgvStatus(12)" type="warning">鎵嬪姩</el-button> + <el-button @click="rgvStatus(13)" type="warning">鎵嬪姩瀹氫綅</el-button> + </div> + <div style="margin: 10px auto 10px auto" v-if="demo === 'N' "> + <el-button :style="" @click="rgvStatus(5)" type="danger">寮哄埗鍚姩</el-button> + <el-button @click="rgvStatus(10)" type="danger">鎬ュ仠</el-button> + <el-button @click="rgvStatus(16)" type="danger">璐у弶瀹氫綅鍥炰腑</el-button> </div> <div style="margin-top: 5px" v-if="demo === 'Y'"> <el-button @click="staTova(2,1)" type="warning">杈撻��-缃崲1</el-button> @@ -310,6 +327,39 @@ }); }) }, + rgvStatus(method){ + let that = this + that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{ + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(()=>{ + $.ajax({ + url: baseUrl + "/rgv/demo/status/rgvStatus", + headers: { + 'token': localStorage.getItem('token') + }, + data:{ + rgvNo : this.formParam.rgvNo, + status : Number(method) + }, + method: 'Get', + success: function (res) { + if (res.code == 200) { + that.$message({ + message: res.msg, + type: 'success' + }); + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }) + }, requestOperate(method) { let that = this that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{ -- Gitblit v1.9.1