Commit 085162c5 authored by zhuangzhuang's avatar zhuangzhuang

1.修改仓库firefox下载失败问题;

2.修改mqtt判断是否重发的逻辑
3.运输历史数据下载加上网关的序列号
parent 99417b9c
...@@ -67,7 +67,13 @@ public class WarehouseExcel { ...@@ -67,7 +67,13 @@ public class WarehouseExcel {
//设置列的格式 //设置列的格式
cell1.setCellStyle(rowStyle1); cell1.setCellStyle(rowStyle1);
//将标题添加到列中 //将标题添加到列中
cell1.setCellValue(new HSSFRichTextString(resultWarehouseNoAndTDLSNAndTimeVo.getWarehouseNo()+"仓库温湿度观测记录表-"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN())); if(request.getHeader("AccountLanguage").equals("en")){
cell1.setCellValue(new HSSFRichTextString(resultWarehouseNoAndTDLSNAndTimeVo.getWarehouseNo()+"Warehouse temperature and humidity historic data -"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN()));
}else if (request.getHeader("AccountLanguage ").equals("jp")){
cell1.setCellValue(new HSSFRichTextString(resultWarehouseNoAndTDLSNAndTimeVo.getWarehouseNo()+"倉庫の温度および湿度の観測記録-"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN()));
}else{
cell1.setCellValue(new HSSFRichTextString(resultWarehouseNoAndTDLSNAndTimeVo.getWarehouseNo()+"仓库温湿度观测记录表-"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN()));
}
} }
//设置行高 //设置行高
row1.setHeight((short) (30 * 20)); row1.setHeight((short) (30 * 20));
...@@ -87,7 +93,7 @@ public class WarehouseExcel { ...@@ -87,7 +93,7 @@ public class WarehouseExcel {
//设置列的格式 //设置列的格式
cell2.setCellStyle(rowStyle2); cell2.setCellStyle(rowStyle2);
//将标题添加到列中 //将标题添加到列中
cell2.setCellValue(i18n.getMessage(request,"year")+ ":2018"); cell2.setCellValue(i18n.getMessage(request,"year")+ ":2019" );
} }
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));
for (int n = 3; n < 6; n++) { for (int n = 3; n < 6; n++) {
......
...@@ -6,6 +6,14 @@ public class WarehouseTimeAndDataVo { ...@@ -6,6 +6,14 @@ public class WarehouseTimeAndDataVo {
private String value; private String value;
public WarehouseTimeAndDataVo() {
}
public WarehouseTimeAndDataVo(String time, String value) {
this.time = time;
this.value = value;
}
public String getTime() { public String getTime() {
return time; return time;
} }
......
package com.example.tdl.domain.vo;
public class WarehouseVo {
private String offset;
private String warehouseNo;
public String getOffset() {
return offset;
}
public void setOffset(String offset) {
this.offset = offset;
}
public String getWarehouseNo() {
return warehouseNo;
}
public void setWarehouseNo(String warehouseNo) {
this.warehouseNo = warehouseNo;
}
}
package com.example.tdl.mqtt;
import com.example.tdl.callabletask.GWConfigWorker;
import com.example.tdl.config.mqtt.MqttConfig;
import com.example.tdl.config.mqtt.MqttTemlateAsync;
import com.example.tdl.domain.vo.CheckInVo;
import com.example.tdl.domain.vo.ConfigCMDVo;
import com.example.tdl.domain.vo.ConfigVo;
import com.example.tdl.service.ConfigService;
import com.example.tdl.web.AlarmController;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @Author: lelouch
* @Description:
* @Date: Created in 9:41 2018/3/13
* @Modified By:
**/
@Component
public class MqttListener implements MqttCallback {
private Logger logger = LoggerFactory.getLogger(MqttListener.class);
private static final int INIT_DELAY_DEFAULT = 1000; // unit:ms
private static final int SCH_PERIOD_DEFAULT = 10 * INIT_DELAY_DEFAULT; // unit:ms
private static final String CHECKIN_TOPIC = "TDL/+/+/CheckIn";
private MqttTemlateAsync mqttAsyncClient;
private Gson gson = new Gson();
@Autowired
private MqttConfig mqttconfig;
@Autowired
ThreadPoolTaskExecutor configthreadPool;
@Autowired
private ConfigService configService;
Map<String,Future<String>> futureMap = new HashMap<String, Future<String>>();
Map<String,GWConfigWorker> gwconfigworkerMap = new HashMap<String, GWConfigWorker>();
private ScheduledExecutorService mReconnectScheduler;
private long mInitDelay = INIT_DELAY_DEFAULT;
private long mSchedulePeriod = SCH_PERIOD_DEFAULT;
private String listener_topic = CHECKIN_TOPIC;
@PostConstruct
public void initialize() throws MqttException {
try {
mqttAsyncClient = new MqttTemlateAsync(mqttconfig.getUrl() + ":" + mqttconfig.getPort(),
"TDL_CheckIn" + "_" + String.valueOf(System.currentTimeMillis()) + "_sub");
mqttAsyncClient.connect(MqttTemlateAsync.setSSLOptions(mqttconfig.getUsername(), mqttconfig.getPassword(),
mqttconfig.getCacrt(), mqttconfig.getClientcrt(),mqttconfig.getClientkey(), mqttconfig.getClientpwd()), null,
new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
System.out.println("connection successfull ");
try {
mqttAsyncClient.subscribe(listener_topic, mqttconfig.getQos());
} catch (MqttException e) {
System.out.println("Error: " + e.getMessage());
}
}
@Override
public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
System.out.println("connection fail with client id");
}
});
this.mqttAsyncClient.setCallback(this);
} catch (Exception e) {
e.printStackTrace();
}
}
private void clientReconnect() {
if (mReconnectScheduler != null) {
// mReconnectScheduler is running.
return;
}
mReconnectScheduler = Executors.newSingleThreadScheduledExecutor();
mReconnectScheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (mqttAsyncClient != null && !mqttAsyncClient.isConnected()) {
try {
mqttAsyncClient.reconnect();
} catch (MqttSecurityException e) {
// TODO: handle exception
e.printStackTrace();
} catch (MqttException e) {
// TODO: handle exception
e.printStackTrace();
}
} else {
mReconnectScheduler.shutdown();
mReconnectScheduler = null;
}
}
}, mInitDelay, mSchedulePeriod, TimeUnit.MILLISECONDS);
}
@Override
public void connectionLost(Throwable cause) {
System.out.println(cause);
// clientReconnect();
}
private void clearOvertimeConfig(Long ts){
try {
for(String key : gwconfigworkerMap.keySet()){
String[] tmparray = key.split("_");
Long tskey = Long.valueOf(tmparray[2]);
if(ts - tskey > 60*1000){
GWConfigWorker tmpgwconfigworker = gwconfigworkerMap.get(key);
Boolean boo = tmpgwconfigworker.GCConfigClose();
if(boo){
gwconfigworkerMap.remove(key);
}
}
}
}catch (Exception e){
System.out.println(e.getMessage());
}
}
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
String Message = mqttMessage.toString();
clearOvertimeConfig(System.currentTimeMillis());
String[] tmparray = topic.split("/");
String Type = tmparray[1];
String SN = tmparray[2];
if(SN.matches("^[0-9]*$")){
try {
Integer flag = parseData(Message,SN,Type);
String ConfigData;
Future<String> result = null;
GWConfigWorker gcconfig = null;
logger.info(topic+"-----"+ flag);
if(flag == 0){
ConfigCMDVo configCMDVo = new ConfigCMDVo();
configCMDVo.setAction("sleep");
configCMDVo.setT(System.currentTimeMillis()/1000l);
ConfigData = new Gson().toJson(configCMDVo);
gcconfig = new GWConfigWorker(Type,SN,ConfigData, configService,false);
}else if(flag == 2){
ConfigCMDVo configCMDVo = new ConfigCMDVo();
configCMDVo.setAction("end");
configCMDVo.setT(System.currentTimeMillis()/1000l);
ConfigData = new Gson().toJson(configCMDVo);
gcconfig = new GWConfigWorker(Type,SN,ConfigData,configService, true);
}else if(flag == 1){
String message= configService.getConfig(SN,Type).getMessage();
ConfigCMDVo configCMDVo = gson.fromJson(message,ConfigCMDVo.class);
ConfigCMDVo config = new ConfigCMDVo(configCMDVo.getAction(),configCMDVo.getGpsPeriod(),configCMDVo.getGprsPeriod(),configCMDVo.getDevList(),configCMDVo.getMode(),System.currentTimeMillis()/1000l);
gcconfig = new GWConfigWorker(Type,SN,gson.toJson(config),configService,true);
}else if(flag == 3){
String message= configService.getConfig(SN,Type).getMessage();
ConfigCMDVo configCMDVo = gson.fromJson(message,ConfigCMDVo.class);
configCMDVo.setT(System.currentTimeMillis()/1000l);
gcconfig = new GWConfigWorker(Type,SN,gson.toJson(configCMDVo),configService,true);
}
gwconfigworkerMap.put(Type+"_"+SN+"_"+System.currentTimeMillis(),gcconfig);
gcconfig.SetMqttConfig(mqttconfig.getUrl(),mqttconfig.getPort(),
mqttconfig.getUsername(), mqttconfig.getPassword(),mqttconfig.getQos(),
mqttconfig.getCacrt(),mqttconfig.getClientkey(), mqttconfig.getClientcrt(),mqttconfig.getClientpwd());
result = configthreadPool.submit(gcconfig);
} catch (JsonSyntaxException e) {
e.printStackTrace();
System.out.println("mqttAsyncClient: message " + Message + " received syntax error.");
} catch (IllegalStateException e) {
e.printStackTrace();
System.out.println("mqttAsyncClient: " + e);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
}
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
//checkIn数据解析
public Integer parseData(String message,String SN,String Type){
ConfigVo configVo = configService.getConfig(SN,Type);
//网关不存在
if(configVo == null){
return 10;//无返回值
}
CheckInVo checkInVo = new Gson().fromJson(message,CheckInVo.class);
if(configVo.getUntie() && StringUtils.isEmpty(configVo.getMessage()) ){
return 2;//解绑
}
if(StringUtils.isEmpty(configVo.getMessage()) && configVo.getUntie() == false){
return 10;//无返回值
}
JsonObject returnData = new JsonParser().parse(message).getAsJsonObject();
ConfigCMDVo configCMDVo = new Gson().fromJson(configVo.getMessage(),ConfigCMDVo.class);
if(configCMDVo == null){
return 10;//无返回值
}
if(returnData.has("tempL")
&&returnData.has("tempH")
&&returnData.has("humiL")
&&returnData.has("humiH")
&&returnData.has("pressL")
&&returnData.has("pressH")
&&returnData.has("sugEnergy")
&&returnData.has("accThreshold")
&&returnData.has("timeThreshold")
&&returnData.has("tiltThreshold")){
if(checkInVo.getDevList().size()==0 && configCMDVo !=null ){
return 3;//重发
}
if (compare(configCMDVo.getDevList(),checkInVo.getDevList())
&& checkInVo.getGprsPeriod()==configCMDVo.getGprsPeriod()
&& checkInVo.getGpsPeriod()==configCMDVo.getGpsPeriod()
&& checkInVo.getMode()==configCMDVo.getMode()
&& compare(configCMDVo.getTempL(),checkInVo.getTempL())
&& compare(configCMDVo.getTempH(),checkInVo.getTempH())
&& compare(configCMDVo.getHumiL(),checkInVo.getHumiL())
&& compare(configCMDVo.getHumiH(),checkInVo.getHumiH())
&& compare(configCMDVo.getPressH(),checkInVo.getPressH())
&& compare(configCMDVo.getPressL(),checkInVo.getPressL())
&& compare(configCMDVo.getSugEnergy(),checkInVo.getSugEnergy())
&& compare(configCMDVo.getAccThreshold(),checkInVo.getAccThreshold())
&& compare(configCMDVo.getTimeThreshold(),checkInVo.getTimeThreshold())
&& compare(configCMDVo.getTiltThreshold(),checkInVo.getTiltThreshold())) {
//一致
return 0;//休眠
} else {
//不一致
return 3;//重发
}
}else{
if(checkInVo.getDevList().size()==0 && configCMDVo !=null ){
return 1;//重发
}
//判断两者的devList是否一致
if (compare(configCMDVo.getDevList(),checkInVo.getDevList())
&& checkInVo.getGprsPeriod()==(configCMDVo.getGprsPeriod())
&& checkInVo.getGpsPeriod()==(configCMDVo.getGpsPeriod())
&& checkInVo.getMode()==(configCMDVo.getMode())) {
//一致
return 0;//休眠
} else {
//不一致
return 1;//重发
}
}
}
//判断两个list是否一致
public synchronized <T extends Comparable<T>> boolean compare(List<T> a, List<T> b) {
if (a.size() != b.size()){
return false;
}
for (int i = 0; i < a.size(); i++) {
if (!a.get(i).equals(b.get(i)))
return false;
}
return true;
}
}
\ No newline at end of file
...@@ -390,7 +390,7 @@ public class AliyunOSSClientUtil { ...@@ -390,7 +390,7 @@ public class AliyunOSSClientUtil {
putResult = ossClient.putObject(BACKET_NAME, FOLDER3+ fileName, is, metadata); putResult = ossClient.putObject(BACKET_NAME, FOLDER3+ fileName, is, metadata);
} else if(fileName.contains("CHN")){ } else if(fileName.contains("CHN")){
putResult = ossClient.putObject(BACKET_NAME, FOLDER6+ fileName, is, metadata); putResult = ossClient.putObject(BACKET_NAME, FOLDER6+ fileName, is, metadata);
} else if(fileName.contains("仓库温湿度观测记录") || fileName.contains("Warehouse temperature and humidity historic data")|| fileName.contains("倉庫の温度および湿度の観測記録")){ } else if(fileName.contains("仓库温湿度观测记录") || fileName.contains("WarehouseData")|| fileName.contains("倉庫の温度および湿度の観測記録")){
putResult = ossClient.putObject(BACKET_NAME, FOLDER5+ fileName, is, metadata); putResult = ossClient.putObject(BACKET_NAME, FOLDER5+ fileName, is, metadata);
} else if(fileName.contains("报警日志数据")){ } else if(fileName.contains("报警日志数据")){
putResult = ossClient.putObject(BACKET_NAME, FOLDER7+ fileName, is, metadata); putResult = ossClient.putObject(BACKET_NAME, FOLDER7+ fileName, is, metadata);
......
...@@ -568,7 +568,7 @@ public class DataController { ...@@ -568,7 +568,7 @@ public class DataController {
@ApiImplicitParam(paramType = "header", name = "Account_token", value = "token", required = true, dataType = "String"), @ApiImplicitParam(paramType = "header", name = "Account_token", value = "token", required = true, dataType = "String"),
@ApiImplicitParam(paramType = "header", name = "AccountLanguage", value = "language", required = true, dataType = "String"), @ApiImplicitParam(paramType = "header", name = "AccountLanguage", value = "language", required = true, dataType = "String"),
}) })
public String downLoadfForABB(@RequestBody TransportationNoVo transportationNo, HttpServletRequest request){ public String downLoadfForABB(@RequestBody TransportationNoVo transportationNo, HttpServletRequest request){
UserRedisVo user = gson.fromJson(tokenRedisService.get("TOKEN_" + request.getHeader("Account_token")), UserRedisVo.class); UserRedisVo user = gson.fromJson(tokenRedisService.get("TOKEN_" + request.getHeader("Account_token")), UserRedisVo.class);
ResultCircuitVo resultCircuitVo = circuitService.getByTransportationNo(transportationNo.getTransportationNo(), user.getCompanyNo()); ResultCircuitVo resultCircuitVo = circuitService.getByTransportationNo(transportationNo.getTransportationNo(), user.getCompanyNo());
if (resultCircuitVo == null) { if (resultCircuitVo == null) {
...@@ -649,7 +649,11 @@ public class DataController { ...@@ -649,7 +649,11 @@ public class DataController {
} }
QueryResult queryResult = influxDBTemplate.query(new Query(sqls, database)); QueryResult queryResult = influxDBTemplate.query(new Query(sqls, database));
File[] srcFiles = new File[devList.size()]; File[] srcFiles = new File[devList.size()];
File zipFile = new File("./export/" +transportationNo.getTransportationNo()+i18n.getMessage(request,"data")+".zip"); File myPath = new File( "./export/" );
if ( !myPath.exists()){//若此目录不存在,则创建之
myPath.mkdir();
}
File zipFile = new File("./export/" +transportationNo.getTransportationNo()+"_"+gatewayVo.getgSN()+i18n.getMessage(request,"data")+".zip");
if (queryResult.getResults().get(0).getSeries().get(0) != null) { if (queryResult.getResults().get(0).getSeries().get(0) != null) {
for(int i = 0;i<devList.size();i++){ for(int i = 0;i<devList.size();i++){
String address = "./export/"; String address = "./export/";
...@@ -692,7 +696,7 @@ public class DataController { ...@@ -692,7 +696,7 @@ public class DataController {
} }
zipFile.delete(); zipFile.delete();
fb.setCode(1); fb.setCode(1);
fb.setMessage("https://tdlcloud.oss-cn-shanghai.aliyuncs.com/circuit/"+transportationNo.getTransportationNo()+i18n.getMessage(request,"data")+".zip"); fb.setMessage("https://tdlcloud.oss-cn-shanghai.aliyuncs.com/circuit/"+transportationNo.getTransportationNo() + "_" +gatewayVo.getgSN() +i18n.getMessage(request,"data")+".zip");
return gson.toJson(fb); return gson.toJson(fb);
} else { } else {
fb.setCode(0); fb.setCode(0);
......
...@@ -122,6 +122,10 @@ public class DownloadController { ...@@ -122,6 +122,10 @@ public class DownloadController {
continue; continue;
} }
String fileName =downloadForWarehouseVo.getWarehouseNo() + i18n.getMessage(request, "warehousedata")+"-"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN(); String fileName =downloadForWarehouseVo.getWarehouseNo() + i18n.getMessage(request, "warehousedata")+"-"+resultWarehouseNoAndTDLSNAndTimeVo.getTDLSN();
File myPath = new File( "./export/" );
if ( !myPath.exists()){//若此目录不存在,则创建之
myPath.mkdir();
}
srcFiles[a] = new File("./export/"+fileName+".xls") ; srcFiles[a] = new File("./export/"+fileName+".xls") ;
List<DownloadWarehouseVo> downloadWarehouseVos = getWarehouseData(queryResults,downloadForWarehouseVo.getOffset()); List<DownloadWarehouseVo> downloadWarehouseVos = getWarehouseData(queryResults,downloadForWarehouseVo.getOffset());
for (int i = 0; i < downloadWarehouseVos.size(); i++) { for (int i = 0; i < downloadWarehouseVos.size(); i++) {
...@@ -150,7 +154,7 @@ public class DownloadController { ...@@ -150,7 +154,7 @@ public class DownloadController {
e.printStackTrace(); e.printStackTrace();
logger.info(e.toString()); logger.info(e.toString());
fb.setCode(0); fb.setCode(0);
fb.setMessage(i18n.getMessage(request,"fileUpload")); fb.setMessage(i18n.getMessage(request,"downloadfail"));
return gson.toJson(fb); return gson.toJson(fb);
} }
} }
......
...@@ -988,19 +988,17 @@ public class WarehouseController { ...@@ -988,19 +988,17 @@ public class WarehouseController {
@ApiImplicitParam(paramType="header", name = "Account_token", value = "token", required = true, dataType = "String"), @ApiImplicitParam(paramType="header", name = "Account_token", value = "token", required = true, dataType = "String"),
}) })
@PostMapping("/getWarehouseData") @PostMapping("/getWarehouseData")
public Object getWarehouseData(@RequestBody String warehouseNo,HttpServletRequest request){ public Object getWarehouseData(@RequestBody WarehouseVo warehouseVo,HttpServletRequest request){
String token = request.getHeader("Account_token"); String token = request.getHeader("Account_token");
String datum = tokenRedisService.get("TOKEN_" +token); String datum = tokenRedisService.get("TOKEN_" +token);
UserRedisVo user = gson.fromJson(datum,UserRedisVo.class); UserRedisVo user = gson.fromJson(datum,UserRedisVo.class);
JSONObject jsonObject=JSON.parseObject(warehouseNo); if(warehouseService.getWarehouseNo(warehouseVo.getWarehouseNo(),user.getCompanyNo()) ==0){
warehouseNo=(String) jsonObject.get("warehouseNo");
if(warehouseService.getWarehouseNo(warehouseNo,user.getCompanyNo()) ==0){
fb.setCode(0); fb.setCode(0);
fb.setMessage(i18n.getMessage(request,"Nonexistent")); fb.setMessage(i18n.getMessage(request,"Nonexistent"));
return gson.toJson(fb); return gson.toJson(fb);
} }
List<WarehouseGatewayDateVo> warehouseGatewayDateVoList=new ArrayList<>(); List<WarehouseGatewayDateVo> warehouseGatewayDateVoList=new ArrayList<>();
List<GatewayOnLineVo> gatewayOnLineVos=gatewayService.getByWarehouseNo(warehouseNo); List<GatewayOnLineVo> gatewayOnLineVos=gatewayService.getByWarehouseNo(warehouseVo.getWarehouseNo());
for (int a=0;a<gatewayOnLineVos.size();a++){ for (int a=0;a<gatewayOnLineVos.size();a++){
if(gatewayOnLineVos.get(a) == null){ if(gatewayOnLineVos.get(a) == null){
continue; continue;
...@@ -1035,15 +1033,13 @@ public class WarehouseController { ...@@ -1035,15 +1033,13 @@ public class WarehouseController {
List<WarehouseDataVo> warehouseDataVos=new ArrayList<>(); List<WarehouseDataVo> warehouseDataVos=new ArrayList<>();
for (int b=0;b<tdls.size();b++){ for (int b=0;b<tdls.size();b++){
List<WarehouseTDLDetailVo> warehouseTDLDetailVos=new ArrayList<>(); List<WarehouseTDLDetailVo> warehouseTDLDetailVos=new ArrayList<>();
List<WarehouseTimeAndDataVo> warehouseTimeAndDataVos = new ArrayList<>();
List<WarehouseTimeAndDataVo> warehouseTimeAndDataVos1 = new ArrayList<>();
WarehouseDataVo warehouseDataVo=new WarehouseDataVo(); WarehouseDataVo warehouseDataVo=new WarehouseDataVo();
warehouseDataVo.setTDLSN(tdls.get(b).replace("TDL-","").trim()); warehouseDataVo.setTDLSN(tdls.get(b).replace("TDL-","").trim());
String sqls ="SELECT \"tdl\",\"b\",\"T\",\"h\" FROM \"tdl_policy\".\""+device+"\" WHERE \"tdl\" = '"+tdls.get(b)+"' AND time >="+ gatewayOnLineVos.get(a).getStartTime()*1000000l+" ORDER BY time desc limit 1 "; String sqls ="SELECT \"tdl\",\"b\",\"T\",\"h\" FROM \"tdl_policy\".\""+device+"\" WHERE \"tdl\" = '"+tdls.get(b)+"' AND time >="+ gatewayOnLineVos.get(a).getStartTime()*1000000l+" ORDER BY time desc limit 1 ";
QueryResult queryResults = influxDBTemplate.query(new Query(sqls, database)); QueryResult queryResults = influxDBTemplate.query(new Query(sqls, database));
ResultAlarmVo resultAlarmVo=alarmService.getAlarmByWarehouseNo(warehouseNo,gatewayOnLineVos.get(a).getgSN(),tdls.get(b).replace("TDL-","").trim()); ResultAlarmVo resultAlarmVo=alarmService.getAlarmByWarehouseNo(warehouseVo.getWarehouseNo(),gatewayOnLineVos.get(a).getgSN(),tdls.get(b).replace("TDL-","").trim());
if (queryResults.getResults().get(0).getSeries() != null) { if (queryResults.getResults().get(0).getSeries() != null) {
warehouseDataVo.setTime(parseTime(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(0).toString())); warehouseDataVo.setTime(UTCToCST(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(0).toString(),warehouseVo.getOffset()==null ? "+8" : warehouseVo.getOffset()));
warehouseDataVo.setBatteryVoltage(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(2).toString()); warehouseDataVo.setBatteryVoltage(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(2).toString());
warehouseDataVo.setTemperature(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(3).toString()); warehouseDataVo.setTemperature(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(3).toString());
warehouseDataVo.setHumidity(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(4).toString()); warehouseDataVo.setHumidity(queryResults.getResults().get(0).getSeries().get(0).getValues().get(0).get(4).toString());
...@@ -1053,25 +1049,27 @@ public class WarehouseController { ...@@ -1053,25 +1049,27 @@ public class WarehouseController {
warehouseDataVo.setTemperature("NA"); warehouseDataVo.setTemperature("NA");
warehouseDataVo.setHumidity("NA"); warehouseDataVo.setHumidity("NA");
} }
String sql3 ="SELECT \"tdl\",\"b\",\"T\",\"h\" FROM \"tdl_policy\".\""+device+"\" WHERE \"tdl\" = '"+tdls.get(b)+"' AND time >="+ gatewayOnLineVos.get(a).getStartTime()*1000000l+" ORDER BY time "; String sql3 ="SELECT \"tdl\",\"T\",\"h\" FROM \"tdl_policy\".\""+device+"\" WHERE \"tdl\" = '"+tdls.get(b)+"' AND time >="+ gatewayOnLineVos.get(a).getStartTime()*1000000l+" ORDER BY time ";
QueryResult queryResult3 = influxDBTemplate.query(new Query(sql3, database)); QueryResult queryResult3 = influxDBTemplate.query(new Query(sql3, database));
if(queryResult3.getResults().get(0).getSeries() != null){ if(queryResult3.getResults().get(0).getSeries() != null){
warehouseTDLDetailVos = getWarehouseData(queryResult3,warehouseVo.getOffset()==null ? "+8" : warehouseVo.getOffset(),resultAlarmVo,warehouseDataVo);
//解析数据 //解析数据
WarehouseTDLDetailVo warehouseTDLDetailVo=new WarehouseTDLDetailVo(); // WarehouseTDLDetailVo warehouseTDLDetailVo=new WarehouseTDLDetailVo();
warehouseTimeAndDataVos = getData(queryResult3); // warehouseTimeAndDataVos = getData(queryResult3,warehouseVo.getOffset()==null ? "+8" : warehouseVo.getOffset());
warehouseTDLDetailVo.setDescription("temperature"); // warehouseTDLDetailVo.setDescription("temperature");
warehouseTDLDetailVo.setTimeAndValuesVos(warehouseTimeAndDataVos); // warehouseTDLDetailVo.setTimeAndValuesVos(warehouseTimeAndDataVos);
warehouseTDLDetailVo.setMax(resultAlarmVo.getTemMax()); // warehouseTDLDetailVo.setMax(resultAlarmVo.getTemMax());
warehouseTDLDetailVo.setMin(resultAlarmVo.getTemMin()); // warehouseTDLDetailVo.setMin(resultAlarmVo.getTemMin());
warehouseTDLDetailVos.add(warehouseTDLDetailVo); // warehouseTDLDetailVos.add(warehouseTDLDetailVo);
//
WarehouseTDLDetailVo warehouseTDLDetailVo1=new WarehouseTDLDetailVo(); // WarehouseTDLDetailVo warehouseTDLDetailVo1=new WarehouseTDLDetailVo();
warehouseTimeAndDataVos1 = getDatas(queryResult3); // warehouseTimeAndDataVos1 = getDatas(queryResult3,warehouseVo.getOffset()==null ? "+8" : warehouseVo.getOffset());
warehouseTDLDetailVo1.setDescription("humidity"); // warehouseTDLDetailVo1.setDescription("humidity");
warehouseTDLDetailVo1.setTimeAndValuesVos(warehouseTimeAndDataVos1); // warehouseTDLDetailVo1.setTimeAndValuesVos(warehouseTimeAndDataVos1);
warehouseTDLDetailVo1.setMax(resultAlarmVo.getHumidityMax()); // warehouseTDLDetailVo1.setMax(resultAlarmVo.getHumidityMax());
warehouseTDLDetailVo1.setMin(resultAlarmVo.getHumidityMin()); // warehouseTDLDetailVo1.setMin(resultAlarmVo.getHumidityMin());
warehouseTDLDetailVos.add(warehouseTDLDetailVo1); // warehouseTDLDetailVos.add(warehouseTDLDetailVo1);
} }
warehouseDataVo.setWarehouseTDLDetailVos(warehouseTDLDetailVos); warehouseDataVo.setWarehouseTDLDetailVos(warehouseTDLDetailVos);
warehouseDataVos.add(warehouseDataVo); warehouseDataVos.add(warehouseDataVo);
...@@ -1200,13 +1198,50 @@ public class WarehouseController { ...@@ -1200,13 +1198,50 @@ public class WarehouseController {
return warehouseNo; return warehouseNo;
} }
public List<WarehouseTDLDetailVo> getWarehouseData(QueryResult queryResult,String offset,ResultAlarmVo resultAlarmVo,WarehouseDataVo warehouseDataVo){
List<WarehouseTDLDetailVo> warehouseTDLDetailVoList=new ArrayList<>();
List<List<Object>> values = getValues(queryResult);
List<WarehouseTimeAndDataVo> historyDataList = new ArrayList<>();
List<WarehouseTimeAndDataVo> historyDataLists = new ArrayList<>();
for(List<Object> value:values){
String time = UTCToCST(value.get(0).toString(),offset);
WarehouseTimeAndDataVo warehouseTimeAndDataVo = new WarehouseTimeAndDataVo();
warehouseTimeAndDataVo.setTime(time);
warehouseTimeAndDataVo.setValue(value.get(3)==null ? "" :value.get(3).toString());
historyDataList.add(warehouseTimeAndDataVo);
WarehouseTimeAndDataVo warehouseTimeAndDataVos = new WarehouseTimeAndDataVo();
warehouseTimeAndDataVos.setTime(time);
warehouseTimeAndDataVos.setValue(value.get(2)==null ? "" :value.get(3).toString());
historyDataLists.add(warehouseTimeAndDataVos);
}
if(!warehouseDataVo.getTemperature().equals("NA")){
historyDataLists.add(new WarehouseTimeAndDataVo(warehouseDataVo.getTime(),warehouseDataVo.getTemperature()));
historyDataList.add(new WarehouseTimeAndDataVo(warehouseDataVo.getTime(),warehouseDataVo.getHumidity()));
}
WarehouseTDLDetailVo warehouseTDLDetailVo=new WarehouseTDLDetailVo();
warehouseTDLDetailVo.setDescription("temperature");
warehouseTDLDetailVo.setTimeAndValuesVos(historyDataList);
warehouseTDLDetailVo.setMax(resultAlarmVo.getTemMax());
warehouseTDLDetailVo.setMin(resultAlarmVo.getTemMin());
warehouseTDLDetailVoList.add(warehouseTDLDetailVo);
WarehouseTDLDetailVo warehouseTDLDetailVos=new WarehouseTDLDetailVo();
warehouseTDLDetailVos.setDescription("humidity");
warehouseTDLDetailVos.setTimeAndValuesVos(historyDataList);
warehouseTDLDetailVos.setMax(resultAlarmVo.getTemMax());
warehouseTDLDetailVos.setMin(resultAlarmVo.getTemMin());
warehouseTDLDetailVoList.add(warehouseTDLDetailVos);
return warehouseTDLDetailVoList;
}
public List<WarehouseTimeAndDataVo> getData(QueryResult queryResult){
public List<WarehouseTimeAndDataVo> getData(QueryResult queryResult,String offset){
List<List<Object>> values = getValues(queryResult); List<List<Object>> values = getValues(queryResult);
List<WarehouseTimeAndDataVo> historyDataList = new ArrayList<>(); List<WarehouseTimeAndDataVo> historyDataList = new ArrayList<>();
for(List<Object> value:values){ for(List<Object> value:values){
WarehouseTimeAndDataVo warehouseTimeAndDataVo = new WarehouseTimeAndDataVo(); WarehouseTimeAndDataVo warehouseTimeAndDataVo = new WarehouseTimeAndDataVo();
warehouseTimeAndDataVo.setTime(parseTime(value.get(0).toString())); warehouseTimeAndDataVo.setTime(UTCToCST(value.get(0).toString(),offset));
warehouseTimeAndDataVo.setValue(value.get(3)==null ? "" :value.get(3).toString()); warehouseTimeAndDataVo.setValue(value.get(3)==null ? "" :value.get(3).toString());
historyDataList.add(warehouseTimeAndDataVo); historyDataList.add(warehouseTimeAndDataVo);
} }
...@@ -1215,21 +1250,19 @@ public class WarehouseController { ...@@ -1215,21 +1250,19 @@ public class WarehouseController {
public List<WarehouseTimeAndDataVo> getDatas(QueryResult queryResult){ public List<WarehouseTimeAndDataVo> getDatas(QueryResult queryResult,String offset){
List<List<Object>> values = getValues(queryResult); List<List<Object>> values = getValues(queryResult);
List<WarehouseTimeAndDataVo> historyDataList = new ArrayList<>(); List<WarehouseTimeAndDataVo> historyDataList = new ArrayList<>();
for(List<Object> value:values){ for(List<Object> value:values){
WarehouseTimeAndDataVo warehouseTimeAndDataVo = new WarehouseTimeAndDataVo(); WarehouseTimeAndDataVo warehouseTimeAndDataVo = new WarehouseTimeAndDataVo();
warehouseTimeAndDataVo.setTime(parseTime(value.get(0).toString())); warehouseTimeAndDataVo.setTime(UTCToCST(value.get(0).toString(),offset));
warehouseTimeAndDataVo.setValue(value.get(4)==null ? "" :value.get(4).toString()); warehouseTimeAndDataVo.setValue(value.get(4)==null ? "" :value.get(4).toString());
historyDataList.add(warehouseTimeAndDataVo); historyDataList.add(warehouseTimeAndDataVo);
} }
return historyDataList; return historyDataList;
} }
//解析数据格式
//解析数据格式
public List<List<Object>> getValues( QueryResult queryResult){ public List<List<Object>> getValues( QueryResult queryResult){
List<List<Object>> values = new ArrayList<>(); List<List<Object>> values = new ArrayList<>();
for(QueryResult.Result result : queryResult.getResults()){ for(QueryResult.Result result : queryResult.getResults()){
...@@ -1392,6 +1425,22 @@ public class WarehouseController { ...@@ -1392,6 +1425,22 @@ public class WarehouseController {
return tdlDataVo; return tdlDataVo;
} }
public static String UTCToCST(String UTCStr,String offset) {
Date date = null;
try {
if (UTCStr.length() != 20) {
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(UTCStr);
} else {
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(UTCStr);
}
} catch (Exception e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) +Integer.valueOf(offset));
return String.valueOf(calendar.getTimeInMillis());
}
public String UTCToCST(String UTCStr) { public String UTCToCST(String UTCStr) {
......
#spring.datasource.url=jdbc:mysql://47.97.184.225:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false #spring.datasource.url=jdbc:mysql://47.97.184.225:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
#spring.datasource.url=jdbc:mysql://47.110.153.44:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.url=jdbc:mysql://47.110.153.44:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.url=jdbc:mysql://172.16.1.13:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false #spring.datasource.url=jdbc:mysql://172.16.1.13:3306/tdlcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=37774020 spring.datasource.password=37774020
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.driver-class-name=com.mysql.jdbc.Driver
...@@ -41,7 +41,7 @@ logging.config=classpath:logback.xml ...@@ -41,7 +41,7 @@ logging.config=classpath:logback.xml
# Mqtt # Mqtt
tdl.mqtt.url = ssl://172.16.1.11 tdl.mqtt.url = ssl://172.16.1.24
tdl.mqtt.port = 8883 tdl.mqtt.port = 8883
tdl.mqtt.username = ugen tdl.mqtt.username = ugen
tdl.mqtt.password = ugen tdl.mqtt.password = ugen
...@@ -58,8 +58,8 @@ tdl.mqtt.clientpwd = ...@@ -58,8 +58,8 @@ tdl.mqtt.clientpwd =
spring.influxdb.username=admin spring.influxdb.username=admin
spring.influxdb.password=37774020 spring.influxdb.password=37774020
#spring.influxdb.url=http://47.97.184.225:8086 #spring.influxdb.url=http://47.97.184.225:8086
#spring.influxdb.url=http://47.110.153.44:8086 spring.influxdb.url=http://47.110.153.44:8086
spring.influxdb.url=http://172.16.1.24:8086 #spring.influxdb.url=http://172.16.1.24:8086
spring.influxdb.database=original spring.influxdb.database=original
spring.influxdb.retentionPolicy = tdl_policy spring.influxdb.retentionPolicy = tdl_policy
spring.influxdb.connent-timeout=10 spring.influxdb.connent-timeout=10
......
...@@ -276,8 +276,8 @@ wrongThemeColors=The format of the theme color is incorrect ...@@ -276,8 +276,8 @@ wrongThemeColors=The format of the theme color is incorrect
comPictureDimension=Width*Height150*200 comPictureDimension=Width*Height150*200
warePictureDimension=Width*Height150*120 warePictureDimension=Width*Height150*120
truckPictureDimension=Width*Height90*60 truckPictureDimension=Width*Height90*60
data=Transport data data=TransportData
warehousedata=Warehouse temperature and humidity historic data warehousedata=WarehouseData
temMaxLimit=The upper temperature limit is 85\u2103 temMaxLimit=The upper temperature limit is 85\u2103
temMinLimit=The lower temperature limit is -25\u2103 temMinLimit=The lower temperature limit is -25\u2103
humidityMaxLimit=The upper humidity limit is 100% humidityMaxLimit=The upper humidity limit is 100%
...@@ -379,4 +379,6 @@ SensorAssignment=Sensor Assignment ...@@ -379,4 +379,6 @@ SensorAssignment=Sensor Assignment
AlarmAnalysis=Alarm Analysis AlarmAnalysis=Alarm Analysis
AlarmAnalysisDetail=Alarm Analysis Detail AlarmAnalysisDetail=Alarm Analysis Detail
AlarmAnalysisQuery=Alarm Analysis Query AlarmAnalysisQuery=Alarm Analysis Query
usedgateway=The gateway has been used. usedgateway=The gateway has been used.
\ No newline at end of file fileUpload=File upload failed
downloadfail=File download failed
\ No newline at end of file
...@@ -199,6 +199,9 @@ humidityMaxLimit=\u6E7F\u5EA6\u306E\u4E0A\u9650\u306F100\uFF05\u3092\u8D85\u3048 ...@@ -199,6 +199,9 @@ humidityMaxLimit=\u6E7F\u5EA6\u306E\u4E0A\u9650\u306F100\uFF05\u3092\u8D85\u3048
temMinLimit=\u4E0B\u9650\u6E29\u5EA6\u306F-25\u2103\u4EE5\u4E0B\u306B\u3067\u304D\u307E\u305B\u3093 temMinLimit=\u4E0B\u9650\u6E29\u5EA6\u306F-25\u2103\u4EE5\u4E0B\u306B\u3067\u304D\u307E\u305B\u3093
temMaxLimit=\u4E0A\u9650\u6E29\u5EA6\u306F85\u2103\u3092\u8D85\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093 temMaxLimit=\u4E0A\u9650\u6E29\u5EA6\u306F85\u2103\u3092\u8D85\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
fileUpload=\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u5931\u6557\u3059\u308B
downloadfail=\u30D5\u30A1\u30A4\u30EB\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u5931\u6557
DataOverview=Data Overview DataOverview=Data Overview
TransportationState=Transportation State TransportationState=Transportation State
WarehouseStatus=Warehouse Status WarehouseStatus=Warehouse Status
...@@ -220,3 +223,5 @@ RegionManagement=Region Management ...@@ -220,3 +223,5 @@ RegionManagement=Region Management
VehicleManagement=Vehicle Management VehicleManagement=Vehicle Management
GatewayManagement=Gateway Management GatewayManagement=Gateway Management
SensorManagement=Sensor Management SensorManagement=Sensor Management
...@@ -412,4 +412,6 @@ AlarmAnalysis=\u62A5\u8B66\u5206\u6790 ...@@ -412,4 +412,6 @@ AlarmAnalysis=\u62A5\u8B66\u5206\u6790
AlarmAnalysisQuery=\u62A5\u8B66\u5206\u6790\u67E5\u8BE2 AlarmAnalysisQuery=\u62A5\u8B66\u5206\u6790\u67E5\u8BE2
AlarmAnalysisDetail=\u62A5\u8B66\u5206\u6790\u8BE6\u60C5 AlarmAnalysisDetail=\u62A5\u8B66\u5206\u6790\u8BE6\u60C5
downloadfail = \u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment