1.图像列表上传增加入库,避免两步操作时无法拿到上传的数据

This commit is contained in:
cuizhibin 2025-07-04 13:40:47 +08:00
parent caf716c126
commit cffae035db
7 changed files with 59 additions and 59 deletions

View File

@ -17,6 +17,7 @@ public class Message implements Serializable {
public static final String ATTACH_FILE_IS_NOT_EXIST = "不存在{}的附件文件"; public static final String ATTACH_FILE_IS_NOT_EXIST = "不存在{}的附件文件";
public static final String IMAGE_PATH_IS_NOT_EXIST = "图像地址不存在"; public static final String IMAGE_PATH_IS_NOT_EXIST = "图像地址不存在";
public static final String IMAGE_ID_IS_NOT_EXIST = "图像id不存在"; public static final String IMAGE_ID_IS_NOT_EXIST = "图像id不存在";
public static final String IMAGE_SOURCE_IS_NOT_EXIST = "图像类型不存在";
public static final String DEFECT_ID_IS_NOT_EXIST = "缺陷id不存在"; public static final String DEFECT_ID_IS_NOT_EXIST = "缺陷id不存在";
public static final String PROJECT_ID_IS_NOT_EXIST = "项目id不存在"; public static final String PROJECT_ID_IS_NOT_EXIST = "项目id不存在";
public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在"; public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在";

View File

@ -2,10 +2,7 @@ package com.dite.znpt.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dite.znpt.domain.entity.DefectEntity; import com.dite.znpt.domain.entity.DefectEntity;
import com.dite.znpt.domain.vo.DefectListReq; import com.dite.znpt.domain.vo.*;
import com.dite.znpt.domain.vo.DefectReq;
import com.dite.znpt.domain.vo.DefectResp;
import com.dite.znpt.domain.vo.OutWorkDefectReq;
import java.util.List; import java.util.List;
@ -75,5 +72,15 @@ public interface DefectService extends IService<DefectEntity> {
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
void deleteById(String defectId); void deleteById(String defectId);
/**
* 功能描述缺陷自动检测
*
* @param markReq 马克请求类
* @return {@link DefectResp }
* @author cuizhibin
* @date 2025/07/04 10:55
**/
DefectResp detect(DefectMarkReq markReq);
} }

View File

@ -23,7 +23,7 @@ public interface ImageService extends IService<ImageEntity> {
ImageResp detail(String imageId); ImageResp detail(String imageId);
List<ImageReq> batchUploadDefectImage(String partId, String imageSource, MultipartFile[] files); List<ImageReq> batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files);
List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException; List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException;

View File

@ -11,12 +11,13 @@ import com.dite.znpt.enums.DefectSourceEnum;
import com.dite.znpt.enums.DefectTypeEnum; import com.dite.znpt.enums.DefectTypeEnum;
import com.dite.znpt.enums.RepairStatusEnum; import com.dite.znpt.enums.RepairStatusEnum;
import com.dite.znpt.exception.ServiceException; import com.dite.znpt.exception.ServiceException;
import com.dite.znpt.service.DefectService;
import com.dite.znpt.mapper.DefectMapper; import com.dite.znpt.mapper.DefectMapper;
import com.dite.znpt.service.DefectService;
import com.dite.znpt.service.ImageService; import com.dite.znpt.service.ImageService;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import com.dite.znpt.util.PageUtil; import com.dite.znpt.util.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -36,6 +37,8 @@ import java.util.stream.Collectors;
public class DefectServiceImpl extends ServiceImpl<DefectMapper, DefectEntity> implements DefectService { public class DefectServiceImpl extends ServiceImpl<DefectMapper, DefectEntity> implements DefectService {
@Resource @Resource
private ImageService imageService; private ImageService imageService;
@Autowired
private MultiModelYoloService multiModelYoloService;
/** /**
* 功能描述查询缺陷记录列表 * 功能描述查询缺陷记录列表
@ -150,4 +153,17 @@ public class DefectServiceImpl extends ServiceImpl<DefectMapper, DefectEntity> i
this.removeById(defectId); this.removeById(defectId);
} }
/**
* 功能描述缺陷自动检测
*
* @param markReq 马克请求类
* @return {@link DefectResp }
* @author cuizhibin
* @date 2025/07/04 10:55
**/
@Override
public DefectResp detect(DefectMarkReq markReq) {
// multiModelYoloService.runFolderDetection();
return null;
}
} }

