作者 钟来

流水渔更新宜兴plc功能

package com.zhonglai.luhui.data.file.service.dto;
public class BaseBean {
private String tableName;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
}
... ...
package com.zhonglai.luhui.data.file.service.dto;
import lombok.Data;
/**
* 设备数据表
* @author Administrator
*
*/
@Data
public class DeviceSensorData extends BaseBean{
private String device_info_id; //设备信息id
private String data_type; //数据类型
private String data_value; //L数据值
private Integer creat_time; //创建时间
private String device_model; // VARCHAR(10) NOT NULL COMMENT '设备型号,(3,5,6)',
}
... ...
package com.zhonglai.luhui.data.file.service.dto;
import lombok.Data;
@Data
public class Statistics {
private Integer total;
private Integer finished;
public synchronized Statistics add()
{
if(null == finished)
{
finished = 0;
}
finished++;
return this;
}
public String getProgress()
{
return "总天数:"+total+" 已完成文件:"+finished;
}
}
... ...
package com.zhonglai.luhui.data.file.service.dto;
public interface TableName {
String getTableName();
}
... ...
package com.zhonglai.luhui.data.file.service.service;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.util.CharsetUtil;
import com.ruoyi.common.utils.DateUtils;
import com.zhonglai.dao.BaseDao;
import com.zhonglai.luhui.data.file.service.dto.DeviceSensorData;
import com.zhonglai.luhui.data.file.service.dto.Statistics;
import com.zhonglai.luhui.data.file.service.util.FileUtil;
import com.zhonglai.luhui.data.file.service.util.ScheduledUtil;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 数据服务
*/
public class DataService {
private static BaseDao baseDao = new BaseDao(new DataDBFactoryImp());
/**
* 一天一天的存
* @param day
*/
public void saveOneDayData(String day)
{
String yea = day.substring(0,4);
String tableName = "`ly_sensor_data_"+yea+"`.`device_sensor_data_"+day+"`";
List<DeviceSensorData> ct = baseDao.findBysql(DeviceSensorData.class,"SELECT device_info_id,data_type FROM "+tableName+" GROUP BY device_info_id,data_type");
if(null != ct && ct.size() != 0)
{
for (DeviceSensorData deviceSensorData:ct)
{
ScheduledUtil.scheduler.schedule(() -> {
String imei = deviceSensorData.getDevice_info_id().split("_")[0];
String deviceInfoId = deviceSensorData.getDevice_info_id();
String dataType = deviceSensorData.getData_type();
String deviceType = FileUtil.deviceTypeMap.get(deviceSensorData.getDevice_info_id().split("_")[0]);
List<DeviceSensorData> device_data_type_list = baseDao.findBysql(DeviceSensorData.class,"SELECT `creat_time`,`data_value` FROM "+tableName+" where device_info_id='"+deviceSensorData.getDevice_info_id()+"' and data_type='"+deviceSensorData.getData_type()+"'");
Statistics statistics = map.get(Integer.parseInt(yea));
if(null != device_data_type_list && device_data_type_list.size() != 0 )
{
saveDataFile(device_data_type_list,imei,deviceInfoId,dataType,deviceType,yea,day);
map.put(Integer.parseInt(yea),statistics.add());
}
System.out.println(yea+"年完成进度:"+statistics.getProgress());
},0, TimeUnit.SECONDS);
}
}
}
private void saveDataFile(List<DeviceSensorData> device_data_type_list, String imei,String deviceInfoId,String dataType, String deviceType,String yea,String day)
{
String baiduPath = FileUtil.createBaiduWangPanPat(yea,null==deviceType?"device_model":deviceType,imei,deviceInfoId,dataType+"+"+day);
File file = new File(FileUtil.tempFilePath+baiduPath);
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = FileWriter.create(file, CharsetUtil.CHARSET_UTF_8).getWriter(true);
if (null != bufferedWriter)
{
for (DeviceSensorData deviceSensorData:device_data_type_list)
{
StringBuffer line = new StringBuffer();
line.append(deviceSensorData.getCreat_time());
line.append(",");
line.append(deviceSensorData.getData_value());
bufferedWriter.write(line.toString());
//默认换行符
bufferedWriter.write(FileUtil.CRLF);
bufferedWriter.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
IoUtil.close(bufferedWriter);
}
}
private static Map<Integer, Statistics> map = new HashMap<>();
public static void main(String[] args) {
FileUtil.initDeviceType();
DataService dataService = new DataService();
Calendar calendar = Calendar.getInstance();
int year = 2020;
while (year<2024)
{
calendar.set(year,Calendar.JANUARY,1);
if (!map.containsKey(year))
{
Statistics statistics = new Statistics();
statistics.setTotal(calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
statistics.setFinished(0);
map.put(year,statistics);
}
while (calendar.get(Calendar.YEAR)==year)
{
String day = DateUtils.parseDateToStr("yyyyMMdd",calendar.getTime());
dataService.saveOneDayData(day);
// ScheduledUtil.scheduler.schedule(() ->,0,TimeUnit.SECONDS);
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
year++;
}
}
}
... ...
... ... @@ -8,6 +8,7 @@ import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.zhonglai.luhui.data.file.service.baidu.BaiDuWangPanService;
import com.zhonglai.luhui.data.file.service.dto.BaiduFileInfo;
import com.zhonglai.luhui.data.file.service.service.DaoService;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
... ... @@ -23,8 +24,8 @@ import java.util.concurrent.TimeUnit;
public class FileUtil {
private static String LvLianFilePath = "D:/data/ly_sensor_data";
private static String BaiDuWangPanFilePath = "/禄辉/ly_sensor_data";
private static String tempFilePath = "D:/data";
private static String CRLF = "\r\n";
public static String tempFilePath = "F:/data";
public static String CRLF = "\r\n";
/**
* 读取绿联云的文件
* @param lvLianFilePath
... ... @@ -125,21 +126,17 @@ public class FileUtil {
public static void initDeviceType()
{
try {
List<Entity> list = Db.use().query("select device_model,id from device_host");
if(null != list && list.size() !=0 )
List<Map<String, Object>> list = DaoService.getBaseDao().findBysql("select device_model,id from device_host where device_model is not null and device_model <> ''");
if(null != list && list.size() !=0 )
{
for (Map<String, Object> entity:list)
{
for (Entity entity:list)
{
deviceTypeMap.put(entity.getStr("id"),entity.get("device_model","device_model"));
}
deviceTypeMap.put(entity.get("id")+"",entity.get("device_model")+"");
}
} catch (SQLException e) {
System.err.println(e);
}
}
static Map<String,String> deviceTypeMap = new HashMap<>();
public static Map<String,String> deviceTypeMap = new HashMap<>();
public static void main(String[] args) {
byte[] decodedBytes = Base64.getDecoder().decode("ZnVuY3Rpb24g1tyyj5vriygpe2dsb2JhbCAkteLxkoeJ2Cwk0NTpg4eP0Cwkr6");
... ...
... ... @@ -5,6 +5,6 @@ import java.util.concurrent.ScheduledExecutorService;
public class ScheduledUtil {
public final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);
public final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(100);
}
... ...
... ... @@ -62,6 +62,20 @@ public class DeviceController {
data.put("type","3");
}
DeviceInfo deviceInfo = deviceService.getDeviceInfo(deviceInfoId);
String[] ss = deviceInfoId.split("_");
if(ss.length==2 && ss[1].equals("40"))
{
DeviceInfo deviceInfo41 = deviceService.getDeviceInfo(ss[0]+"_"+41);
if(StringUtils.isNotEmpty(deviceInfo41.getDataValue()))
{
JsonObject jsonObject = GsonConstructor.get().fromJson(deviceInfo41.getDataValue(),JsonObject.class);
if(null != jsonObject && jsonObject.has("3") && jsonObject.get("3").getAsString().equals("01"))
{
return new Message(MessageCode.DEFAULT_FAIL_CODE,"浮球处于自动模式,中转泵不能控制!");
}
}
}
Topic topic = new Topic("2",deviceInfo.getDevice_type(),deviceControlMessage.getDeviceId(),"PUT",null);
List<DeviceDataConfig> list = DeviceProductProtocol.deviceDataWriteConfigList;
... ...
... ... @@ -37,24 +37,24 @@ public class DeviceProductProtocol {
deviceDataConfigList.add(new DeviceDataConfig(11,"P001B_RUN",PLCType.排污,PLCDataType.控制器状态码,"22","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(12,"P001B_ALARM",PLCType.排污,PLCDataType.故障代码,"22","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(13,"P001C_RUN",PLCType.排污,PLCDataType.控制器状态码,"23","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(14,"P001C_ALARM",PLCType.排污,PLCDataType.控制器状态,"23","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(14,"P001C_ALARM",PLCType.排污,PLCDataType.故障代,"23","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(54,"P001D_RUN",PLCType.排污,PLCDataType.控制器状态码,"24","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(55,"P001D_ALARM",PLCType.排污,PLCDataType.控制器状态,"24","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(55,"P001D_ALARM",PLCType.排污,PLCDataType.故障代,"24","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(56,"P001E_RUN",PLCType.排污,PLCDataType.控制器状态码,"25","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(57,"P001E_ALARM",PLCType.排污,PLCDataType.控制器状态,"25","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(57,"P001E_ALARM",PLCType.排污,PLCDataType.故障代,"25","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(58,"P001F_RUN",PLCType.排污,PLCDataType.控制器状态码,"26","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(59,"P001F_ALARM",PLCType.排污,PLCDataType.控制器状态码,"26","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(60,"P002_RUN",PLCType.中转泵,PLCDataType.控制器状态码,"40","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(61,"P002_ALARM",PLCType.中转泵,PLCDataType.控制器状态码,"40","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(62,"ZZC_L_YW",PLCType.中转池,PLCDataType.液位高低,"50","低液位信号"));
deviceDataConfigList.add(new DeviceDataConfig(63,"ZZC_H_YW",PLCType.中转池,PLCDataType.液位高低,"50","高液位信号"));
deviceDataConfigList.add(new DeviceDataConfig(59,"P001F_ALARM",PLCType.排污,PLCDataType.故障代码,"26","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(60,"P002_RUN",PLCType.排污,PLCDataType.控制器状态码,"40","运行信号"));
deviceDataConfigList.add(new DeviceDataConfig(61,"P002_ALARM",PLCType.排污,PLCDataType.故障代码,"40","故障信号","11","01"));
deviceDataConfigList.add(new DeviceDataConfig(62,"ZZC_L_YW",PLCType.排污,PLCDataType.液位高低,"41","低液位信号",null,"00"));
deviceDataConfigList.add(new DeviceDataConfig(63,"ZZC_H_YW",PLCType.排污,PLCDataType.液位高低,"41","高液位信号",null,"01"));
deviceDataConfigList.add(new DeviceDataConfig(15,"SD_RUN",null,PLCDataType.故障代码,"00","市电供电信号","12","00"));
deviceDataConfigList.add(new DeviceDataConfig(16,"FD_RUN",null,PLCDataType.故障代码,"00","发电供电信号","13","01"));
deviceDataConfigList.add(new DeviceDataConfig(17,"DY_ALARM",null,PLCDataType.故障代码,"00","电源故障信号","51","01"));
deviceDataConfigList.add(new DeviceDataConfig(18,"SYS_AUTO",null,PLCDataType.控制柜状态,"00","系统自动允许"));
deviceDataConfigList.add(new DeviceDataConfig(26,"TX_RUN",null,PLCDataType.故障代码,"00","远程通讯正常","01","00"));
deviceDataConfigList.add(new DeviceDataConfig(41,"SYS_ALARM",null,PLCDataType.故障代码,"00","设备故障报警","01","01"));
deviceDataConfigList.add(new DeviceDataConfig(73,"YC_AUTO_P002",PLCType.中转泵,PLCDataType.控制器模式,"40","远程自动按钮",null,"01"));
deviceDataConfigList.add(new DeviceDataConfig(73,"YC_AUTO_P002",PLCType.排污,PLCDataType.控制器状态码,"41","远程自动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(27,"YC_ST_C001A",PLCType.推水机,PLCDataType.控制器状态码,"01","远程启动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(28,"YC_STP_C001A",PLCType.推水机,PLCDataType.控制器状态码,"01","远程停止按钮",null,"00"));
... ... @@ -82,9 +82,9 @@ public class DeviceProductProtocol {
deviceDataWriteConfigList.add(new DeviceDataConfig(67,"YC_STP_P001E",PLCType.排污,PLCDataType.控制器状态码,"25","远程停止按钮",null,"00"));
deviceDataWriteConfigList.add(new DeviceDataConfig(68,"YC_ST_P001F",PLCType.排污,PLCDataType.控制器状态码,"26","远程启动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(69,"YC_STP_P001F",PLCType.排污,PLCDataType.控制器状态码,"26","远程停止按钮",null,"00"));
deviceDataWriteConfigList.add(new DeviceDataConfig(70,"YC_ST_P002",PLCType.中转泵,PLCDataType.控制器状态码,"40","远程启动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(71,"YC_STP_P002",PLCType.中转泵,PLCDataType.控制器状态码,"40","远程停止按钮",null,"00"));
deviceDataWriteConfigList.add(new DeviceDataConfig(72,"YC_AUTO_P002",PLCType.中转泵,PLCDataType.控制器模式,"40","远程自动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(70,"YC_ST_P002",PLCType.排污,PLCDataType.控制器状态码,"40","远程启动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(71,"YC_STP_P002",PLCType.排污,PLCDataType.控制器状态码,"40","远程停止按钮",null,"00"));
deviceDataWriteConfigList.add(new DeviceDataConfig(72,"YC_AUTO_P002",PLCType.排污,PLCDataType.控制器状态码,"41","远程自动按钮",null,"01"));
deviceDataWriteConfigList.add(new DeviceDataConfig(74,"SYS_REST",PLCType.推水机,PLCDataType.复位,"01","设备故障复位",null,"1"));
}
... ...