在线补招装置数据

This commit is contained in:
xy
2024-09-29 16:06:26 +08:00
parent f13c8670cb
commit d1574e43be
11 changed files with 315 additions and 31 deletions

View File

@@ -0,0 +1,19 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.fallback.DeviceFtpClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author xy
*/
@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/deviceFile", fallbackFactory = DeviceFtpClientFallbackFactory.class,contextId = "deviceFile")
public interface DeviceFtpFeignClient {
@PostMapping("/downloadFile")
HttpResult<String> downloadFile(@RequestParam("nDid") String nDid, @RequestParam("name") String name, @RequestParam("size") Integer size, @RequestParam("fileCheck") String fileCheck);
}

View File

@@ -1,18 +1,10 @@
package com.njcn.csdevice.api; package com.njcn.csdevice.api;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
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.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.common.utils.LogUtil;
import com.njcn.csdevice.api.fallback.WlRecordClientFallbackFactory; import com.njcn.csdevice.api.fallback.WlRecordClientFallbackFactory;
import com.njcn.csdevice.pojo.param.WlRecordParam; import com.njcn.csdevice.pojo.param.WlRecordParam;
import com.njcn.csdevice.pojo.po.WlRecord; import com.njcn.csdevice.pojo.po.WlRecord;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;

View File

@@ -0,0 +1,34 @@
package com.njcn.csdevice.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.DeviceFtpFeignClient;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author xy
*/
@Slf4j
@Component
public class DeviceFtpClientFallbackFactory implements FallbackFactory<DeviceFtpFeignClient> {
@Override
public DeviceFtpFeignClient create(Throwable cause) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (cause.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) cause.getCause();
}
Enum<?> DeviceFtpFeignClient = exceptionEnum;
return new DeviceFtpFeignClient() {
@Override
public HttpResult<String> downloadFile(String nDid, String name, Integer size, String fileCheck) {
log.error("{}异常,降级处理,异常为:{}","文件下载处理",cause.toString());
throw new BusinessException(DeviceFtpFeignClient);
}
};
}
}

View File

@@ -240,13 +240,15 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
queryWrapper.orderBy(true, false, "create_time"); queryWrapper.orderBy(true, false, "create_time");
} }
} }
if (StrUtil.isNotBlank(queryParam.getDevType()) || !Objects.isNull(queryParam.getDevType())){ System.out.println(StrUtil.isNotBlank(queryParam.getDevType()));
System.out.println(!Objects.isNull(queryParam.getDevType()));
if (StrUtil.isNotBlank(queryParam.getDevType()) && !Objects.isNull(queryParam.getDevType())){
queryWrapper.eq("cs_equipment_delivery.dev_type", queryParam.getDevType()); queryWrapper.eq("cs_equipment_delivery.dev_type", queryParam.getDevType());
} }
if (StrUtil.isNotBlank(queryParam.getDevModel()) || !Objects.isNull(queryParam.getDevModel())){ if (StrUtil.isNotBlank(queryParam.getDevModel()) && !Objects.isNull(queryParam.getDevModel())){
queryWrapper.eq("cs_equipment_delivery.dev_model", queryParam.getDevModel()); queryWrapper.eq("cs_equipment_delivery.dev_model", queryParam.getDevModel());
} }
if (StrUtil.isNotBlank(queryParam.getDevAccessMethod()) || !Objects.isNull(queryParam.getDevAccessMethod())){ if (StrUtil.isNotBlank(queryParam.getDevAccessMethod()) && !Objects.isNull(queryParam.getDevAccessMethod())){
queryWrapper.eq("cs_equipment_delivery.dev_access_method", queryParam.getDevAccessMethod()); queryWrapper.eq("cs_equipment_delivery.dev_access_method", queryParam.getDevAccessMethod());
} }
if (!Objects.isNull(queryParam.getStatus())){ if (!Objects.isNull(queryParam.getStatus())){

View File

@@ -102,6 +102,7 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
c.setPid(portable.getId()); c.setPid(portable.getId());
CsEquipmentDeliveryPO po = csEquipmentDeliveryMapper.selectById(c.getId()); CsEquipmentDeliveryPO po = csEquipmentDeliveryMapper.selectById(c.getId());
c.setComFlag(po.getRunStatus()); c.setComFlag(po.getRunStatus());
c.setNDId(po.getNdid());
} }
portables.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList))); portables.forEach(dev -> dev.setChildren(getChildren(dev, finalLineList)));
checkDevSetData(portables); checkDevSetData(portables);
@@ -181,6 +182,7 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
c.setPid(portable.getId()); c.setPid(portable.getId());
CsEquipmentDeliveryPO po = csEquipmentDeliveryMapper.selectById(c.getId()); CsEquipmentDeliveryPO po = csEquipmentDeliveryMapper.selectById(c.getId());
c.setComFlag(po.getRunStatus()); c.setComFlag(po.getRunStatus());
c.setNDId(po.getNdid());
} }
portable.setChildren(portables); portable.setChildren(portables);

