@@ -1,105 +0,0 @@
|
||||
package org.nl.acs.auto.run;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Slf4j
|
||||
public abstract class AbstractAutoRunnable implements Runnable {
|
||||
private ThreadStatusEnum status;
|
||||
private Date startTime;
|
||||
private Date stopTime;
|
||||
private String stopMessage;
|
||||
private ThreadUsedStatusEnum usedStatus;
|
||||
@Override
|
||||
public void run() {
|
||||
this.setStatus(ThreadStatusEnum.run);
|
||||
this.setStartTime(new Date());
|
||||
this.setStopMessage("");
|
||||
String true_clear = "执行完毕";
|
||||
|
||||
try {
|
||||
this.before();
|
||||
//子类该方法是个死循环
|
||||
this.autoRun();
|
||||
this.setStopMessage(true_clear);
|
||||
} catch (Throwable arg5) {
|
||||
log.warn("", arg5);
|
||||
System.out.println(arg5.getMessage());
|
||||
// this.setStopMessage(ExceptionUtlEx.getSimpleTrace(arg5));
|
||||
} finally {
|
||||
this.setStopTime(new Date());
|
||||
this.setStatus(ThreadStatusEnum.stop);
|
||||
this.after();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void before() throws Exception {
|
||||
}
|
||||
|
||||
public void after() {
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
this.after();
|
||||
}
|
||||
|
||||
public Boolean getForbidStop() {
|
||||
return Boolean.valueOf(false);
|
||||
}
|
||||
|
||||
public Boolean getForbidDisable() {
|
||||
return Boolean.valueOf(false);
|
||||
}
|
||||
|
||||
public abstract String getCode();
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public String getDescription() {
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
public abstract void autoRun() throws Exception;
|
||||
|
||||
public ThreadStatusEnum getStatus() {
|
||||
return this.status;
|
||||
}
|
||||
|
||||
public void setStatus(ThreadStatusEnum status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public Date getStartTime() {
|
||||
return this.startTime;
|
||||
}
|
||||
|
||||
public void setStartTime(Date startTime) {
|
||||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
public Date getStopTime() {
|
||||
return this.stopTime;
|
||||
}
|
||||
|
||||
public void setStopTime(Date stopTime) {
|
||||
this.stopTime = stopTime;
|
||||
}
|
||||
|
||||
public String getStopMessage() {
|
||||
return this.stopMessage;
|
||||
}
|
||||
|
||||
public void setStopMessage(String stopMessage) {
|
||||
this.stopMessage = stopMessage;
|
||||
}
|
||||
|
||||
public ThreadUsedStatusEnum getUsedStatus() {
|
||||
return this.usedStatus;
|
||||
}
|
||||
|
||||
public void setUsedStatus(ThreadUsedStatusEnum usedStatus) {
|
||||
this.usedStatus = usedStatus;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package org.nl.acs.auto.run;
|
||||
|
||||
public enum ThreadStatusEnum {
|
||||
create("创建", 1), run("运行", 2), stop("停止", 3);
|
||||
|
||||
private String description;
|
||||
private int order;
|
||||
|
||||
private ThreadStatusEnum(String name, int order) {
|
||||
this.description = name;
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public String description() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
public int getOrder() {
|
||||
return this.order;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package org.nl.acs.auto.run;
|
||||
|
||||
public enum ThreadUsedStatusEnum {
|
||||
|
||||
used("使用", 1), unUsed("未使用", 2);
|
||||
|
||||
private String description;
|
||||
private int order;
|
||||
|
||||
private ThreadUsedStatusEnum(String name, int order) {
|
||||
this.description = name;
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public String description() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
public int getOrder() {
|
||||
return this.order;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,8 +4,8 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.udw.UnifiedDataAccessor;
|
||||
import org.nl.acs.udw.UnifiedDataAccessorFactory;
|
||||
import org.nl.modules.udw.UnifiedDataAccessor;
|
||||
import org.nl.modules.udw.UnifiedDataAccessorFactory;
|
||||
import org.openscada.opc.lib.da.Group;
|
||||
import org.openscada.opc.lib.da.Item;
|
||||
import org.openscada.opc.lib.da.ItemState;
|
||||
@@ -19,12 +19,10 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
OpcServerManageDto OpcServer;
|
||||
int error_num;
|
||||
String message;
|
||||
private Server server;
|
||||
|
||||
public DeviceOpcProtocolRunable() {
|
||||
this.error_num = 0;
|
||||
this.message = null;
|
||||
this.server = null;
|
||||
}
|
||||
|
||||
public List<OpcItemDto> getProtocols() {
|
||||
@@ -62,12 +60,8 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
this.server = OpcServerUtl.getServerWithOutException(this.OpcServer.getOpc_host(), this.OpcServer.getCls_id(), this.OpcServer.getUser(), this.OpcServer.getPassword(), this.OpcServer.getDomain());
|
||||
// Group group = server.addGroup(this.OpcServer.getOpc_host());
|
||||
Group group = server.addGroup(this.OpcServer.getOpc_code());
|
||||
if(ObjectUtil.isEmpty(group)){
|
||||
log.info("group is null ");
|
||||
}
|
||||
Server server = OpcServerUtl.getServerWithOutException(this.OpcServer.getOpc_host(), this.OpcServer.getCls_id(), this.OpcServer.getUser(), this.OpcServer.getPassword(), this.OpcServer.getDomain());
|
||||
Group group = server.addGroup();
|
||||
List<String> itemsString = new ArrayList();
|
||||
Iterator it = this.protocols.iterator();
|
||||
|
||||
@@ -116,22 +110,14 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
label97:
|
||||
while (true) {
|
||||
long begin = System.currentTimeMillis();
|
||||
Map<Item, ItemState> itemStatus = null;
|
||||
try {
|
||||
itemStatus = group.read(true, (Item[]) itemsMap.values().toArray(new Item[0]));
|
||||
} catch (Exception e){
|
||||
System.out.println("数据同步异常:"+ this.getOpcServer().getOpc_code());
|
||||
log.trace("数据同步异常:{}", this.getOpcServer().getOpc_code());
|
||||
//e.printStackTrace();
|
||||
}
|
||||
Map<Item, ItemState> itemStatus = group.read(true, (Item[]) itemsMap.values().toArray(new Item[0]));
|
||||
long end = System.currentTimeMillis();
|
||||
log.trace("{} 开始记时{}", tag, DateUtil.now());
|
||||
long duration = end - begin;
|
||||
log.trace("{} 读取耗时:{}", tag, duration);
|
||||
System.out.println("线程:"+tag + " 读取耗时:"+ duration);
|
||||
if (duration > 1000L) {
|
||||
if (!time_out) {
|
||||
log.warn(" {} 读取超时 : {}", tag, duration);
|
||||
log.warn("{} 读取超时 : {}", tag, duration);
|
||||
}
|
||||
|
||||
time_out = true;
|
||||
@@ -139,12 +125,6 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
time_out = false;
|
||||
}
|
||||
|
||||
if(ObjectUtil.isEmpty(itemStatus)) {
|
||||
System.out.println( tag + " :itemStatus is null");
|
||||
log.warn(" {} 读取异常 : {} itemStatus is null", tag);
|
||||
}
|
||||
|
||||
|
||||
Set<Item> items = itemStatus.keySet();
|
||||
Iterator var18 = items.iterator();
|
||||
|
||||
@@ -172,13 +152,12 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
value = OpcUtl.getValue(item, itemState);
|
||||
his = accessor_value.getValue(item.getId());
|
||||
if (!ObjectUtil.equal(itemState.getQuality(), QualityTypeValue.OPC_QUALITY_GOOD) && his != null) {
|
||||
log.warn("opc 值不健康 item: {}, 状态: {},当前读取值:{}, 系统内存值{} ", item.getId(), itemState.getQuality(), value, his);
|
||||
log.warn("opc 值不健康 item: {}, 状态: {}", item.getId(), itemState.getQuality());
|
||||
}
|
||||
} while (ObjectUtil.equal(value, his));//如果两次的值相等,不走下面的代码
|
||||
|
||||
OpcItemDto itemDto = this.getItem(item.getId());
|
||||
//默认记录日志
|
||||
if (true) {
|
||||
if (itemDto.getNeed_log() != null && itemDto.getNeed_log()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
//设备的ITEM项
|
||||
List<String> relate_items = itemDto.getRelate_items();
|
||||
@@ -190,28 +169,16 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
sb.append("key:" + relate + "value:" + obj + ";");
|
||||
}
|
||||
|
||||
log.warn("信号{}变更从{}->{};信号快照:{}", new Object[]{item.getId(), his, value, sb});
|
||||
log.info("信号{}变更从{}->{};信号快照:{}", new Object[]{item.getId(), his, value, sb});
|
||||
|
||||
}
|
||||
// accessor_value.setValueWithPersistence(item.getId(),accessor_value.getValue(item.getId()));
|
||||
// accessor_value.getHistoryUnifiedData(item.getId());
|
||||
//设置值
|
||||
accessor_value.setValue(item.getId(), value);
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception var30) {
|
||||
if (this.server != null) {
|
||||
try {
|
||||
this.server.disconnect();
|
||||
} catch (Exception var25) {
|
||||
log.warn("{} : server disconnect", var25);
|
||||
}
|
||||
}
|
||||
|
||||
this.server = null;
|
||||
|
||||
String error_message = "设备信息同步异常,"+var30;
|
||||
String error_message = "设备信息同步异常";
|
||||
if (!StrUtil.equals(this.message, error_message)) {
|
||||
log.warn("", var30);
|
||||
}
|
||||
@@ -220,8 +187,6 @@ public class DeviceOpcProtocolRunable implements Runnable {
|
||||
Thread.sleep((long) (OpcConfig.synchronized_exception_wait_second * 1000));
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
log.warn("OPC 读取线程读取异常{} :", e);
|
||||
// Thread.currentThread().interrupt();不会真正停止线程
|
||||
}
|
||||
++this.error_num;
|
||||
if (this.error_num > 3 && !StrUtil.equals(this.message, error_message)) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.nl.acs.opc;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.nl.acs.auto.run.AbstractAutoRunnable;
|
||||
import org.nl.start.auto.run.AbstractAutoRunnable;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -17,8 +17,6 @@ import java.util.concurrent.Executors;
|
||||
*/
|
||||
@Component
|
||||
public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable {
|
||||
|
||||
public static boolean isRun = false;
|
||||
ExecutorService executorService = Executors.newCachedThreadPool();
|
||||
@Autowired
|
||||
private DeviceAppService deviceAppService;
|
||||
@@ -38,22 +36,24 @@ public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable {
|
||||
@Override
|
||||
public void autoRun() throws Exception {
|
||||
{
|
||||
isRun = true;
|
||||
|
||||
Map<String, OpcServerManageDto> servers = this.opcServerManageService.queryAllServerMap();
|
||||
Map<String, List<List<OpcItemDto>>> pros;
|
||||
do{
|
||||
Thread.sleep(1000L);
|
||||
pros = this.deviceAppService.findAllFormatProtocolFromDriver();
|
||||
}while (ObjectUtil.isEmpty(pros));
|
||||
do{
|
||||
Thread.sleep(1000L);
|
||||
pros = this.deviceAppService.findAllFormatProtocolFromDriver();
|
||||
}while (ObjectUtil.isEmpty(pros));
|
||||
Set<String> keys = pros.keySet();
|
||||
Iterator var4 = keys.iterator();
|
||||
System.out.println("test:" + var4.hasNext());
|
||||
//代码执行一次
|
||||
while (var4.hasNext()) {
|
||||
String key = (String) var4.next();
|
||||
List<List<OpcItemDto>> list = (List) pros.get(key);
|
||||
OpcServerManageDto opcServer = (OpcServerManageDto) servers.get(key);
|
||||
Iterator var8 = list.iterator();
|
||||
System.out.println("test2:" + var8.hasNext());
|
||||
|
||||
while (var8.hasNext()) {
|
||||
List<OpcItemDto> groupProtols = (List) var8.next();
|
||||
DeviceOpcProtocolRunable runable = new DeviceOpcProtocolRunable();
|
||||
@@ -75,7 +75,6 @@ public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable {
|
||||
|
||||
@Override
|
||||
public void after() {
|
||||
isRun = false;
|
||||
this.executorService.shutdownNow();
|
||||
this.executorService = Executors.newCachedThreadPool();
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package org.nl.acs.udw;
|
||||
|
||||
public class UdwConfig {
|
||||
|
||||
//历史记录最大数量
|
||||
public static int max_history_length = 10;
|
||||
|
||||
public UdwConfig() {
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package org.nl.acs.udw;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class UnifiedData {
|
||||
private Object value;
|
||||
private Date last_modify_date;
|
||||
|
||||
public UnifiedData() {
|
||||
this.last_modify_date = new Date();
|
||||
}
|
||||
|
||||
public UnifiedData(Object value) {
|
||||
this.value = value;
|
||||
this.last_modify_date = new Date();
|
||||
}
|
||||
|
||||
public void changeValue(Object value) {
|
||||
this.value = value;
|
||||
this.last_modify_date = new Date();
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package org.nl.acs.udw;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UnifiedDataAccessor {
|
||||
List<String> getAllKey();
|
||||
|
||||
Object getValue(String key);
|
||||
|
||||
void setValue(String key, Object value);
|
||||
|
||||
UnifiedData getUnifiedData(String key);
|
||||
|
||||
List<UnifiedData> getHistoryUnifiedData(String key);
|
||||
|
||||
void setValueWithPersistence(String key, Object value);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package org.nl.acs.udw;
|
||||
|
||||
import org.nl.acs.udw.service.impl.UnifiedDataAccessorImpl;
|
||||
import org.nl.acs.udw.service.impl.UnifiedDataAppServiceImpl;
|
||||
|
||||
public class UnifiedDataAccessorFactory {
|
||||
public UnifiedDataAccessorFactory() {
|
||||
}
|
||||
|
||||
public static UnifiedDataAppService getUnifiedDataAppService() {
|
||||
return UnifiedDataAppServiceImpl.getInstance();
|
||||
}
|
||||
|
||||
public static UnifiedDataAccessor getAccessor(String unified_key) {
|
||||
UnifiedDataAccessorImpl accessor = new UnifiedDataAccessorImpl();
|
||||
accessor.setUnifiedKey(unified_key);
|
||||
accessor.setUnifiedDataService(getUnifiedDataAppService());
|
||||
return accessor;
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package org.nl.acs.udw;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.nl.acs.udw.service.impl.UnifiedDataUnit;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UnifiedDataAppService {
|
||||
/**
|
||||
* 获取所有的key
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<String> getAllUnifiedKey();
|
||||
|
||||
/**
|
||||
* 根据key获取数据单元
|
||||
*
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
UnifiedDataUnit getUnifiedDataUnit(String key);
|
||||
|
||||
UnifiedData getUnifiedData(String var1, String var2);
|
||||
|
||||
Object getValue(String var1, String var2);
|
||||
|
||||
void setValue(String var1, String var2, Object var3);
|
||||
|
||||
void setValueNoLog(String var1, String var2, Object var3);
|
||||
|
||||
List<UnifiedData> getHistoryUnifiedData(String var1, String var2);
|
||||
|
||||
List<String> getAllDataKey(String var1);
|
||||
|
||||
void removeValue(String var1, String var2);
|
||||
|
||||
void setValueWithPersistenceNoLog(String var1, String var2, Object var3);
|
||||
|
||||
void setValueWithPersistence(String var1, String var2, Object var3);
|
||||
|
||||
void removeValueWithPersistence(String var1, String var2);
|
||||
|
||||
static boolean isEquals(Object a, Object b) {
|
||||
return ObjectUtil.equal(a, b);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package org.nl.acs.udw.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 统一数据源管理
|
||||
*/
|
||||
@Data
|
||||
public class UdwDto {
|
||||
private String unified_key;
|
||||
private String key;
|
||||
private Object value;
|
||||
private Date last_modify_date;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
package org.nl.acs.udw.rest;
|
||||
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.udw.service.UdwManageService;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@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
|
||||
// @Log("查询内存点位")
|
||||
// @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);
|
||||
// }
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.nl.acs.udw.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.acs.udw.dto.UdwDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface UdwManageService {
|
||||
/**
|
||||
* 根据条件查询
|
||||
*
|
||||
* @param where
|
||||
* @return
|
||||
*/
|
||||
List<UdwDto> queryByConditions(JSONObject where);
|
||||
|
||||
/**
|
||||
* 查询数据分页
|
||||
*
|
||||
* @param whereJson 条件
|
||||
* @param page 分页参数
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
Map<String, Object> queryAll(Map whereJson, Pageable page);
|
||||
|
||||
}
|
||||
@@ -1,156 +0,0 @@
|
||||
package org.nl.acs.udw.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.acs.udw.UnifiedData;
|
||||
import org.nl.acs.udw.UnifiedDataAccessorFactory;
|
||||
import org.nl.acs.udw.dto.UdwDto;
|
||||
import org.nl.acs.udw.service.UdwManageService;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class UdwManagerServiceImpl implements UdwManageService {
|
||||
|
||||
public UdwManagerServiceImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UdwDto> queryByConditions(JSONObject where) {
|
||||
String unified_key = null;
|
||||
String keys = null;
|
||||
|
||||
UnifiedDataUnit unifiedDataUnit = UnifiedDataAccessorFactory.getUnifiedDataAppService().getUnifiedDataUnit(unified_key);
|
||||
if (unifiedDataUnit == null) {
|
||||
return null;
|
||||
} else {
|
||||
String key;
|
||||
UdwDto udwDto;
|
||||
Map storage;
|
||||
ArrayList udwDtos;
|
||||
Iterator var14;
|
||||
if (keys != null) {
|
||||
storage = unifiedDataUnit.getStorage();
|
||||
udwDtos = new ArrayList();
|
||||
var14 = storage.keySet().iterator();
|
||||
|
||||
while(var14.hasNext()) {
|
||||
key = (String)var14.next();
|
||||
if (key.indexOf(keys) != -1) {
|
||||
udwDto = new UdwDto();
|
||||
udwDto.setUnified_key(unified_key);
|
||||
udwDto.setKey(key);
|
||||
udwDto.setValue(((UnifiedData)storage.get(key)).getValue());
|
||||
udwDtos.add(udwDto);
|
||||
}
|
||||
}
|
||||
|
||||
return udwDtos;
|
||||
} else {
|
||||
storage = unifiedDataUnit.getStorage();
|
||||
udwDtos = new ArrayList();
|
||||
var14 = storage.keySet().iterator();
|
||||
|
||||
while(var14.hasNext()) {
|
||||
key = (String)var14.next();
|
||||
udwDto = new UdwDto();
|
||||
udwDto.setUnified_key(unified_key);
|
||||
udwDto.setKey(key);
|
||||
udwDto.setValue(((UnifiedData)storage.get(key)).getValue());
|
||||
udwDtos.add(udwDto);
|
||||
}
|
||||
|
||||
return udwDtos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
|
||||
|
||||
String unified_key = (String) whereJson.get("unified_key");
|
||||
String keys = (String) whereJson.get("code");
|
||||
if(StrUtil.isEmpty(unified_key))
|
||||
{
|
||||
unified_key = "opc_value";
|
||||
}
|
||||
// String unified_key = (String) whereJson.get("unified_key");
|
||||
// String code = (String) whereJson.get("code");
|
||||
|
||||
// unified_key = whereJson.get("key").toString();
|
||||
// keys = whereJson.get("value").toString();
|
||||
|
||||
|
||||
//[[{"column":"unified_key","value":"cached","compareType":"equals","columnType":"object"}]]
|
||||
UnifiedDataUnit unifiedDataUnit = UnifiedDataAccessorFactory.getUnifiedDataAppService().getUnifiedDataUnit(unified_key);
|
||||
if (unifiedDataUnit == null) {
|
||||
return null;
|
||||
} else {
|
||||
String key;
|
||||
UdwDto udwDto;
|
||||
Map storage;
|
||||
ArrayList udwDtos;
|
||||
Iterator var14;
|
||||
if (keys != null) {
|
||||
storage = unifiedDataUnit.getStorage();
|
||||
udwDtos = new ArrayList();
|
||||
var14 = storage.keySet().iterator();
|
||||
|
||||
while(var14.hasNext()) {
|
||||
key = (String)var14.next();
|
||||
if (key.indexOf(keys) != -1) {
|
||||
udwDto = new UdwDto();
|
||||
udwDto.setUnified_key(unified_key);
|
||||
udwDto.setKey(key);
|
||||
udwDto.setValue(((UnifiedData)storage.get(key)).getValue());
|
||||
udwDtos.add(udwDto);
|
||||
}
|
||||
}
|
||||
|
||||
Integer currentPageNumber = page.getPageNumber() + 1;
|
||||
Integer pageMaxSize = page.getPageSize();
|
||||
|
||||
List orderbyDtoList = (List) udwDtos.stream().skip((currentPageNumber - 1) * pageMaxSize)
|
||||
.limit(pageMaxSize)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("content", orderbyDtoList);
|
||||
jo.put("totalElements", udwDtos.size());
|
||||
|
||||
return jo;
|
||||
} else {
|
||||
storage = unifiedDataUnit.getStorage();
|
||||
udwDtos = new ArrayList();
|
||||
var14 = storage.keySet().iterator();
|
||||
|
||||
while(var14.hasNext()) {
|
||||
key = (String)var14.next();
|
||||
udwDto = new UdwDto();
|
||||
udwDto.setUnified_key(unified_key);
|
||||
udwDto.setKey(key);
|
||||
udwDto.setValue(((UnifiedData)storage.get(key)).getValue());
|
||||
udwDtos.add(udwDto);
|
||||
}
|
||||
Integer currentPageNumber = page.getPageNumber() + 1;
|
||||
Integer pageMaxSize = page.getPageSize();
|
||||
|
||||
List orderbyDtoList = (List) udwDtos.stream().skip((currentPageNumber - 1) * pageMaxSize)
|
||||
.limit(pageMaxSize)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("content", orderbyDtoList);
|
||||
jo.put("totalElements", udwDtos.size());
|
||||
|
||||
return jo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package org.nl.acs.udw.service.impl;
|
||||
|
||||
import org.nl.acs.udw.UnifiedData;
|
||||
import org.nl.acs.udw.UnifiedDataAccessor;
|
||||
import org.nl.acs.udw.UnifiedDataAppService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class UnifiedDataAccessorImpl implements UnifiedDataAccessor {
|
||||
private String unified_key;
|
||||
private UnifiedDataAppService unifiedDataAppService;
|
||||
|
||||
public UnifiedDataAccessorImpl() {
|
||||
}
|
||||
|
||||
public void setUnifiedKey(String unified_key) {
|
||||
this.unified_key = unified_key;
|
||||
}
|
||||
|
||||
public void setUnifiedDataService(UnifiedDataAppService unifiedDataService) {
|
||||
this.unifiedDataAppService = unifiedDataService;
|
||||
}
|
||||
|
||||
public List<String> getAllKey() {
|
||||
return this.unifiedDataAppService.getAllDataKey(this.unified_key);
|
||||
}
|
||||
|
||||
public Object getValue(String key) {
|
||||
return this.unifiedDataAppService.getValue(this.unified_key, key);
|
||||
}
|
||||
|
||||
public void setValue(String key, Object value) {
|
||||
this.unifiedDataAppService.setValue(this.unified_key, key, value);
|
||||
}
|
||||
|
||||
public void setValueWithPersistence(String key, Object value) {
|
||||
this.unifiedDataAppService.setValueWithPersistence(this.unified_key, key, value);
|
||||
}
|
||||
|
||||
public UnifiedData getUnifiedData(String key) {
|
||||
return this.unifiedDataAppService.getUnifiedData(this.unified_key, key);
|
||||
}
|
||||
|
||||
public List<UnifiedData> getHistoryUnifiedData(String key) {
|
||||
return this.unifiedDataAppService.getHistoryUnifiedData(this.unified_key, key);
|
||||
}
|
||||
}
|
||||
@@ -1,185 +0,0 @@
|
||||
package org.nl.acs.udw.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.udw.UdwConfig;
|
||||
import org.nl.acs.udw.UnifiedData;
|
||||
import org.nl.acs.udw.UnifiedDataAppService;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
public class UnifiedDataAppServiceImpl implements UnifiedDataAppService {
|
||||
public static UnifiedDataAppService unifiedDataAppService;
|
||||
private Map<String, UnifiedDataUnit> factory = Collections.synchronizedMap(new HashMap());
|
||||
|
||||
private UnifiedDataAppServiceImpl() {
|
||||
}
|
||||
|
||||
public static UnifiedDataAppService getInstance() {
|
||||
if (unifiedDataAppService == null) {
|
||||
Class var0 = UnifiedDataAppServiceImpl.class;
|
||||
synchronized (UnifiedDataAppServiceImpl.class) {
|
||||
if (unifiedDataAppService == null) {
|
||||
unifiedDataAppService = new UnifiedDataAppServiceImpl();
|
||||
}
|
||||
}
|
||||
}
|
||||
return unifiedDataAppService;
|
||||
}
|
||||
|
||||
public List<String> getAllUnifiedKey() {
|
||||
return new ArrayList(this.factory.keySet());
|
||||
}
|
||||
|
||||
public UnifiedDataUnit getUnifiedDataUnit(String unified_key) {
|
||||
UnifiedDataUnit dataUnit = (UnifiedDataUnit) this.factory.get(unified_key);
|
||||
return dataUnit == null ? null : dataUnit;
|
||||
}
|
||||
|
||||
public List<String> getAllDataKey(String unified_key) {
|
||||
UnifiedDataUnit dataUnit = (UnifiedDataUnit) this.factory.get(unified_key);
|
||||
if (dataUnit == null) {
|
||||
return new ArrayList();
|
||||
} else {
|
||||
Map<String, UnifiedData> storage = dataUnit.getStorage();
|
||||
return new ArrayList(storage.keySet());
|
||||
}
|
||||
}
|
||||
|
||||
public UnifiedData getUnifiedData(String unified_key, String key) {
|
||||
UnifiedDataUnit dataUnit = this.getUnifiedDataUnit(unified_key);
|
||||
if (dataUnit == null) {
|
||||
return null;
|
||||
} else {
|
||||
Map<String, UnifiedData> storage = dataUnit.getStorage();
|
||||
return (UnifiedData) storage.get(key);
|
||||
}
|
||||
}
|
||||
|
||||
public Object getValue(String unified_key, String key) {
|
||||
UnifiedData unifiedData = this.getUnifiedData(unified_key, key);
|
||||
return unifiedData == null ? null : unifiedData.getValue();
|
||||
}
|
||||
|
||||
public void removeValueWithPersistence(String unified_key, String key) {
|
||||
UnifiedDataUnit dataUnit = this.getUnifiedDataUnit(unified_key);
|
||||
if (dataUnit != null) {
|
||||
Map<String, UnifiedData> storage = dataUnit.getStorage();
|
||||
if (storage.containsKey(key)) {
|
||||
storage.remove(key);
|
||||
}
|
||||
|
||||
Map<String, List<UnifiedData>> history = dataUnit.getHistory();
|
||||
if (history.containsKey(key)) {
|
||||
history.remove(key);
|
||||
}
|
||||
|
||||
/*PersistenceService persistenceService = PersistenceServiceFactory.getPersistenceService();
|
||||
persistenceService.deleteData(unified_key, key);*/
|
||||
}
|
||||
}
|
||||
|
||||
public void removeValue(String unified_key, String key) {
|
||||
UnifiedDataUnit dataUnit = this.getUnifiedDataUnit(unified_key);
|
||||
if (dataUnit != null) {
|
||||
Map<String, UnifiedData> storage = dataUnit.getStorage();
|
||||
if (storage.containsKey(key)) {
|
||||
storage.remove(key);
|
||||
}
|
||||
|
||||
Map<String, List<UnifiedData>> history = dataUnit.getHistory();
|
||||
if (history.containsKey(key)) {
|
||||
history.remove(key);
|
||||
}
|
||||
|
||||
if (history.size() == 0) {
|
||||
this.factory.remove(unified_key);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setValueNoLog(String unified_key, String key, Object value) {
|
||||
this.setValue(unified_key, key, value, false, false);
|
||||
}
|
||||
|
||||
public void setValue(String unified_key, String key, Object value) {
|
||||
this.setValue(unified_key, key, value, false, true);
|
||||
}
|
||||
|
||||
public void setValueWithPersistenceNoLog(String unified_key, String key, Object value) {
|
||||
this.setValue(unified_key, key, value, true, false);
|
||||
}
|
||||
|
||||
public void setValueWithPersistence(String unified_key, String key, Object value) {
|
||||
this.setValue(unified_key, key, value, true, true);
|
||||
}
|
||||
|
||||
public synchronized void setValue(String unified_key, String key, Object value, boolean save, boolean is_log) {
|
||||
if (unified_key == null) {
|
||||
throw new BadRequestException("");
|
||||
//throw new BusinessException(SystemMessage.cant_be_empty, new Object[]{"unified_key"});
|
||||
} else if (key == null) {
|
||||
throw new BadRequestException("");
|
||||
//throw new BusinessException(SystemMessage.cant_be_empty, new Object[]{"key"});
|
||||
} else {
|
||||
if (!this.factory.containsKey(unified_key)) {
|
||||
this.factory.put(unified_key, new UnifiedDataUnit(unified_key));
|
||||
}
|
||||
|
||||
UnifiedDataUnit dataUnit = (UnifiedDataUnit) this.factory.get(unified_key);
|
||||
Map<String, UnifiedData> storage = dataUnit.getStorage();
|
||||
if (!storage.containsKey(key)) {
|
||||
storage.put(key, new UnifiedData());
|
||||
}
|
||||
|
||||
UnifiedData unifiedData = (UnifiedData) storage.get(key);
|
||||
if (!UnifiedDataAppService.isEquals(unifiedData.getValue(), value)) {
|
||||
Map<String, List<UnifiedData>> history = dataUnit.getHistory();
|
||||
List<UnifiedData> historyunifiedData = (List) history.get(key);
|
||||
if (historyunifiedData == null) {
|
||||
history.put(key, new ArrayList());
|
||||
}
|
||||
|
||||
UnifiedData historydata = new UnifiedData();
|
||||
historydata.setLast_modify_date(unifiedData.getLast_modify_date());
|
||||
historydata.setValue(unifiedData.getValue());
|
||||
|
||||
while (((List) history.get(key)).size() > UdwConfig.max_history_length) {
|
||||
((List) history.get(key)).remove(UdwConfig.max_history_length);
|
||||
}
|
||||
|
||||
((List) history.get(key)).add(0, historydata);
|
||||
Object oldvalue = unifiedData.getValue();
|
||||
unifiedData.changeValue(value);
|
||||
if (save) {
|
||||
/*PersistenceService persistenceService = PersistenceServiceFactory.getPersistenceService();
|
||||
persistenceService.saveData(unified_key, key, StringUtl.getString(value));
|
||||
if (is_log) {
|
||||
this.businessLogger.setResource(unified_key, unified_key);
|
||||
this.businessLogger.setMaterial(key, key);
|
||||
this.businessLogger.setContainer(StringUtl.getString(value));
|
||||
this.businessLogger.log("统一数据源中: unit: {}, key: {}, 值: {} 更改为 {}。", new Object[]{unified_key, key, oldvalue, value});
|
||||
}*/
|
||||
}
|
||||
|
||||
if (is_log && key != null && !key.endsWith("heartbeat") && !key.endsWith("distancex") && !key.endsWith("distancey") && !key.endsWith("Xwz") && !key.endsWith("Ywz") && !key.endsWith("Zwz")) {
|
||||
log.trace("统一数据源中: unit: {}, key: {}, 值: {} 更改为 {}。", new Object[]{unified_key, key, oldvalue, value});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public List<UnifiedData> getHistoryUnifiedData(String unified_key, String key) {
|
||||
UnifiedDataUnit dataUnit = this.getUnifiedDataUnit(unified_key);
|
||||
if (dataUnit == null) {
|
||||
return new ArrayList();
|
||||
} else {
|
||||
Map<String, List<UnifiedData>> history = dataUnit.getHistory();
|
||||
List<UnifiedData> result = (List) history.get(key);
|
||||
return (List) (result == null ? new ArrayList() : result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package org.nl.acs.udw.service.impl;
|
||||
|
||||
import lombok.Data;
|
||||
import org.nl.acs.udw.UnifiedData;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class UnifiedDataUnit {
|
||||
private String unifiedKey;
|
||||
private Map<String, UnifiedData> storage = Collections.synchronizedMap(new HashMap());
|
||||
private Map<String, List<UnifiedData>> history = Collections.synchronizedMap(new HashMap());
|
||||
|
||||
public UnifiedDataUnit(String unifiedKey) {
|
||||
this.unifiedKey = unifiedKey;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright 2019-2020 Zheng Jie
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.nl.modules.common.exception;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||
|
||||
/**
|
||||
* @author Zheng Jie
|
||||
* @date 2018-11-23
|
||||
* 统一异常处理
|
||||
*/
|
||||
@Getter
|
||||
public class BadRequestException extends RuntimeException{
|
||||
|
||||
private Integer status = BAD_REQUEST.value();
|
||||
|
||||
public BadRequestException(String msg){
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public BadRequestException(HttpStatus status, String msg){
|
||||
super(msg);
|
||||
this.status = status.value();
|
||||
}
|
||||
}
|
||||
@@ -66,7 +66,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
|
||||
<!--生产环境:打印控制台和输出到文件-->
|
||||
<springProfile name="prod">
|
||||
<root level="info">
|
||||
<root level="error">
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
</root>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user