psh 2 years ago
parent
commit
e550bdba8a
  1. 5
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/initial/ApplicationAutoInitialExecuter.java
  2. 16
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/AutoRunServiceImpl.java
  3. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java
  4. 3
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java
  5. 8
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/mapper/DeviceMapper.java
  6. 3
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java
  7. 6
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java
  8. 3
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceManageServiceImpl.java
  9. 18
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java
  10. 158
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/rest/OpcPlcController.java
  11. 15
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java
  12. 38
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java
  13. 4
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/route/service/impl/RouteLineServiceImpl.java
  14. 4
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
  15. 42
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/udw/rest/UdwManagerController.java
  16. 21
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java
  17. 6
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java
  18. 120
      acs/nladmin-system/nlsso-server/src/main/resources/application.yml
  19. 27
      acs/nladmin-ui/src/api/acs/history/acsDeviceErrorLog.js
  20. 28
      acs/nladmin-ui/src/api/acs/history/udwData.js
  21. 34
      acs/nladmin-ui/src/api/system/dict.js
  22. 35
      acs/nladmin-ui/src/api/system/param.js
  23. 2
      acs/nladmin-ui/src/assets/icons/svg/clear.svg
  24. 2
      acs/nladmin-ui/src/assets/icons/svg/downAlign.svg
  25. 2
      acs/nladmin-ui/src/assets/icons/svg/horizontalAlign.svg
  26. 2
      acs/nladmin-ui/src/assets/icons/svg/horizontalDistribution.svg
  27. 2
      acs/nladmin-ui/src/assets/icons/svg/leftAlign.svg
  28. 2
      acs/nladmin-ui/src/assets/icons/svg/rightAlign.svg
  29. 2
      acs/nladmin-ui/src/assets/icons/svg/save.svg
  30. 2
      acs/nladmin-ui/src/assets/icons/svg/upAlign.svg
  31. 2
      acs/nladmin-ui/src/assets/icons/svg/verticalAlign.svg
  32. 2
      acs/nladmin-ui/src/assets/icons/svg/verticalDistribution.svg
  33. 181
      acs/nladmin-ui/src/views/acs/history/udwData/index.vue
  34. 18
      acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js
  35. 109
      acs/nladmin-ui/src/views/monitor/lucene/index.vue
  36. 150
      acs/nladmin-ui/src/views/monitor/lucene/search.vue
  37. 64
      acs/nladmin-ui/src/views/monitor/lucene/time.vue
  38. 34
      acs/nladmin-ui/src/views/system/logicflow/editor/components/Diagram.vue
  39. 111
      acs/nladmin-ui/src/views/system/logicflow/editor/components/PropertyPanel.vue
  40. 223
      acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue
  41. 17
      acs/nladmin-ui/src/views/system/monitor/device/index.vue
  42. 8
      acs/nladmin-ui/src/views/tools/codeGen/codeDetail.vue

5
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方法
}

16
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();

2
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);

3
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();

8
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}";
/**

3
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();

6
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();

3
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");

18
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java

@ -31,19 +31,24 @@ import java.util.Map;
public class OpcServerServiceImpl implements OpcServerService, ApplicationAutoInitial {
private static final Logger log = LoggerFactory.getLogger(OpcServerServiceImpl.class);
@Autowired OpcServerManageService opcServerManageService;
@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 OpcServerServiceImpl() {
}
/**
* 加载opc服务启动opc线程
* @throws Exception
*/
public void autoInitial() throws Exception {
this.reload();
this.reload(); // 加载opc服务
if (OpcConfig.auto_start_opc) {
Thread t =
new Thread() {
public void run() {
new Thread(() -> {
Iterator var1 = OpcServerServiceImpl.this.opcServerManageDtos.values().iterator();
while (var1.hasNext()) {
@ -56,8 +61,7 @@ public class OpcServerServiceImpl implements OpcServerService, ApplicationAutoIn
OpcServerServiceImpl.log.warn("启动无法载入servers", var4);
}
}
}
};
});
t.start();
}
}

158
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);
}*/
}

15
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);
}

38
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);

4
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];

4
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;

42
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);
}
}

21
acs/nladmin-system/nlsso-server/src/main/java/org/nl/start/Init.java

@ -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("项目启动成功!");
}
}

6
acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java

@ -157,7 +157,9 @@ 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())
@ -180,4 +182,6 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
}
}
}

120
acs/nladmin-system/nlsso-server/src/main/resources/application.yml

@ -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

27
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 }

28
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 }

34
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 }

35
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 }

2
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>

After

Width:  |  Height:  |  Size: 838 B

2
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>

After

Width:  |  Height:  |  Size: 884 B

2
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>

After

Width:  |  Height:  |  Size: 888 B

2
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>

After

Width:  |  Height:  |  Size: 973 B

2
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>

After

Width:  |  Height:  |  Size: 884 B

2
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>

After

Width:  |  Height:  |  Size: 884 B

2
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>

After

Width:  |  Height:  |  Size: 2.2 KiB

2
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>

After

Width:  |  Height:  |  Size: 884 B

2
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>

After

Width:  |  Height:  |  Size: 886 B

2
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>

After

Width:  |  Height:  |  Size: 949 B

181
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>

18
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 }

109
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>

150
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>

64
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>

34
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 {

111
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) {
// newValoldVal
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
}
}
}
}

223
acs/nladmin-ui/src/views/system/monitor/device/XJDeviceMonitor.vue

@ -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'
// tokenvuex
// 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>

17
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,22 +303,12 @@ export default {
this.initStageData()
},
initStageData() {
//
paramCrud.getValueByCode(this.stageParam).then(res => {
// console.log(res)
if (res.value) {
crudStage.getNewStageDataByCode(res.value).then(res => { // lf
//
crudStage.getNewStageDataByCode(this.stageParam).then(res => { // lf
data = JSON.parse(res.stage_data)
lf.render(data)
this.initStatus() //
})
} else {
this.$notify.error({
title: '错误',
message: '请设置参数!'
})
}
})
this.timer = setInterval(() => { //
console.log('定时器启动')
this.initStatus()

8
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' }
]

Loading…
Cancel
Save