2023-01-06 15:17:37 +08:00
|
|
|
package com.ai.da.controller;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
|
|
import cn.hutool.system.UserInfo;
|
|
|
|
|
import com.ai.da.common.config.FileProperties;
|
2023-10-04 06:47:48 +08:00
|
|
|
import com.ai.da.common.config.exception.BusinessException;
|
2023-01-06 15:17:37 +08:00
|
|
|
import com.ai.da.common.context.UserContext;
|
|
|
|
|
import com.ai.da.common.enums.LibraryLevel1TypeEnum;
|
|
|
|
|
import com.ai.da.common.response.PageBaseResponse;
|
|
|
|
|
import com.ai.da.common.response.Response;
|
2023-09-29 21:44:43 +08:00
|
|
|
import com.ai.da.common.utils.*;
|
2023-01-06 15:17:37 +08:00
|
|
|
import com.ai.da.mapper.entity.Library;
|
|
|
|
|
import com.ai.da.mapper.entity.LibraryModelPoint;
|
|
|
|
|
import com.ai.da.model.dto.*;
|
2023-10-04 14:58:06 +08:00
|
|
|
import com.ai.da.model.enums.ModelType;
|
2023-01-06 15:17:37 +08:00
|
|
|
import com.ai.da.model.vo.*;
|
|
|
|
|
import com.ai.da.service.LibraryModelPointService;
|
|
|
|
|
import com.ai.da.service.LibraryService;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
2023-09-29 21:44:43 +08:00
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
2023-01-06 15:17:37 +08:00
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import javax.validation.Valid;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Api(tags = "library模块")
|
|
|
|
|
@Slf4j
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/api/library")
|
|
|
|
|
public class LibraryController {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private LibraryService libraryService;
|
|
|
|
|
@Resource
|
|
|
|
|
private LibraryModelPointService libraryModelPointService;
|
|
|
|
|
@Resource
|
|
|
|
|
private FileProperties fileProperties;
|
2023-09-29 21:44:43 +08:00
|
|
|
@Resource
|
|
|
|
|
private MinioUtil minioUtil;
|
2023-01-06 15:17:37 +08:00
|
|
|
|
|
|
|
|
@ApiOperation(value = "Library分页列表")
|
|
|
|
|
@PostMapping("/queryLibraryPage")
|
|
|
|
|
public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryPage(@Valid @RequestBody QueryLibraryPageDTO query) {
|
|
|
|
|
return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query,QueryLibraryPageServiceDTO.class)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "Library分页列表(查询top和bottom)")
|
|
|
|
|
@PostMapping("/queryLibraryTopAndBottomPage")
|
|
|
|
|
public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryTopAndBottomPage(@Valid @RequestBody QueryLibraryTopPageDTO query) {
|
|
|
|
|
return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query,QueryLibraryPageServiceDTO.class)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "Library文件上传")
|
|
|
|
|
@PostMapping("/upload")
|
|
|
|
|
public Response<LibraryUpdateVo> upload(@RequestParam("file") MultipartFile file,
|
|
|
|
|
@ApiParam("一级类型 Moodboard Printboard Sketchboard MarketingSketch Models")
|
|
|
|
|
@RequestParam(value = "level1Type") String level1Type,
|
|
|
|
|
@ApiParam("二级类型 争对 Sketchboard; 有 Outwear Dress Blouse Skirt Trousers")
|
|
|
|
|
@RequestParam(value = "level2Type",required = false) String level2Type,
|
|
|
|
|
@ApiParam("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
|
2023-10-04 06:47:48 +08:00
|
|
|
@RequestParam(value = "timeZone") String timeZone,
|
|
|
|
|
@RequestParam(value = "modelType") String modelType,
|
2023-10-18 14:58:12 +08:00
|
|
|
@RequestParam(value = "sex") String sex,
|
|
|
|
|
@RequestParam(value = "checkMd5") Integer checkMd5) {
|
2023-01-06 15:17:37 +08:00
|
|
|
Assert.isTrue(!StringUtils.isEmpty(file.getOriginalFilename()),"Please select a file!");
|
|
|
|
|
Integer high =null;
|
|
|
|
|
Integer width =null;
|
|
|
|
|
if(level1Type.equals(LibraryLevel1TypeEnum.MODELS.getRealName())){
|
2023-10-04 06:47:48 +08:00
|
|
|
if (StringUtils.isEmpty(modelType)) {
|
|
|
|
|
throw new BusinessException("modelType can't be null");
|
|
|
|
|
}
|
2023-10-04 14:58:06 +08:00
|
|
|
if (modelType.equals(ModelType.SYSTEM.getValue()) && StringUtils.isEmpty(sex)) {
|
2023-10-04 06:47:48 +08:00
|
|
|
throw new BusinessException("sex can't be null");
|
|
|
|
|
}
|
2023-01-06 15:17:37 +08:00
|
|
|
FileVO fileVO = FileUtil.getFileSize(file);
|
|
|
|
|
high = fileVO.getHigh();
|
|
|
|
|
width = fileVO.getWidth();
|
|
|
|
|
}
|
2023-10-18 14:58:12 +08:00
|
|
|
String md5 = MD5Utils.encryptFile(file);
|
|
|
|
|
if (checkMd5 == null || checkMd5 == 1) {
|
|
|
|
|
libraryService.checkMd5(level1Type, level2Type, sex, md5);
|
|
|
|
|
}
|
2023-01-06 15:17:37 +08:00
|
|
|
return Response.success(libraryService.upload(new LibraryUploadDTO(file, level1Type,level2Type,
|
2023-10-18 14:58:12 +08:00
|
|
|
timeZone, md5,high,width,modelType,sex)));
|
2023-01-06 15:17:37 +08:00
|
|
|
}
|
|
|
|
|
@ApiOperation(value = "保存或者编辑template打点")
|
|
|
|
|
@PostMapping("/saveOrEditTemplatePoint")
|
|
|
|
|
public Response<LibraryModelPointVO> saveOrEditTemplatePoint(@Valid @RequestBody LibraryModelPointDTO libraryModelPoint) {
|
|
|
|
|
return Response.success(libraryModelPointService.saveOrEditTemplatePoint(libraryModelPoint));
|
|
|
|
|
}
|
|
|
|
|
@ApiOperation(value = "批量Library修改用户文件名")
|
|
|
|
|
@PostMapping("/batchUpdateLibraryName")
|
|
|
|
|
public Response<Boolean> batchUpdateLibraryName(@Valid @RequestBody LibraryUpdateDTO libraryUpdateDTO) {
|
|
|
|
|
libraryService.updateLibraryName(libraryUpdateDTO);
|
|
|
|
|
return Response.success(Boolean.TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "批量删除library")
|
|
|
|
|
@PostMapping("/batchDeleteLibrary")
|
|
|
|
|
public Response<Boolean> batchDeleteLibrary(@Valid @RequestBody LibraryDeleteDTO deleteDTO) {
|
|
|
|
|
List<Library> librarys = libraryService.getByIds(deleteDTO.getLibraryIds());
|
|
|
|
|
Assert.notEmpty(librarys,"librarys does not exist!");
|
|
|
|
|
libraryService.removeBatchByIds(deleteDTO.getLibraryIds());
|
2023-09-29 21:44:43 +08:00
|
|
|
for (Library library : librarys) {
|
|
|
|
|
if (library.getUrl().startsWith("aida-sys-image")) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
minioUtil.deleteObject(library.getUrl());
|
|
|
|
|
}
|
2023-01-06 15:17:37 +08:00
|
|
|
return Response.success(Boolean.TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "Models打点预览")
|
|
|
|
|
@PostMapping("/modelsDot")
|
|
|
|
|
public Response<String> modelsDot(@ApiParam("file") @RequestPart(value = "file",required = false) MultipartFile file,
|
|
|
|
|
@ApiParam("models对象")@RequestPart("models") ModelsDotDTO modelsDotDTO) {
|
|
|
|
|
if(Objects.nonNull(file)){
|
|
|
|
|
Assert.isTrue(!StringUtils.isEmpty(file.getOriginalFilename()),"Please select a file!");
|
|
|
|
|
AuthPrincipalVo userInfo = UserContext.getUserHolder();
|
|
|
|
|
//需要宽高和地址参数design
|
|
|
|
|
FileVO fileVO = FileUtil.getFileSize(file);
|
|
|
|
|
modelsDotDTO.setHigh(fileVO.getHigh());
|
|
|
|
|
modelsDotDTO.setWidth(fileVO.getWidth());
|
|
|
|
|
//存储template临时地址
|
2023-10-16 10:53:37 +08:00
|
|
|
String path = calculateTempFileUrlNew(userInfo.getId());
|
|
|
|
|
String uploadPath = minioUtil.upload("aida-tmp", path, file);
|
2023-10-16 11:42:20 +08:00
|
|
|
String minioPath = libraryService.processMannequins(uploadPath);
|
|
|
|
|
modelsDotDTO.setTemplateUrl(minioPath);
|
2023-01-06 15:17:37 +08:00
|
|
|
}else{
|
|
|
|
|
Assert.notNull(modelsDotDTO.getLibraryId(),"libraryId cannot be empty!");
|
|
|
|
|
Assert.notNull(modelsDotDTO.getTemplateId(),"templateId cannot be empty!");
|
|
|
|
|
LibraryModelPoint modelPoint = libraryModelPointService.getById(modelsDotDTO.getTemplateId());
|
|
|
|
|
Assert.notNull(modelPoint,"template does not exist!");
|
|
|
|
|
Library library = libraryService.getById(modelsDotDTO.getLibraryId());
|
|
|
|
|
Assert.notNull(library,"library does not exist!");
|
|
|
|
|
modelsDotDTO.setHigh(library.getHigh());
|
|
|
|
|
modelsDotDTO.setWidth(library.getWidth());
|
|
|
|
|
modelsDotDTO.setTemplateUrl(library.getUrl());
|
|
|
|
|
}
|
|
|
|
|
Response<String> response =new Response();
|
|
|
|
|
log.info("Models打点预览入参####{}", JSON.toJSONString(modelsDotDTO));
|
|
|
|
|
String url = libraryModelPointService.modelsDot(modelsDotDTO);
|
2023-10-16 10:53:37 +08:00
|
|
|
response.setData(minioUtil.getPresignedUrl(url, 24 * 60));
|
2023-01-06 15:17:37 +08:00
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-29 21:44:43 +08:00
|
|
|
@ApiOperation(value = "更新sketchboard level2type")
|
|
|
|
|
@PostMapping("/updateLibraryLevel2Type")
|
|
|
|
|
public Response<Boolean> updateLibraryLevel2Type(@RequestBody LibraryLevel2TypeUpdateDTO libraryLevel2TypeUpdateDTO) {
|
|
|
|
|
return Response.success(libraryService.updateLibraryLevel2Type(libraryLevel2TypeUpdateDTO));
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-06 15:17:37 +08:00
|
|
|
private String calculateTempFileUrl(Long userId) {
|
|
|
|
|
String rootPath = fileProperties.getSys().getPath();
|
|
|
|
|
String day = DateUtil.dateToStr(new Date(), DateUtil.YYYYMM);
|
|
|
|
|
return rootPath + day + File.separator + "tmp" + File.separator + userId + File.separator+ UUID.randomUUID().toString();
|
|
|
|
|
}
|
2023-09-22 16:28:33 +08:00
|
|
|
|
2023-10-16 10:53:37 +08:00
|
|
|
private String calculateTempFileUrlNew(Long userId) {
|
|
|
|
|
return userId.toString();
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-06 15:17:37 +08:00
|
|
|
private String calculateTemplateUrl(File uploadFile){
|
|
|
|
|
String linuxDomain = fileProperties.getLinuxDomain();
|
|
|
|
|
if (!StringUtils.isEmpty(linuxDomain)) {
|
|
|
|
|
//linux 系统
|
|
|
|
|
String oldPath = fileProperties.getSys().getPath();
|
|
|
|
|
return uploadFile.getAbsolutePath().replace(oldPath, linuxDomain);
|
|
|
|
|
}
|
|
|
|
|
//本地用
|
|
|
|
|
// return "/home/pangkaicheng/python_code/Multi-layer-Virtual-Try-on/dataset_for_test/Img_model.png";
|
|
|
|
|
return "/workspace/python_code/Multi-layer-Virtual-Try-on/dataset_for_test/Img_model.png";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|