便携式设备目录查看
This commit is contained in:
@@ -5,15 +5,19 @@ import com.njcn.common.pojo.enums.common.LogEnum;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.response.HttpResult;
|
||||
import com.njcn.common.utils.HttpResultUtil;
|
||||
import com.njcn.csharmonic.pojo.vo.MakeUpVo;
|
||||
import com.njcn.csharmonic.service.OfflineDataUploadService;
|
||||
import com.njcn.web.controller.BaseController;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -41,4 +45,29 @@ public class OfflineDataUploadController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping(value = "/makeUpData")
|
||||
@ApiOperation("补招数据-界面")
|
||||
@ApiImplicitParam(name = "lineId", value = "监测点id", required = true)
|
||||
public HttpResult<List<MakeUpVo>> makeUpData(@RequestParam("lineId") String lineId){
|
||||
String methodDescribe = getMethodDescribe("makeUpData");
|
||||
List<MakeUpVo> list = offlineDataUploadService.getMakeUpData(lineId);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping(value = "/askDirOrFile")
|
||||
@ApiOperation("询问装置目录/文件")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "nDid", value = "装置nDid", required = true, paramType = "query"),
|
||||
@ApiImplicitParam(name = "prjName", value = "项目名称", required = true, paramType = "query"),
|
||||
@ApiImplicitParam(name = "path", value = "文件路径/文件名", required = true, paramType = "query"),
|
||||
@ApiImplicitParam(name = "fileType", value = "文件类型", required = true, paramType = "query")
|
||||
})
|
||||
public HttpResult<List<MakeUpVo>> askDirOrFile(@RequestParam("nDid") String nDid, @RequestParam("prjName") String prjName, @RequestParam("path") String path, @RequestParam("fileType") String fileType) {
|
||||
String methodDescribe = getMethodDescribe("askDirOrFile");
|
||||
List<MakeUpVo> list = offlineDataUploadService.askDirOrFile(nDid,prjName,path,fileType);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.njcn.csharmonic.service;
|
||||
|
||||
import com.njcn.csharmonic.pojo.vo.MakeUpVo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -15,4 +17,19 @@ public interface OfflineDataUploadService {
|
||||
|
||||
byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception;
|
||||
|
||||
/**
|
||||
* 传递监测点id,获取装置中的项目信息
|
||||
* @param lineId
|
||||
* @return
|
||||
*/
|
||||
List<MakeUpVo> getMakeUpData(String lineId);
|
||||
|
||||
/**
|
||||
* 传递监测点id,获取装置中的项目信息
|
||||
* @param nDid 装置nDid
|
||||
* @param path 文件夹路径/文件名称
|
||||
* @return
|
||||
*/
|
||||
List<MakeUpVo> askDirOrFile(String nDid, String prjName, String path, String fileType);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
package com.njcn.csharmonic.service.impl;
|
||||
|
||||
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
||||
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
|
||||
import com.njcn.access.api.CsTopicFeignClient;
|
||||
import com.njcn.access.enums.AccessEnum;
|
||||
import com.njcn.access.enums.TypeEnum;
|
||||
import com.njcn.access.pojo.RspDataDto;
|
||||
import com.njcn.access.pojo.dto.CsModelDto;
|
||||
import com.njcn.access.pojo.dto.ReqAndResDto;
|
||||
import com.njcn.access.pojo.dto.file.FileDto;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.csharmonic.offline.constant.OfflineConstant;
|
||||
import com.njcn.csharmonic.offline.log.Log;
|
||||
@@ -7,16 +16,32 @@ import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer;
|
||||
import com.njcn.csharmonic.offline.mincfg.AnalyseComtradeCfg;
|
||||
import com.njcn.csharmonic.offline.mincfg.tagComtradeCfg;
|
||||
import com.njcn.csharmonic.offline.vo.Response;
|
||||
import com.njcn.csharmonic.pojo.dto.MakeUpDto;
|
||||
import com.njcn.csharmonic.pojo.vo.MakeUpVo;
|
||||
import com.njcn.csharmonic.service.OfflineDataUploadService;
|
||||
import com.njcn.influx.pojo.po.cs.PqdData;
|
||||
import com.njcn.redis.pojo.enums.AppRedisKey;
|
||||
import com.njcn.redis.utils.RedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.njcn.access.enums.TypeEnum.DATA_48;
|
||||
|
||||
/**
|
||||
* 类的介绍:离线数据上传解析服务实现类
|
||||
@@ -27,8 +52,14 @@ import java.util.List;
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
|
||||
|
||||
private final MqttPublisher publisher;
|
||||
|
||||
private final CsTopicFeignClient csTopicFeignClient;
|
||||
private final RedisUtil redisUtil;
|
||||
|
||||
@Override
|
||||
public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{
|
||||
byte[] bytes = null;
|
||||
@@ -87,4 +118,147 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MakeUpVo> getMakeUpData(String lineId) {
|
||||
List<MakeUpVo> result = new ArrayList<>();
|
||||
try {
|
||||
//询问装置项目信息
|
||||
askProjectInfo(lineId,null, Integer.parseInt(TypeEnum.TYPE_6.getCode()),null,"DevCmd");
|
||||
Thread.sleep(2000);
|
||||
String key = AppRedisKey.PROJECT_INFO + lineId;
|
||||
Object object = redisUtil.getObjectByKey(key);
|
||||
if (!Objects.isNull(object)) {
|
||||
// 创建 DateTimeFormatter 对象并指定格式
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
List<RspDataDto.ProjectInfo> projectInfoList = objectToList(redisUtil.getObjectByKey(key),RspDataDto.ProjectInfo.class);
|
||||
projectInfoList.forEach(item->{
|
||||
MakeUpVo vo = new MakeUpVo();
|
||||
vo.setType("dir");
|
||||
BeanUtils.copyProperties(item,vo);
|
||||
long startTime = item.getPrjTimeStart();
|
||||
if (startTime != 0) {
|
||||
LocalDateTime dateTime = Instant.ofEpochMilli(startTime*1000).atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
String formattedDate = dateTime.format(formatter);
|
||||
vo.setStartTime(formattedDate);
|
||||
}
|
||||
long endTime = item.getPrjTimeEnd();
|
||||
if (endTime != 0) {
|
||||
LocalDateTime dateTime = Instant.ofEpochMilli(endTime*1000).atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
String formattedDate = dateTime.format(formatter);
|
||||
vo.setEndTime(formattedDate);
|
||||
}
|
||||
result.add(vo);
|
||||
});
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MakeUpVo> askDirOrFile(String nDid, String prjName, String path, String fileType) {
|
||||
List<MakeUpVo> result = new ArrayList<>();
|
||||
try {
|
||||
//判断文件类型
|
||||
//文件夹
|
||||
if (Objects.equals("dir",fileType)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
askProjectInfo(null,nDid, Integer.parseInt(TypeEnum.TYPE_8.getCode()),path,"DevFileCmd");
|
||||
Thread.sleep(2000);
|
||||
String key = AppRedisKey.PROJECT_INFO + nDid;
|
||||
Object object = redisUtil.getObjectByKey(key);
|
||||
if (!Objects.isNull(object)) {
|
||||
List<FileDto.DirInfo> projectInfoList = objectToList(redisUtil.getObjectByKey(key),FileDto.DirInfo.class);
|
||||
projectInfoList.forEach(item->{
|
||||
MakeUpVo vo = new MakeUpVo();
|
||||
vo.setPrjName(prjName);
|
||||
vo.setPrjDataPath(item.getName());
|
||||
vo.setType(item.getType());
|
||||
vo.setSize(item.getSize());
|
||||
if (item.getTime() != 0) {
|
||||
LocalDateTime dateTime = Instant.ofEpochMilli(item.getTime()*1000).atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
String formattedDate = dateTime.format(formatter);
|
||||
vo.setStartTime(formattedDate);
|
||||
}
|
||||
result.add(vo);
|
||||
});
|
||||
}
|
||||
}
|
||||
//文件
|
||||
else {
|
||||
System.out.println("file");
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 询问装置项目信息报文
|
||||
*/
|
||||
public void askProjectInfo(String lineId, String nDid, Integer type, String path, String topic) {
|
||||
if (StringUtils.isNotBlank(lineId)) {
|
||||
nDid = lineId.substring(0, lineId.length() - 1);
|
||||
}
|
||||
String version = csTopicFeignClient.find(nDid).getData();
|
||||
ReqAndResDto.Req reqAndResParam = createRequestParameters(lineId, type, path);
|
||||
publisher.send("/Pfm/"+topic+"/" + version + "/" + nDid, new Gson().toJson(reqAndResParam), 1, false);
|
||||
}
|
||||
|
||||
private ReqAndResDto.Req createRequestParameters(String lineId, Integer type, String path) {
|
||||
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
|
||||
reqAndResParam.setMid(1);
|
||||
reqAndResParam.setDid(1);
|
||||
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
||||
reqAndResParam.setExpire(-1);
|
||||
switch (type) {
|
||||
case 8454:
|
||||
handleType8454(reqAndResParam, lineId);
|
||||
break;
|
||||
case 8497:
|
||||
handleType8497(reqAndResParam, path);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return reqAndResParam;
|
||||
}
|
||||
|
||||
private void handleType8454(ReqAndResDto.Req reqAndResParam, String lineId) {
|
||||
if (StringUtils.isNotBlank(lineId)) {
|
||||
int length = StringUtils.length(lineId);
|
||||
Integer clDid = Integer.parseInt(lineId.substring(length - 1));
|
||||
reqAndResParam.setType(8454);
|
||||
MakeUpDto makeUpDto = new MakeUpDto();
|
||||
makeUpDto.setClDid(clDid);
|
||||
makeUpDto.setDataType(Integer.parseInt(TypeEnum.DATA_48.getCode()));
|
||||
makeUpDto.setDataAttr(0);
|
||||
makeUpDto.setOperate(1);
|
||||
makeUpDto.setStartTime(-1);
|
||||
makeUpDto.setEndTime(-1);
|
||||
reqAndResParam.setMsg(makeUpDto);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleType8497(ReqAndResDto.Req reqAndResParam, String path) {
|
||||
reqAndResParam.setType(8497);
|
||||
String json = String.format("{\"Name\":\"%s\"}", path);
|
||||
JSONObject jsonObject = JSONObject.fromObject(json);
|
||||
reqAndResParam.setMsg(jsonObject);
|
||||
}
|
||||
|
||||
|
||||
public <T> List<T> objectToList(Object object, Class<T> clazz) {
|
||||
List<T> resultList = new ArrayList<>();
|
||||
if (object instanceof List<?>) {
|
||||
for (Object o : (List<?>) object) {
|
||||
resultList.add(clazz.cast(o));
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user