Compare commits

..

7 Commits

@ -92,12 +92,11 @@ public class TtPouringEquipController extends JeecgController<TtPouringEquip, IT
// 获取最新的温度记录
List<TtPouringEquip> list = ttPouringEquipService.queryLastPouringByGroup();
Map<String,TtPouringEquip> equipMap = list.stream().collect(Collectors.toMap(k -> k.getEqtIp(), v->v));
// 查询所有运行中的浇注机设备
// 查询所有浇注机设备(包括已关机)
LambdaQueryWrapper<TtEqtBase> lwq = new LambdaQueryWrapper<>();
lwq.eq(TtEqtBase::getEqtStatus, 1);
// lwq.eq(TtEqtBase::getEqtStatus, 1);
lwq.eq(TtEqtBase::getEqtType, 2);
List<TtEqtBase> JZ_DeviceList = ttEqtBaseService.list(lwq);
long timestamp = System.currentTimeMillis();
Map<String,PouringModel> pouringModelMap = new HashMap<>();
PouringModel model;

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

@ -114,7 +114,8 @@ public class TtSulfEquipController extends JeecgController<TtSulfEquip, ITtSulfE
@ApiOperation(value="tt_sulf_equip-硫化机看板列表查询(轨道扣件)", notes="tt_sulf_equip-硫化机看板列表查询(轨道扣件)")
@GetMapping(value = "/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);
}

@ -21,5 +21,5 @@ public interface TtSulfEquipMapper extends BaseMapper<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">
<mapper namespace="org.jeecg.modules.demo.ttsulfequip.mapper.TtSulfEquipMapper">
<!-- 分组查询最新的一条数据 -->
<!-- 分组查询最进半小时的一条数据 -->
<select id="queryLastTtSulfEquipByGroup" resultType="org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip" >
SELECT
t1.id,
@ -22,7 +22,13 @@
FROM
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
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>

