package com.ld.igds.view.manager;
|
|
import com.ld.igds.common.CoreCommonService;
|
import com.ld.igds.common.CoreSerService;
|
import com.ld.igds.common.dto.THDto;
|
import com.ld.igds.constant.BizType;
|
import com.ld.igds.constant.Constant;
|
import com.ld.igds.io.RemoteCommonService;
|
import com.ld.igds.io.RemoteManager;
|
import com.ld.igds.io.notify.NotifyWebInvoker;
|
import com.ld.igds.io.constant.OrderRespEnum;
|
import com.ld.igds.io.request.CheckThRequest;
|
import com.ld.igds.io.response.BaseResponse;
|
import com.ld.igds.models.DepotConf;
|
import com.ld.igds.models.DeviceSer;
|
import com.ld.igds.order.ExeOrderService;
|
import com.ld.igds.order.data.ExeRequest;
|
import com.ld.igds.th.CoreThService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 仓库温湿度管理
|
*
|
* @author: andy.jia
|
* @description:
|
* @version:
|
* @data:2020年2月17日
|
*/
|
@Slf4j
|
@Component
|
public class TempManager {
|
|
|
@Autowired
|
private CoreCommonService commonService;
|
@Autowired
|
private CoreThService thService;
|
@Autowired
|
private CoreSerService serService;
|
@Autowired
|
private RemoteManager remoteManager;
|
@Autowired
|
private ExeOrderService exeOrderService;
|
@Autowired
|
private NotifyWebInvoker notifyWebInvoker;
|
|
private RemoteCommonService remoteCommonService;
|
|
|
/**
|
* 系统定时检测
|
*/
|
public void scheduledCheck(String companyId) {
|
try {
|
//获取所有的仓库配置信息
|
List<DepotConf> list = commonService.getCacheDepotConf(companyId);
|
|
//查看温湿度的配置,同时从当前列表中获取到对应的分机信息
|
CheckThRequest request;
|
DeviceSer deviceSer;
|
//避免重复
|
Map<String, String> tempMap = new HashMap<>();
|
|
String key;
|
for (DepotConf conf : list) {
|
if (StringUtils.isEmpty(conf.getThSer())) continue;
|
|
key = conf.getThSer() + "_" + conf.getThConf();
|
|
if (null != tempMap.get(key)) {
|
continue;
|
}
|
tempMap.put(key, conf.getThSer());
|
|
deviceSer = serService.getCacheSer(companyId, conf.getThSer());
|
|
if (null == deviceSer) {
|
log.warn("根据仓库参数的温湿度分机配置未获取到相应的分机……");
|
continue;
|
}
|
|
if (deviceSer.getStatus().equals(Constant.YN_N)) {
|
log.warn("当前分机={},不在线,不执行温湿度度检测。", deviceSer.getName());
|
notifyWebInvoker.notifyWeb(deviceSer.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, "分机=" + deviceSer.getName() + "不在线,不执行温湿度检测");
|
//每个设备间隔200毫秒
|
Thread.sleep(300);
|
continue;
|
}
|
|
request = new CheckThRequest();
|
request.setCompanyId(companyId);
|
request.setThConf(conf.getThConf());
|
request.setDepotId(conf.getDepotId());
|
request.setIp(deviceSer.getIp());
|
request.setPort(deviceSer.getPort());
|
request.setSerId(deviceSer.getId());
|
request.setDepotName(conf.getDepotName());
|
request.setSerName(deviceSer.getName());
|
|
request.setBizType(BizType.SYS.getCode());
|
|
// 避免重复发送命令和添加操作记录
|
ExeRequest exeRequest = new ExeRequest(request);
|
exeRequest.setAddLogTag(false);
|
exeRequest.setThConf(conf.getThConf());
|
|
exeOrderService.checkExecute(exeRequest);
|
|
//开始调用命令执行
|
remoteCommonService = remoteManager.getRemoteCommonService(deviceSer.getProtocol());
|
if (null == remoteCommonService) {
|
log.error("当前分机={}协议没有实现类", deviceSer.getName());
|
continue;
|
}
|
BaseResponse resp = remoteCommonService.checkTh(request);
|
if (OrderRespEnum.ORDER_SUCCESS.getCode().equals(resp.getCode())) {
|
exeOrderService.addThCache(exeRequest);
|
} else {
|
notifyWebInvoker.notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, "粮情分机=" + deviceSer.getName() + "发送温湿度命令信息失败:" + resp.getMsg());
|
}
|
|
//每个设备间隔200毫秒
|
Thread.sleep(200);
|
}
|
|
} catch (Exception e) {
|
log.error("执行出错:{}", e.getMessage());
|
}
|
}
|
|
public THDto getCacheTH(String companyId, String tempSer, String thConf) {
|
return thService.getCacheTH(companyId, tempSer, thConf);
|
}
|
|
/**
|
* 分机上线时对分机进行一次温湿度采集
|
* @param companyId 分机组织编码
|
* @param serId 分机id
|
*/
|
public void checkThBySer(String companyId, String serId) {
|
try {
|
//获取所有的仓库配置信息
|
List<DepotConf> list = commonService.getCacheDepotConf(companyId);
|
|
//查看温湿度的配置,同时从当前列表中获取到对应的分机信息
|
CheckThRequest request;
|
DeviceSer deviceSer;
|
//避免重复
|
Map<String, String> tempMap = new HashMap<>();
|
|
String key;
|
for (DepotConf conf : list) {
|
if (StringUtils.isEmpty(conf.getThSer())) {
|
continue;
|
}
|
if (!serId.equals(conf.getThSer())) {
|
continue;
|
}
|
|
key = conf.getThSer() + "_" + conf.getThConf();
|
if (null != tempMap.get(key)) {
|
continue;
|
}
|
tempMap.put(key, conf.getThSer());
|
|
deviceSer = serService.getCacheSer(companyId, conf.getThSer());
|
|
if (null == deviceSer) {
|
log.warn("根据仓库参数的温湿度分机配置未获取到相应的分机……");
|
continue;
|
}
|
|
if (deviceSer.getStatus().equals(Constant.YN_N)) {
|
log.warn("当前分机={},不在线,不执行温湿度度检测。", deviceSer.getName());
|
notifyWebInvoker.notifyWeb(deviceSer.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, "分机=" + deviceSer.getName() + "不在线,不执行温湿度检测");
|
//每个设备间隔200毫秒
|
Thread.sleep(300);
|
continue;
|
}
|
request = new CheckThRequest();
|
request.setCompanyId(companyId);
|
request.setThConf(conf.getThConf());
|
request.setDepotId(conf.getDepotId());
|
request.setIp(deviceSer.getIp());
|
request.setPort(deviceSer.getPort());
|
request.setSerId(deviceSer.getId());
|
request.setDepotName(conf.getDepotName());
|
request.setSerName(deviceSer.getName());
|
|
request.setBizType(BizType.SYS.getCode());
|
|
// 避免重复发送命令和添加操作记录
|
ExeRequest exeRequest = new ExeRequest(request);
|
exeRequest.setAddLogTag(false);
|
exeRequest.setThConf(conf.getThConf());
|
|
exeOrderService.checkExecute(exeRequest);
|
|
//开始调用命令执行
|
remoteCommonService = remoteManager.getRemoteCommonService(deviceSer.getProtocol());
|
if (null == remoteCommonService) {
|
log.error("当前分机={}协议没有实现类", deviceSer.getName());
|
continue;
|
}
|
BaseResponse resp = remoteCommonService.checkTh(request);
|
if (OrderRespEnum.ORDER_SUCCESS.getCode().equals(resp.getCode())) {
|
exeOrderService.addThCache(exeRequest);
|
} else {
|
notifyWebInvoker.notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, "粮情分机=" + deviceSer.getName() + "发送温湿度命令信息失败:" + resp.getMsg());
|
}
|
|
//每个设备间隔200毫秒
|
Thread.sleep(200);
|
}
|
|
} catch (Exception e) {
|
log.error("执行出错:{}", e.getMessage());
|
}
|
}
|
}
|