19 changed files with 855 additions and 19 deletions
@ -0,0 +1,105 @@ |
|||||
|
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; |
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package org.nl.acs.udw; |
||||
|
|
||||
|
public class UdwConfig { |
||||
|
|
||||
|
//历史记录最大数量
|
||||
|
public static int max_history_length = 10; |
||||
|
|
||||
|
public UdwConfig() { |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
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(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
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); |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
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; |
||||
|
} |
||||
|
} |
@ -0,0 +1,47 @@ |
|||||
|
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); |
||||
|
} |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
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; |
||||
|
} |
@ -0,0 +1,37 @@ |
|||||
|
|
||||
|
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);
|
||||
|
// }
|
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
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); |
||||
|
|
||||
|
} |
@ -0,0 +1,156 @@ |
|||||
|
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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,47 @@ |
|||||
|
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); |
||||
|
} |
||||
|
} |
@ -0,0 +1,185 @@ |
|||||
|
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); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
/* |
||||
|
* 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(); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue