feature:1.新增获取APP上传的图片列表接口
This commit is contained in:
parent
da92479da0
commit
824a1e8492
|
@ -0,0 +1,23 @@
|
||||||
|
package com.dite.znpt.domain.bo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.dite.znpt.domain.entity.PartEntity;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class PartFullInfoBo extends PartEntity {
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String turbineName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目id")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.dite.znpt.domain.entity.ImageEntity;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class AppImageResp extends ImageEntity {
|
||||||
|
|
||||||
|
@ApiModelProperty("部件名称")
|
||||||
|
private String partName;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组号")
|
||||||
|
private String turbineId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String turbineName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目id")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("上传用户")
|
||||||
|
private String uploadUser;
|
||||||
|
}
|
|
@ -28,4 +28,10 @@ public interface ImageService extends IService<ImageEntity> {
|
||||||
List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException;
|
List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException;
|
||||||
|
|
||||||
void delete(String imageId);
|
void delete(String imageId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页列出APP上传的图片,并关联查询机组信息
|
||||||
|
* @return {@link List }<{@link AppImageResp }>
|
||||||
|
*/
|
||||||
|
List<AppImageResp> listAppUploadImages();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.dite.znpt.service;
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.bo.PartFullInfoBo;
|
||||||
import com.dite.znpt.domain.entity.PartEntity;
|
import com.dite.znpt.domain.entity.PartEntity;
|
||||||
import com.dite.znpt.domain.vo.PartListReq;
|
import com.dite.znpt.domain.vo.PartListReq;
|
||||||
import com.dite.znpt.domain.vo.PartListResp;
|
import com.dite.znpt.domain.vo.PartListResp;
|
||||||
|
@ -82,5 +83,11 @@ public interface PartService extends IService<PartEntity> {
|
||||||
**/
|
**/
|
||||||
void deleteByTurbineIds(List<String> turbineIds);
|
void deleteByTurbineIds(List<String> turbineIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询完整部件信息,包含机组、项目
|
||||||
|
* @param partIds
|
||||||
|
* @return {@link List }<{@link PartFullInfoBo }>
|
||||||
|
*/
|
||||||
|
List<PartFullInfoBo> listInfos(List<String> partIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
package com.dite.znpt.service.impl;
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import cn.hutool.core.io.file.PathUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.dite.znpt.constant.Message;
|
import com.dite.znpt.constant.Message;
|
||||||
|
import com.dite.znpt.domain.bo.PartFullInfoBo;
|
||||||
import com.dite.znpt.domain.entity.ImageEntity;
|
import com.dite.znpt.domain.entity.ImageEntity;
|
||||||
import com.dite.znpt.domain.entity.PartEntity;
|
import com.dite.znpt.domain.entity.PartEntity;
|
||||||
|
import com.dite.znpt.domain.page.PageDomain;
|
||||||
import com.dite.znpt.domain.vo.*;
|
import com.dite.znpt.domain.vo.*;
|
||||||
import com.dite.znpt.enums.ImageSourceEnum;
|
import com.dite.znpt.enums.ImageSourceEnum;
|
||||||
import com.dite.znpt.enums.ImageTypeEnum;
|
import com.dite.znpt.enums.ImageTypeEnum;
|
||||||
|
@ -31,13 +35,16 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.nio.file.FileVisitResult;
|
||||||
|
import java.nio.file.FileVisitor;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.SimpleFileVisitor;
|
||||||
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -172,8 +179,7 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
|
||||||
for (MultipartFile multipartFile : files) {
|
for (MultipartFile multipartFile : files) {
|
||||||
String path = path_prefix + multipartFile.getOriginalFilename();
|
String path = path_prefix + multipartFile.getOriginalFilename();
|
||||||
FileUtil.writeBytes(multipartFile.getBytes(),path);
|
FileUtil.writeBytes(multipartFile.getBytes(),path);
|
||||||
String url = FileUtil.FILE_SEPARATOR.concat("static").concat(FileUtil.FILE_SEPARATOR).concat("image").concat(StrUtil.SLASH).concat(StrUtil.removePrefix(path, permPath));
|
result.add(getImageDownPath(StrUtil.removePrefix(path, permPath)));
|
||||||
result.add(StrUtil.replace(url, FileUtil.FILE_SEPARATOR, StrUtil.SLASH));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -203,8 +209,7 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
|
||||||
req.setCameraManufacturer(obj.getStr("Make"));
|
req.setCameraManufacturer(obj.getStr("Make"));
|
||||||
req.setCameraModel(obj.getStr("Model"));
|
req.setCameraModel(obj.getStr("Model"));
|
||||||
req.setImageName(obj.getStr("File Name"));
|
req.setImageName(obj.getStr("File Name"));
|
||||||
String url = FileUtil.FILE_SEPARATOR.concat("static").concat(FileUtil.FILE_SEPARATOR).concat("image").concat(FileUtil.FILE_SEPARATOR).concat("temp").concat(StrUtil.SLASH).concat(StrUtil.removePrefix(path, tempPath));
|
req.setImagePath(getTmpImageDownPath(StrUtil.removePrefix(path, tempPath)));
|
||||||
req.setImagePath(StrUtil.replace(url, FileUtil.FILE_SEPARATOR, StrUtil.SLASH));
|
|
||||||
BigDecimal imageSize = new BigDecimal(extractDigit(obj.getStr("File Size"))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP);
|
BigDecimal imageSize = new BigDecimal(extractDigit(obj.getStr("File Size"))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP);
|
||||||
req.setImageSize(imageSize.toString().concat("M"));
|
req.setImageSize(imageSize.toString().concat("M"));
|
||||||
req.setImageWidth(extractDigit(obj.getStr("Image Width")));
|
req.setImageWidth(extractDigit(obj.getStr("Image Width")));
|
||||||
|
@ -258,4 +263,92 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能描述:获取图像下载路径
|
||||||
|
*
|
||||||
|
* @param relativePath
|
||||||
|
* @return {@link String }
|
||||||
|
* @author cuizhibin
|
||||||
|
* @date 2025/06/06 09:07
|
||||||
|
**/
|
||||||
|
public static String getImageDownPath(String relativePath) {
|
||||||
|
String url = StrUtil.SLASH.concat("static").concat(StrUtil.SLASH).concat("image").concat(StrUtil.SLASH).concat(relativePath);
|
||||||
|
return StrUtil.replace(url, FileUtil.FILE_SEPARATOR, StrUtil.SLASH);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 功能描述:获取tmp图像下载路径
|
||||||
|
*
|
||||||
|
* @param relativePath
|
||||||
|
* @return {@link String }
|
||||||
|
* @author cuizhibin
|
||||||
|
* @date 2025/06/06 09:07
|
||||||
|
**/
|
||||||
|
public static String getTmpImageDownPath(String relativePath) {
|
||||||
|
String url = StrUtil.SLASH.concat("static").concat(StrUtil.SLASH).concat("image").concat(StrUtil.SLASH).concat("temp").concat(StrUtil.SLASH).concat(relativePath);
|
||||||
|
return StrUtil.replace(url, FileUtil.FILE_SEPARATOR, StrUtil.SLASH);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppImageResp> listAppUploadImages() {
|
||||||
|
List<String> filePaths = new ArrayList<>();
|
||||||
|
PathUtil.walkFiles(Path.of(permPath), new SimpleFileVisitor<>() {
|
||||||
|
@Override
|
||||||
|
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
|
||||||
|
if (path.toFile().isFile()) {
|
||||||
|
String relativePath = StrUtil.removePrefix(path.toFile().getAbsolutePath(), permPath);
|
||||||
|
filePaths.add(getImageDownPath(relativePath));
|
||||||
|
}
|
||||||
|
return FileVisitResult.CONTINUE;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 查询图片关联记录
|
||||||
|
List<ImageEntity> imageList = new ArrayList<>();
|
||||||
|
CollUtil.split(filePaths, 1000).forEach(paths -> {
|
||||||
|
imageList.addAll(lambdaQuery().in(ImageEntity::getImagePath, paths).list());
|
||||||
|
});
|
||||||
|
Map<String, ImageEntity> imageMap = imageList.stream()
|
||||||
|
.collect(Collectors.toMap(ImageEntity::getImagePath, Function.identity(), (a, b) -> a));
|
||||||
|
|
||||||
|
// 查询部件信息
|
||||||
|
Map<String, PartFullInfoBo> partInfoMap = new HashMap<>();
|
||||||
|
CollUtil.split(imageList, 1000).forEach(images -> {
|
||||||
|
List<String> partIds = images.stream().map(ImageEntity::getPartId).collect(Collectors.toList());
|
||||||
|
List<PartFullInfoBo> partList = partService.listInfos(partIds);
|
||||||
|
partInfoMap.putAll(partList.stream().collect(Collectors.toMap(PartFullInfoBo::getPartId, Function.identity())));
|
||||||
|
});
|
||||||
|
|
||||||
|
// 将信息写入返回实体
|
||||||
|
List<AppImageResp> respList = new ArrayList<>();
|
||||||
|
for (String filePath : filePaths) {
|
||||||
|
AppImageResp resp = new AppImageResp();
|
||||||
|
resp.setImagePath(filePath);
|
||||||
|
|
||||||
|
List<String> split = StrUtil.split(filePath, StrUtil.SLASH, true, true);
|
||||||
|
|
||||||
|
ImageEntity image = imageMap.get(filePath);
|
||||||
|
if (image != null) {
|
||||||
|
BeanUtil.copyProperties(image, resp);
|
||||||
|
PartFullInfoBo part = partInfoMap.get(image.getPartId());
|
||||||
|
if (part != null) {
|
||||||
|
resp.setPartId(part.getPartId());
|
||||||
|
resp.setPartName(part.getPartName());
|
||||||
|
resp.setTurbineId(part.getTurbineId());
|
||||||
|
resp.setTurbineName(part.getTurbineName());
|
||||||
|
resp.setProjectId(part.getProjectId());
|
||||||
|
resp.setProjectName(part.getProjectName());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List<String> gps = StrUtil.split(split.get(5), " ");
|
||||||
|
resp.setLongitude(gps.get(0));
|
||||||
|
resp.setLatitude(gps.get(1));
|
||||||
|
resp.setAltitude(gps.get(2));
|
||||||
|
}
|
||||||
|
resp.setUploadUser(split.get(4));
|
||||||
|
resp.setImageType(split.get(2));
|
||||||
|
|
||||||
|
respList.add(resp);
|
||||||
|
}
|
||||||
|
return respList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package com.dite.znpt.service.impl;
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.dite.znpt.constant.Message;
|
import com.dite.znpt.constant.Message;
|
||||||
import com.dite.znpt.converts.Converts;
|
import com.dite.znpt.converts.Converts;
|
||||||
|
import com.dite.znpt.domain.bo.PartFullInfoBo;
|
||||||
import com.dite.znpt.domain.entity.PartEntity;
|
import com.dite.znpt.domain.entity.PartEntity;
|
||||||
import com.dite.znpt.domain.entity.ProjectEntity;
|
import com.dite.znpt.domain.entity.ProjectEntity;
|
||||||
import com.dite.znpt.domain.entity.TurbineEntity;
|
import com.dite.znpt.domain.entity.TurbineEntity;
|
||||||
|
@ -15,6 +17,7 @@ import com.dite.znpt.domain.vo.PartResp;
|
||||||
import com.dite.znpt.enums.PartTypeEnum;
|
import com.dite.znpt.enums.PartTypeEnum;
|
||||||
import com.dite.znpt.exception.ServiceException;
|
import com.dite.znpt.exception.ServiceException;
|
||||||
import com.dite.znpt.mapper.PartMapper;
|
import com.dite.znpt.mapper.PartMapper;
|
||||||
|
import com.dite.znpt.mapper.TurbineMapper;
|
||||||
import com.dite.znpt.service.PartService;
|
import com.dite.znpt.service.PartService;
|
||||||
import com.dite.znpt.service.ProjectService;
|
import com.dite.znpt.service.ProjectService;
|
||||||
import com.dite.znpt.service.TurbineService;
|
import com.dite.znpt.service.TurbineService;
|
||||||
|
@ -25,6 +28,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
|
@ -160,5 +166,19 @@ public class PartServiceImpl extends ServiceImpl<PartMapper, PartEntity> impleme
|
||||||
this.baseMapper.delete(Wrappers.<PartEntity>lambdaQuery().in(PartEntity::getTurbineId, turbineIds));
|
this.baseMapper.delete(Wrappers.<PartEntity>lambdaQuery().in(PartEntity::getTurbineId, turbineIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PartFullInfoBo> listInfos(List<String> partIds) {
|
||||||
|
List<PartEntity> list = lambdaQuery().in(PartEntity::getPartId, partIds).list();
|
||||||
|
List<TurbineEntity> turbineList = turbineService.lambdaQuery().in(TurbineEntity::getTurbineId, list.stream().map(PartEntity::getTurbineId).collect(Collectors.toList())).list();
|
||||||
|
Map<String, TurbineEntity> turbineMap = turbineList.stream().collect(Collectors.toMap(TurbineEntity::getTurbineId, Function.identity()));
|
||||||
|
Map<String, ProjectEntity> projectMap = projectService.lambdaQuery().in(ProjectEntity::getProjectId, turbineList.stream().map(TurbineEntity::getProjectId).collect(Collectors.toList())).list()
|
||||||
|
.stream().collect(Collectors.toMap(ProjectEntity::getProjectId, Function.identity()));
|
||||||
|
return BeanUtil.copyToList(list, PartFullInfoBo.class).stream().peek(partBo -> {
|
||||||
|
TurbineEntity turbineEntity = turbineMap.get(partBo.getTurbineId());
|
||||||
|
ProjectEntity projectEntity = projectMap.get(turbineEntity.getProjectId());
|
||||||
|
partBo.setTurbineName(turbineEntity.getTurbineName());
|
||||||
|
partBo.setProjectId(projectEntity.getProjectId());
|
||||||
|
partBo.setProjectName(projectEntity.getProjectName());
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.dite.znpt.web.controller;
|
||||||
|
|
||||||
import com.dite.znpt.constant.Message;
|
import com.dite.znpt.constant.Message;
|
||||||
import com.dite.znpt.domain.Result;
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.vo.AppImageResp;
|
||||||
import com.dite.znpt.domain.vo.ImageWorkReq;
|
import com.dite.znpt.domain.vo.ImageWorkReq;
|
||||||
import com.dite.znpt.enums.*;
|
import com.dite.znpt.enums.*;
|
||||||
import com.dite.znpt.exception.ServiceException;
|
import com.dite.znpt.exception.ServiceException;
|
||||||
|
@ -14,6 +15,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: gaoxiong
|
* @Author: gaoxiong
|
||||||
|
@ -141,6 +143,12 @@ public class CommonController {
|
||||||
return Result.ok(imageService.batchUploadCommonImage(imageSource, workReq, files));
|
return Result.ok(imageService.batchUploadCommonImage(imageSource, workReq, files));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "获取APP上传的图片列表", httpMethod = "POST")
|
||||||
|
@GetMapping("/list/app-upload-images")
|
||||||
|
public Result<List<AppImageResp>> listAppUploadImages() throws IOException {
|
||||||
|
return Result.ok(imageService.listAppUploadImages());
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "查询菜单类型", httpMethod = "GET")
|
@ApiOperation(value = "查询菜单类型", httpMethod = "GET")
|
||||||
@GetMapping("/list/menu-type")
|
@GetMapping("/list/menu-type")
|
||||||
public Result listMenuType(){
|
public Result listMenuType(){
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class DeptController {
|
||||||
return Result.ok(deptService.detail(deptId));
|
return Result.ok(deptService.detail(deptId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "新增部门信息", httpMethod = "Post")
|
@ApiOperation(value = "新增部门信息", httpMethod = "POST")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody DeptReq req) {
|
public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody DeptReq req) {
|
||||||
deptService.save(req);
|
deptService.save(req);
|
||||||
|
|
Loading…
Reference in New Issue