diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/SupvFile.java b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/SupvFile.java index 3e4893935..82c7c61a6 100644 --- a/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/SupvFile.java +++ b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/SupvFile.java @@ -3,13 +3,10 @@ package com.njcn.process.pojo.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.njcn.db.bo.BaseEntity; -import java.io.Serializable; import java.time.LocalDateTime; import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.multipart.MultipartFile; /** @@ -57,6 +54,7 @@ public class SupvFile { private String uploaderName; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime uploadTime; private String uploaderId; diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/SupvPushGwController.java b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/SupvPushGwController.java index a1153fb01..e2ba3be6a 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/SupvPushGwController.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/SupvPushGwController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; import java.util.List; /** @@ -78,7 +79,7 @@ public class SupvPushGwController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON) @ApiOperation("推送附件接口") @ApiImplicitParam(name = "busIds",value = "请求体",required = true) - public HttpResult pushFile(@RequestBody List busIds){ + public HttpResult pushFile(@RequestBody List busIds) throws IOException { String methodDescribe = getMethodDescribe("pushFile"); supvPushGwService.pushFile(busIds); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/SupvPushGwService.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/SupvPushGwService.java index cfae61a08..bb063c8e5 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/SupvPushGwService.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/SupvPushGwService.java @@ -1,5 +1,6 @@ package com.njcn.process.service; +import java.io.IOException; import java.util.List; /** @@ -30,7 +31,7 @@ public interface SupvPushGwService { * @author cdf * @date 2023/6/28 */ - boolean pushFile(List busIds); + boolean pushFile(List busIds) throws IOException; /** diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/SupvPushGwServiceImpl.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/SupvPushGwServiceImpl.java index 494a7d66a..c7db3161d 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/SupvPushGwServiceImpl.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/SupvPushGwServiceImpl.java @@ -1,16 +1,15 @@ package com.njcn.process.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.oss.utils.FileStorageUtil; import com.njcn.process.mapper.SupvFileMapper; import com.njcn.process.mapper.SupvPlanMapper; import com.njcn.process.mapper.SupvProblemMapper; import com.njcn.process.mapper.SupvReportMMapper; -import com.njcn.process.pojo.dto.supv.PlanProblemData; -import com.njcn.process.pojo.dto.supv.WorkPlanData; import com.njcn.process.pojo.po.SupvFile; import com.njcn.process.pojo.po.SupvPlan; import com.njcn.process.pojo.po.SupvProblem; @@ -18,19 +17,26 @@ import com.njcn.process.pojo.po.SupvReportM; import com.njcn.process.service.SupvPushGwService; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataTypeEnum; -import com.njcn.system.pojo.po.Dic; import com.njcn.system.pojo.po.DictData; import com.njcn.user.api.DeptFeignClient; import com.njcn.user.pojo.po.Dept; import com.njcn.user.pojo.vo.PvTerminalTreeVO; -import liquibase.pro.packaged.W; +import com.njcn.web.utils.RestTemplateUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.IOUtils; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -41,6 +47,7 @@ import java.util.stream.Collectors; * @date 2023/6/28 */ @Service +@Slf4j @RequiredArgsConstructor public class SupvPushGwServiceImpl implements SupvPushGwService { @@ -56,6 +63,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { private final DeptFeignClient deptFeignClient; + private final FileStorageUtil fileStorageUtil; @Override public boolean pushPlan(List planIds) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -167,7 +175,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { //TODO 调用国网接口 - +// Map map = postStatsUrl(getUrl(1), null, supvPlanList); for(SupvPlan supvPlan: supvPlanList){ SupvPlan supvPlanPO = new SupvPlan(); @@ -220,6 +228,8 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { //TODO // 目前一个问题对应一个措施,上送一个问题需要调用问题接口和整改措施接口 +// Map map = postStatsUrl(getUrl(2), null, supvProblemList); +// Map map = postStatsUrl(getUrl(3), null, supvProblemList); for(SupvProblem supvProblem:supvProblemList){ SupvProblem supvProblemPO = new SupvProblem(); @@ -231,7 +241,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { } @Override - public boolean pushFile(List busIds) { + public boolean pushFile(List busIds) throws IOException { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SupvFile::getBusiId,busIds); List supvFiles = supvFileMapper.selectList(lambdaQueryWrapper); @@ -239,6 +249,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { throw new BusinessException("一次最多上送100条数据"); } //TODO 调用上送接口 +// Map map = postFileUrl(getUrl(4), null, supvFiles.get(0)); return true; } @@ -252,7 +263,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { throw new BusinessException("一次最多上送100条数据"); } //TODO 调用上送接口 - +// Map map = postStatsUrl(getUrl(5), null, supvReportMList); for(SupvReportM supvReportM : supvReportMList){ SupvReportM supvReportMPO = new SupvReportM(); @@ -275,7 +286,7 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { } //TODO - +// Map map = postStatsUrl(getUrl(6), null, supvPlanList); for(SupvPlan supvPlan : supvPlanList) { supvPlan.setIsUploadHead(2); @@ -283,4 +294,139 @@ public class SupvPushGwServiceImpl implements SupvPushGwService { } return true; } + + /** + * 通用上送提交 + * @param url + * @param token + * @param list + * @return + */ + public Map postStatsUrl(String url,String token,List list){ + Map body = new HashMap(); + Map mapHeader = new HashMap<>(); + mapHeader.put("Content-Type", "application/json; charset=utf-8"); + mapHeader.put("x-token", token); + mapHeader.put("x-date", System.currentTimeMillis() + ""); + mapHeader.put("x-signature", "123"); + //设置入参 + Map mapBody = new HashMap<>(); + mapBody.put("stats", list); + + ResponseEntity userEntity = RestTemplateUtil.post(url, mapHeader, mapBody, Map.class, new ArrayList<>()); + if (userEntity.getStatusCodeValue() == 200) { + //获取返回体 + body = userEntity.getBody(); + log.info(Thread.currentThread().getName() + "获取返回体 getResourceData:" + body + "结束----!"); + } + return body; + } + + /** + * 文件上送提交 + * @param url + * @param token + * @return + */ + public Map postFileUrl(String url,String token,SupvFile supvFile) throws IOException { + Map body = new HashMap(); + Map mapHeader = new HashMap<>(); + mapHeader.put("Content-Type", "multipart/form-data"); + String path=supvFile.getFileUrl(); + if(StrUtil.isBlank(path)){ + throw new BusinessException("获取文件上传路径为空!请检查原始路径是否存在"); + } + String suffix = path.substring(path.lastIndexOf(".")); + String attachmentName = supvFile.getAttachmentName(); + if(StrUtil.isNotBlank(attachmentName)){ + int i = attachmentName.lastIndexOf("."); + if(i!=-1){ + attachmentName = attachmentName.substring(0,i); + } + }else{ + throw new BusinessException("不存在文件,文件名称"); + } + + InputStream fileStream = fileStorageUtil.getFileStream(path); + if(ObjectUtil.isNull(fileStream)){ + throw new BusinessException("文件服务器,文件不存在"); + } + byte[] fileBytes = IOUtils.toByteArray(fileStream); + File files = File.createTempFile(attachmentName, suffix); + FileOutputStream stream = new FileOutputStream(files); + stream.write(fileBytes); + stream.close(); + + + FileSystemResource resource = new FileSystemResource(files); + MultiValueMap param = new LinkedMultiValueMap<>(); + param.add("uuid", supvFile.getUuid()); + param.add("file", resource); + param.add("attachmentName", supvFile.getAttachmentName()); + param.add("attachmentType", supvFile.getAttachmentType()); + param.add("busiId", supvFile.getBusiId()); + param.add("uploaderName", supvFile.getUploaderName()); + String uploadTime = supvFile.getUploadTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + param.add("uploadTime", uploadTime); + param.add("uploaderId", supvFile.getUploaderId()); + + ResponseEntity userEntity = RestTemplateUtil.post(url, mapHeader, param, Map.class, new ArrayList<>()); + files.deleteOnExit(); + if (userEntity.getStatusCodeValue() == 200) { + //获取返回体 + body = userEntity.getBody(); + log.info(Thread.currentThread().getName() + "获取返回体 getResourceData:" + body + "结束----!"); + } + return body; + } + + /** + * 根据type获取上送地址 + * @param type + * @return + */ + public static String getUrl(Integer type){ + String url="http://ip:port"; + + switch (type){ + case 1: + /** + * 接收电能质量技术监督工作计划数据接口 + */ + url+="/WMCenter/powerQuality/plan/create"; + break; + case 2: + /** + * 接收电能质量技术监督实施问题数据接口 + */ + url+="/WMCenter/powerQuality/problem/create"; + break; + case 3: + /** + * 接收电能质量技术监督实施问题整改数据接口 + */ + url+="/WMCenter/powerQuality/problem/update"; + break; + case 4: + /** + * 总部提供附件接收接口,省公司调用此接口,完成附件上报 + */ + url+="/WMCenter/powerQuality/file/create"; + break; + case 5: + /** + * 接收电能质量技术监督月报统计数据接口 + */ + url+="/WMCenter/powerQuality/monthReport/create"; + break; + case 6: + /** + * 删除电能质量技术监督工作计划接口 + */ + url+="/WMCenter/powerQuality/plan/delete"; + break; + } + return url; + } + }