Commit 3127da68 authored by duanruiming's avatar duanruiming

[add] 增加海康实时数据返回实体,增加线程池配置,增加通过路口编号获取实时数据

parent 90e67c0a
package net.wanji.utc.config;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author duanruiming
* @date 2023/02/14 10:17
*/
@Configuration
public class ThreadPoolConfig {
@Value("${threadPoolConfig.threadPoolName}")
private String threadPoolName;
@Value("${threadPoolConfig.coreSize}")
private int coreSize;
@Value("${threadPoolConfig.maxSize}")
private int maxSize;
@Value("${threadPoolConfig.queueCapacity}")
private int queueCapacity;
@Value("${threadPoolConfig.keepAliveTime}")
private int keepAliveTime;
@Value("${threadPoolConfig.allowCoreTimeOut}")
private boolean allowCoreTimeOut;
@Bean
public ThreadPoolTaskExecutor threadPoolExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
ThreadFactory build = new ThreadFactoryBuilder().setNameFormat(threadPoolName).build();
executor.setThreadFactory(build);
executor.setCorePoolSize(coreSize);
executor.setMaxPoolSize(maxSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveTime);
executor.setAllowCoreThreadTimeOut(allowCoreTimeOut);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
executor.initialize();
return executor;
}
}
package net.wanji.utc.po.hk.request;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/02/14 14:28
*/
@Data
public class HKRequest {
private int pageNo;
private int pageSize;
private Object searchObj;
}
package net.wanji.utc.po.hk.request;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/14 14:36
*/
@Data
public class RealTimeStateInfoQueryPO {
private List<String> crossCodes;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/02/14 15:17
*/
@Data
public class ChannelStatePO {
/**
* 通道号(灯组号)
*/
private Integer channelNo;
/**
* 状态:1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红(预留);7灭灯;8红闪;9红黄
*/
private Integer state;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/02/14 14:30
*/
@Data
public class HKResponse {
private String code;
private String msg;
private Object data;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/14 15:31
*/
@Data
public class PhaseChannelRelationPO {
/**
* 相位号
*/
private Integer phaseNo;
/**
* 通道号(灯组号)
*/
private List<Integer> channels;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/02/14 15:35
*/
@Data
public class PhaseInfoPO {
/**
* 当前相位运行时长 单位s
*/
private Integer runTime;
/**
* 绿闪时间
*/
private Integer greenLight;
/**
* 黄灯时长
*/
private Integer yellow;
/**
* 红灯时长
*/
private Integer red;
/**
* 当前相位倒计时数据 单位s
*/
private Integer countdown;
/**
* 相位号
*/
private Integer phaseNo;
private String phaseName;
/**
* 相位序号
*/
private Integer phaseSequence;
/**
* 相位时长
*/
private Integer phaseLength;
/**
* 机动车状态:0无效;1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红;7灭灯;8红闪;9红黄
*/
private Integer vehicleStatus;
/**
* 行人状态:无效;1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红;7灭灯;8红闪;9红黄
*/
private Integer pedestrianStatus;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/14 16:46
*/
@Data
public class RealTimeStateInfoListPO {
private List<RealTimeStateInfoPO> list;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/14 14:49
*/
@Data
public class RealTimeStateInfoPO {
/**
* 信号机编号
*/
private String crossCode;
/**
* 控制方式:1关灯;2黄闪;3全红;4定周期;5协调绿波;6协调红波;7全感应;8半感应;9协调绿波全感应;10步进控制;12通道锁定
*/
private String controlType;
/**
* 文档说明,实际返回0
*/
private String controlMode;
/**
* 锁定行为
*/
private List<Integer> lockPhases;
private List<ChannelStatePO> channelState;
/**
* 当前周期已运行时间
*/
private Integer curRunTime;
private Integer lockLeft;
private Integer coorclinatedPhaseNo;
private Boolean hasFault;
private Boolean coordinateTrans;
private Boolean downGrade;
/**
* 当前运行方案号
*/
private Integer patternNo;
private String patternName;
/**
* 方案周期 单位s
*/
private Integer cycle;
private LocalDateTime cycleBeginTime;
/**
* 相位差 单位s
*/
private Integer offset;
private List<PhaseChannelRelationPO> phaseChannelRelation;
/**
* 换列表
*/
private List<RingsPO> rings;
}
package net.wanji.utc.po.hk.response;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/02/14 15:34
*/
@Data
public class RingsPO {
private Integer ringNo;
private List<PhaseInfoPO> phaseList;
}
......@@ -11,4 +11,5 @@ import java.util.List;
*/
public interface HkLightsStatusService {
List<LightsStatusVO> getHkLightsStatus(List<BaseCrossInfo> baseCrossInfoList);
List<LightsStatusVO> getHkLightsStatus(String crossId);
}
......@@ -20,4 +20,6 @@ public interface SignalStatusService {
List<SignalStatusLogPO> runningStatusAlarm(String crossId);
List<LightsStatusVO> lightStatus();
List<LightsStatusVO> lightStatus(String crossId);
}
......@@ -12,18 +12,19 @@ import net.wanji.utc.common.constant.Constants;
import net.wanji.utc.mapper.CrossInfoMapper;
import net.wanji.utc.mapper.CrossLightsMapper;
import net.wanji.utc.mapper.ManufacturerInfoMapper;
import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.po.CrossLightsPO;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.po.hk.request.HKRequest;
import net.wanji.utc.po.hk.request.RealTimeStateInfoQueryPO;
import net.wanji.utc.po.hk.response.*;
import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.util.PathUtil;
import net.wanji.utc.util.StringUtils;
import net.wanji.utc.vo.LightsStatusVO;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @author Kent HAN
......@@ -40,6 +41,22 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
public static Map<String, String> runModeParseMap = new HashMap<String, String>();
public static Map<String, Integer> turnParseMap = new HashMap<>();
public static Map<String, String> directionParseMap = new HashMap<>();
static {
// key: 万集灯组方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北
directionParseMap.put("1", "1");
directionParseMap.put("2", "5");
directionParseMap.put("3", "4");
directionParseMap.put("4", "6");
directionParseMap.put("5", "2");
directionParseMap.put("6", "8");
directionParseMap.put("7", "3");
directionParseMap.put("8", "7");
}
static {
// key:海康控制模式 value:万集控制模式
runModeParseMap.put("2", "4"); // 黄闪
......@@ -49,6 +66,148 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
runModeParseMap.put("12", "2"); // 相位锁定
}
// key:万集车道转向:1左转;2直行;3右转;4掉头;5直左;6直右;7左直右;8左右;9左转掉头;10直行掉头;
// 11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头
static {
turnParseMap.put("1", 2);
turnParseMap.put("2", 1);
turnParseMap.put("3", 3);
turnParseMap.put("4", 4);
turnParseMap.put("5", 5);
turnParseMap.put("6", 6);
turnParseMap.put("7", 9);
turnParseMap.put("8", 8);
turnParseMap.put("9", 10);
turnParseMap.put("10", 4);
turnParseMap.put("11", 4);
turnParseMap.put("12", 4);
turnParseMap.put("13", 4);
turnParseMap.put("14", 4);
turnParseMap.put("15", 4);
}
@Override
public List<LightsStatusVO> getHkLightsStatus(String crossId) {
List<LightsStatusVO> result = new ArrayList<>();
CrossInfoPO crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
List<CrossLightsPO> crossLightsPOList = crossLightsMapper.selectByCrossId(crossId);
if (Objects.nonNull(crossInfoPO)) {
String signalCode = crossInfoPO.getCode();
String jsonBody = getRequestBody(signalCode);
Object data = callHKService("getRealtimeSchemeStateInfo", jsonBody);
if (Objects.nonNull(data)) {
RealTimeStateInfoListPO realTimeStateInfoListPO = JSONObject.parseObject(String.valueOf(data), RealTimeStateInfoListPO.class);
LightsStatusVO infoVo = null;
for (RealTimeStateInfoPO resultPO : realTimeStateInfoListPO.getList()) {
infoVo = new LightsStatusVO();
Integer patternNo = resultPO.getPatternNo();
List<RingsPO> rings = resultPO.getRings(); // 环列表
List<ChannelStatePO> channelState = resultPO.getChannelState();// 灯组列表
String HKControlType = resultPO.getControlType();
String WJControlType = null;
if (StringUtils.isNotBlank(HKControlType)) {
WJControlType = runModeParseMap.get(HKControlType);
}
if (StringUtils.isEmpty(WJControlType)) {
WJControlType = "255";// 转换失败默认临时方案
}
infoVo.setRunMode(WJControlType);// 控制模式
infoVo.setPhasePlanId(String.valueOf(patternNo)); // 相位方案号
int cycleLen = resultPO.getCycle(); // 周期时长
int curRunTime = resultPO.getCurRunTime(); // 当前运行时长
int cycleCountDown = cycleLen - curRunTime; // 周期剩余时长
infoVo.setCode(signalCode);
infoVo.setCrossId(crossId);
// infoVo.setManufacturerCode(""); // 应该不需要
infoVo.setCycleCountDown(cycleCountDown);
infoVo.setCycleLen(cycleLen);
// 循环相位列表
Map<String, Object> phaseMap = new HashMap<>();
for (RingsPO ring : rings) {
List<PhaseInfoPO> phaseList = ring.getPhaseList();
for (PhaseInfoPO phaseInfoPO : phaseList) {
Integer phaseNo = phaseInfoPO.getPhaseNo();
Integer vehicleStatus = phaseInfoPO.getVehicleStatus();
Integer phaseLength = phaseInfoPO.getPhaseLength();
Integer red = phaseInfoPO.getRed();
Integer yellow = phaseInfoPO.getYellow();
Integer green = phaseLength - yellow - red;
phaseMap.put(String.valueOf(phaseNo), green);
if (2 != vehicleStatus) { // 2红灯
infoVo.setPhaseId(String.valueOf(phaseNo));
}
}
}
infoVo.setPhaseMap(phaseMap);
Map<String, Object> dirLampGroupMap = new HashMap<>();
// 循环构建灯组对象(从灯组表获取灯组信息)
for (ChannelStatePO channelStatePO : channelState) {
Integer channelNo = channelStatePO.getChannelNo();
Integer state = channelStatePO.getState();
String color = transferHKLampGroup(state);
for (CrossLightsPO po : crossLightsPOList) {
if (StringUtils.equals(po.getLightsNo(), String.valueOf(channelNo))) {
String direction = po.getDir().toString();
String turn = po.getTurn().toString();
if (dirLampGroupMap.get(direction) != null) {
Map<String, String> mstr = (Map<String, String>) dirLampGroupMap.get(direction);
mstr.put(turn, color);
dirLampGroupMap.put(direction, mstr);
} else {
Map<String, String> lamp = new HashMap<>();
lamp.put(turn, color);
dirLampGroupMap.put(direction, lamp);
}
}
}
}
infoVo.setDirLampGroupMap(dirLampGroupMap);
}
result.add(infoVo);
}
}
return result;
}
/**
* 构建信号机请求参数
*
* @param signalCode
* @return
*/
private String getRequestBody(String signalCode) {
RealTimeStateInfoQueryPO queryPO = new RealTimeStateInfoQueryPO();
queryPO.setCrossCodes(Arrays.asList(signalCode));
HKRequest request = new HKRequest();
request.setPageNo(1);
request.setPageSize(999);
request.setSearchObj(queryPO);
return JSONObject.toJSONString(request);
}
private Object callHKService(String apiPath, String jsonBody) {
try {
Map<String, String> path = PathUtil.getPathMapByApiCode(apiPath);
String responseStr = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, jsonBody, null, null, "application/json", null);
if (StringUtils.isNotBlank(responseStr)) {
HKResponse hkResponse = JSONObject.parseObject(responseStr, HKResponse.class);
if (Objects.nonNull(hkResponse) && Objects.equals(hkResponse.getCode(), "0")) {
return hkResponse.getData();
} else {
log.error("ArtemisHttpUtil海康服务调用异常,请求路径:{}, 返回信息: {}, 请求信息: {}", apiPath, hkResponse, jsonBody);
}
}
} catch (Exception e) {
log.error("ArtemisHttpUtil海康服务调用异常, 异常信息: {}", e);
}
return null;
}
@Override
public List<LightsStatusVO> getHkLightsStatus(List<BaseCrossInfo> baseCrossInfoList) {
List<LightsStatusVO> result = new ArrayList<>();
......@@ -74,7 +233,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
manufacturerInfoPO.getId());
List<CrossLightsPO> crossLightsPOList = crossLightsMapper.selectByCrossId(crossId);
if(Constants.HK_SUCCESS_CODE.equals(object.getInteger(Constants.HK_CODE_KEY))) {
if (Constants.HK_SUCCESS_CODE.equals(object.getInteger(Constants.HK_CODE_KEY))) {
JSONObject data = object.getJSONObject("data");
JSONArray list = data.getJSONArray("list");
for (int i = 0; i < list.size(); i++) {
......@@ -97,11 +256,12 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
int curRunTime = jsonObject.getIntValue("curRunTime"); // 当前运行时长
int cycleCountDown = cycleLen - curRunTime; // 周期剩余时长
infoVo.setCode(entity.getCode());
infoVo.setCrossId(entity.getCrossId());
infoVo.setManufacturerCode(entity.getManufacturerCode());
infoVo.setCycleCountDown(cycleCountDown);
infoVo.setCycleLen(cycleLen);
// 循环相位列表
Map<String,Object> phaseMap = new HashMap<>();
Map<String, Object> phaseMap = new HashMap<>();
for (int j = 0; j < rings.size(); j++) {
JSONObject jsonObj = rings.getJSONObject(j);
JSONArray phaseList = jsonObj.getJSONArray("phaseList");
......@@ -114,31 +274,31 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
Integer yellow = phase.getInteger("yellow");
Integer green = phaseLength - yellow - red;
phaseMap.put(phaseNo, green);
if(2 != vehicleStatus){ // 2红灯
if (2 != vehicleStatus) { // 2红灯
infoVo.setPhaseId(phaseNo);
}
}
}
infoVo.setPhaseMap(phaseMap);
Map<String,Object> dirLampGroupMap = new HashMap<>();
Map<String, Object> dirLampGroupMap = new HashMap<>();
// 循环构建灯组对象(从灯组表获取灯组信息)
for (int k = 0; k < channelState.size(); k++) {
JSONObject channelObj = channelState.getJSONObject(k);
int channelNo = channelObj.getIntValue("channelNo");
String color = transferHKLampGroup(channelObj.getIntValue("state"));
for (CrossLightsPO po : crossLightsPOList){
if(Integer.parseInt(po.getLightsNo()) == channelNo) {
for (CrossLightsPO po : crossLightsPOList) {
if (StringUtils.equals(po.getLightsNo(), String.valueOf(channelNo))) {
String direction = po.getDir().toString();
String turn = po.getTurn().toString();
if(dirLampGroupMap.get(direction) != null){
Map<String,String> mstr = (Map<String,String>)dirLampGroupMap.get(direction);
mstr.put(turn,color);
dirLampGroupMap.put(direction,mstr);
if (dirLampGroupMap.get(direction) != null) {
Map<String, String> mstr = (Map<String, String>) dirLampGroupMap.get(direction);
mstr.put(turn, color);
dirLampGroupMap.put(direction, mstr);
} else {
Map<String,String> lamp = new HashMap<>();
lamp.put(turn,color);
dirLampGroupMap.put(direction,lamp);
Map<String, String> lamp = new HashMap<>();
lamp.put(turn, color);
dirLampGroupMap.put(direction, lamp);
}
}
}
......@@ -148,7 +308,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
}
}
}
} catch(Exception e){
} catch (Exception e) {
log.error("系统繁忙,服务器端内部错误!", e);
}
return result;
......@@ -157,22 +317,43 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
/**
* 灯组颜色转换
*
* @param state
* @return
*/
private String transferHKLampGroup(int state){
private String transferHKLampGroup(int state) {
String color = "";
switch (state) {
case 1: color = "green"; break;
case 2: color = "red"; break;
case 3: color = "yellow"; break;
case 4: color = "greenFlash"; break;
case 5: color = "yellowFlash"; break;
case 6: color = "red"; break;
case 7: color = "lightsOut"; break;
case 8: color = "redFlash"; break;
case 9: color = "redYellow"; break;
default: color = ""; break;
case 1:
color = "green";
break;
case 2:
color = "red";
break;
case 3:
color = "yellow";
break;
case 4:
color = "greenFlash";
break;
case 5:
color = "yellowFlash";
break;
case 6:
color = "red";
break;
case 7:
color = "lightsOut";
break;
case 8:
color = "redFlash";
break;
case 9:
color = "redYellow";
break;
default:
color = "";
break;
}
return color;
}
......
......@@ -47,6 +47,7 @@ public class HkRunningStatusServiceImpl implements HkRunningStatusService {
null, null, "application/json", null);
JSONObject object = JSON.parseObject(strResult);
Object o = object.get("code");
// 多信号机情况下,跳过返回信息不成功的获取返回消息成功的信号机数据
if (!Objects.equals(o, 0)) {
continue;
}
......
......@@ -23,7 +23,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -84,6 +86,32 @@ public class SignalStatusServiceImpl implements SignalStatusService {
return signalStatusLogPOList;
}
@Override
public List<LightsStatusVO> lightStatus(String crossId) {
List<LightsStatusVO> lightsStatusVOList = new ArrayList<>();
String manufacturerCode = getManufacturerCode(crossId);
if (Objects.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerCode)) {
// 海康
lightsStatusVOList.addAll(hkLightsStatusService.getHkLightsStatus(crossId));
} else {
// 默认万集
lightsStatusVOList.addAll(wanJiRunningStatusService.lightsStatus(Arrays.asList(crossId)));
}
return lightsStatusVOList;
}
private String getManufacturerCode(String crossId) {
CrossInfoPO crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
if (Objects.nonNull(crossInfoPO)) {
Integer manufacturerId = crossInfoPO.getManufacturerId();
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectById(manufacturerId);
if (Objects.nonNull(manufacturerInfoPO)) {
return manufacturerInfoPO.getCode();
}
}
return "WJ";
}
@Override
@Transactional
public List<LightsStatusVO> lightStatus() {
......
......@@ -4,15 +4,23 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.extern.slf4j.Slf4j;
import net.wanji.utc.po.SignalStatusLogPO;
import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.service.runninginfo.SignalStatusService;
import net.wanji.utc.vo.LightsStatusVO;
import net.wanji.utc.websocket.RealTimeDataWebSocket;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
......@@ -27,6 +35,13 @@ import java.util.concurrent.ConcurrentHashMap;
public class SignalStatusTask {
@Autowired
SignalStatusService signalStatusService;
@Resource(name = "threadPoolExecutor")
ThreadPoolTaskExecutor threadPoolExecutor;
@Resource
private HkLightsStatusService hkLightsStatusService;
private static Map<String, List<LightsStatusVO>> lightStatusCache = new HashMap<>();
// 运行状态、告警,5分钟一次
@Scheduled(fixedRate = 1 * 60 * 1000)
......@@ -34,21 +49,41 @@ public class SignalStatusTask {
List<SignalStatusLogPO> signalStatusLogPOS = signalStatusService.runningStatusAlarm();
}
// 灯态,5秒一次
// 灯态,秒一次
@Scheduled(fixedRate = 1 * 1000)
public void lightStatus() {
try {
ConcurrentHashMap<String, RealTimeDataWebSocket> evenWarnWebSocketMap = RealTimeDataWebSocket.getEvenWarnWebSocketMap();
try {
if (!evenWarnWebSocketMap.isEmpty()) {
for (Map.Entry<String, RealTimeDataWebSocket> entry : evenWarnWebSocketMap.entrySet()) {
String crossId = entry.getKey();
threadPoolExecutor.execute(() -> {
String crossId = null;
String crossIdStr = entry.getKey();
if (StringUtils.isNotBlank(crossIdStr)) {
String[] split = crossIdStr.split(",");
crossId = split[0];
}
long start = System.currentTimeMillis();
List<LightsStatusVO> lightsStatusVOS = hkLightsStatusService.getHkLightsStatus("14Q1409IRF0");
long end = System.currentTimeMillis();
System.err.println(crossId + ":线程池名称:" + Thread.currentThread().getName());
System.err.println(crossId + ":海康平台返回灯态数据时间: " + (end - start) / 1000 + "--" + LocalDateTime.now());
RealTimeDataWebSocket webSocket = entry.getValue();
List<LightsStatusVO> lightsStatusVOS = signalStatusService.lightStatus();
webSocket.sendInfo(JSONObject.toJSONString(lightsStatusVOS, SerializerFeature.WriteMapNullValue), crossId);
for (LightsStatusVO lightsStatusVO : lightsStatusVOS) {
if (Objects.equals(lightsStatusVO.getCrossId(), crossId)) {
try {
webSocket.sendInfo(JSONObject.toJSONString(lightsStatusVOS, SerializerFeature.WriteMapNullValue), crossIdStr);
} catch (IOException e) {
log.error("RealTimeDataWebSocket发送异常,");
}
}
}
});
}
}
} catch (Exception e) {
log.error("实时推送灯态数据失败", e);
}
......
......@@ -57,3 +57,12 @@ pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
#线程池配置
threadPoolConfig:
threadPoolName: threadPoolExecutor
coreSize: 8
maxSize: 16
queueCapacity: 200
keepAliveTime: 6000
allowCoreTimeOut: false
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment