Browse Source

三合一修改

master
shenzhouyu 7 hours ago
parent
commit
8738ae04a7
  1. 13
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/DeviceGatherDao.java
  2. 17
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/ResourceDao.java
  3. 30
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/ResourceScheduledDao.java
  4. 60
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/entity/Resource.java
  5. 90
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/entity/ResourceScheduled.java
  6. 26
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/runner/DeviceRunner.java
  7. 88
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/service/impl/DeviceGatherServiceImpl.java
  8. 21
      glue-modbus-collector/src/main/java/com/xujie/devicecollector/util/DateUtils.java

13
glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/DeviceGatherDao.java

@ -5,6 +5,7 @@ import com.xujie.devicecollector.entity.DeviceGather;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@Mapper
@ -48,5 +49,17 @@ public interface DeviceGatherDao extends BaseMapper<DeviceGather> {
*/
@Delete("delete from device_gather where ip = #{ip} and roll_no = '*'")
void removeDeviceGather(@Param("ip") String ip);
/**
* 查询卷号是否已存在
*/
@Select("select count(1) from device_gather where roll_no = #{rollNo}")
int countByRollNo(@Param("rollNo") String rollNo);
/**
* 查询是否存在active为N的数据
*/
@Select("select count(1) from device_gather where active = 'N' and status='扫描卷'")
int countActiveN();
}

17
glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/ResourceDao.java

@ -0,0 +1,17 @@
package com.xujie.devicecollector.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xujie.devicecollector.entity.Resource;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface ResourceDao extends BaseMapper<Resource> {
/**
* 根据site和ip查询resource是否激活
*/
@Select("select count(1) from resource where site = #{site} and resource_ip_addr = #{ip} and 3in1Flag = 'Y'")
int countActiveBySiteAndIp(@Param("site") String site, @Param("ip") String ip);
}

30
glue-modbus-collector/src/main/java/com/xujie/devicecollector/dao/ResourceScheduledDao.java

@ -0,0 +1,30 @@
package com.xujie.devicecollector.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xujie.devicecollector.entity.ResourceScheduled;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@Mapper
public interface ResourceScheduledDao extends BaseMapper<ResourceScheduled> {
/**
* 根据site和ip定位resource_scheduled并更新iserror
*/
@Update("update resource_scheduled set iserror = 'Y' where id in (" +
"select top 1 rs.id from resource_scheduled rs " +
"inner join resource r on rs.site = r.site and rs.resource_id = r.resource_id " +
"where r.site = #{site} and r.resource_ip_addr = #{ip} " +
"order by rs.id desc)")
int markIsErrorBySiteAndIp(@Param("site") String site, @Param("ip") String ip);
/**
* 根据设备IP判断是否存在iserror为Y的数据
*/
@Select("select count(1) from resource_scheduled rs " +
"inner join resource r on rs.site = r.site and rs.resource_id = r.resource_id " +
"where r.resource_ip_addr = #{ip} and rs.iserror = 'Y' and r.site = #{site}")
int countErrorByIp(@Param("site") String site,@Param("ip") String ip);
}

60
glue-modbus-collector/src/main/java/com/xujie/devicecollector/entity/Resource.java

@ -0,0 +1,60 @@
package com.xujie.devicecollector.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("resource")
public class Resource {
@TableId(type = IdType.AUTO)
private Integer id;
private String site;
private String resourceId;
private String resourceIpAddr;
private String active;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getResourceId() {
return resourceId;
}
public void setResourceId(String resourceId) {
this.resourceId = resourceId;
}
public String getResourceIpAddr() {
return resourceIpAddr;
}
public void setResourceIpAddr(String resourceIpAddr) {
this.resourceIpAddr = resourceIpAddr;
}
public String getActive() {
return active;
}
public void setActive(String active) {
this.active = active;
}
}

90
glue-modbus-collector/src/main/java/com/xujie/devicecollector/entity/ResourceScheduled.java

