From e550bdba8ae64ac6c429aa7cab65b301ea19ee38 Mon Sep 17 00:00:00 2001 From: psh <psh> Date: Wed, 23 Aug 2023 09:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationAutoInitialExecuter.java | 5 +- .../nl/acs/auto/run/AutoRunServiceImpl.java | 16 +- .../service/impl/DeviceExtraServiceImpl.java | 2 +- .../service/impl/DeviceServiceImpl.java | 3 + .../device/service/mapper/DeviceMapper.java | 8 +- .../service/impl/InstructionServiceImpl.java | 3 + .../org/nl/acs/opc/DeviceAppServiceImpl.java | 6 +- .../nl/acs/opc/DeviceManageServiceImpl.java | 3 + .../org/nl/acs/opc/OpcServerServiceImpl.java | 212 +++++++++-------- .../org/nl/acs/plc/rest/OpcPlcController.java | 158 +++++++------ .../org/nl/acs/plc/service/OpcPlcService.java | 15 ++ .../plc/service/impl/OpcPlcServiceImpl.java | 38 +++ .../service/impl/RouteLineServiceImpl.java | 4 + .../task/service/impl/TaskServiceImpl.java | 4 + .../nl/acs/udw/rest/UdwManagerController.java | 42 ++++ .../src/main/java/org/nl/start/Init.java | 21 -- .../notice/impl/SysNoticeServiceImpl.java | 8 +- .../src/main/resources/application.yml | 120 ---------- .../src/api/acs/history/acsDeviceErrorLog.js | 27 +++ acs/nladmin-ui/src/api/acs/history/udwData.js | 28 +++ acs/nladmin-ui/src/api/system/dict.js | 34 +++ acs/nladmin-ui/src/api/system/param.js | 35 +++ acs/nladmin-ui/src/assets/icons/svg/clear.svg | 2 + .../src/assets/icons/svg/downAlign.svg | 2 + .../src/assets/icons/svg/horizontalAlign.svg | 2 + .../icons/svg/horizontalDistribution.svg | 2 + .../src/assets/icons/svg/leftAlign.svg | 2 + .../src/assets/icons/svg/rightAlign.svg | 2 + acs/nladmin-ui/src/assets/icons/svg/save.svg | 2 + .../src/assets/icons/svg/upAlign.svg | 2 + .../src/assets/icons/svg/verticalAlign.svg | 2 + .../assets/icons/svg/verticalDistribution.svg | 2 + .../src/views/acs/history/udwData/index.vue | 181 ++++++++++++++ .../src/views/monitor/lucene/api/lucene.js | 18 ++ .../src/views/monitor/lucene/index.vue | 109 +++++++++ .../src/views/monitor/lucene/search.vue | 150 ++++++++++++ .../src/views/monitor/lucene/time.vue | 64 +++++ .../logicflow/editor/components/Diagram.vue | 34 +-- .../editor/components/PropertyPanel.vue | 111 ++++++--- .../system/monitor/device/XJDeviceMonitor.vue | 223 ------------------ .../src/views/system/monitor/device/index.vue | 23 +- .../src/views/tools/codeGen/codeDetail.vue | 8 +- 42 files changed, 1104 insertions(+), 629 deletions(-) create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/udw/rest/UdwManagerController.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java delete mode 100644 acs/nladmin-system/nlsso-server/src/main/resources/application.yml create mode 100644 acs/nladmin-ui/src/api/acs/history/acsDeviceErrorLog.js create mode 100644 acs/nladmin-ui/src/api/acs/history/udwData.js create mode 100644 acs/nladmin-ui/src/api/system/dict.js create mode 100644 acs/nladmin-ui/src/api/system/param.js create mode 100644 acs/nladmin-ui/src/assets/icons/svg/clear.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/downAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/horizontalAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/horizontalDistribution.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/leftAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/rightAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/save.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/upAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/verticalAlign.svg create mode 100644 acs/nladmin-ui/src/assets/icons/svg/verticalDistribution.svg create mode 100644 acs/nladmin-ui/src/views/acs/history/udwData/index.vue create mode 100644 acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js create mode 100644 acs/nladmin-ui/src/views/monitor/lucene/index.vue create mode 100644 acs/nladmin-ui/src/views/monitor/lucene/search.vue create mode 100644 acs/nladmin-ui/src/views/monitor/lucene/time.vue delete mode 100644 acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/initial/ApplicationAutoInitialExecuter.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/initial/ApplicationAutoInitialExecuter.java index 61011f4..f596e49 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/initial/ApplicationAutoInitialExecuter.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/initial/ApplicationAutoInitialExecuter.java @@ -10,6 +10,9 @@ import java.util.List; @Component public class ApplicationAutoInitialExecuter { + /** + * 获取所有实现ApplicationAutoInitial接口的bean对象 + */ @Autowired(required = false) List<ApplicationAutoInitial> applicationAutoInitial; //是否启动 @@ -25,7 +28,7 @@ public class ApplicationAutoInitialExecuter { while (it.hasNext()) { ApplicationAutoInitial service = (ApplicationAutoInitial) it.next(); - service.autoInitial(); + service.autoInitial(); // 执行实现的autoInitial方法 } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/AutoRunServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/AutoRunServiceImpl.java index 9ef5d6c..27cae1f 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/AutoRunServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/AutoRunServiceImpl.java @@ -13,15 +13,18 @@ import org.springframework.stereotype.Service; import java.util.*; +/** + * 初始化启动线程 + */ @Service @Slf4j public class AutoRunServiceImpl implements AutoRunService, ApplicationAutoInitial { @Autowired(required = false) private List<AbstractAutoRunnable> abstractAutoRunnableList; - private List<String> autoRun_code_index = new ArrayList(); - private List<Thread> threads = new ArrayList(); - private List<AbstractAutoRunnable> thread_autoRun = new ArrayList(); - private List<String> thread_code_index = new ArrayList(); + private List<AbstractAutoRunnable> thread_autoRun = new ArrayList(); // 线程类 + private List<String> autoRun_code_index = new ArrayList(); // key + private List<Thread> threads = new ArrayList(); // 运行线程 + private List<String> thread_code_index = new ArrayList(); // key @Override public synchronized void startThread(String threadCode) { @@ -172,8 +175,13 @@ public class AutoRunServiceImpl implements AutoRunService, ApplicationAutoInitia : new LinkedList(); } + /** + * 自动初始化线程 + * @throws Exception + */ @Override public void autoInitial() throws Exception { + // 获取所有的类型为AbstractAutoRunnable的bean List<AbstractAutoRunnable> list = this.getAllAutoThread(); Iterator it = list.iterator(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java index 996b88a..3cffe2f 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java @@ -237,7 +237,7 @@ public class DeviceExtraServiceImpl extends CommonServiceImpl<DeviceExtraMapper, dto.setDevice_code(json.getString("device_code")); dto.setDevice_id(device_id); dto.setExtra_name((String) key); - dto.setExtra_value(json.get(key).toString()); + dto.setExtra_value(String.valueOf(json.get(key))); dto.setFiled_type("01"); dto.setOrder_seq(new BigDecimal(0)); this.create(dto); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 26cbfaf..8c77122 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -1776,6 +1776,9 @@ public class DeviceServiceImpl extends CommonServiceImpl<DeviceMapper, Device> i this.reload(); } + /** + * 加载货位信息 + */ @Override public void reload() { this.storageCells = queryAllStorageCell(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/mapper/DeviceMapper.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/mapper/DeviceMapper.java index da34182..afa4464 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/mapper/DeviceMapper.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/mapper/DeviceMapper.java @@ -17,10 +17,10 @@ public interface DeviceMapper extends CommonMapper<Device> { String queryDeviceSql = "SELECT d.*, dict.label AS device_type_name, dict2.label AS region_name " + "FROM " + "ACS_DEVICE d " + - "LEFT JOIN sys_dict_detail dict ON dict.value = d.device_type " + - "AND dict.`name` = 'device_type' " + - "LEFT JOIN sys_dict_detail dict2 ON dict2.value = d.region " + - "AND dict2.`name` = 'region_type' "; + "LEFT JOIN sys_dict dict ON dict.value = d.device_type " + + "AND dict.`code` = 'device_type' " + + "LEFT JOIN sys_dict dict2 ON dict2.value = d.region " + + "AND dict2.`code` = 'region_type' "; String wrapperDeviceSql = queryDeviceSql + " ${ew.customSqlSegment}"; /** diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 2198412..450fb52 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -159,6 +159,9 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper, } }*/ + /** + * 加载指令数据 + */ @Override public void autoInitial() { this.reload(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java index b64a2c6..28519b9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java @@ -20,8 +20,8 @@ import java.util.*; @Slf4j @Service public class DeviceAppServiceImpl implements DeviceAppService, ApplicationAutoInitial { - private List<Device> devices = new ArrayList(); - private List<String> code_indexs = new ArrayList(); + private List<Device> devices = new ArrayList(); // 所有设备链表 + private List<String> code_indexs = new ArrayList(); // 设备对应的下表 @Autowired private DeviceManageService deviceManageService; @Autowired @@ -315,7 +315,7 @@ public class DeviceAppServiceImpl implements DeviceAppService, ApplicationAutoIn } public synchronized void reload() { - List<DeviceManageDto> deviceManageDtos = this.deviceManageService.queryAllWithExtra(); + List<DeviceManageDto> deviceManageDtos = deviceManageService.queryAllWithExtra(); this.devices = new ArrayList(); Collections.synchronizedList(this.devices); this.code_indexs = new ArrayList(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceManageServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceManageServiceImpl.java index 3d40ba7..4505b3d 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceManageServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceManageServiceImpl.java @@ -42,13 +42,16 @@ public class DeviceManageServiceImpl implements DeviceManageService { @Override public List<DeviceManageDto> queryAllWithExtra() { // JSONArray arr = WQLObject.getWQLObject("acs_device").query().getResultJSONArray(0); + // 获取所有的设备 List<Device> deviceList= new LambdaQueryChainWrapper<>(deviceMapper).list(); JSONArray arr = JSONArray.parseArray(JSON.toJSONString(deviceList)); + // 获取列表扩展 // JSONArray extArr = WQLObject.getWQLObject("acs_device_extra").query().getResultJSONArray(0); List<DeviceExtra> deviceExtraList= new LambdaQueryChainWrapper<>(deviceExtraMapper).list(); JSONArray extArr = JSONArray.parseArray(JSON.toJSONString(deviceExtraList)); + // 设备+扩展DTO List<DeviceExtraManageDto> extras = extArr.toJavaList(DeviceExtraManageDto.class); // WQLObject runpointTab = WQLObject.getWQLObject("acs_device_runpoint"); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java index f9875aa..8695fbe 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java @@ -30,127 +30,131 @@ import java.util.Map; @Service public class OpcServerServiceImpl implements OpcServerService, ApplicationAutoInitial { - private static final Logger log = LoggerFactory.getLogger(OpcServerServiceImpl.class); - @Autowired OpcServerManageService opcServerManageService; - Map<String, OpcServerManageDto> opcServerManageDtos = new HashMap(); - Map<String, Server> servers = Collections.synchronizedMap(new HashMap()); - Map<String, Group> groups = Collections.synchronizedMap(new HashMap()); - - public OpcServerServiceImpl() {} - - public void autoInitial() throws Exception { - this.reload(); - if (OpcConfig.auto_start_opc) { - Thread t = - new Thread() { - public void run() { - Iterator var1 = OpcServerServiceImpl.this.opcServerManageDtos.values().iterator(); - - while (var1.hasNext()) { - OpcServerManageDto dto = (OpcServerManageDto) var1.next(); - - try { - OpcServerServiceImpl.this.getServer(dto.getOpc_code()); - OpcServerServiceImpl.log.info("加载opc server {}", dto.getOpc_code()); - } catch (Exception var4) { - OpcServerServiceImpl.log.warn("启动无法载入servers", var4); - } - } - } - }; - t.start(); + private static final Logger log = LoggerFactory.getLogger(OpcServerServiceImpl.class); + @Autowired + OpcServerManageService opcServerManageService; + Map<String, OpcServerManageDto> opcServerManageDtos = new HashMap(); + Map<String, Server> servers = Collections.synchronizedMap(new HashMap()); + Map<String, Group> groups = Collections.synchronizedMap(new HashMap()); + + public OpcServerServiceImpl() { } - } - - public synchronized void reload() { - this.opcServerManageDtos = this.opcServerManageService.queryAllServerMap(); - this.opcServerManageDtos = Collections.synchronizedMap(this.opcServerManageDtos); - } - - public synchronized Group getServer(String code) { - Group group = null; - group = (Group) this.groups.get(code); - if (group != null) { - try { - if (group.isActive()) { - return group; + + /** + * 加载opc服务,启动opc线程 + * @throws Exception + */ + public void autoInitial() throws Exception { + this.reload(); // 加载opc服务 + if (OpcConfig.auto_start_opc) { + Thread t = + new Thread(() -> { + Iterator var1 = OpcServerServiceImpl.this.opcServerManageDtos.values().iterator(); + + while (var1.hasNext()) { + OpcServerManageDto dto = (OpcServerManageDto) var1.next(); + + try { + OpcServerServiceImpl.this.getServer(dto.getOpc_code()); + OpcServerServiceImpl.log.info("加载opc server {}", dto.getOpc_code()); + } catch (Exception var4) { + OpcServerServiceImpl.log.warn("启动无法载入servers", var4); + } + } + }); + t.start(); } - } catch (JIException var9) { - var9.printStackTrace(); - } } - Server server = (Server) this.servers.get(code); - boolean needcreate = false; - if (server == null) { - needcreate = true; - } else { - try { - group = server.findGroup(OpcConfig.opc_server_default_group); - } catch (UnknownHostException - | JIException - | UnknownGroupException - | NotConnectedException - | IllegalArgumentException var8) { - var8.printStackTrace(); - needcreate = true; - } + public synchronized void reload() { + this.opcServerManageDtos = this.opcServerManageService.queryAllServerMap(); + this.opcServerManageDtos = Collections.synchronizedMap(this.opcServerManageDtos); } - if (needcreate) { - OpcServerManageDto dto = (OpcServerManageDto) this.opcServerManageDtos.get(code); - if (dto == null) { - throw new BadRequestException("code 不存在"); - } + public synchronized Group getServer(String code) { + Group group = null; + group = (Group) this.groups.get(code); + if (group != null) { + try { + if (group.isActive()) { + return group; + } + } catch (JIException var9) { + var9.printStackTrace(); + } + } - server = OpcServerUtl.getServerWithOutException( - dto.getOpc_host(), - dto.getCls_id(), - dto.getUser(), - dto.getPassword(), - dto.getDomain()); + Server server = (Server) this.servers.get(code); + boolean needcreate = false; + if (server == null) { + needcreate = true; + } else { + try { + group = server.findGroup(OpcConfig.opc_server_default_group); + } catch (UnknownHostException + | JIException + | UnknownGroupException + | NotConnectedException + | IllegalArgumentException var8) { + var8.printStackTrace(); + needcreate = true; + } + } + + if (needcreate) { + OpcServerManageDto dto = (OpcServerManageDto) this.opcServerManageDtos.get(code); + if (dto == null) { + throw new BadRequestException("code 不存在"); + } + + server = OpcServerUtl.getServerWithOutException( + dto.getOpc_host(), + dto.getCls_id(), + dto.getUser(), + dto.getPassword(), + dto.getDomain()); // server = OpcServerUtl.getServerWithOutException(this.OpcServer.getOpc_host(), this.OpcServer.getCls_id(), this.OpcServer.getUser(), this.OpcServer.getPassword(), this.OpcServer.getDomain()); - try { - group = server.addGroup(OpcConfig.opc_server_default_group); - } catch (Exception var7) { - throw new BadRequestException(var7.toString()); - } + try { + group = server.addGroup(OpcConfig.opc_server_default_group); + } catch (Exception var7) { + throw new BadRequestException(var7.toString()); + } + + this.servers.put(code, server); + this.groups.put(code, group); + } - this.servers.put(code, server); - this.groups.put(code, group); + return group; } - return group; - } + public synchronized void clearServer(String code) { + try { + Server server = (Server) this.servers.get(code); + if (server != null) { + server.disconnect(); + } - public synchronized void clearServer(String code) { - try { - Server server = (Server) this.servers.get(code); - if (server!=null){ - server.disconnect(); - } + } catch (Exception e) { + e.printStackTrace(); + log.error("清理server异常,", e.getMessage()); + } - } catch (Exception e) { - e.printStackTrace(); - log.error("清理server异常,",e.getMessage()); + this.servers.remove(code); + this.groups.remove(code); } - this.servers.remove(code); - this.groups.remove(code); - } - - public void writeInteger(String code, ItemValue... values) { - try { - Group group = this.getServer(code); - OpcUtl.writeValue(group, values); - } catch (Exception var4) { - this.clearServer(code); - log.warn("写入出错opc server {} 重新加载", code, var4); - ThreadUtl.sleep(5000L); - throw var4; + public void writeInteger(String code, ItemValue... values) { + try { + Group group = this.getServer(code); + OpcUtl.writeValue(group, values); + } catch (Exception var4) { + this.clearServer(code); + log.warn("写入出错opc server {} 重新加载", code, var4); + ThreadUtl.sleep(5000L); + throw var4; + } } - } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/rest/OpcPlcController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/rest/OpcPlcController.java index 224a18f..638a1d5 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/rest/OpcPlcController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/rest/OpcPlcController.java @@ -1,71 +1,87 @@ -//package org.nl.acs.plc.rest; -// -//import org.nl.common.logging.annotation.Log; -//import org.nl.acs.plc.service.OpcPlcService; -//import org.nl.acs.opc.service.dto.OpcPlcDto; -//import org.nl.acs.opc.service.dto.OpcPlcQueryParam; -//import org.springframework.data.domain.Pageable; -//import lombok.RequiredArgsConstructor; -//import org.springframework.http.HttpStatus; -//import org.springframework.http.ResponseEntity; -//import org.springframework.validation.annotation.Validated; -//import org.springframework.web.bind.annotation.*; -//import io.swagger.annotations.*; -//import java.util.Set; -// -///** -//* @author jiaolm -//* @date 2023-05-09 -//**/ -//@RestController -//@RequiredArgsConstructor -//@Api(tags = "plc服务管理") -//@RequestMapping("/api/opcPlc") -//public class OpcPlcController { -// -// private final OpcPlcService opcPlcService; -// -// @GetMapping -// @Log("查询plc服务") -// @ApiOperation("查询plc服务") -// //@PreAuthorize("@el.check('opcPlc:list')") -// public ResponseEntity query(OpcPlcQueryParam query, Pageable pageable){ -// return new ResponseEntity<>(opcPlcService.queryAll(query,pageable),HttpStatus.OK); -// } -// -// @PostMapping -// @Log("新增plc服务") -// @ApiOperation("新增plc服务") -// //@PreAuthorize("@el.check('opcPlc:add')") -// public ResponseEntity create(@Validated @RequestBody OpcPlcDto resources){ -// return new ResponseEntity<>(opcPlcService.insert(resources),HttpStatus.CREATED); -// } -// -// @PutMapping -// @Log("修改plc服务") -// @ApiOperation("修改plc服务") -// //@PreAuthorize("@el.check('opcPlc:edit')") -// public ResponseEntity update(@Validated @RequestBody OpcPlcDto resources){ -// opcPlcService.updateById(resources); -// return new ResponseEntity<>(HttpStatus.NO_CONTENT); -// } -// -// @DeleteMapping -// @Log("删除plc服务") -// @ApiOperation("删除plc服务") -// //@PreAuthorize("@el.check('opcPlc:del')") -// public ResponseEntity delete(@RequestBody Set<String> ids) { -// opcPlcService.removeByIds(ids); -// return new ResponseEntity<>(HttpStatus.OK); -// } -// -// /* -// @Log("导出plc服务") -// @ApiOperation("导出plc服务") -// @GetMapping(value = "/download") -// //@PreAuthorize("@el.check('opcPlc:list')") -// public void download(HttpServletResponse response, OpcPlcQueryParam query) throws IOException { -// opcPlcService.download(opcPlcService.queryAll(query), response); -// }*/ -// -//} +package org.nl.acs.plc.rest; + +import org.nl.common.logging.annotation.Log; +import org.nl.acs.plc.service.OpcPlcService; +import org.nl.acs.opc.service.dto.OpcPlcDto; +import org.nl.acs.opc.service.dto.OpcPlcQueryParam; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.util.Set; + +/** +* @author jiaolm +* @date 2023-05-09 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "plc服务管理") +@RequestMapping("/api/opcPlc") +public class OpcPlcController { + + private final OpcPlcService opcPlcService; + + @GetMapping + @Log("查询plc服务") + @ApiOperation("查询plc服务") + //@PreAuthorize("@el.check('opcPlc:list')") + public ResponseEntity query(OpcPlcQueryParam query, Pageable pageable){ + return new ResponseEntity<>(opcPlcService.queryAll(query,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增plc服务") + @ApiOperation("新增plc服务") + //@PreAuthorize("@el.check('opcPlc:add')") + public ResponseEntity create(@Validated @RequestBody OpcPlcDto resources){ + return new ResponseEntity<>(opcPlcService.insert(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改plc服务") + @ApiOperation("修改plc服务") + //@PreAuthorize("@el.check('opcPlc:edit')") + public ResponseEntity update(@Validated @RequestBody OpcPlcDto resources){ + opcPlcService.updateById(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @Log("删除plc服务") + @ApiOperation("删除plc服务") + //@PreAuthorize("@el.check('opcPlc:del')") + public ResponseEntity delete(@RequestBody Set<String> ids) { + opcPlcService.removeByIds(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/selectList") + @Log("下拉选PLC") + @ApiOperation("下拉选PLC") + //@PreAuthorize("@el.check('routePlan:list')") + public ResponseEntity<Object> selectList() { + return new ResponseEntity<>(opcPlcService.selectList(), HttpStatus.OK); + } + + @GetMapping("/selectList/{opc_uuid}") + @Log("下拉选PLC") + @ApiOperation("下拉选PLC") + //@PreAuthorize("@el.check('routePlan:list')") + public ResponseEntity<Object> selectListByOpcID(@PathVariable String opc_uuid) { + return new ResponseEntity<>(opcPlcService.selectListByOpcID(opc_uuid), HttpStatus.OK); + } + + /* + @Log("导出plc服务") + @ApiOperation("导出plc服务") + @GetMapping(value = "/download") + //@PreAuthorize("@el.check('opcPlc:list')") + public void download(HttpServletResponse response, OpcPlcQueryParam query) throws IOException { + opcPlcService.download(opcPlcService.queryAll(query), response); + }*/ + +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java index 7771e69..049a6b3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java @@ -1,5 +1,6 @@ package org.nl.acs.plc.service; +import com.alibaba.fastjson.JSONArray; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.CommonService; import org.nl.acs.opc.domain.OpcPlc; @@ -50,4 +51,18 @@ public interface OpcPlcService extends CommonService<OpcPlc> { * @throws IOException / */ // void download(List<OpcPlcDto> all, HttpServletResponse response) throws IOException; + + /** + * 前端PLC下拉选列表 + * + * @return + */ + List<OpcPlc> selectList(); + + /** + * 根据OPC标识得到前端PLC下拉选列表 + * + * @return + */ + List<OpcPlc> selectListByOpcID(String opc_uuid); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java index 25b2270..71b1854 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java @@ -1,5 +1,8 @@ package org.nl.acs.plc.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.nl.acs.common.base.PageInfo; @@ -12,6 +15,7 @@ import org.nl.acs.plc.service.OpcPlcService; import org.nl.acs.opc.service.dto.OpcPlcDto; import org.nl.acs.opc.service.dto.OpcPlcQueryParam; import org.nl.acs.opc.service.mapper.OpcPlcMapper; +import org.nl.system.service.logicflow.dao.StageImage; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -89,6 +93,40 @@ public class OpcPlcServiceImpl extends CommonServiceImpl<OpcPlcMapper, OpcPlc> i return this.removeByIds(set); } + @Override + public List<OpcPlc> selectList() { + List<OpcPlc> lists = opcPlcMapper.selectList(new LambdaQueryWrapper<OpcPlc>() + .eq(OpcPlc::getIs_delete, "0") + .eq(OpcPlc::getIs_active, "1") + .orderByDesc(OpcPlc::getUpdate_time)); + return lists; + } + + @Override + public List<OpcPlc> selectListByOpcID(String opc_uuid) { + //OPC_PLC表【acs_opc_plc】 +// JSONArray arr = WQLObject.getWQLObject("acs_opc_plc").query("is_delete= '0' AND is_active= '1' and opc_server_id = '" + opc_uuid + "'").getResultJSONArray(0); +// JSONArray result = new JSONArray(); +// for (int i = 0; i < arr.size(); i++) { +// JSONObject obj = arr.getJSONObject(i); +// JSONObject json = new JSONObject(); +// json.put("plc_id", obj.getString("plc_id")); +// json.put("plc_code", obj.getString("plc_code")); +// json.put("plc_name", obj.getString("plc_name")); +// result.add(json); +// } +// return result; + + List<OpcPlc> lists = opcPlcMapper.selectList(new LambdaQueryWrapper<OpcPlc>() + .eq(OpcPlc::getIs_delete, "0") + .eq(OpcPlc::getIs_active, "1") + .eq(OpcPlc::getOpc_server_id, opc_uuid) + .orderByDesc(OpcPlc::getUpdate_time)); + return lists; + + } + + /* private void delCaches(String id) { redisUtils.delByKey(CACHE_KEY + "::id:", id); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/route/service/impl/RouteLineServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/route/service/impl/RouteLineServiceImpl.java index 7a9b601..5ae3c19 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/route/service/impl/RouteLineServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/route/service/impl/RouteLineServiceImpl.java @@ -514,6 +514,10 @@ public class RouteLineServiceImpl extends CommonServiceImpl<RouteLineMapper, Rou return false; } + /** + * 加载路由路线 + * @throws SQLException + */ @Override public void reload() throws SQLException { Object[] param = new Object[0]; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 0976806..b304e06 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -246,6 +246,10 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme FileUtil.downloadExcel(list, response); }*/ + /** + * 获取未完成任务 + * @throws Exception + */ @Override public void autoInitial() throws Exception { Class var1 = TaskInstructionLock.class; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/udw/rest/UdwManagerController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/udw/rest/UdwManagerController.java new file mode 100644 index 0000000..6f8517c --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/udw/rest/UdwManagerController.java @@ -0,0 +1,42 @@ + +package org.nl.acs.udw.rest; + + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.udw.service.UdwManageService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "内存点位管理") +@RequestMapping("/api/udw") +@Slf4j +public class UdwManagerController { + + private final UdwManageService udwManageService; + +// @GetMapping +// @Log("查询内存点位") +// @ApiOperation("查询内存点位") +// @SaIgnore +// public ResponseEntity<Object> query(@RequestParam JSONObject whereJson) { +// return new ResponseEntity<>(udwManageService.queryByConditions(whereJson), HttpStatus.OK); +// } + + @GetMapping + @ApiOperation("查询内存点位") + @SaIgnore + //@PreAuthorize("@el.check('device:list')") + public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(udwManageService.queryAll(whereJson, page), HttpStatus.OK); + } +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java deleted file mode 100644 index c98e6cc..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.nl.start; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * 随项目启动模块 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class Init implements ApplicationRunner { - - @Override - public void run(ApplicationArguments args) throws Exception { - System.out.println("项目启动成功!"); - } -} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java index f41f485..5e851a7 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java @@ -157,10 +157,12 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice public void createNotice(String msg, String title, String type) { log.info("创建消息通知-信息:{}, 标题:{}, 类型:{}", msg, title, type); // 获取标题相同的信息 - List<SysNotice> sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper<SysNotice>().eq(SysNotice::getNotice_title, title)); + List<SysNotice> sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper<SysNotice>() + .eq(SysNotice::getNotice_title, title) + .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue())); if (ObjectUtil.isNotEmpty(sysNotices)) return; SysNotice noticeDto = SysNotice.builder() - .notice_id(IdUtil.getSnowflake(1,1).nextIdStr()) + .notice_id(IdUtil.getSnowflake(1, 1).nextIdStr()) .notice_type(type) .notice_title(title) .notice_content(msg) @@ -180,4 +182,6 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice } } + + } diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/application.yml b/acs/nladmin-system/nlsso-server/src/main/resources/application.yml deleted file mode 100644 index df46a2c..0000000 --- a/acs/nladmin-system/nlsso-server/src/main/resources/application.yml +++ /dev/null @@ -1,120 +0,0 @@ -# 端口 -server: - port: 9000 - -# Sa-Token 配置 -sa-token: - # ------- SSO-模式一相关配置 (非模式一不需要配置) - -# 配置 Cookie 作用域 - -# ------- SSO-模式二相关配置 - sso: - # Ticket有效期 (单位: 秒),默认五分钟 - ticket-timeout: 300 - # 所有允许的授权回调地址比较重要 - allow-url: "*" - # 是否打开单点注销功能 - is-slo: true - # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) -# # 是否打开模式三 - isHttp: true -# # 接口调用秘钥(用于SSO模式三的单点注销功能) - secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor - token-name: EL-ADMIN-TOEKN -# # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) -# -spring: - #配置 Jpa - jpa: - hibernate: - ddl-auto: none - open-in-view: true - properties: - hibernate: - dialect: org.hibernate.dialect.MySQL5InnoDBDialect - enable_lazy_load_no_trans: true - # 数据源 - datasource: - druid: - db-type: com.alibaba.druid.pool.DruidDataSource - driverClassName: com.mysql.cj.jdbc.Driver - # url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:whxr_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:whxr}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} - password: ${DB_PWD:P@ssw0rd} - # username: ${DB_USER:root} - # password: ${DB_PWD:root} - # 初始连接数 - initial-size: 5 - # 最小连接数 - min-idle: 15 - # 最大连接数 - max-active: 30 - # 是否自动回收超时连接 - remove-abandoned: true - # 超时时间(以秒数为单位) - remove-abandoned-timeout: 180 - # 获取连接超时时间 - max-wait: 300 - # 连接有效性检测时间 - time-between-eviction-runs-millis: 60000 - # 连接在池中最小生存的时间 - min-evictable-idle-time-millis: 300000 - # 连接在池中最大生存的时间 - max-evictable-idle-time-millis: 900000 - # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 - test-while-idle: true - # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 - test-on-borrow: true - # 是否在归还到池中前进行检验 - test-on-return: false - # 检测连接是否有效 - validation-query: select 1 - # 配置监控统计 -# webStatFilter: -# enabled: true -# stat-view-servlet: -# enabled: true -# url-pattern: /druid/* -# reset-enable: false -# filter: -# stat: -# enabled: true -# # 记录慢SQL -# log-slow-sql: true -# slow-sql-millis: 1000 -# merge-sql: true -# wall: -# config: -# multi-statement-allow: true - - # Redis配置 (SSO模式一和模式二使用Redis来同步会话) - redis: - # Redis数据库索引(默认为0) - database: 1 - # Redis服务器地址 - host: 47.96.133.178 - # Redis服务器连接端口 - port: 6479 - # Redis服务器连接密码(默认为空) - password: 942464Yy - # 连接超时时间 - timeout: 10s - lettuce: - pool: - # 连接池最大连接数 - max-active: 200 - # 连接池最大阻塞等待时间(使用负值表示没有限制) - max-wait: -1ms - # 连接池中的最大空闲连接 - max-idle: 10 - # 连接池中的最小空闲连接 - min-idle: 0 - -forest: - # 关闭 forest 请求日志打印 - log-enabled: false - - - diff --git a/acs/nladmin-ui/src/api/acs/history/acsDeviceErrorLog.js b/acs/nladmin-ui/src/api/acs/history/acsDeviceErrorLog.js new file mode 100644 index 0000000..12f1337 --- /dev/null +++ b/acs/nladmin-ui/src/api/acs/history/acsDeviceErrorLog.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/deviceErrorLog', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/deviceErrorLog/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/deviceErrorLog', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/acs/nladmin-ui/src/api/acs/history/udwData.js b/acs/nladmin-ui/src/api/acs/history/udwData.js new file mode 100644 index 0000000..f3d3c5d --- /dev/null +++ b/acs/nladmin-ui/src/api/acs/history/udwData.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/task', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/task/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/task', + method: 'put', + data + }) +} + +export default { edit, del } + diff --git a/acs/nladmin-ui/src/api/system/dict.js b/acs/nladmin-ui/src/api/system/dict.js new file mode 100644 index 0000000..99170f7 --- /dev/null +++ b/acs/nladmin-ui/src/api/system/dict.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +export function getDicts() { + return request({ + url: 'api/dict/all', + method: 'get' + }) +} + +export function add(data) { + return request({ + url: 'api/dict', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/dict/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/dict', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/acs/nladmin-ui/src/api/system/param.js b/acs/nladmin-ui/src/api/system/param.js new file mode 100644 index 0000000..c2ded22 --- /dev/null +++ b/acs/nladmin-ui/src/api/system/param.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/param', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/param/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/param', + method: 'put', + data + }) +} + +export function getValueByCode(code) { + return request({ + url: 'api/param/getValueByCode', + method: 'post', + data: code + }) +} + +export default { add, edit, del, getValueByCode } diff --git a/acs/nladmin-ui/src/assets/icons/svg/clear.svg b/acs/nladmin-ui/src/assets/icons/svg/clear.svg new file mode 100644 index 0000000..add284f --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/clear.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660786702479" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9117" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M736 128l-32-64H320l-32 64H128v128h768V128H736zM192 896a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V320H192z" p-id="9118" fill="#000000"></path></svg> \ No newline at end of file diff --git a/acs/nladmin-ui/src/assets/icons/svg/downAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/downAlign.svg new file mode 100644 index 0000000..d02dce2 --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/downAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660785745738" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4619" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M64 896h896v64H64z" fill="#000000" p-id="4620"></path><path d="M192 832V64h256v768z" fill="#000000" p-id="4621"></path><path d="M576 832V320h256v512z" fill="#000000" p-id="4622"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/horizontalAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/horizontalAlign.svg new file mode 100644 index 0000000..ed79e1a --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/horizontalAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660787363495" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11210" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M64 480h896v64H64z" fill="#000000" p-id="11211"></path><path d="M832 256v512H576V256z" fill="#000000" p-id="11212"></path><path d="M448 128v768H192V128z" fill="#000000" p-id="11213"></path></svg> \ No newline at end of file diff --git a/acs/nladmin-ui/src/assets/icons/svg/horizontalDistribution.svg b/acs/nladmin-ui/src/assets/icons/svg/horizontalDistribution.svg new file mode 100644 index 0000000..b4af40e --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/horizontalDistribution.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660786338362" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6924" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M768 938.666667V85.333333h59.733333v853.333334zM196.266667 938.666667V85.333333H256v853.333334z m251.733333-128A64 64 0 0 1 384 746.666667v-469.333334A64 64 0 0 1 448 213.333333h128A64 64 0 0 1 640 277.333333v469.333334a64 64 0 0 1-64 64z" p-id="6925" fill="#000000"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/leftAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/leftAlign.svg new file mode 100644 index 0000000..b373ac3 --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/leftAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660785822800" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5157" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M64 64h64v896H64z" fill="#000000" p-id="5158"></path><path d="M192 192h515v256H192z" fill="#000000" p-id="5159"></path><path d="M192 576h768v256H192z" fill="#000000" p-id="5160"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/rightAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/rightAlign.svg new file mode 100644 index 0000000..b0670ba --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/rightAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660785927475" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5880" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M896 64h64v896h-64z" fill="#000000" p-id="5881"></path><path d="M320 192h512v256H320z" fill="#000000" p-id="5882"></path><path d="M64 576h768v256H64z" fill="#000000" p-id="5883"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/save.svg b/acs/nladmin-ui/src/assets/icons/svg/save.svg new file mode 100644 index 0000000..e9e05e3 --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/save.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660786920066" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10198" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M643.85952427 262.90530987c-18.01693867 0-32.75707733 14.614528-32.75707734 32.48401066v81.20456534c0 17.86948267 14.74013867 32.489472 32.75707734 32.489472s32.75707733-14.61998933 32.75707733-32.489472v-81.20456534c0-17.86948267-14.74013867-32.48401067-32.75707733-32.48401066z" fill="#2c2c2c" p-id="10199"></path><path d="M910.47417173 313.84644267l-145.784832-207.89111467c-13.09627733-17.86948267-34.39547733-29.23451733-58.966016-30.86199467H175.01825707c-36.03933867 0-65.519616 29.23451733-65.519616 64.96802134v745.49930666c0 35.733504 29.48027733 63.34600533 65.519616 63.34600534h689.586176c36.03933867 0 63.88667733-29.23997867 63.88667733-63.34600534v-526.23223466c1.6384-17.86948267-6.54813867-34.111488-18.01693867-45.481984zM205.0555904 171.87908267h517.59786667v220.889088c0 30.85653333-26.2144 58.46903467-58.966016 58.46903466H264.0216064c-32.76253867 0-58.966016-25.985024-58.966016-58.46903466V171.87908267z m544.25572693 665.059328h-462.60770133c-24.6382592 0-44.61253973-20.29431467-44.61253973-45.32906667s19.97318827-45.32906667 44.61253973-45.32906667h462.60770133c24.6382592 0 44.61253973 20.29431467 44.61253974 45.32906667s-19.97428053 45.32906667-44.61253974 45.32906667z m0.00109227-167.10587734H286.70252373c-24.6382592 0-44.61253973-20.29431467-44.61253973-45.32906666s19.97318827-45.32906667 44.61253973-45.32906667h462.61097814c24.6382592 0 44.61253973 20.29431467 44.61253973 45.32906667s-19.97428053 45.32906667-44.613632 45.32906666z" fill="#000000" p-id="10200"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/upAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/upAlign.svg new file mode 100644 index 0000000..29645dd --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/upAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660785897716" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5639" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M64 64h896v64H64z" fill="#000000" p-id="5640"></path><path d="M192 960V192h256v768z" fill="#000000" p-id="5641"></path><path d="M576 704V192h256v512z" fill="#000000" p-id="5642"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/verticalAlign.svg b/acs/nladmin-ui/src/assets/icons/svg/verticalAlign.svg new file mode 100644 index 0000000..a3646a0 --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/verticalAlign.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660785982322" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6318" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M480 64h64v896h-64z" fill="#000000" p-id="6319"></path><path d="M256 192h512v256H256z" fill="#000000" p-id="6320"></path><path d="M128 576h768v256H128z" fill="#000000" p-id="6321"></path></svg> diff --git a/acs/nladmin-ui/src/assets/icons/svg/verticalDistribution.svg b/acs/nladmin-ui/src/assets/icons/svg/verticalDistribution.svg new file mode 100644 index 0000000..e628a9e --- /dev/null +++ b/acs/nladmin-ui/src/assets/icons/svg/verticalDistribution.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660786309837" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6643" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } +</style></defs><path d="M85.333333 827.733333V768h853.333334v59.733333zM277.333333 640A64 64 0 0 1 213.333333 576v-128A64 64 0 0 1 277.333333 384h469.333334a64 64 0 0 1 64 64v128a64 64 0 0 1-64 64zM85.333333 256V196.266667h853.333334V256z" p-id="6644" fill="#000000"></path></svg> diff --git a/acs/nladmin-ui/src/views/acs/history/udwData/index.vue b/acs/nladmin-ui/src/views/acs/history/udwData/index.vue new file mode 100644 index 0000000..aa6668d --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/history/udwData/index.vue @@ -0,0 +1,181 @@ +<template> + <div class="app-container"> + <!--工具栏--> + <div class="head-container"> + <div v-if="crud.props.searchToggle"> + <!-- 搜索 --> + <el-select + v-model="form.unified_key" + placeholder="unified_key" + class="filter-item" + clearable + filterable + size="small" + @change="crud.toQuery" + > + <el-option v-for="(item,index) in unified_key" :key="index" :label="item.label" :value="item.value" /> + </el-select> + <el-input + v-model="query.code" + size="small" + clearable + placeholder="编号" + style="width: 200px;" + class="filter-item" + @keyup.enter.native="crud.toQuery" + /> + </div> + <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'--> + <crudOperation :permission="permission" /> + <!--表单组件--> + <el-dialog + :close-on-click-modal="false" + :before-close="crud.cancelCU" + :visible.sync="crud.status.cu > 0" + :title="crud.status.title" + width="500px" + > + <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> + <el-form-item label="unified_key"> + <el-input v-model="form.unified_key" style="width: 370px;" /> + </el-form-item> + <el-form-item label="编号"> + <el-input v-model="form.key" style="width: 370px;" /> + </el-form-item> + <el-form-item label="值"> + <el-input v-model="form.value" style="width: 370px;" /> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="text" @click="crud.cancelCU">取消</el-button> + <el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> + </div> + </el-dialog> + <!--表格渲染--> + <el-table + ref="table" + v-loading="crud.loading" + :data="crud.data" + size="small" + style="width: 100%;" + @selection-change="crud.selectionChangeHandler" + > + <el-table-column prop="unified_key" label="unified_key" /> + <el-table-column prop="key" label="编号" /> + <el-table-column prop="value" label="值" /> + <el-table-column + v-permission="['admin','instruction:edit','instruction:del']" + fixed="left" + label="操作" + width="150px" + align="center" + > + <template slot-scope="scope"> + <el-button slot="right" size="mini" style="margin-left: -1px;margin-right: 2px" type="text" @click="dialogFormVisible = true"> + 查询历史 + </el-button> + </template> + </el-table-column> + </el-table> + <!--分页组件--> + <pagination /> + <!--弹窗设置设备与图标绑定与角度--> + <el-dialog title="历史" :visible.sync="dialogFormVisible" width="35%"> + <el-form :model="form" size="small"> + <el-form-item label="unified_key" prop="unified_key" label-width="100px"> + <el-input v-model="form.unified_key" :disabled="true" /> + </el-form-item> + + <el-form-item label="code" prop="key" label-width="100px"> + <el-input v-model="form.key" :disabled="true" /> + </el-form-item> + + </el-form> + </el-dialog> + </div> + </div> +</template> + +<script> +import pagination from '@crud/Pagination' +import crudUdwData from '@/api/acs/history/udwData' +import CRUD, { crud, form, header, presenter } from '@crud/crud' +import crudOperation from '@crud/CRUD.operation' +import { getDicts } from '@/api/system/dict' + +const defaultForm = { + unified_key: '', + key: null, + value: null, + last_modify_date: null +} +export default { + dicts: [], + name: 'UdwData', + components: { pagination, crudOperation }, + mixins: [presenter(), header(), form(defaultForm), crud()], + cruds() { + return CRUD({ + title: '数据源', + url: 'api/udw/', + idField: 'key', + sort: 'key', + query: {}, + crudMethod: { ...crudUdwData }, + optShow: { + } + }) + }, + data() { + return { + unified_key: [ + { + value: '1', + label: 'opc_value' + }, + { + value: '2', + label: 'cached' + }, + { + value: '3', + label: 'socket' + } + ], + permission: { + }, + dialogFormVisible: false, + rules: { + }, + form: { + unified_key: 'opc_value', + key: null, + value: null, + last_modify_date: null + } + } + }, + created() { + getDicts().then(data => { + this.dicts = data + }) + }, + methods: { + // 钩子:在获取表格数据之前执行,false 则代表不获取数据 + [CRUD.HOOK.beforeRefresh]() { + return true + } + } +} +</script> + +<style scoped> +.el-dropdown-link { + cursor: pointer; + color: #409EFF; +} + +.el-icon-arrow-down { + font-size: 12px; +} +</style> diff --git a/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js b/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js new file mode 100644 index 0000000..674bb2c --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +export function getLogData(param) { + return request({ + url: 'api/lucene/getAll', + method: 'get', + data: param + }) +} + +export function labelsValues() { + return request({ + url: 'api/loki/labels/values', + method: 'get' + }) +} + +export default { getLogData, labelsValues } diff --git a/acs/nladmin-ui/src/views/monitor/lucene/index.vue b/acs/nladmin-ui/src/views/monitor/lucene/index.vue new file mode 100644 index 0000000..36be01e --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/lucene/index.vue @@ -0,0 +1,109 @@ +<template> + <div class="app-container"> + <div class="head-container"> + <Search /> + <crudOperation /> + </div> + <!--表格渲染--> + <el-table + ref="table" + v-loading="crud.loading" + :data="crud.data" + style="width: 100%;" + @selection-change="crud.selectionChangeHandler" + > + <!-- <el-table-column type="selection" width="55"/>--> + <!-- <el-table-column v-if="false" prop="id" label="id"/>--> + <el-table-column prop="operate" width="50" label="操作" /> + <el-table-column prop="device_code" label="设备号" min-width="130" show-overflow-tooltip /> + <el-table-column prop="task_code" label="任务编号" /> + <el-table-column prop="instruct_code" label="指令编号" /> + <el-table-column prop="method" label="方法" /> + <el-table-column prop="status_code" label="状态码" /> + <el-table-column prop="requestparam" label="请求参数" /> + <el-table-column prop="responseparam" label="返回参数" /> + <el-table-column prop="logTime" width="170" label="记录时间" /> + <el-table-column prop="content" width="500" label="内容详情" /> + + </el-table> + <!--分页组件--> + <pagination /> + </div> +</template> + +<script> +import Search from './search' +import CRUD, { crud, header, presenter } from '@crud/crud' +import crudOperation from '@crud/CRUD.operation' +import pagination from '@crud/Pagination' +import { delAll } from '@/api/acs/lucene/log' + +export default { + name: 'LuceneLog', + components: { Search, pagination, crudOperation }, + mixins: [presenter(), header(), crud()], + cruds: function() { + return CRUD({ + title: '系统参数', url: 'api/lucene/getAll', idField: 'id', sort: 'id,desc', + queryOnPresenterCreated: true, + optShow: { + add: false, + edit: false, + del: false, + download: false + }, + page: { + size: 40, + total: 0, + page: 0 + }, + query: { + createTime: [new Date(new Date().setTime(new Date().getTime() - 3600 * 1000)), new Date(new Date().setTime(new Date().getTime() + 3600 * 1000))] + } + }) + }, + data() { + return { + query: { blurry: '123' }, + permission: { + add: ['admin', 'param:add'], + edit: ['admin', 'param:edit'], + del: ['admin', 'param:del'] + }, + + rules: {} + } + }, + created() { + }, + methods: { + // 钩子:在获取表格数据之前执行,false 则代表不获取数据 + [CRUD.HOOK.beforeRefresh]() { + return true + }, + confirmDelAll() { + this.$confirm(`确认清空所有操作日志吗?`, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.crud.delAllLoading = true + delAll('device_execute').then(res => { + this.crud.delAllLoading = false + this.crud.dleChangePage(1) + this.crud.delSuccessNotify() + this.crud.toQuery() + }).catch(err => { + this.crud.delAllLoading = false + console.log(err.response.data.message) + }) + }).catch(() => { + }) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/acs/nladmin-ui/src/views/monitor/lucene/search.vue b/acs/nladmin-ui/src/views/monitor/lucene/search.vue new file mode 100644 index 0000000..4418988 --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/lucene/search.vue @@ -0,0 +1,150 @@ +<template> + <div v-if="crud.props.searchToggle"> + + <!-- <el-input + v-model="query.device_code" + clearable + size="small" + placeholder="请输入你要搜索的设备号" + style="width: 200px;" + class="filter-item" + /> --> + <!-- <el-select + v-model="query.device_code" + clearable + filterable + size="small" + placeholder="请输入你要搜索的设备号" + class="filter-item" + style="width: 190px" + @change="crud.toQuery" + > + <el-option v-for="item in device_codes" :key="item.id" :label="item.label" :value="item.value" /> + </el-select> --> + <el-select + ref="test" + v-model="query.device_code" + filterable + clearable + reserve-keyword + placeholder="设备号" + style="width: 190px;" + @change="crud.toQuery" + > + <el-option + v-for="item in deviceList" + :key="item.device_code" + :label="item.device_code" + :value="item.device_code" + /> + </el-select> + + <el-input + v-model="query.method" + clearable + size="small" + placeholder="请输入你要搜索的方法名" + style="width: 200px;" + class="filter-item" + /> + <el-input + v-model="query.status_code" + clearable + size="small" + placeholder="请输入你要搜索的状态码" + style="width: 200px;" + class="filter-item" + /> + <el-input + v-model="query.requestparam" + clearable + size="small" + placeholder="请输入你要搜索的请求参数" + style="width: 200px;" + class="filter-item" + /> + <el-input + v-model="query.responseparam" + clearable + size="small" + placeholder="请输入你要搜索的返回参数" + style="width: 200px;" + class="filter-item" + /> + <el-input + v-model="query.blurry" + clearable + size="small" + placeholder="请输入你要搜索的内容详情" + style="width: 200px;" + class="filter-item" + /> + <!-- + <date-range-picker v-model="query.createTime" class="date-item" /> + --> + + <el-date-picker + v-model="query.createTime" + type="datetimerange" + :picker-options="pickerOptions" + format="yyyy-MM-dd HH:mm:ss" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期" + align="right" + /> + <rrOperation /> + </div> +</template> + +<script> +import { header } from '@crud/crud' +import rrOperation from '@crud/RR.operation' +import deviceCrud from '@/api/acs/device/device' + +export default { + components: { rrOperation }, + mixins: [header()], + + data() { + return { + pickerOptions: { + shortcuts: [{ + text: '最近一周', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近一个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近三个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) + picker.$emit('pick', [start, end]) + } + }] + }, + value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)], + value2: '', + deviceList: [], + device_code: '' + } + }, + created() { + deviceCrud.selectDeviceList().then(data => { + this.deviceList = data + }) + } +} +</script> diff --git a/acs/nladmin-ui/src/views/monitor/lucene/time.vue b/acs/nladmin-ui/src/views/monitor/lucene/time.vue new file mode 100644 index 0000000..36d504a --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/lucene/time.vue @@ -0,0 +1,64 @@ +<template> + <div v-if="crud.props.searchToggle"> + <!-- + <date-range-picker v-model="query.createTime" class="date-item" /> + --> + + <el-date-picker + v-model="query.createTime" + type="datetimerange" + :picker-options="pickerOptions" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期" + align="right" + /> + <rrOperation /> + </div> +</template> + +<script> +import { header } from '@crud/crud' +import rrOperation from '@crud/RR.operation' + +export default { + components: { rrOperation }, + mixins: [header()], + + data() { + return { + pickerOptions: { + shortcuts: [{ + text: '最近一周', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近一个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近三个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) + picker.$emit('pick', [start, end]) + } + }] + }, + value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)], + value2: '' + } + }, + created() { + } +} +</script> diff --git a/acs/nladmin-ui/src/views/system/logicflow/editor/components/Diagram.vue b/acs/nladmin-ui/src/views/system/logicflow/editor/components/Diagram.vue index 81a0a02..5dd9d57 100644 --- a/acs/nladmin-ui/src/views/system/logicflow/editor/components/Diagram.vue +++ b/acs/nladmin-ui/src/views/system/logicflow/editor/components/Diagram.vue @@ -1,6 +1,7 @@ <template> <div class="diagram"> <diagram-toolbar + style="z-index: 1" v-if="lf" class="diagram-toolbar" :lf="lf" @@ -37,6 +38,7 @@ :only-edge="activeNodes.length === 0" :elements-style="properties" :show-choice="showChoice" + :node="nodeObj" @setStyle="$_setStyle" @setZIndex="$_setZIndex" /> @@ -92,7 +94,8 @@ export default { nodeSize: { width: '', heigh: '' - } + }, + nodeObj: {} // 给子组件传递信息 -- 下拉框实时更新信息 } }, mounted() { @@ -144,29 +147,6 @@ export default { registerCustomElement(lf) lf.setDefaultEdgeType('pro-polyline') - // 为菜单追加选项(必须在 lf.render() 之前设置) - lf.extension.menu.addMenuConfig({ - nodeMenu: [ - { - text: '绑定设备号', - callback(node) { - console.log(lf.graphModel.getNodeModelById(node.id)) - lf.graphModel.getNodeModelById(node.id).draggable = false - } - }, - { - text: '属性', - callback(node) { - alert(` - 节点ID:${node.id} - 节点类型:${node.type} - 节点坐标:(x: ${node.x}, y: ${node.y})` - ) - } - } - ], - edgeMenu: [] - }) lf.render(data) this.lf = lf this.lf.on('selection:selected,node:click,blank:click,edge:click', () => { // 选择/点击事件 @@ -187,12 +167,15 @@ export default { console.log('选中的节点', nodes) // const graphModel = this.lf.graphModel // console.log(graphModel) + // 只传第一个,以第一个为显示是否绑定设备等信息,其余显示正常不用处理 + this.nodeObj = nodes[0] nodes.forEach(node => { if (node.type === 'html-node') { this.showChoice = true } else { this.showChoice = false } + // debugger properties = { ...properties, ...node.properties } }) edges.forEach(edge => { @@ -202,6 +185,7 @@ export default { return properties }, $_dragInNode(type) { + // debugger this.lf.dnd.startDrag({ // 拖拽创建结点 type }) @@ -238,6 +222,8 @@ export default { lf.render(data) }, $_saveGraph() { // 保存数据 + // debugger + // console.log(this.defaultForm) if (this.defaultForm.stage_code === null) { this.$message.error('请选择舞台!') } else { diff --git a/acs/nladmin-ui/src/views/system/logicflow/editor/components/PropertyPanel.vue b/acs/nladmin-ui/src/views/system/logicflow/editor/components/PropertyPanel.vue index b59e078..d97dc0d 100644 --- a/acs/nladmin-ui/src/views/system/logicflow/editor/components/PropertyPanel.vue +++ b/acs/nladmin-ui/src/views/system/logicflow/editor/components/PropertyPanel.vue @@ -34,6 +34,56 @@ <div slot="reference" class="border-color" :style="{'backgroundColor': style.gradientColor}" /> </el-popover> </div> + <div class="setting-item"> + <span>设备绑定</span> + <el-select + filterable + clearable + v-model="style.device" + size="mini" + @change="$_changeDevice" + > + <el-option + v-for="item in deviceCodeOptions" + :key="item.device_id" + :value="item.device_code" + :label="item.device_code" + > + <span style="float: left">{{ item.device_code }}</span> + <span style="float: right; color: #8492a6; font-size: 13px">{{ item.device_name }}</span> + </el-option> + </el-select> + </div> + <div class="setting-item"> + <span>旋转角度</span> + <el-input-number + v-model="style.transform" + controls-position="right" + size="mini" + :min="0" + :max="360" + :step="90" + @change="$_changeTransform" + /> + <span>度</span> + </div> + <div v-if="showChoice" class="setting-item"> + <span>设备选择</span> + <el-select + filterable + clearable + v-model="style.imageUrl" + size="mini" + @change="$_changeImageUrl" + > + <el-option + v-for="item in imageUrlOptions" + :key="item.image_uuid" + :value="item.image_code" + :label="item.image_name" + /> + </el-select> + </div> <div class="setting-item"> <span>线条样式</span> <el-select v-model="style.borderStyle" size="small" @change="$_selectBorder"> @@ -133,37 +183,6 @@ <el-button size="small" @click="$emit('setZIndex', 'top')">置为顶部</el-button> <el-button size="small" @click="$emit('setZIndex', 'bottom')">置为底部</el-button> </div> - <div class="setting-item"> - <span>设备绑定</span> - <el-input v-model="style.device" placeholder="输入设备号" size="small" @change="$_changeDevice" /> - </div> - <div class="setting-item"> - <span>旋转角度</span> - <el-input-number - v-model="style.transform" - controls-position="right" - size="mini" - :min="0" - :max="360" - @change="$_changeTransform" - /> - <span>度</span> - </div> - <div v-if="showChoice" class="setting-item"> - <span>设备选择</span> - <el-select - v-model="style.imageUrl" - size="mini" - @change="$_changeImageUrl" - > - <el-option - v-for="item in imageUrlOptions" - :key="item.image_uuid" - :value="item.image_code" - :label="item.image_name" - /> - </el-select> - </div> </div> </div> </template> @@ -172,6 +191,7 @@ import { Sketch } from 'vue-color' import { shortStyles, borderStyles, fontFamilies } from '../constant' import crudStageImage from '@/api/logicflow/stageImage' +import crudDevice from '@/api/acs/device/device' export default { components: { @@ -180,7 +200,8 @@ export default { props: { elementsStyle: Object, onlyEdge: Boolean, // 是否是只设置边的属性,当只设置边的属性时,隐藏快捷样式和背景色设置 - showChoice: Boolean + showChoice: Boolean, + node: Object // 父组件传来的对象 }, data() { return { @@ -209,7 +230,8 @@ export default { fontWeight: '', // 文本加粗 lineHeightOptions: Array(5).fill(1).map((_, i) => _ + i * 0.5), // imageUrl: '', - imageUrlOptions: [] + imageUrlOptions: [], + deviceCodeOptions: [] } }, watch: { @@ -218,10 +240,16 @@ export default { this.style = { ...this.style, ...val } }, immediate: true + }, + node(newVal, oldVal) { + // newVal是新值,oldVal是旧值 + this.node = newVal + this.cleanParam() } }, created() { this.initStageIconList() + this.initDevicesList() }, methods: { initStageIconList() { // 初始化图标数据 @@ -232,6 +260,12 @@ export default { this.imageUrlOptions = data }) }, + initDevicesList() { + crudDevice.selectDeviceList().then(res => { + console.log('devices:', res) + this.deviceCodeOptions = res + }) + }, setStyle(item) { this.$emit('setStyle', item) }, @@ -319,6 +353,17 @@ export default { this.$emit('setStyle', { device: val }) + }, + cleanParam() { // 判断来清空下拉框 + if (this.node.properties.device === undefined) { + this.style.device = '' + } + if (this.node.properties.imageUrl === undefined) { + this.style.imageUrl = '' + } + if (this.node.properties.transform === undefined) { + this.style.transform = 0 + } } } } diff --git a/acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue b/acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue deleted file mode 100644 index f6a8a16..0000000 --- a/acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue +++ /dev/null @@ -1,223 +0,0 @@ -<template> - <el-dialog - title="监控详情" - append-to-body - :visible.sync="dialogVisible" - fullscreen - @open="open" - @close="close" - > - <el-row :gutter="20"> - <el-col :span="18" style="border: 1px solid white"> - <span /> - </el-col> - <el-col :span="6" style="margin-bottom: 20px"> - <!-- <span style="float: right"> - <el-button icon="el-icon-close" size="mini" type="info" @click="dialogVisible = false">返 回</el-button> - </span>--> - </el-col> - </el-row> - <el-card class="box-card" shadow="never"> - <el-form ref="form" disabled :inline="true" :model="form" :rules="rules" size="mini" label-width="80px"> - <el-form-item label="设备编码"> - <el-input v-model="device_code" placeholder="自动生产" style="width: 200px;" /> - </el-form-item> - <el-form-item label="设备名称" prop="dtl_count"> - <el-input v-model="device_name" style="width: 200px;" /> - </el-form-item> - </el-form> - </el-card> - <div class="crud-opts2" style="margin-top: 30px;margin-bottom: 15px"> - <el-form ref="form" disabled :inline="true" :model="form" :rules="rules" size="mini" label-width="200px"> - <el-form-item label="心跳"> - <el-input v-model="form.heartbeat" style="width: 200px;" /> - </el-form-item> - <el-form-item label="工作模式"> - <el-input v-model="form.mode" style="width: 200px;" /> - </el-form-item> - <el-form-item label="故障"> - <el-input v-model="form.error" style="width: 200px;" /> - </el-form-item> - <el-form-item label="故障次数"> - <el-input v-model="form.error_num" style="width: 200px;" /> - </el-form-item> - <el-form-item label="待机时间(调试)"> - <el-input v-model="form.ready_time" style="width: 200px;" /> - </el-form-item> - <el-form-item label="生产时间"> - <el-input v-model="form.running_time" style="width: 200px;" /> - </el-form-item> - <el-form-item label="故障时间"> - <el-input v-model="form.error_time" style="width: 200px;" /> - </el-form-item> - <el-form-item label="温度"> - <el-input v-model="form.temperature" style="width: 200px;" /> - </el-form-item> - <el-form-item label="当前生产产品编号"> - <el-input v-model="form.material" style="width: 200px;" /> - </el-form-item> - <el-form-item label="缺料信号"> - <el-input v-model="form.lack_material" style="width: 200px;" /> - </el-form-item> - <el-form-item label="上料数量"> - <el-input v-model="form.feeding_qty" style="width: 200px;" /> - </el-form-item> - <el-form-item label="下料数量"> - <el-input v-model="form.blanking_qty" style="width: 200px;" /> - </el-form-item> - <el-form-item label="当前生产合格品数量"> - <el-input v-model="form.qualified_qty" style="width: 200px;" /> - </el-form-item> - <el-form-item label="当前生产不合格品数量"> - <el-input v-model="form.unqualified_qty" style="width: 200px;" /> - </el-form-item> - <el-form-item label="生产完成"> - <el-input v-model="form.finish" style="width: 200px;" /> - </el-form-item> - <el-form-item label="任务号"> - <el-input v-model="form.task" style="width: 200px;" /> - </el-form-item> - <el-form-item label="设备暂停"> - <el-input v-model="form.pause" style="width: 200px;" /> - </el-form-item> - </el-form> - </div> - </el-dialog> -</template> - -<script> -import { crud } from '@crud/crud' - -export default { - name: 'XJDeviceMonitor', - components: {}, - mixins: [crud()], - props: { - dialogShow: { - type: Boolean, - default: false - }, - openParam: { - type: Object - } - }, - dicts: [], - data() { - return { - dialogVisible: false, - form: { - heartbeat: '', - mode: '', - error: '', - error_num: '', - ready_time: '', - running_time: '', - error_time: '', - temperature: '', - material: '', - lack_material: '', - feeding_qty: '', - blanking_qty: '', - qualified_qty: '', - unqualified_qty: '', - finish: '', - task: '', - pause: '' - }, - device_code: '', - device_name: '', - rules: { - } - } - }, - watch: { - dialogShow: { - handler(newValue) { - this.dialogVisible = newValue - } - } - }, - methods: { - open() { - this.webSocket() - }, - close() { - this.$emit('AddChanged') - }, - setForm(data) { - this.dialogVisible = true - this.form = data.data - this.device_code = data.device_code - this.device_name = data.device_name - // this.form = row - }, - webSocket() { - const that = this - if (typeof (WebSocket) === 'undefined') { - this.$notify({ - title: '提示', - message: '当前浏览器无法接收实时报警信息,请使用谷歌浏览器!', - type: 'warning', - duration: 0 - }) - } else { - const id = 'xj_device_monitor' - // 获取token保存到vuex中的用户信息,此处仅适用于本项目,注意删除或修改 - // 实例化socket,这里我把用户名传给了后台,使后台能判断要把消息发给哪个用户,其实也可以后台直接获取用户IP来判断并推送 - - // const wsUri = process.env.VUE_APP_WS_API + '/webSocket/' + id - const wsUri = window.g.prod.VUE_APP_BASE_API.replace('http', 'ws') + '/webSocket/' + id - this.socket = new WebSocket(wsUri) - // 监听socket打开 - this.socket.onopen = function() { - console.log('浏览器WebSocket已打开') - // that.socket.send('测试客户端发送消息') - } - - // 监听socket消息接收 - this.socket.onmessage = function(msg) { - const list = JSON.parse(msg.data).msg.detail - // console.log(list) - - for (const item of list) { - const obj = JSON.parse(JSON.stringify(item)) - if (obj.device_code === that.device_code) { - that.form = obj.data - } - } - } - - // 监听socket错误 - this.socket.onerror = function() { - that.$notify({ - title: '错误', - message: '服务器错误,无法接收实时报警信息', - type: 'error', - duration: 0 - }) - } - // 监听socket关闭 - this.socket.onclose = function() { - console.log('WebSocket已关闭') - } - } - } - } -} -</script> - -<style> -.crud-opts2 { - padding: 0 0; - display: -webkit-flex; - display: flex; - align-items: center; -} -.crud-opts2 .crud-opts-right2 { - margin-left: auto; - padding: 4px 4px; -} -.input-with-select { - background-color: #fff; -} -</style> diff --git a/acs/nladmin-ui/src/views/system/monitor/device/index.vue b/acs/nladmin-ui/src/views/system/monitor/device/index.vue index d74a426..484f28b 100644 --- a/acs/nladmin-ui/src/views/system/monitor/device/index.vue +++ b/acs/nladmin-ui/src/views/system/monitor/device/index.vue @@ -197,11 +197,10 @@ export default { name: 'MonitorDevice', data() { return { - stageParam: 'stage_code', // 舞台参数 + stageParam: 'age', // 舞台参数 dialogDeviceMsgVisible: false, // 显示设备信息的dialog device_code: null, tops: '20vh', // 初始top - stage_code: '', stageSelectList: [], arr: [], // 显示数组 dialogFormVisible: false, @@ -304,21 +303,11 @@ export default { this.initStageData() }, initStageData() { - // 获取舞台编码 - paramCrud.getValueByCode(this.stageParam).then(res => { - // console.log(res) - if (res.value) { - crudStage.getNewStageDataByCode(res.value).then(res => { // 通过舞台编码获取舞台数据并且赋值到lf对象 - data = JSON.parse(res.stage_data) - lf.render(data) - this.initStatus() // 初始化状态 - }) - } else { - this.$notify.error({ - title: '错误', - message: '请设置参数!' - }) - } + // 获取舞台数据 + crudStage.getNewStageDataByCode(this.stageParam).then(res => { // 通过舞台编码获取舞台数据并且赋值到lf对象 + data = JSON.parse(res.stage_data) + lf.render(data) + this.initStatus() // 初始化状态 }) this.timer = setInterval(() => { // 定时刷新设备的状态信息 console.log('定时器启动') diff --git a/acs/nladmin-ui/src/views/tools/codeGen/codeDetail.vue b/acs/nladmin-ui/src/views/tools/codeGen/codeDetail.vue index 14ad525..7d91755 100644 --- a/acs/nladmin-ui/src/views/tools/codeGen/codeDetail.vue +++ b/acs/nladmin-ui/src/views/tools/codeGen/codeDetail.vue @@ -154,7 +154,7 @@ export default { presenter(), header(), form(function() { - return Object.assign({ dict: { id: this.dictId }}, defaultForm) + return Object.assign({ code_rule_id: this.dictId }, defaultForm) })], data() { return { @@ -183,6 +183,12 @@ export default { format: [ { required: true, message: '请输入日期格式', trigger: 'blur' } ], + step: [ + { required: true, message: '请输入步长', trigger: 'blur' } + ], + fillchar: [ + { required: true, message: '请输入填充值', trigger: 'blur' } + ], max_value: [ { required: true, message: '请输入最大值', trigger: 'blur' } ]