View File

@@ -16,6 +16,7 @@ public enum CsHarmonicResponseEnum {
*/ */
CS_DEVICE_COMMON_ERROR("A00600","治理稳态模块异常"), CS_DEVICE_COMMON_ERROR("A00600","治理稳态模块异常"),
BIND_TARGET_ERROR("A00601","指标参数绑定异常"), BIND_TARGET_ERROR("A00601","指标参数绑定异常"),
MAKE_UP_ERROR("A00602","补招失败"),
; ;

View File

@@ -1,9 +1,11 @@
package com.njcn.csharmonic.pojo.dto; package com.njcn.csharmonic.pojo.dto;
import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* @author xy * @author xy
@@ -29,4 +31,22 @@ public class MakeUpDto implements Serializable {
@SerializedName("EndTime") @SerializedName("EndTime")
private Integer endTime; private Integer endTime;
@Data
public static class FileInfo implements Serializable {
@ApiModelProperty("工程存储路径")
private String proName;
@ApiModelProperty("装置nDid")
private String nDid;
@ApiModelProperty("监测点id")
private String lineId;
@ApiModelProperty("需要处理的文件")
private List<String> fileList;
}
} }

View File

@@ -0,0 +1,33 @@
package com.njcn.csharmonic.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author xy
*/
@Data
public class MakeUpParam implements Serializable {
@ApiModelProperty("数据类型 0:稳态 1:暂态")
private List<Integer> dataTypeList;
@ApiModelProperty("起始时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
@ApiModelProperty("工程列表")
private List<String> proList;
@ApiModelProperty("监测点id")
private String lineId;
@ApiModelProperty("装置nDid")
private String nDid;
}

View File

@@ -5,6 +5,7 @@ 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.param.MakeUpParam;
import com.njcn.csharmonic.pojo.vo.MakeUpVo; 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;
@@ -49,6 +50,7 @@ public class OfflineDataUploadController extends BaseController {
@PostMapping(value = "/makeUpData") @PostMapping(value = "/makeUpData")
@ApiOperation("补招数据-界面") @ApiOperation("补招数据-界面")
@ApiImplicitParam(name = "lineId", value = "监测点id", required = true) @ApiImplicitParam(name = "lineId", value = "监测点id", required = true)
@Deprecated
public HttpResult<List<MakeUpVo>> makeUpData(@RequestParam("lineId") String lineId){ public HttpResult<List<MakeUpVo>> makeUpData(@RequestParam("lineId") String lineId){
String methodDescribe = getMethodDescribe("makeUpData"); String methodDescribe = getMethodDescribe("makeUpData");
List<MakeUpVo> list = offlineDataUploadService.getMakeUpData(lineId); List<MakeUpVo> list = offlineDataUploadService.getMakeUpData(lineId);
@@ -70,4 +72,14 @@ public class OfflineDataUploadController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping(value = "/makeUp")
@ApiOperation("设备补招")
@ApiImplicitParam(name = "param", value = "补招参数", required = true)
public HttpResult<List<MakeUpVo>> makeUp(@RequestBody MakeUpParam param) {
String methodDescribe = getMethodDescribe("makeUp");
offlineDataUploadService.startMakeUpData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
} }

View File

@@ -1,5 +1,6 @@
package com.njcn.csharmonic.service; package com.njcn.csharmonic.service;
import com.njcn.csharmonic.pojo.param.MakeUpParam;
import com.njcn.csharmonic.pojo.vo.MakeUpVo; import com.njcn.csharmonic.pojo.vo.MakeUpVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -32,4 +33,11 @@ public interface OfflineDataUploadService {
*/ */
List<MakeUpVo> askDirOrFile(String nDid, String prjName, String path, String fileType); List<MakeUpVo> askDirOrFile(String nDid, String prjName, String path, String fileType);
/**
* 开始装置数据补招
* 根据项目递归获取文件夹下的bin文件区分暂态、稳态存储离线文件的方式调用黄正剑的离线数据补招功能
* @return
*/
void startMakeUpData(MakeUpParam param);
} }

View File

@@ -1,15 +1,21 @@
package com.njcn.csharmonic.service.impl; package com.njcn.csharmonic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.tocrhz.mqtt.publisher.MqttPublisher; import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.njcn.access.api.CsTopicFeignClient; import com.njcn.access.api.CsTopicFeignClient;
import com.njcn.access.enums.AccessEnum; import com.njcn.access.enums.AccessEnum;
import com.njcn.access.enums.TypeEnum; import com.njcn.access.enums.TypeEnum;
import com.njcn.access.pojo.RspDataDto; 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.ReqAndResDto;
import com.njcn.access.pojo.dto.file.FileDto; import com.njcn.access.pojo.dto.file.FileDto;
import com.njcn.access.utils.ChannelObjectUtil;
import com.njcn.access.utils.MqttUtil;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.DeviceFtpFeignClient;
import com.njcn.csharmonic.enums.CsHarmonicResponseEnum;
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;
import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer; import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer;
@@ -17,9 +23,12 @@ 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.dto.MakeUpDto;
import com.njcn.csharmonic.pojo.param.MakeUpParam;
import com.njcn.csharmonic.pojo.vo.MakeUpVo; 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.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.redis.pojo.enums.AppRedisKey; import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -29,17 +38,15 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; 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.IOException; import java.io.*;
import java.io.ObjectOutputStream; import java.nio.file.Files;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.*;
import java.util.Collections; import java.util.stream.Collectors;
import java.util.List;
import java.util.Objects;
import static com.njcn.access.enums.TypeEnum.DATA_48; import static com.njcn.access.enums.TypeEnum.DATA_48;
@@ -56,9 +63,14 @@ import static com.njcn.access.enums.TypeEnum.DATA_48;
public class OfflineDataUploadServiceImpl implements OfflineDataUploadService { public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
private final MqttPublisher publisher; private final MqttPublisher publisher;
private final CsTopicFeignClient csTopicFeignClient; private final CsTopicFeignClient csTopicFeignClient;
private final RedisUtil redisUtil; private final RedisUtil redisUtil;
private final ChannelObjectUtil channelObjectUtil;
private final MqttUtil mqttUtil;
private static Integer mid = 1;
private final DeviceFtpFeignClient deviceFtpFeignClient;
private final FileStorageUtil fileStorageUtil;
private final GeneralInfo generalInfo;
@Override @Override
public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{ public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{
@@ -131,7 +143,7 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
if (!Objects.isNull(object)) { if (!Objects.isNull(object)) {
// 创建 DateTimeFormatter 对象并指定格式 // 创建 DateTimeFormatter 对象并指定格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<RspDataDto.ProjectInfo> projectInfoList = objectToList(redisUtil.getObjectByKey(key),RspDataDto.ProjectInfo.class); List<RspDataDto.ProjectInfo> projectInfoList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(key),RspDataDto.ProjectInfo.class);
projectInfoList.forEach(item->{ projectInfoList.forEach(item->{
MakeUpVo vo = new MakeUpVo(); MakeUpVo vo = new MakeUpVo();
vo.setType("dir"); vo.setType("dir");
@@ -143,7 +155,7 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
vo.setStartTime(formattedDate); vo.setStartTime(formattedDate);
} }
long endTime = item.getPrjTimeEnd(); long endTime = item.getPrjTimeEnd();
if (endTime != 0) { if (endTime != -1) {
LocalDateTime dateTime = Instant.ofEpochMilli(endTime*1000).atZone(ZoneId.systemDefault()).toLocalDateTime(); LocalDateTime dateTime = Instant.ofEpochMilli(endTime*1000).atZone(ZoneId.systemDefault()).toLocalDateTime();
String formattedDate = dateTime.format(formatter); String formattedDate = dateTime.format(formatter);
vo.setEndTime(formattedDate); vo.setEndTime(formattedDate);
@@ -170,7 +182,7 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
String key = AppRedisKey.PROJECT_INFO + nDid; String key = AppRedisKey.PROJECT_INFO + nDid;
Object object = redisUtil.getObjectByKey(key); Object object = redisUtil.getObjectByKey(key);
if (!Objects.isNull(object)) { if (!Objects.isNull(object)) {
List<FileDto.DirInfo> projectInfoList = objectToList(redisUtil.getObjectByKey(key),FileDto.DirInfo.class); List<FileDto.DirInfo> projectInfoList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(key),FileDto.DirInfo.class);
projectInfoList.forEach(item->{ projectInfoList.forEach(item->{
MakeUpVo vo = new MakeUpVo(); MakeUpVo vo = new MakeUpVo();
vo.setPrjName(prjName); vo.setPrjName(prjName);
@@ -196,6 +208,148 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
return result; return result;
} }
@Override
public void startMakeUpData(MakeUpParam param) {
List<String> fileList = new ArrayList<>();
Map<String,List<String>> map = new HashMap<>();
//组装文件路径
for (String s : param.getProList()) {
//稳态补招
if (param.getDataTypeList().contains(0)) {
String minPath = s + "/min";
List<FileDto.DirInfo> projectInfoList = getFileList(param.getLineId(),param.getNDid(),minPath);
if (CollectionUtil.isNotEmpty(projectInfoList)) {
projectInfoList.forEach(item->{
String linePath = item.getName();
List<FileDto.DirInfo> lineDataList = getFileList(param.getLineId(),param.getNDid(),linePath);
if (CollectionUtil.isNotEmpty(lineDataList)) {
fileList.addAll(lineDataList.stream().map(FileDto.DirInfo::getName).collect(Collectors.toList()));
}
});
}
}
//暂态补招
if (param.getDataTypeList().contains(1)) {
//事件
String logPath = s + "/log";
List<FileDto.DirInfo> logList = getFileList(param.getLineId(),param.getNDid(),logPath);
if (CollectionUtil.isNotEmpty(logList)) {
fileList.addAll(logList.stream().map(FileDto.DirInfo::getName).collect(Collectors.toList()));
}
//录波文件
String comtradePath = s + "/comtrade";
List<FileDto.DirInfo> comtradeList = getFileList(param.getLineId(),param.getNDid(),comtradePath);
if (CollectionUtil.isNotEmpty(comtradeList)) {
fileList.addAll(comtradeList.stream().map(FileDto.DirInfo::getName).collect(Collectors.toList()));
}
}
if (CollectionUtil.isNotEmpty(fileList)) {
map.put(s,fileList);
}
}
if (CollectionUtil.isNotEmpty(map)) {
map.forEach((k,v)->{
String proName = k.replace("/bd0/cmn/",OssPath.DEV_MAKE_UP_PATH + param.getNDid() + "/");
String key = AppRedisKey.PROJECT_INFO + param.getNDid();
v.forEach(item->{
redisUtil.delete(key);
Object object = redisUtil.getObjectByKey(AppRedisKey.DEVICE_MID + param.getNDid());
if (!Objects.isNull(object)) {
mid = (Integer) object;
}
askFileInfo(param.getNDid(),mid,item);
try {
Thread.sleep(2000);
FileDto.FileInfo info = channelObjectUtil.objectToSingleObject(redisUtil.getObjectByKey(key),FileDto.FileInfo.class);
String path = deviceFtpFeignClient.downloadFile(param.getNDid(),item,info.getFileSize(),info.getFileCheck()).getData();
String lsFile = generalInfo.getBusinessTempPath() + File.separator + item.split(StrUtil.SLASH)[item.split(StrUtil.SLASH).length - 1];
moveFile(path,getFilePath(item,param.getNDid()),lsFile);
//删除临时文件
File file = new File(lsFile);
if (file.exists()) {
file.delete();
}
//删除下载文件
//fileStorageUtil.deleteFile(path);
} catch (Exception e) {
throw new BusinessException(CsHarmonicResponseEnum.MAKE_UP_ERROR);
}
});
//推送消息,按照离线数据方式处理
MakeUpDto.FileInfo dto = new MakeUpDto.FileInfo();
dto.setProName(proName);
dto.setNDid(param.getNDid());
dto.setLineId(param.getLineId());
dto.setFileList(v);
publisher.send("/Web/makeUp/" + param.getLineId(), new Gson().toJson(dto), 1, false);
});
}
}
/**
* 迁移文件
*/
public void moveFile(String oldPath, String newPath, String lsPath) {
try {
InputStream inputStream = fileStorageUtil.getFileStream(oldPath);
FileOutputStream fileOutputStream = new FileOutputStream(lsPath);
// 创建一个缓冲区
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
File src = new File(lsPath);
src.getParentFile().mkdirs();
InputStream is = Files.newInputStream(src.toPath());
fileStorageUtil.uploadStreamSpecifyName(is, OssPath.DEV_MAKE_UP_PATH,newPath);
inputStream.close();
fileOutputStream.close();
is.close();
} catch (Exception e) {
throw new BusinessException(CsHarmonicResponseEnum.MAKE_UP_ERROR);
}
}
/**
* 询问文件信息
*/
public void askFileInfo(String nDid, Integer mid, String fileName) {
String version = csTopicFeignClient.find(nDid).getData();
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
reqAndResParam.setMid(mid);
reqAndResParam.setDid(0);
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_8.getCode()));
reqAndResParam.setExpire(-1);
String json = "{Name:\""+fileName+"\"}";
JSONObject jsonObject = JSONObject.fromObject(json);
reqAndResParam.setMsg(jsonObject);
log.info("请求文件信息报文:" + new Gson().toJson(reqAndResParam));
publisher.send("/Pfm/DevFileCmd/"+version+"/"+nDid,new Gson().toJson(reqAndResParam),1,false);
}
/**
* 获取文件数据
*/
public List<FileDto.DirInfo> getFileList(String lineId, String nDid, String path) {
String key = AppRedisKey.PROJECT_INFO + nDid;
redisUtil.delete(key);
List<FileDto.DirInfo> result = new ArrayList<>();
askProjectInfo(lineId,nDid, Integer.parseInt(TypeEnum.TYPE_8.getCode()),path,"DevFileCmd");
try {
Thread.sleep(5000);
Object object = redisUtil.getObjectByKey(key);
if (!Objects.isNull(object)) {
result = channelObjectUtil.objectToList(redisUtil.getObjectByKey(key),FileDto.DirInfo.class);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return result;
}
/** /**
* 询问装置项目信息报文 * 询问装置项目信息报文
@@ -235,7 +389,7 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
reqAndResParam.setType(8454); reqAndResParam.setType(8454);
MakeUpDto makeUpDto = new MakeUpDto(); MakeUpDto makeUpDto = new MakeUpDto();
makeUpDto.setClDid(clDid); makeUpDto.setClDid(clDid);
makeUpDto.setDataType(Integer.parseInt(TypeEnum.DATA_48.getCode())); makeUpDto.setDataType(Integer.parseInt(DATA_48.getCode()));
makeUpDto.setDataAttr(0); makeUpDto.setDataAttr(0);
makeUpDto.setOperate(1); makeUpDto.setOperate(1);
makeUpDto.setStartTime(-1); makeUpDto.setStartTime(-1);
@@ -251,14 +405,21 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
reqAndResParam.setMsg(jsonObject); reqAndResParam.setMsg(jsonObject);
} }
/**
public <T> List<T> objectToList(Object object, Class<T> clazz) { * 调整文件路径
List<T> resultList = new ArrayList<>(); */
if (object instanceof List<?>) { private String getFilePath(String path, String nDid) {
for (Object o : (List<?>) object) { String[] parts = path.split("/");
resultList.add(clazz.cast(o)); StringBuilder sb = new StringBuilder();
boolean first = true;
for (int i = 3; i < parts.length; i++) {
if (!first) {
sb.append("/");
} }
sb.append(parts[i]);
first = false;
} }
return resultList; return nDid + "/" + sb.toString();
} }
} }