@ -0,0 +1,90 @@
package com.xujie.devicecollector.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("resource_scheduled")
public class ResourceScheduled {
@TableId(type = IdType.AUTO)
private Integer id;
private String site;
private String resourceId;
private String seqNo;
private String status;
private String issend;
private Integer sfdcid;
private String iserror;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getResourceId() {
return resourceId;
}
public void setResourceId(String resourceId) {
this.resourceId = resourceId;
}
public String getSeqNo() {
return seqNo;
}
public void setSeqNo(String seqNo) {
this.seqNo = seqNo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getIssend() {
return issend;
}
public void setIssend(String issend) {
this.issend = issend;
}
public Integer getSfdcid() {
return sfdcid;
}
public void setSfdcid(Integer sfdcid) {
this.sfdcid = sfdcid;
}
public String getIserror() {
return iserror;
}
public void setIserror(String iserror) {
this.iserror = iserror;
}
}

26
glue-modbus-collector/src/main/java/com/xujie/devicecollector/runner/DeviceRunner.java

@ -6,6 +6,7 @@ import com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse;
import com.ghgande.j2mod.modbus.net.TCPMasterConnection;
import com.ghgande.j2mod.modbus.procimg.InputRegister;
import com.ghgande.j2mod.modbus.util.BitVector;
import com.xujie.devicecollector.dao.ResourceDao;
import com.xujie.devicecollector.entity.DeviceInfo;
import com.xujie.devicecollector.service.DeviceGatherService;
import com.xujie.devicecollector.service.DeviceInfoService;
@ -50,6 +51,8 @@ public class DeviceRunner implements CommandLineRunner {
@Autowired
private ModbusConnectionManager connectionManager;
@Autowired
private ResourceDao resourceDao;
private static final long CHECK_INTERVAL = 2000;// 毫秒
@ -88,6 +91,9 @@ public class DeviceRunner implements CommandLineRunner {
for (DeviceInfo info : deviceInfoList) {
scheduler.scheduleWithFixedDelay(() -> {
try {
if (!canCollect(info.getIp())) {
return;
}
handleSignal(info);
} catch (Exception e) {
logger.error("handleSignal failed, device {}:{}", info.getIp(), info.getPort(), e);
@ -95,6 +101,9 @@ public class DeviceRunner implements CommandLineRunner {
}, 0, CHECK_INTERVAL, TimeUnit.MILLISECONDS);
offDataScheduler.scheduleWithFixedDelay(() -> {
try {
if (!canCollect(info.getIp())) {
return;
}
handleOffData(info, "*");
} catch (Exception e) {
logger.error("handleOffData failed, device {}:{}", info.getIp(), info.getPort(), e);
@ -103,8 +112,23 @@ public class DeviceRunner implements CommandLineRunner {
}
}
private boolean canCollect(String ip) {
String value = deviceInfoService.queryDeviceSiteByIp(ip);
if (StringUtils.isEmpty(value)) {
logger.info("设备IP:{}未查到site信息,跳过本次采集", ip);
return false;
}
String site = value.split(";")[0];
int activeCount = resourceDao.countActiveBySiteAndIp(site, ip);
if (activeCount <= 0) {
logger.info("设备IP:{}, site:{}在resource表中active!=Y,跳过本次采集", ip, site);
return false;
}
return true;
}
// 处理信号 即换卷
public void handleSignal(DeviceInfo deviceInfo) {
public void handleSignal(DeviceInfo deviceInfo) {
String ip = deviceInfo.getIp();
int port = deviceInfo.getPort();
int maxColi = getMaxColi(deviceInfo);

88
glue-modbus-collector/src/main/java/com/xujie/devicecollector/service/impl/DeviceGatherServiceImpl.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.xujie.devicecollector.dao.DeviceGatherDao;
import com.xujie.devicecollector.dao.DeviceInfoDao;
import com.xujie.devicecollector.dao.ProcedureDao;
import com.xujie.devicecollector.dao.ResourceScheduledDao;
import com.xujie.devicecollector.entity.DeviceGather;
import com.xujie.devicecollector.entity.DeviceInfo;
import com.xujie.devicecollector.service.DeviceGatherService;
@ -34,6 +35,8 @@ public class DeviceGatherServiceImpl implements DeviceGatherService {
@Autowired
private ProcedureDao procedureDao;
@Autowired
private ResourceScheduledDao resourceScheduledDao;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
@ -82,23 +85,40 @@ public class DeviceGatherServiceImpl implements DeviceGatherService {
}
site = strings[0];
logger.info("设备Site:{}", site);
updateDeviceGather(deviceInfo.getIp(), rollNo);
handleData(seqNo, site, rollNo, ip);
}
private void handleData(String seqNo, String site, String rollNo, String ip) {
String operatingStatus = (String) redisTemplate.opsForValue().get("operatingStatus");
DeviceGather gather = new DeviceGather(null, ip, rollNo, new Date(), "扫描卷", "N", "", 7, operatingStatus, seqNo);
saveDeviceGatherByRoll(gather);
List<Object> params = new ArrayList<>();
params.add(site);
params.add(rollNo);
params.add(ip);
params.add(DateUtils.getStringNow());
params.add(gather.getId());
logger.info("调用扫描卷存储过程sIn1HandleMainRoll参数:{}", JSON.toJSONString(params));
List<Map<String, Object>> sIn1HandleMainRoll = procedureDao.getProcedureData("sIn1HandleMainRoll", params);
logger.info("调用扫描卷存储过程sIn1HandleMainRoll结果:{}", JSON.toJSONString(sIn1HandleMainRoll));
boolean rollNoNotZero = !"0".equals(rollNo);
boolean rollNoNotExists = deviceGatherDao.countByRollNo(rollNo) == 0;
boolean noActiveN = deviceGatherDao.countActiveN() == 0;
if (rollNoNotExists && rollNoNotZero && noActiveN) {
updateDeviceGather(ip, rollNo);
String operatingStatus = (String) redisTemplate.opsForValue().get("operatingStatus");
DeviceGather gather = new DeviceGather(null, ip, rollNo, new Date(), "扫描卷", "N", "", 7, operatingStatus, seqNo);
saveDeviceGatherByRoll(gather);
List<Object> params = new ArrayList<>();
params.add(site);
params.add(rollNo);
params.add(ip);
params.add(DateUtils.getStringNow());
params.add(gather.getId());
logger.info("调用扫描卷存储过程sIn1HandleMainRoll参数:{}", JSON.toJSONString(params));
List<Map<String, Object>> sIn1HandleMainRoll = procedureDao.getProcedureData("sIn1HandleMainRoll", params);
logger.info("调用扫描卷存储过程sIn1HandleMainRoll结果:{}", JSON.toJSONString(sIn1HandleMainRoll));
}else{
String serialNo = getErrorRollNo(site);
String date = DateUtils.getDate();
String errorRollNo = "error_"+date+serialNo;
updateDeviceGather(ip, errorRollNo);
String operatingStatus = (String) redisTemplate.opsForValue().get("operatingStatus");
DeviceGather gather = new DeviceGather(null, ip, errorRollNo, new Date(), "扫描卷", "N", "卷号获取失败", 7, operatingStatus, seqNo);
saveDeviceGatherByRoll(gather);
int updateCount = resourceScheduledDao.markIsErrorBySiteAndIp(site, ip);
logger.warn("扫描卷不满足存储过程执行条件, rollNo:{}, rollNoNotExists:{}, rollNoNotZero:{}, noActiveN:{}, 更新resource_scheduled条数:{}",
rollNo, rollNoNotExists, rollNoNotZero, noActiveN, updateCount);
}
}
@Override
@ -113,18 +133,40 @@ public class DeviceGatherServiceImpl implements DeviceGatherService {
multipleRollsList.get(9), multipleRollsList.get(10), multipleRollsList.get(11),
new Date(), "下机卷", "N", "", 7, operatingStatus, seqNo);
saveDeviceGather(gather);
int errorCount = resourceScheduledDao.countErrorByIp(site,ip);
if (errorCount == 0) {
List<Object> params = new ArrayList<>();
params.add(site);
params.add(rollNo);
params.add(ip);
params.add(gather.getId());
logger.info("调用下机卷分切sIn1CreateRoll存储过程参数:{}", JSON.toJSONString(params));
List<Map<String, Object>> data = procedureDao.getProcedureData("sIn1CreateRoll", params);
logger.info("调用下机卷分切sIn1CreateRoll存储过程结果:{}", JSON.toJSONString(data));
if ("200".equals(data.get(0).get("result_code"))){
// todo 存储卷号到redis
redisTemplate.opsForValue().set("3in1:rollNos", data.get(0).get("roll_no"));
}
}
}
//获取编号
public String getErrorRollNo(String site){
String currentTime = DateUtils.getStringDayNow();
List<Object> params = new ArrayList<>();
params.add(site);
params.add(rollNo);
params.add(ip);
params.add(gather.getId());
logger.info("调用下机卷分切sIn1CreateRoll存储过程参数:{}", JSON.toJSONString(params));
List<Map<String, Object>> data = procedureDao.getProcedureData("sIn1CreateRoll", params);
logger.info("调用下机卷分切sIn1CreateRoll存储过程结果:{}", JSON.toJSONString(data));
if ("200".equals(data.get(0).get("result_code"))){
// todo 存储卷号到redis
redisTemplate.opsForValue().set("3in1:rollNos", data.get(0).get("roll_no"));
}
params.add("3in1");
params.add("卷号获取失败码");
params.add(currentTime);
params.add(-1);
params.add(4);
List<Map<String, Object>> resultList = procedureDao.getProcedureData("latestCreateSerialNo", params);
Map<String, Object> resultMap = resultList.get(0);
String serialNo = String.valueOf(resultMap.get("serial_no"));
return serialNo;
}
}

21
glue-modbus-collector/src/main/java/com/xujie/devicecollector/util/DateUtils.java

@ -12,5 +12,26 @@ public class DateUtils {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
/**
* 获取当前时间的年月日时分秒
*/
public static String getStringDayNow() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(new Date());
}
/**
* 获取当前时间的年份后两位
*/
public static String getYearLastTwoDigits() {
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
public static String getDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(new Date());
}
}
Loading…
Cancel
Save