diff --git a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 4d76be2..311ac1f 100644 --- a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -363,6 +363,11 @@ public class OssClient { return url; } + //自定义上传prefix路径 + public UploadResult uploadPrefix(byte[] data, String prefix, String suffix,String fileName, String contentType) { + return upload(new ByteArrayInputStream(data), getPath(prefix, suffix,fileName), Long.valueOf(data.length), contentType); + } + /** * 上传 byte[] 数据到 Amazon S3,使用指定的后缀构造对象键。 * @@ -649,4 +654,5 @@ public class OssClient { return policy.replaceAll("bucketName", bucketName); } + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java index a4752ca..3906abe 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java @@ -264,6 +264,11 @@ public class BusinessAlert { @TableField(exist = false) private String icon; + + @TableField(exist = false) + private String postCategory; //类别编码,用来过滤预警查询返回值(南通的查询南通类,丰县查询丰县) + + /** * 无人机方向 */ diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java index e2bc794..881d1c6 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java @@ -4,8 +4,10 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.business.domain.BusinessAlertConstructInfoOss; import java.io.Serial; +import java.util.List; /** * 预警任务-施工信息对象 business_alert_construct_info @@ -83,4 +85,8 @@ public class BusinessAlertConstructInfo extends TenantEntity { private String remark; + @TableField(exist = false) + private List alertConstructInfoOssList; + + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java index 9c1e38c..319602d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java @@ -272,4 +272,6 @@ public class BusinessAlertBo { */ private String gimbalPitch; + private String postCategory; //类别编码,用来过滤预警查询返回值(南通的查询南通类,丰县查询丰县) + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java index b4d48af..f1abc2b 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java @@ -7,11 +7,12 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.business.domain.BusinessAlertConstructInfoOss; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -29,7 +30,7 @@ public class BusinessAlertConstructInfoVo implements Serializable { private static final long serialVersionUID = 1L; /** - * + * */ @ExcelProperty(value = "") private Long id; @@ -100,5 +101,7 @@ public class BusinessAlertConstructInfoVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + private List alertConstructInfoOssList;//文件列表 + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 61a329b..53018e2 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.business.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -19,6 +20,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertConstructInfo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; @@ -43,11 +45,14 @@ import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.RemoteLabelPostService; import org.dromara.system.api.RemoteSubmailConfigService; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; import org.dromara.system.api.domain.vo.RemoteUserVo; +import org.dromara.business.domain.BusinessAlertConstructInfoOss; +import org.dromara.business.mapper.BusinessAlertConstructInfoOssMapper; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.springframework.beans.BeanUtils; @@ -67,6 +72,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -85,6 +91,7 @@ import java.util.Base64; @RequiredArgsConstructor @Service @Slf4j +@DubboService public class BusinessAlertServiceImpl implements IBusinessAlertService { private final BusinessAlertMapper baseMapper; @@ -94,6 +101,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Autowired private BusinessAlertConstructInfoMapper businessAlertConstructInfoMapper; + @Autowired + private BusinessAlertConstructInfoOssMapper businessAlertConstructInfoOssMapper; + @DubboReference(timeout = 30000) RemoteWorkflowService remoteWorkflowService; @@ -109,6 +119,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Autowired FeignDeviceGroup feignDeviceGroup; + @DubboReference + private final RemoteMessageService remoteMessageService; + /** * 新增预警任务 * @@ -197,6 +210,25 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { map.put("jobName",alert.getJobName()); noticeList.add(map); remoteStartProcessList.add(startProcess); + + //推送消息-基于部门-找用户 发送json格式 + ArrayList deptIds = new ArrayList<>(); + deptIds.add(Long.parseLong(alert.getDeptId())); + List remoteUserVos = remoteUserService.selectUsersByDeptIds(deptIds); + List userIds = remoteUserVos.stream().map(RemoteUserVo::getUserId).collect(Collectors.toList()); + + JSONObject jsonObject = new JSONObject(); + String imagePreviewUrl = MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, alertVo.getImages(), 3600).toString(); + jsonObject.put("deptId", alert.getDeptId()); + jsonObject.put("deptName", alert.getDeptName()); + jsonObject.put("images", imagePreviewUrl); + jsonObject.put("labelCn", alert.getLabelCn()); + jsonObject.put("lat", alert.getLat()); + jsonObject.put("lng", alert.getLng()); + jsonObject.put("createTime", ObjectUtil.isNotEmpty(alert.getCreateTime()) ? alert.getCreateTime() : new Date()); + jsonObject.put("jobName", alert.getJobName()); + remoteMessageService.publishMessage(userIds, jsonObject.toString() ); + System.out.println("已发送:"+ "预警内容:"+ jsonObject.toString()); } int startIndex = 0; // 从第 0 条开始 @@ -207,6 +239,14 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { }); remoteSubmailConfigService.remoteSend("smsMultixsend",noticeList); + //推送消息-基于部门-找用户-批量 +// List deptStrIds = alertVoList.stream().map(BusinessAlertVo::getDeptId).distinct().collect(Collectors.toList()); +// List deptIds = deptStrIds.stream().map(Long::parseLong).collect(Collectors.toList()); +// List remoteUserVos = remoteUserService.selectUsersByDeptIds(deptIds); +// List userIds = remoteUserVos.stream().map(RemoteUserVo::getUserId).collect(Collectors.toList()); +// +// remoteMessageService.publishMessage(userIds, "预警"); + } /** @@ -534,9 +574,23 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { LambdaQueryWrapper qw = new LambdaQueryWrapper(); qw.in(BusinessAlertConstructInfo::getBusinessAlertId, alertIds); List constructInfoVoList = businessAlertConstructInfoMapper.selectVoList(qw,BusinessAlertConstructInfoVo.class); + List constructInfoIds = constructInfoVoList.stream().map(BusinessAlertConstructInfoVo::getId).collect(Collectors.toList()); + + List alertConstructInfoOssList = new ArrayList<>(); + if(!constructInfoIds.isEmpty()){ + LambdaQueryWrapper alertConstructOssQw = new LambdaQueryWrapper<>(); + alertConstructOssQw.in(BusinessAlertConstructInfoOss::getAlertConstructInfoId,constructInfoIds); + alertConstructInfoOssList = businessAlertConstructInfoOssMapper.selectVoList(alertConstructOssQw, BusinessAlertConstructInfoOss.class); + } + for (BusinessAlert record : page.getRecords()) { BusinessAlertConstructInfoVo businessAlertConstructInfoVo = constructInfoVoList.stream().filter(item -> item.getBusinessAlertId().equals(record.getId())).findFirst().orElse(null); + if(ObjectUtil.isNotNull(businessAlertConstructInfoVo)){ + List constructInfoOssList = alertConstructInfoOssList.stream().filter(item -> item.getAlertConstructInfoId().equals(businessAlertConstructInfoVo.getId())).collect(Collectors.toList()); + businessAlertConstructInfoVo.setAlertConstructInfoOssList(constructInfoOssList); + } record.setAlertConstructInfoVo(businessAlertConstructInfoVo); + } } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index 5e4be56..381d878 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -428,6 +428,10 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 + //基于类别编码postCategory过滤返回值:区分南通 / 丰县等部门数据 【postCategory不能为空再过滤数据】 + if(StrUtil.isNotEmpty(businessAlertBo.getPostCategory()) ){ + postVoList = postVoList.stream().filter(item -> StrUtil.equals(businessAlertBo.getPostCategory(), item.getPostCategory())).toList(); + } if (ObjectUtil.isEmpty(postVoList)) { return ListUtil.empty(); @@ -457,6 +461,10 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 + //基于类别编码postCategory过滤返回值:区分南通 / 丰县等部门数据 【postCategory不能为空再过滤数据】 + if(StrUtil.isNotEmpty(businessAlertBo.getPostCategory()) ){ + postVoList = postVoList.stream().filter(item -> StrUtil.equals(businessAlertBo.getPostCategory(), item.getPostCategory())).toList(); + } List result = new ArrayList<>(); @@ -507,6 +515,10 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 + //基于类别编码postCategory过滤返回值:区分南通 / 丰县等部门数据 【postCategory不能为空再过滤数据】 + if(StrUtil.isNotEmpty(businessAlertBo.getPostCategory()) ){ + postVoList = postVoList.stream().filter(item -> StrUtil.equals(businessAlertBo.getPostCategory(), item.getPostCategory())).toList(); + } List result = new ArrayList<>(); if (ObjectUtil.isEmpty(postVoList)) { @@ -547,6 +559,10 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //查询所有的职能岗位 List postVoList = remotePostService.listPost(); postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则 + //基于类别编码postCategory过滤返回值:区分南通 / 丰县等部门数据 【postCategory不能为空再过滤数据】 + if(StrUtil.isNotEmpty(businessAlertBo.getPostCategory()) ){ + postVoList = postVoList.stream().filter(item -> StrUtil.equals(businessAlertBo.getPostCategory(), item.getPostCategory())).toList(); + } List monthList = getLastSixMonths(); diff --git a/dk-modules/business/src/main/java/org/dromara/business/utils/constants/MinIOConstants.java b/dk-modules/business/src/main/java/org/dromara/business/utils/constants/MinIOConstants.java index 367c04a..53b9c76 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/utils/constants/MinIOConstants.java +++ b/dk-modules/business/src/main/java/org/dromara/business/utils/constants/MinIOConstants.java @@ -17,4 +17,7 @@ public interface MinIOConstants { String BUCKET_ALERT = "alert"; //桶名称 图斑 String BUCKET_PATTERN = "pattern"; + + //南通-丰县Buskcet + String BUCKET_NANTONG = "nantongsitebucket"; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index b61d6a2..51eb246 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java @@ -57,6 +57,7 @@ import org.springframework.util.StringUtils; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -247,6 +248,9 @@ public class DeviceServiceImpl implements IDeviceService { if(proIds == null){ proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); } + if(ObjectUtil.isEmpty(proIds)){ + return new ArrayList(); + } List devicesList = this.getDevicesByParams( DeviceQueryParam.builder() .workspaceId(workspaceId) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index 144bfb9..86e0221 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -88,6 +88,7 @@ public interface IFileService { List getMediaFileDTO( String jobId,String fileType); String copyFile(String sourceBucket, String originFileUrl, String targetBucket); + String copyFileHttp(String fileUrl, String originFileUrl, String bucketDkcy); Double getGimbalYawDegree(String fileId); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java index ded38bf..3d0a0b9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java @@ -1,11 +1,14 @@ package org.dromara.sample.media.service.impl; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.dromara.common.core.utils.file.MimeTypeUtils; import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.satoken.utils.LoginHelper; @@ -29,8 +32,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; +import java.io.InputStream; import java.net.URL; +import java.net.URLConnection; import java.util.*; import java.util.stream.Collectors; @@ -202,6 +208,33 @@ public class FileServiceImpl implements IFileService { return fileUrl; } + @Override + public String copyFileHttp(String aliyunUrl, String originFileUrl, String minioBucket) { + try { + URL url = new URL(aliyunUrl); + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(3_500); + conn.setReadTimeout(3_500); + InputStream inputStream = conn.getInputStream(); + long fileSize = conn.getContentLengthLong(); + + String fileName = FileUtil.getName(url.getPath()); +// String path = url.getPath().replace(fileName, deviceSn+ fileName); // eg: /ai/report/29847/{deviceSn+xxx.jpg} +// String originalFileName = path.substring(path.lastIndexOf("/") + 1); // qwfbGaBixI.jpg +// String suffix = originalFileName.contains(".") ? originalFileName.substring(originalFileName.lastIndexOf(".")) : ".jpg"; // fallback + +// String newFileName = IdUtils.fastUUID() + suffix; + OssClient minioClient = OssFactory.instance(minioBucket); + UploadResult result = minioClient.upload(inputStream, originFileUrl, fileSize, MimeTypeUtils.IMAGE_JPG); +// MinioUtil.uploadFile(path,inputStream,); + + inputStream.close(); + return result.getUrl(); // 返回 MinIO 的访问地址 + } catch (IOException e) { + throw new RuntimeException("上传图片失败", e); + } + } + @Override public Double getGimbalYawDegree(String fileId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 21ec388..b7aaa42 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -214,7 +214,7 @@ public class AiCompareServiceImpl implements IAiCompareService { aiCompareEntity.setId(frameDTO.getCompareId()); aiCompareMapper.updateById(aiCompareEntity); frameDTO.setJobName(aiCompareEntity.getJobName()); - String originFileUrl = frameDTO.getFileUrl(); + String originFileUrl = frameDTO.getFileUrl();//waiwang/b0c5dc04-6232-4762-b748-16f8e6ea04ed/DJI_202506010857_001_b0c5dc04-6232-4762-b748-16f8e6ea04ed/DJI_20250601085925_0001_V.jpeg String fileUrl = fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE, originFileUrl, 3600).toString(); frameDTO.setFileUrl(fileUrl); String originMateFileUrl = frameDTO.getMateFileUrl(); @@ -234,9 +234,20 @@ public class AiCompareServiceImpl implements IAiCompareService { //图片处理 // fileService.get(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, 3600); - //复制原图到指定bucket - String copyFileUrl = fileService.copyFile(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, MinIOConstants.BUCKET_DKCY); + //复制原图到指定bucket //mediafile + // originMateFileUrl:waiwang/b9e5ae94-e290-43af-9f66-12031580aba1/DJI_202506020949_001_b9e5ae94-e290-43af-9f66-12031580aba1/DJI_20250602095106_0001_V.jpeg + String linkType = ""; + if(StrUtil.startWith(fileUrl,"http")){ + linkType = "http"; + //http://yq-dajiang.oss-cn-hangzhou.aliyuncs.com/waiwang/56055519-3189-4af9-b4ea-56fe06df3082/DJI_202506010952_001_56055519-3189-4af9-b4ea-56fe06df3082/DJI_20250601100131_0001_V.jpeg + String fileUrlStr = fileService.copyFileHttp(fileUrl, originFileUrl, MinIOConstants.BUCKET_DKCY); + String fileMateUrlStr = fileService.copyFileHttp(mateFileUrl, originMateFileUrl, MinIOConstants.BUCKET_DKCY); + }else{ + String copyFileUrl = fileService.copyFile(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, MinIOConstants.BUCKET_DKCY); // String copyFileUrl = fileService.copyFile(MinIOConstants.BUCKET_MEDIAFILE, originFileUrl, MinIOConstants.BUCKET_ALERT); + } + + ArrayList alertVoList = new ArrayList<>(); //手动简化逻辑,上传图片 int frameCount =0; diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java index 410a68b..41c4851 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java @@ -41,6 +41,7 @@ public class RemotePostServiceImpl implements RemotePostService { remotePostVo.setPostName(aiLabel.getPostName()); remotePostVo.setPostCode(aiLabel.getPostCode()); remotePostVo.setStatus(aiLabel.getStatus()); + remotePostVo.setPostCategory(aiLabel.getPostCategory()); return remotePostVo; }) .collect(Collectors.toList());