便携式设备目录查看

This commit is contained in:
xy
2024-09-09 09:54:24 +08:00
parent 26e45ddbc5
commit 3d9acfe95b
5 changed files with 224 additions and 4 deletions

View File

@@ -65,7 +65,7 @@
</select> </select>
<select id="getAll" resultType="com.njcn.csdevice.pojo.vo.CsLedgerVO"> <select id="getAll" resultType="com.njcn.csdevice.pojo.vo.CsLedgerVO">
select a.dev_id as id,b.name as name ,2 as level from wl_record a select a.dev_id as id,b.name as name ,2 as level,b.ndid nDid from wl_record a
left join cs_equipment_delivery b on a.dev_id = b.id left join cs_equipment_delivery b on a.dev_id = b.id
where a.type=1 and a.state =1 where a.type=1 and a.state =1
group by a.dev_id,b.name having a.dev_id is not null and b.name is not null group by a.dev_id,b.name having a.dev_id is not null and b.name is not null

View File

@@ -169,7 +169,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
portableOfflLog.setRealCount(pqdData.size()); portableOfflLog.setRealCount(pqdData.size());
if(minFlag){ if(minFlag){
log.info("类型min,插入infulxDb的pqdData"); log.info("类型min,插入infulxDb的pqdData");
//pqdDataMapper.insertBatch(pqdData); pqdDataMapper.insertBatch(pqdData);
//min结果集解析入库后就不需要在解析了 //min结果集解析入库后就不需要在解析了
minFlag = false; minFlag = false;
} }
@@ -293,10 +293,10 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
} }
} }
log.info("类型log,插入infulxDb的evtData"); log.info("类型log,插入infulxDb的evtData");
//evtDataMapper.insertOne(entData); evtDataMapper.insertOne(entData);
} }
log.info("类型log,插入mysql事件表cs_event"); log.info("类型log,插入mysql事件表cs_event");
//eventFeignClient.saveBatchEventList(csEventPOS); eventFeignClient.saveBatchEventList(csEventPOS);
} }
} }
} }

View File

@@ -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.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csharmonic.pojo.vo.MakeUpVo;
import com.njcn.csharmonic.service.OfflineDataUploadService; import com.njcn.csharmonic.service.OfflineDataUploadService;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
/** /**
@@ -41,4 +45,29 @@ public class OfflineDataUploadController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); 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);
}
} }

View File

@@ -1,6 +1,8 @@
package com.njcn.csharmonic.service; package com.njcn.csharmonic.service;
import com.njcn.csharmonic.pojo.vo.MakeUpVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
/** /**
@@ -15,4 +17,19 @@ public interface OfflineDataUploadService {
byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception; 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);
} }

View File

@@ -1,5 +1,14 @@
package com.njcn.csharmonic.service.impl; 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.common.pojo.exception.BusinessException;
import com.njcn.csharmonic.offline.constant.OfflineConstant; import com.njcn.csharmonic.offline.constant.OfflineConstant;
import com.njcn.csharmonic.offline.log.Log; 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.AnalyseComtradeCfg;
import com.njcn.csharmonic.offline.mincfg.tagComtradeCfg; import com.njcn.csharmonic.offline.mincfg.tagComtradeCfg;
import com.njcn.csharmonic.offline.vo.Response; 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.csharmonic.service.OfflineDataUploadService;
import com.njcn.influx.pojo.po.cs.PqdData; 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 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.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectOutputStream; 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.ArrayList;
import java.util.Collections;
import java.util.List; 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 @Slf4j
@Service @Service
@RequiredArgsConstructor
public class OfflineDataUploadServiceImpl implements OfflineDataUploadService { public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
private final MqttPublisher publisher;
private final CsTopicFeignClient csTopicFeignClient;
private final RedisUtil redisUtil;
@Override @Override
public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{ public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{
byte[] bytes = null; byte[] bytes = null;
@@ -87,4 +118,147 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
} }
return bytes; 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;
}
} }