@ -18,6 +18,6 @@ public interface ITtSulfEquipService extends IService<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.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.mapper.TtSulfEquipMapper;
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 javax.annotation.Resource;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
/**
* @Description: tt_sulf_equip
@ -30,8 +34,31 @@ public class TtSulfEquipServiceImpl extends ServiceImpl<TtSulfEquipMapper, TtSul
}
@Override
public List<TtSulfEquip> queryLastTtSulfEquipByGroup() {
return ttSulfEquipMapper.queryLastTtSulfEquipByGroup();
public List<TtSulfEquip> queryLastTtSulfEquipByGroup(Long timestamp) {
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);
}
}

@ -13,6 +13,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayOutenter;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayRecords;
import org.jeecg.modules.demo.ttwaterwayoutenter.service.ITtWaterwayOutenterService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -51,6 +52,7 @@ public class TtWaterwayOutenterController extends JeecgController<TtWaterwayOute
@Autowired
private ITtWaterwayOutenterService ttWaterwayOutenterService;
/**
*
*
@ -61,18 +63,39 @@ public class TtWaterwayOutenterController extends JeecgController<TtWaterwayOute
* @return
*/
//@AutoLog(value = "tt_waterway_outenter-分页列表查询")
@ApiOperation(value="tt_waterway_outenter-分页列表查询", notes="tt_waterway_outenter-分页列表查询")
@ApiOperation(value="出水入水记录-分页列表查询", notes="出水入水记录-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TtWaterwayOutenter>> queryPageList(TtWaterwayOutenter ttWaterwayOutenter,
public Result<IPage<TtWaterwayRecords>> queryPageList(TtWaterwayOutenter ttWaterwayOutenter,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
QueryWrapper<TtWaterwayOutenter> queryWrapper = QueryGenerator.initQueryWrapper(ttWaterwayOutenter, req.getParameterMap());
Page<TtWaterwayOutenter> page = new Page<TtWaterwayOutenter>(pageNo, pageSize);
IPage<TtWaterwayOutenter> pageList = ttWaterwayOutenterService.page(page, queryWrapper);
Page<TtWaterwayRecords> page = new Page<>(pageNo, pageSize);
IPage<TtWaterwayRecords> pageList = ttWaterwayOutenterService.queryWaterRecordList(page, queryWrapper);
return Result.OK(pageList);
}
// /**
// * 分页列表查询
// *
// * @param ttWaterwayOutenter
// * @param pageNo
// * @param pageSize
// * @param req
// * @return
// */
// //@AutoLog(value = "tt_waterway_outenter-分页列表查询")
// @ApiOperation(value="tt_waterway_outenter-分页列表查询", notes="tt_waterway_outenter-分页列表查询")
// @GetMapping(value = "/list")
// public Result<IPage<TtWaterwayOutenter>> queryPageList(TtWaterwayOutenter ttWaterwayOutenter,
// @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
// @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
// QueryWrapper<TtWaterwayOutenter> queryWrapper = QueryGenerator.initQueryWrapper(ttWaterwayOutenter, req.getParameterMap());
// Page<TtWaterwayOutenter> page = new Page<TtWaterwayOutenter>(pageNo, pageSize);
// IPage<TtWaterwayOutenter> pageList = ttWaterwayOutenterService.page(page, queryWrapper);
// return Result.OK(pageList);
// }
/**
*
*

@ -0,0 +1,99 @@
package org.jeecg.modules.demo.ttwaterwayoutenter.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: tt_waterway_outenter
* @Author: jeecg-boot
* @Date: 2023-04-13
* @Version: V1.0
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="水道系统出入水记录", description="水道系统出入水记录")
public class TtWaterwayRecords implements Serializable {
private static final long serialVersionUID = 1L;
/** FID */
@Excel(name = "FID", width = 15)
@ApiModelProperty(value = "FID")
private String fid;
/**批次号*/
@Excel(name = "批次号", width = 15)
@ApiModelProperty(value = "批次号")
private java.lang.String batchNumber;
/**框数*/
@Excel(name = "框数", width = 15)
@ApiModelProperty(value = "框号")
private java.lang.Integer number;
/**绑定时间*/
@Excel(name = "绑定时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "绑定时间")
private Date bindTime;
/**型号表编号*/
@Excel(name = "产品名称", width = 15)
@ApiModelProperty(value = "产品名称")
private java.lang.Integer proName;
/**型号表编号*/
@Excel(name = "型号", width = 15)
@ApiModelProperty(value = "型号")
private java.lang.Integer typeNo;
/**入水时间*/
@Excel(name = "入水时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "入水时间")
private Date enterTime;
/**预热时间*/
@Excel(name = "预热时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "预热时间")
private Date yureTime;
/**出水时间*/
@Excel(name = "出水时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "出水时间")
private Date outTime;
/** 预热时长 */
@Excel(name = "预热时长", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "预热时长")
private Date yureDuring;
/** 出水时长 */
@Excel(name = "预热时长", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "预热时长")
private Date outDuring;
}

@ -2,9 +2,16 @@ package org.jeecg.modules.demo.ttwaterwayoutenter.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.ttsulfequip.entity.TtSulfEquip;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayOutenter;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayRecords;
/**
* @Description: tt_waterway_outenter
@ -12,6 +19,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @Date: 2023-04-13
* @Version: V1.0
*/
@Mapper
public interface TtWaterwayOutenterMapper extends BaseMapper<TtWaterwayOutenter> {
IPage<TtWaterwayRecords> queryWaterRecordList(@Param("page") Page<TtWaterwayRecords> page,
@Param(Constants.WRAPPER) Wrapper<TtWaterwayOutenter> wrapper);
}

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.demo.ttwaterwayoutenter.mapper.TtWaterwayOutenterMapper">
<!-- <select id="queryWaterRecordList" resultType="org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayRecords">-->
<!-- -->
<!-- </select>-->
</mapper>

@ -1,7 +1,12 @@
package org.jeecg.modules.demo.ttwaterwayoutenter.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayOutenter;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayRecords;
/**
* @Description: tt_waterway_outenter
@ -11,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ITtWaterwayOutenterService extends IService<TtWaterwayOutenter> {
// 关联查询入水出水记录
IPage<TtWaterwayRecords> queryWaterRecordList(Page<TtWaterwayRecords> page, QueryWrapper<TtWaterwayOutenter> wrapper);
}

@ -1,8 +1,15 @@
package org.jeecg.modules.demo.ttwaterwayoutenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayOutenter;
import org.jeecg.modules.demo.ttwaterwayoutenter.entity.TtWaterwayRecords;
import org.jeecg.modules.demo.ttwaterwayoutenter.mapper.TtWaterwayOutenterMapper;
import org.jeecg.modules.demo.ttwaterwayoutenter.service.ITtWaterwayOutenterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -16,4 +23,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class TtWaterwayOutenterServiceImpl extends ServiceImpl<TtWaterwayOutenterMapper, TtWaterwayOutenter> implements ITtWaterwayOutenterService {
@Autowired
TtWaterwayOutenterMapper ttWaterwayOutenterMapper;
@Override
public IPage<TtWaterwayRecords> queryWaterRecordList(Page<TtWaterwayRecords> page, QueryWrapper<TtWaterwayOutenter> wrapper) {
if (wrapper == null) {
wrapper = new QueryWrapper<>();
}
return ttWaterwayOutenterMapper.queryWaterRecordList(page, wrapper);
}
}

@ -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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.custom.enums.DEVICE_STATUS;
import org.jeecg.custom.enums.DEVICE_TYPE;
import org.jeecg.custom.utils.RS485Handler;
import org.jeecg.modules.demo.ttelectricmeter.entity.TtElectricMeter;
@ -25,10 +26,11 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Configuration //1.主要用于标记配置类兼备Component的效果。
@EnableScheduling // 2.开启定时任务
//@Configuration //1.主要用于标记配置类兼备Component的效果。
//@EnableScheduling // 2.开启定时任务
@Slf4j
public class TtDataCollectTask implements SchedulingConfigurer {
@ -73,14 +75,15 @@ public class TtDataCollectTask implements SchedulingConfigurer {
for(Map.Entry<DEVICE_TYPE, RS485Handler> entry : jzjHandlerMap.entrySet()) {
RS485Handler handler = entry.getValue();
DEVICE_TYPE deviceType = entry.getKey();
// 原子计数器
AtomicInteger atomic = new AtomicInteger();
Runnable runnable = () -> {
log.info("5min执行一次浇注设备温度采集:" + LocalDateTime.now().toLocalTime());
String str = handler.write(deviceType.getCommand());
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)) {
Integer type = jzjMolds.contains(deviceType) ? 2 : 1;
String eqtIp = deviceType.getHostNum();
TtPouringEquip ttPouringEquip = new TtPouringEquip();
ttPouringEquip.setTemperature(new BigDecimal(temp));
ttPouringEquip.setCreateTime(new Date());
@ -89,7 +92,16 @@ public class TtDataCollectTask implements SchedulingConfigurer {
ttPouringEquip.setEqtNo(Optional.ofNullable(eqtNoIpMap.get(eqtIp)).orElse("0"));
ttPouringEquip.setEqtIp(eqtIp);
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);
}
@ -156,12 +168,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.updateById(eqtInfo);
}
}
// 获取所有串口采集运行的Ip设备
private Map<String,String> getEqtNoIpMapping() {
Map<String,String> map;
LambdaQueryWrapper<TtEqtBase> lqw = new LambdaQueryWrapper<>();
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);
map = list.stream().collect(Collectors.toMap(TtEqtBase::getEqtIp, TtEqtBase::getEqtNo));
log.info("running eqt ip no mappings = {}", map);

Loading…
Cancel
Save