1.图像列表上传增加入库,避免两步操作时无法拿到上传的数据
This commit is contained in:
parent
caf716c126
commit
cffae035db
|
@ -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不存在";
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in New Issue