View File

@ -17,10 +17,7 @@ import com.dite.znpt.domain.entity.ImageCollectEntity;
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.vo.*; import com.dite.znpt.domain.vo.*;
import com.dite.znpt.enums.FilePathEnum; import com.dite.znpt.enums.*;
import com.dite.znpt.enums.ImageTypeEnum;
import com.dite.znpt.enums.ShootingMethodEnum;
import com.dite.znpt.enums.WeatherEnum;
import com.dite.znpt.exception.ServiceException; import com.dite.znpt.exception.ServiceException;
import com.dite.znpt.mapper.ImageMapper; import com.dite.znpt.mapper.ImageMapper;
import com.dite.znpt.service.AudioFileInfoService; import com.dite.znpt.service.AudioFileInfoService;
@ -134,7 +131,10 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public List<ImageReq> batchUploadDefectImage(String partId, String imageSource, MultipartFile[] files) { public List<ImageReq> batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files) {
if (StrUtil.isEmpty(imageSource) || Objects.nonNull(ImageSourceEnum.getByCode(imageSource))) {
throw new ServiceException(Message.IMAGE_SOURCE_IS_NOT_EXIST);
}
if(null == partService.getById(partId)){ if(null == partService.getById(partId)){
throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); throw new ServiceException(Message.PART_ID_IS_NOT_EXIST);
} }
@ -148,17 +148,29 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
temCategory.mkdirs(); temCategory.mkdirs();
} }
String temPathPrefix = FilePathEnum.IMAGE_TEMP.getFileAbsolutePathPrefix().concat(imageSource).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR); String temPathPrefix = FilePathEnum.IMAGE_TEMP.getFileAbsolutePathPrefix().concat(imageSource).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR);
ImageCollectEntity imageCollect = BeanUtil.copyProperties(collectReq, ImageCollectEntity.class);
imageCollect.setCollectId(IdUtil.simpleUUID());
List<ImageEntity> imageList = new ArrayList<>();
for (MultipartFile file : files) { for (MultipartFile file : files) {
ImageEntity imageEntity = new ImageEntity();
if (!file.isEmpty()) { if (!file.isEmpty()) {
try { try {
String path = temPathPrefix + file.getOriginalFilename(); String path = temPathPrefix + file.getOriginalFilename();
FileUtil.writeBytes(file.getBytes(),path); FileUtil.writeBytes(file.getBytes(),path);
list.add(imageRespBuilder(path)); ImageReq imageReq = imageRespBuilder(path);
BeanUtil.copyProperties(imageReq, imageEntity);
list.add(imageReq);
imageEntity.setImagePath(path);
imageEntity.setPartId(partId);
imageEntity.setCollectId(imageCollect.getCollectId());
imageList.add(imageEntity);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
imageCollectService.save(imageCollect);
baseMapper.insert(imageList);
return list; return list;
} }

View File

@ -1,25 +1,16 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.PageResult;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.entity.DefectEntity;
import com.dite.znpt.domain.vo.DefectListReq; import com.dite.znpt.domain.vo.DefectListReq;
import com.dite.znpt.domain.vo.DefectMarkReq; import com.dite.znpt.domain.vo.DefectMarkReq;
import com.dite.znpt.domain.vo.DefectReq; import com.dite.znpt.domain.vo.DefectReq;
import com.dite.znpt.domain.vo.DefectResp; import com.dite.znpt.domain.vo.DefectResp;
import com.dite.znpt.service.DefectService; import com.dite.znpt.service.DefectService;
import com.dite.znpt.service.impl.MultiModelYoloService;
import com.dite.znpt.util.ValidationGroup; import com.dite.znpt.util.ValidationGroup;
import com.pig4cloud.plugin.excel.annotation.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -36,8 +27,6 @@ import java.util.List;
public class DefectController { public class DefectController {
@Resource @Resource
private DefectService defectService; private DefectService defectService;
@Autowired
private MultiModelYoloService multiModelYoloService;
@ApiOperation(value = "分页查询缺陷记录列表", httpMethod = "GET") @ApiOperation(value = "分页查询缺陷记录列表", httpMethod = "GET")
@GetMapping("/page") @GetMapping("/page")
@ -78,35 +67,10 @@ public class DefectController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "导出缺陷记录", httpMethod = "GET")
@GetMapping("/export")
@ResponseExcel(name = "缺陷记录")
public List<DefectResp> export(DefectListReq defectReq) {
return defectService.page(defectReq);
}
@ApiOperation(value = "导入缺陷记录", httpMethod = "POST")
@PostMapping("/import")
public Result<Object> importData(@RequestExcel List<DefectEntity> dataList, BindingResult bindingResult) {
// JSR 303 校验通用校验获取失败的数据
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
if (errorMessageList != null && !errorMessageList.isEmpty()) {
return Result.error(Constants.SERVICE_EXCEPTION, "导入失败");
}
return Result.okM("导入"+dataList.size()+"条数据");
}
@ApiOperation(value = "单图自动标注缺陷", httpMethod = "POST") @ApiOperation(value = "单图自动标注缺陷", httpMethod = "POST")
@PostMapping("/run") @PostMapping("/run")
public ResponseEntity<String> runBatch(@Validated(ValidationGroup.Request.class) @RequestBody DefectMarkReq markReq, public Result<DefectResp> runBatch(@Validated(ValidationGroup.Request.class) @RequestBody DefectMarkReq markReq) {
@RequestParam("outputDir") String outputDir, return Result.ok(defectService.detect(markReq));
@RequestParam("confThreshold") Float confThreshold) {
try {
// multiModelYoloService.runFolderDetection(modelId, inputDir, outputDir, confThreshold);
return ResponseEntity.ok("批量推理完成");
} catch (Exception e) {
return ResponseEntity.status(500).body("处理失败:" + e.getMessage());
}
} }
} }

View File

@ -51,16 +51,16 @@ public class ImageController {
} }
@ApiOperation(value = "批量上传图像", httpMethod = "POST") @ApiOperation(value = "批量上传图像", httpMethod = "POST")
@PostMapping("/upload-batch/{partId}") @PostMapping("/{imageSource}/upload-batch/{partId}")
public Result<List<ImageReq>> uploadBatch(@PathVariable String partId, @RequestParam("files") MultipartFile[] files) { public Result<List<ImageReq>> uploadBatch(@PathVariable String imageSource, @PathVariable String partId, ImageCollectReq collectReq, @RequestParam("files") MultipartFile[] files) {
return Result.ok(imageService.batchUploadDefectImage(partId, ImageSourceEnum.COLLECT.getCode(), files)); return Result.ok(imageService.batchUploadDefectImage(partId, imageSource, collectReq, files));
} }
@ApiOperation(value = "外部工作上传图像", httpMethod = "POST") @ApiOperation(value = "上传图像", httpMethod = "POST")
@PostMapping("/out-work/upload/{partId}") @PostMapping("/{imageSource}/upload/{partId}")
public Result<String> uploadOutWork( @PathVariable String partId, @RequestParam("file") MultipartFile file) { public Result<String> uploadOutWork(@PathVariable String imageSource, @PathVariable String partId, ImageCollectReq collectReq, @RequestParam("file") MultipartFile file) {
MultipartFile[] files = {file}; MultipartFile[] files = {file};
return Result.ok(imageService.batchUploadDefectImage(partId, ImageSourceEnum.OUT_WORK.getCode(), files).get(0).getImagePath()); return Result.ok(imageService.batchUploadDefectImage(partId, ImageSourceEnum.OUT_WORK.getCode(), collectReq, files).get(0).getImagePath());
} }
@ApiOperation(value = "设置信息", httpMethod = "POST") @ApiOperation(value = "设置信息", httpMethod = "POST")