浇注机、硫化机设备状态同步功能

dev
ccongli 2 years ago
parent 169a9ba45f
commit 73d286aca7

@ -86,7 +86,6 @@ public class TtPouringEquipServiceImpl extends ServiceImpl<TtPouringEquipMapper,
// 获取当前系统时间 // 获取当前系统时间
Instant instant = Instant.ofEpochMilli(timestamp); Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime toDay = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); LocalDateTime toDay = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
toDay = toDay.plusDays(-2);
/* /*
8 8
true: 8 - 24 true: 8 - 24

@ -114,7 +114,8 @@ public class TtSulfEquipController extends JeecgController<TtSulfEquip, ITtSulfE
@ApiOperation(value="tt_sulf_equip-硫化机看板列表查询(轨道扣件)", notes="tt_sulf_equip-硫化机看板列表查询(轨道扣件)") @ApiOperation(value="tt_sulf_equip-硫化机看板列表查询(轨道扣件)", notes="tt_sulf_equip-硫化机看板列表查询(轨道扣件)")
@GetMapping(value = "/sulfScreen") @GetMapping(value = "/sulfScreen")
public Result<List<TtSulfEquip>> sulfScreen() { public Result<List<TtSulfEquip>> sulfScreen() {
List<TtSulfEquip> sulfEquipList = ttSulfEquipService.queryLastTtSulfEquipByGroup(); long timestamp = System.currentTimeMillis();
List<TtSulfEquip> sulfEquipList = ttSulfEquipService.queryLastTtSulfEquipByGroup(timestamp);
return Result.OK(sulfEquipList); return Result.OK(sulfEquipList);
} }

@ -21,5 +21,5 @@ public interface TtSulfEquipMapper extends BaseMapper<TtSulfEquip> {
IPage<TtSulfEquip> queryTtSulfEquip(@Param("page") Page<TtSulfEquip> page, @Param("ttSulfEquip") TtSulfEquip ttSulfEquip); IPage<TtSulfEquip> queryTtSulfEquip(@Param("page") Page<TtSulfEquip> page, @Param("ttSulfEquip") TtSulfEquip ttSulfEquip);
List<TtSulfEquip> queryLastTtSulfEquipByGroup(); List<TtSulfEquip> queryLastTtSulfEquipByGroup(@Param("date") String date, @Param("time") String time);
} }

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.demo.ttsulfequip.mapper.TtSulfEquipMapper"> <mapper namespace="org.jeecg.modules.demo.ttsulfequip.mapper.TtSulfEquipMapper">
<!-- 分组查询最新的一条数据 --> <!-- 分组查询最进半小时的一条数据 -->
<select id="queryLastTtSulfEquipByGroup" resultType="org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip" > <select id="queryLastTtSulfEquipByGroup" resultType="org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip" >
SELECT SELECT
t1.id, t1.id,
@ -21,8 +21,14 @@
b.utilize_rate b.utilize_rate
FROM FROM
tt_sulf_equip t1 tt_sulf_equip t1
INNER JOIN ( SELECT MAX(id) AS id FROM tt_sulf_equip GROUP BY eqt_no ) t2 ON t1.id = t2.id INNER JOIN ( SELECT MAX( id ) AS id FROM tt_sulf_equip GROUP BY eqt_no ) t2 ON t1.id = t2.id
LEFT JOIN tt_eqt_base b ON t1.eqt_no = b.eqt_no where b.eqt_type = 3 ORDER BY eqt_no; LEFT JOIN tt_eqt_base b ON t1.eqt_no = b.eqt_no
WHERE
t1.open_date = #{date}
AND t1.open_time > #{time}
AND b.eqt_type = 3
ORDER BY
eqt_no;
</select> </select>

@ -18,6 +18,6 @@ public interface ITtSulfEquipService extends IService<TtSulfEquip> {
IPage<TtSulfEquip> queryTtSulfEquipInfo(Page<TtSulfEquip> page,TtSulfEquip ttSulfEquip); IPage<TtSulfEquip> queryTtSulfEquipInfo(Page<TtSulfEquip> page,TtSulfEquip ttSulfEquip);
List<TtSulfEquip> queryLastTtSulfEquipByGroup(); List<TtSulfEquip> queryLastTtSulfEquipByGroup(Long timestamp);
} }

@ -2,6 +2,7 @@ package org.jeecg.modules.demo.ttsulfequip.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip; import org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip;
import org.jeecg.modules.demo.ttsulfequip.mapper.TtSulfEquipMapper; import org.jeecg.modules.demo.ttsulfequip.mapper.TtSulfEquipMapper;
import org.jeecg.modules.demo.ttsulfequip.service.ITtSulfEquipService; import org.jeecg.modules.demo.ttsulfequip.service.ITtSulfEquipService;
@ -10,8 +11,11 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone;
/** /**
* @Description: tt_sulf_equip * @Description: tt_sulf_equip
@ -30,8 +34,31 @@ public class TtSulfEquipServiceImpl extends ServiceImpl<TtSulfEquipMapper, TtSul
} }
@Override @Override
public List<TtSulfEquip> queryLastTtSulfEquipByGroup() { public List<TtSulfEquip> queryLastTtSulfEquipByGroup(Long timestamp) {
return ttSulfEquipMapper.queryLastTtSulfEquipByGroup(); List<String> dateAndTime = getDateAndTime(timestamp);
String date = dateAndTime.get(0);
String time = dateAndTime.get(1);
return ttSulfEquipMapper.queryLastTtSulfEquipByGroup(date,time);
}
private static List<String> getDateAndTime(Long timestamp){
List<String> dateAndTime = new ArrayList<>();
timestamp -= 30 * 60 * 1000; // 半小时之前
// timestamp -= 2 * 20 * 60 * 60 * 1000;
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
String date = DateFormatUtils.format(timestamp, "yyyy-MM-dd", TimeZone.getTimeZone(zoneId));
String time = DateFormatUtils.format(timestamp, "HH:mm:ss", TimeZone.getTimeZone(zoneId));
dateAndTime.add(date);
dateAndTime.add(time);
return dateAndTime;
}
public static void main(String[] args) {
long timestamp = System.currentTimeMillis();
timestamp -= 2 * 20 * 60 * 60 * 1000;
List<String> dateAndTime = getDateAndTime(timestamp);
System.out.println(dateAndTime);
} }
} }

@ -0,0 +1,23 @@
package org.jeecg.custom.enums;
import org.apache.commons.lang3.StringUtils;
public enum DEVICE_STATUS {
RUNNING(1),
WAITING(2),
TROUBLE(3),
SHUTDOWN(4);
private Integer status;
private DEVICE_STATUS(Integer status) {
this.status = status;
}
public Integer getVal() {
return status;
}
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fazecast.jSerialComm.SerialPort; import com.fazecast.jSerialComm.SerialPort;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jeecg.custom.enums.DEVICE_STATUS;
import org.jeecg.custom.enums.DEVICE_TYPE; import org.jeecg.custom.enums.DEVICE_TYPE;
import org.jeecg.custom.utils.RS485Handler; import org.jeecg.custom.utils.RS485Handler;
import org.jeecg.modules.demo.ttelectricmeter.entity.TtElectricMeter; import org.jeecg.modules.demo.ttelectricmeter.entity.TtElectricMeter;
@ -25,6 +26,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Configuration //1.主要用于标记配置类兼备Component的效果。 @Configuration //1.主要用于标记配置类兼备Component的效果。
@ -73,14 +75,15 @@ public class TtDataCollectTask implements SchedulingConfigurer {
for(Map.Entry<DEVICE_TYPE, RS485Handler> entry : jzjHandlerMap.entrySet()) { for(Map.Entry<DEVICE_TYPE, RS485Handler> entry : jzjHandlerMap.entrySet()) {
RS485Handler handler = entry.getValue(); RS485Handler handler = entry.getValue();
DEVICE_TYPE deviceType = entry.getKey(); DEVICE_TYPE deviceType = entry.getKey();
// 原子计数器
AtomicInteger atomic = new AtomicInteger();
Runnable runnable = () -> { Runnable runnable = () -> {
log.info("5min执行一次浇注设备温度采集:" + LocalDateTime.now().toLocalTime()); log.info("5min执行一次浇注设备温度采集:" + LocalDateTime.now().toLocalTime());
String str = handler.write(deviceType.getCommand()); String str = handler.write(deviceType.getCommand());
String temp = handler.parseData(str, 1); String temp = handler.parseData(str, 1);
log.info("device com {} read str = {} | parse temp = {}", deviceType.name(), str, temp); String eqtIp = deviceType.getHostNum();
if (StringUtils.isNotBlank(temp)) { if (StringUtils.isNotBlank(temp)) {
Integer type = jzjMolds.contains(deviceType) ? 2 : 1; Integer type = jzjMolds.contains(deviceType) ? 2 : 1;
String eqtIp = deviceType.getHostNum();
TtPouringEquip ttPouringEquip = new TtPouringEquip(); TtPouringEquip ttPouringEquip = new TtPouringEquip();
ttPouringEquip.setTemperature(new BigDecimal(temp)); ttPouringEquip.setTemperature(new BigDecimal(temp));
ttPouringEquip.setCreateTime(new Date()); ttPouringEquip.setCreateTime(new Date());
@ -88,7 +91,16 @@ public class TtDataCollectTask implements SchedulingConfigurer {
ttPouringEquip.setEqtNo(Optional.ofNullable(eqtNoIpMap.get(eqtIp)).orElse("0")); ttPouringEquip.setEqtNo(Optional.ofNullable(eqtNoIpMap.get(eqtIp)).orElse("0"));
ttPouringEquip.setEqtIp(eqtIp); ttPouringEquip.setEqtIp(eqtIp);
pouringEquipService.save(ttPouringEquip); pouringEquipService.save(ttPouringEquip);
atomic.getAndSet(0); // 重新记为 0
updateEqtStatus(eqtIp, DEVICE_STATUS.RUNNING.getVal());
} else {
int number = atomic.getAndIncrement(); // 采集失败次数 +1;
if (number >= 6) {
updateEqtStatus(eqtIp, DEVICE_STATUS.SHUTDOWN.getVal());
}
} }
log.info("device com {} read str = {} | parse temp = {} | atomic = {}", deviceType.name(),
str, temp, atomic.get());
}; };
this.addTriggerTask(runnable, cron1); this.addTriggerTask(runnable, cron1);
} }
@ -153,12 +165,25 @@ public class TtDataCollectTask implements SchedulingConfigurer {
} }
// 获取所有运行状态正常的Ip设备 // 更新浇注机设备采集状态
private void updateEqtStatus(String ip, Integer status) {
LambdaQueryWrapper<TtEqtBase> lqw = new LambdaQueryWrapper<>();
lqw.eq(TtEqtBase::getEqtIp, ip);
TtEqtBase eqtInfo = iTtEqtBaseService.getOne(lqw);
if (eqtInfo != null) {
eqtInfo.setEqtStatus(status);
iTtEqtBaseService.save(eqtInfo);
}
}
// 获取所有串口采集运行的Ip设备
private Map<String,String> getEqtNoIpMapping() { private Map<String,String> getEqtNoIpMapping() {
Map<String,String> map; Map<String,String> map;
LambdaQueryWrapper<TtEqtBase> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TtEqtBase> lqw = new LambdaQueryWrapper<>();
lqw.isNotNull(TtEqtBase::getEqtIp); lqw.isNotNull(TtEqtBase::getEqtIp);
lqw.eq(TtEqtBase::getEqtStatus,1); // 运行正常 // lqw.eq(TtEqtBase::getEqtStatus,1); // 运行正常
lqw.in(TtEqtBase::getEqtType, 2,5,6,7);
List<TtEqtBase> list = iTtEqtBaseService.list(lqw); List<TtEqtBase> list = iTtEqtBaseService.list(lqw);
map = list.stream().collect(Collectors.toMap(TtEqtBase::getEqtIp, TtEqtBase::getEqtNo)); map = list.stream().collect(Collectors.toMap(TtEqtBase::getEqtIp, TtEqtBase::getEqtNo));
log.info("running eqt ip no mappings = {}", map); log.info("running eqt ip no mappings = {}", map);

Loading…
Cancel
Save