0、背景
物联网项目温湿度管理后台,使用Spring boot 开发,下面主要介绍终端实时状态的代码实现。
1、代码-终端实时状态
1.1 终端实时状态-控制器
IemsTerminalRealtimeController.java
/**
* 实时状态Controller
*
* @author ken_ji_jian
* @date 2019-11-02
*/
@Controller
@RequestMapping("/iems/realtime")
public class IemsTerminalRealtimeController extends BaseController
{
private String prefix = "iems/realtime";
@Autowired
private IIemsTerminalRealtimeService iemsTerminalRealtimeService;
@RequiresPermissions("iems:realtime:view")
@GetMapping()
public String realtime()
{
return prefix + "/realtime";
}
/**
* 查询实时状态列表
*/
@RequiresPermissions("iems:realtime:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(IemsTerminalRealtime iemsTerminalRealtime)
{
startPage();
List<IemsTerminalRealtime> list = iemsTerminalRealtimeService.selectIemsTerminalRealtimeList(iemsTerminalRealtime);
return getDataTable(list);
}
/**
* 导出实时状态列表
*/
@RequiresPermissions("iems:realtime:export")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(IemsTerminalRealtime iemsTerminalRealtime)
{
List<IemsTerminalRealtime> list = iemsTerminalRealtimeService.selectIemsTerminalRealtimeList(iemsTerminalRealtime);
ExcelUtil<IemsTerminalRealtime> util = new ExcelUtil<IemsTerminalRealtime>(IemsTerminalRealtime.class);
return util.exportExcel(list, "realtime");
}
/**
* 新增实时状态
*/
@GetMapping("/add")
public String add()
{
return prefix + "/add";
}
/**
* 新增保存实时状态
*/
@RequiresPermissions("iems:realtime:add")
@Log(title = "实时状态", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(IemsTerminalRealtime iemsTerminalRealtime)
{
return toAjax(iemsTerminalRealtimeService.insertIemsTerminalRealtime(iemsTerminalRealtime));
}
/**
* 修改实时状态
*/
@GetMapping("/edit/{terminalId}")
public String edit(@PathVariable("terminalId") Long terminalId, ModelMap mmap)
{
IemsTerminalRealtime iemsTerminalRealtime = iemsTerminalRealtimeService.selectIemsTerminalRealtimeById(terminalId);
mmap.put("iemsTerminalRealtime", iemsTerminalRealtime);
return prefix + "/edit";
}
/**
* 修改保存实时状态
*/
@RequiresPermissions("iems:realtime:edit")
@Log(title = "实时状态", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(IemsTerminalRealtime iemsTerminalRealtime)
{
return toAjax(iemsTerminalRealtimeService.updateIemsTerminalRealtime(iemsTerminalRealtime));
}
/**
* 删除实时状态
*/
@RequiresPermissions("iems:realtime:remove")
@Log(title = "实时状态", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(iemsTerminalRealtimeService.deleteIemsTerminalRealtimeByIds(ids));
}
}
1.2 终端实时状态-模型
IemsTerminalRealtime.java
/**
* 实时状态对象 iems_terminal_realtime
*
* @author ken_ji_jian
* @date 2019-11-02
*/
public class IemsTerminalRealtime extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 终端id */
private Long terminalId;
public String getTerminalSid() {
return terminalSid;
}
public void setTerminalSid(String terminalSid) {
this.terminalSid = terminalSid;
}
/** 终端sid */
private String terminalSid;
/** 上线时间 */
@Excel(name = "上线时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date onlineTime;
/** 状态 */
@Excel(name = "状态")
private Long status;
/** 刷新时间 */
@Excel(name = "刷新时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date refreshTime;
/** 心跳频率n秒 */
@Excel(name = "心跳频率n秒")
private Long heartbeatRate;
/** 实时上报周期 */
@Excel(name = "实时上报周期")
private Long reportCycle;
/** 实时数据上报时间 */
@Excel(name = "实时数据上报时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date reportTime;
/** 超期周期120秒 */
@Excel(name = "超期周期120秒")
private Long overdueCycle;
/** 超期倒计时心跳刷新 */
@Excel(name = "超期倒计时心跳刷新")
private Long overdueCountdown;
/** 温度 n */
@Excel(name = "温度 n")
private Float temper;
/** 湿度 n% */
@Excel(name = "湿度 n%")
private Float humidity;
/** 0 不支持 1 未检出烟 2检出烟 */
@Excel(name = "0 不支持 1 未检出烟 2检出烟")
private Long smoke;
/** 0 不支持 1 未水浸 2水浸 */
@Excel(name = "0 不支持 1 未水浸 2水浸")
private Long water;
/** 0 不支持 1 有源供电 2有源断电 */
@Excel(name = "0 不支持 1 有源供电 2有源断电")
private Long elect;
/** 入侵 0不支持 1未入侵 2入侵 */
@Excel(name = "入侵 0不支持 1未入侵 2入侵")
private Long human;
public void setTerminalId(Long terminalId)
{
this.terminalId = terminalId;
}
public Long getTerminalId()
{
return terminalId;
}
public void setOnlineTime(Date onlineTime)
{
this.onlineTime = onlineTime;
}
public Date getOnlineTime()
{
return onlineTime;
}
public void setStatus(Long status)
{
this.status = status;
}
public Long getStatus()
{
return status;
}
public void setRefreshTime(Date refreshTime)
{
this.refreshTime = refreshTime;
}
public Date getRefreshTime()
{
return refreshTime;
}
public void setHeartbeatRate(Long heartbeatRate)
{
this.heartbeatRate = heartbeatRate;
}
public Long getHeartbeatRate()
{
return heartbeatRate;
}
public void setReportCycle(Long reportCycle)
{
this.reportCycle = reportCycle;
}
public Long getReportCycle()
{
return reportCycle;
}
public void setReportTime(Date reportTime)
{
this.reportTime = reportTime;
}
public Date getReportTime()
{
return reportTime;
}
public void setOverdueCycle(Long overdueCycle)
{
this.overdueCycle = overdueCycle;
}
public Long getOverdueCycle()
{
return overdueCycle;
}
public void setOverdueCountdown(Long overdueCountdown)
{
this.overdueCountdown = overdueCountdown;
}
public Long getOverdueCountdown()
{
return overdueCountdown;
}
public void setTemper(Float temper)
{
this.temper = temper;
}
public Float getTemper()
{
return temper;
}
public void setHumidity(Float humidity)
{
this.humidity = humidity;
}
public Float getHumidity()
{
return humidity;
}
public void setSmoke(Long smoke)
{
this.smoke = smoke;
}
public Long getSmoke()
{
return smoke;
}
public void setWater(Long water)
{
this.water = water;
}
public Long getWater()
{
return water;
}
public void setElect(Long elect)
{
this.elect = elect;
}
public Long getElect()
{
return elect;
}
public void setHuman(Long human)
{
this.human = human;
}
public Long getHuman()
{
return human;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("terminalId", getTerminalId())
.append("onlineTime", getOnlineTime())
.append("status", getStatus())
.append("refreshTime", getRefreshTime())
.append("heartbeatRate", getHeartbeatRate())
.append("reportCycle", getReportCycle())
.append("reportTime", getReportTime())
.append("overdueCycle", getOverdueCycle())
.append("overdueCountdown", getOverdueCountdown())
.append("temper", getTemper())
.append("humidity", getHumidity())
.append("smoke", getSmoke())
.append("water", getWater())
.append("elect", getElect())
.append("human", getHuman())
.toString();
}
}
1.3 终端实时状态-数据库映射类
IemsTerminalRealtimeMapper.java
/**
* 实时状态Mapper接口
*
* @author ken_ji_jian
* @date 2019-11-02
*/
public interface IemsTerminalRealtimeMapper
{
/**
* 查询实时状态
*
* @param terminalId 实时状态ID
* @return 实时状态
*/
public IemsTerminalRealtime selectIemsTerminalRealtimeById(Long terminalId);
/**
* 查询实时状态列表
*
* @param iemsTerminalRealtime 实时状态
* @return 实时状态集合
*/
public List<IemsTerminalRealtime> selectIemsTerminalRealtimeList(IemsTerminalRealtime iemsTerminalRealtime);
/**
* 新增实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
public int insertIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime);
/**
* 修改实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
public int updateIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime);
/**
* 删除实时状态
*
* @param terminalId 实时状态ID
* @return 结果
*/
public int deleteIemsTerminalRealtimeById(Long terminalId);
/**
* 批量删除实时状态
*
* @param terminalIds 需要删除的数据ID
* @return 结果
*/
public int deleteIemsTerminalRealtimeByIds(String[] terminalIds);
}
1.4 终端实时状态-服务接口
IIemsTerminalRealtimeService.java
/**
* 实时状态Service接口
*
* @author ken_ji_jian
* @date 2019-11-02
*/
public interface IIemsTerminalRealtimeService
{
/**
* 查询实时状态
*
* @param terminalId 实时状态ID
* @return 实时状态
*/
public IemsTerminalRealtime selectIemsTerminalRealtimeById(Long terminalId);
/**
* 查询实时状态列表
*
* @param iemsTerminalRealtime 实时状态
* @return 实时状态集合
*/
public List<IemsTerminalRealtime> selectIemsTerminalRealtimeList(IemsTerminalRealtime iemsTerminalRealtime);
//public List<IemsTerminalRealtime> selectIemsTerminalRealtimeListExcludeNotUse();
/**
* 新增实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
public int insertIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime);
/**
* 修改实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
public int updateIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime);
/**
* 批量删除实时状态
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteIemsTerminalRealtimeByIds(String ids);
/**
* 删除实时状态信息
*
* @param terminalId 实时状态ID
* @return 结果
*/
public int deleteIemsTerminalRealtimeById(Long terminalId);
}
1.5 终端实时状态-服务实现
IemsTerminalRealtimeServiceImpl.java
/**
* 实时状态Service业务层处理
*
* @author ken_ji_jian
* @date 2019-11-02
*/
@Service
public class IemsTerminalRealtimeServiceImpl implements IIemsTerminalRealtimeService
{
@Autowired
private IemsTerminalRealtimeMapper iemsTerminalRealtimeMapper;
/**
* 查询实时状态
*
* @param terminalId 实时状态ID
* @return 实时状态
*/
@Override
public IemsTerminalRealtime selectIemsTerminalRealtimeById(Long terminalId)
{
return iemsTerminalRealtimeMapper.selectIemsTerminalRealtimeById(terminalId);
}
/**
* 查询实时状态列表
*
* @param iemsTerminalRealtime 实时状态
* @return 实时状态
*/
@Override
public List<IemsTerminalRealtime> selectIemsTerminalRealtimeList(IemsTerminalRealtime iemsTerminalRealtime)
{
return iemsTerminalRealtimeMapper.selectIemsTerminalRealtimeList(iemsTerminalRealtime);
}
/**
* 新增实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
@Override
public int insertIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime)
{
return iemsTerminalRealtimeMapper.insertIemsTerminalRealtime(iemsTerminalRealtime);
}
/**
* 修改实时状态
*
* @param iemsTerminalRealtime 实时状态
* @return 结果
*/
@Override
public int updateIemsTerminalRealtime(IemsTerminalRealtime iemsTerminalRealtime)
{
return iemsTerminalRealtimeMapper.updateIemsTerminalRealtime(iemsTerminalRealtime);
}
/**
* 删除实时状态对象
*
* @param ids 需要删除的数据ID
* @return 结果
*/
@Override
public int deleteIemsTerminalRealtimeByIds(String ids)
{
return iemsTerminalRealtimeMapper.deleteIemsTerminalRealtimeByIds(Convert.toStrArray(ids));
}
/**
* 删除实时状态信息
*
* @param terminalId 实时状态ID
* @return 结果
*/
@Override
public int deleteIemsTerminalRealtimeById(Long terminalId)
{
return iemsTerminalRealtimeMapper.deleteIemsTerminalRealtimeById(terminalId);
}
}
1.6 终端报表-页面实现
edit.html
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改实时状态')" />
<th:block th:include="include :: datetimepicker-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-realtime-edit" th:object="${iemsTerminalRealtime}">
<input name="terminalId" th:field="*{terminalId}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">上线时间:</label>
<div class="col-sm-8">
<div class="input-group date">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
<input name="onlineTime" th:value="${#dates.format(iemsTerminalRealtime.onlineTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">状态:</label>
<div class="col-sm-8">
<div class="radio-box">
<input type="radio" name="status" value="">
<label th:for="status" th:text="未知"></label>
</div>
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> 代码生成请选择字典属性</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">刷新时间:</label>
<div class="col-sm-8">
<div class="input-group date">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
<input name="refreshTime" th:value="${#dates.format(iemsTerminalRealtime.refreshTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">心跳频率n秒:</label>
<div class="col-sm-8">
<input name="heartbeatRate" th:field="*{heartbeatRate}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">实时上报周期:</label>
<div class="col-sm-8">
<input name="reportCycle" th:field="*{reportCycle}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">实时数据上报时间:</label>
<div class="col-sm-8">
<div class="input-group date">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
<input name="reportTime" th:value="${#dates.format(iemsTerminalRealtime.reportTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">超期周期120秒:</label>
<div class="col-sm-8">
<input name="overdueCycle" th:field="*{overdueCycle}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">超期倒计时心跳刷新:</label>
<div class="col-sm-8">
<input name="overdueCountdown" th:field="*{overdueCountdown}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">温度 n:</label>
<div class="col-sm-8">
<input name="temper" th:field="*{temper}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">湿度 n%:</label>
<div class="col-sm-8">
<input name="humidity" th:field="*{humidity}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">0 不支持 1 未检出烟 2检出烟:</label>
<div class="col-sm-8">
<input name="smoke" th:field="*{smoke}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">0 不支持 1 未水浸 2水浸:</label>
<div class="col-sm-8">
<input name="water" th:field="*{water}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">0 不支持 1 有源供电 2有源断电:</label>
<div class="col-sm-8">
<input name="elect" th:field="*{elect}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">入侵 0不支持 1未入侵 2入侵:</label>
<div class="col-sm-8">
<input name="human" th:field="*{human}" class="form-control" type="text">
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<script type="text/javascript">
var prefix = ctx + "iems/realtime";
$("#form-realtime-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-realtime-edit').serialize());
}
}
$("input[name='onlineTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$("input[name='refreshTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
$("input[name='reportTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
</script>
</body>
</html>