package com.qianwen.smartman.modules.mdc.service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import com.baomidou.dynamic.datasource.annotation.DS; import com.qianwen.smartman.modules.mdc.dto.ProcessParameterVO; @DS("iotdb") @Service public class ProcessParameterHelperService { private static final Logger log = LoggerFactory.getLogger(ProcessParameterHelperService.class); @Autowired private JdbcTemplate jdbcTemplate; @DS("iotdb") public ProcessParameterVO queryLastParameterLessThenTime(long workstationId,String item,Long time) { /** *tdengine实现:oldFirstStatue * select last(ts) as realTime, last(v) as value_collect from iot_data.super_collect_data where n = #{item} and ts < #{startTime} and workstation_id = #{workstationId} */ ProcessParameterVO vo = null; String sql ="select max_time(n) as ts,last_value(n) as n,last_value(v) as v,last_value(workstation_id) as workstationId from root.f2.process_param_"+workstationId+"_"+item+" where time<"+time+" limit 1 align by device"; List list = jdbcTemplate.query(sql, new RowMapper() { @Override public ProcessParameterVO mapRow(ResultSet rs, int rowNum) throws SQLException { ProcessParameterVO p = new ProcessParameterVO(); Long time = rs.getLong("ts"); p.setRealTime(time); p.setCollectItem(rs.getString("n")); p.setValueCollect(rs.getString("v")); return p; } }); if(!list.isEmpty()) { vo = list.get(0); } return vo; } /** * 获取工位最新参数值(采集时间应大于指定时间) * @param workstationId * @param item 参数名称,如DeviceStatus/Output * @param time 指定的时间 * @return */ @DS("iotdb") public ProcessParameterVO getLastParameterGreaterThenTime(long workstationId,String item,Long time) { /* oldLastStatue select last(ts) as realTime, last(v) as value_collect from iot_data.super_collect_data where n = #{item} and ts > #{endTime} and workstation_id = #{workstationId} * */ /* LastProcessParam lp = this.parameterMapper.lastParameterGreaterThanTime(workstationId,item,time); if(lp == null) { return null; } ProcessParameterVO vo = new ProcessParameterVO(); //解析json为对象列表 JSONObject paramsObj = JSONObject.parseObject(lp.getParamJson()); if(paramsObj.containsKey(item)) { JSONObject itemObj = paramsObj.getJSONObject(item); Long lastTime = itemObj.getLong("time"); vo.setTime(new Timestamp(lastTime)); vo.setRealTime(lastTime); vo.setValueCollect(itemObj.getString("value")); } return vo;*/ ProcessParameterVO vo = null; String sql ="select max_time(n) as ts,last_value(n) as n,last_value(v) as v,last_value(workstation_id) as workstationId from root.f2.process_param_"+workstationId+"_"+item+" where time>"+time+" limit 1 align by device"; List list = jdbcTemplate.query(sql, new RowMapper() { @Override public ProcessParameterVO mapRow(ResultSet rs, int rowNum) throws SQLException { ProcessParameterVO p = new ProcessParameterVO(); p.setRealTime(rs.getLong("ts")); p.setCollectItem(rs.getString("n")); p.setValueCollect(rs.getString("v")); return p; } }); if(!list.isEmpty()) { vo = list.get(0); } return vo; } }