package com.szpg.plc.message.response.read; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.szpg.db.dao.PgFjDao; import com.szpg.db.dao.PgHjsbblDao; import com.szpg.db.dao.PgDeviceDao; import com.szpg.db.dao.impl.PgFjDaoImpl; import com.szpg.db.dao.impl.PgHjsbblDaoImpl; import com.szpg.db.data.PgHjsbbl; import com.szpg.db.dao.impl.PgDeviceDaoImpl; import com.szpg.plc.message.response.ReadMemoryCommandResponse; import com.szpg.plc.util.ByteUtil; import com.szpg.plc.util.Bytes; import com.szpg.util.Configure; import com.szpg.util.TimeFormat; public class ReadFjRtCommandResponse extends ReadMemoryCommandResponse { /** * */ private static final long serialVersionUID = -3733073050500592967L; private final Logger logger = Logger.getLogger(this.getClass().getName()); private List<Integer> fjscs; // 风机运行时长——秒数 private List<Integer> fjsch; // 风机运行时长——小时数 private String[] zcList; //资产列表,从配置文件中获取 public ReadFjRtCommandResponse() { fjscs = new ArrayList<Integer>(); fjsch = new ArrayList<Integer>(); } public List<Integer> getFjscs() { return fjscs; } public void setFjscs(List<Integer> fjscs) { this.fjscs = fjscs; } public List<Integer> getFjsch() { return fjsch; } public void setFjsch(List<Integer> fjsch) { this.fjsch = fjsch; } public String[] getZcList() { return zcList; } public void setZcList(String[] zcList) { this.zcList = zcList; } @Override public void afterAction() { // 1将风机累计运行时长数据存入数据库 PgFjDao fjDao = new PgFjDaoImpl(); PgDeviceDao deviceDao = new PgDeviceDaoImpl(); if (null != zcList && zcList.length > 0) { // 遍历设备列表,将风机运行时长存入数据库 for (int i = 0; i < zcList.length; i++) { String zcbh = zcList[i]; int id = deviceDao.findDeviceIdByCode(zcbh); if (id > 0) { fjDao.addRtRecord(fjscs.get(i), fjsch.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), id); } } } } @Override public void parseData(byte[] messageData) { // 获取目标ACU的代码 String acucode = this.getAcucode(); // 判断数据的长度是否满足要求 if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.WORDCOUNT")) * 2) { logger.error("返回的数据长度与读取的不一致!"); this.setValid(false); return; } PgHjsbblDao blDao = new PgHjsbblDaoImpl(); // 获取目标ACU风机运行时间内存区域的起始字地址 int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".FJRT.START")); // 获取目标ACU风机相关的资产列表,即风机设备列表 String zcListStr = Configure.getProperty("acubl", acucode + ".FJ.ZC.LIST"); if (StringUtils.isEmpty(zcListStr) == true) { this.setValid(false); return; } zcList = zcListStr.split(";"); // 解析风机运行时长相关变量 for (int i = 0; i < zcList.length; i++) { String zcbh = zcList[i]; // 解析风机运行时长的小时数 PgHjsbbl hourBlObj = blDao.findBlByBh(zcbh + ".RunH"); if (null == hourBlObj) { continue; } int hkszdz = hourBlObj.getKszdz(); //开始字地址 int hjszdz = hourBlObj.getJszdz(); //结束字地址 int hn = hjszdz - (hkszdz - 1); //字数 int hoffset = hkszdz - start; //与开始字的偏移量 Bytes hourBytes = new Bytes(); for (int j = hn; j > 0; j--) { hourBytes.append(new byte[] {messageData[(hoffset + j - 1) * 2], messageData[(hoffset + j - 1) * 2 + 1]}); } int hour = ByteUtil.binToInt(hourBytes.toBytes()); //运行时长的小时数 // 解析风机运行时长的秒数 PgHjsbbl secondBlObj = blDao.findBlByBh(zcbh + ".RunS"); if (null == secondBlObj) { continue; } int skszdz = secondBlObj.getKszdz(); //开始字地址 int sjszdz= secondBlObj.getJszdz(); //结束字地址 int sn = sjszdz - (skszdz - 1); //字数 int soffset = skszdz - start; //与开始字的偏移量 Bytes secondBytes = new Bytes(); for (int k = sn; k > 0; k--) { secondBytes.append(new byte[] {messageData[(soffset + k - 1) * 2], messageData[(soffset + k - 1) * 2 + 1]}); } int second = ByteUtil.binToInt(secondBytes.toBytes()); //运行时长的秒数 getFjsch().add(hour); getFjscs().add(second); } } }