TASK:1、印花允许修改并保存
BUGFIX: 1、批量生成有的类型没有任务开始执行时间,任务结束时间有误
This commit is contained in:
@@ -84,4 +84,17 @@ public class Library implements Serializable {
|
|||||||
private Date updateDate;
|
private Date updateDate;
|
||||||
|
|
||||||
// private Integer isCopy;
|
// private Integer isCopy;
|
||||||
|
|
||||||
|
public Library() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Library(Long accountId, String level1Type, String level2Type, String level3Type, String url, String md5, Date createDate) {
|
||||||
|
this.accountId = accountId;
|
||||||
|
this.level1Type = level1Type;
|
||||||
|
this.level2Type = level2Type;
|
||||||
|
this.level3Type = level3Type;
|
||||||
|
this.url = url;
|
||||||
|
this.md5 = md5;
|
||||||
|
this.createDate = createDate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,39 @@ import io.swagger.annotations.ApiModel;
|
|||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Pattern;
|
||||||
|
|
||||||
@ApiModel("修改imageToSketch提取出的sketch")
|
@ApiModel("修改imageToSketch提取出的sketch")
|
||||||
@Data
|
@Data
|
||||||
public class GenerateModifyDTO {
|
public class GenerateModifyDTO {
|
||||||
@NotNull(message = "image cannot be empty")
|
@NotBlank(message = "image cannot be empty")
|
||||||
@ApiModelProperty(value = "需要保存的图片的base64格式", required = true)
|
@ApiModelProperty(value = "需要保存的图片的base64格式", required = true)
|
||||||
private String base64;
|
private String base64;
|
||||||
|
|
||||||
@NotNull(message = "gender cannot be empty")
|
@NotBlank(message = "gender cannot be empty")
|
||||||
@ApiModelProperty(value = "sketch所属性别", required = true)
|
@ApiModelProperty(value = "sketch所属性别", required = true)
|
||||||
private String gender;
|
private String gender;
|
||||||
|
|
||||||
@NotNull(message = "category cannot be empty")
|
@NotBlank(message = "category cannot be empty")
|
||||||
@ApiModelProperty(value = "sketch所属分类", required = true)
|
@ApiModelProperty(value = "sketch所属分类", required = true)
|
||||||
private String category;
|
private String category;
|
||||||
|
|
||||||
@NotNull(message = "id cannot be empty")
|
@NotNull(message = "id cannot be empty")
|
||||||
@ApiModelProperty(value = "原图id", required = true)
|
@ApiModelProperty(value = "原图id", required = true)
|
||||||
private String originalId;
|
private Long originalId;
|
||||||
|
|
||||||
|
@NotBlank(message = "original Id Source cannot be empty")
|
||||||
|
@ApiModelProperty(value = "原图id的来源", required = true)
|
||||||
|
private String originalIdSource;
|
||||||
|
|
||||||
|
@NotNull(message = "isOverride cannot be empty")
|
||||||
@ApiModelProperty("是否覆盖原图")
|
@ApiModelProperty("是否覆盖原图")
|
||||||
private Boolean isOverride;
|
private Boolean isOverride;
|
||||||
|
|
||||||
|
@NotBlank(message = "type cannot be empty")
|
||||||
|
@ApiModelProperty("类型 Sketchboard || Printboard")
|
||||||
|
@Pattern(regexp = "Sketchboard|Printboard", message = "type只能填入Sketchboard 或 Printboard")
|
||||||
|
private String type;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2588,14 +2588,20 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
public void processDesignBatch(Map<String, Object> designBatchResult) {
|
public void processDesignBatch(Map<String, Object> designBatchResult) {
|
||||||
Object progress = designBatchResult.get("progress");
|
Object progress = designBatchResult.get("progress");
|
||||||
if (progress instanceof String) {
|
if (progress instanceof String) {
|
||||||
|
String taskId = (String) designBatchResult.get("task_id");
|
||||||
|
QueryWrapper<CloudTask> qw = new QueryWrapper<>();
|
||||||
|
qw.lambda().eq(CloudTask::getTaskId, taskId);
|
||||||
|
List<CloudTask> cloudTaskList = cloudTaskMapper.selectList(qw);
|
||||||
if (((String) progress).startsWith("0/")) {
|
if (((String) progress).startsWith("0/")) {
|
||||||
|
if (CollectionUtil.isNotEmpty(cloudTaskList) && Objects.nonNull(cloudTaskList.get(0).getStartTime())) {
|
||||||
|
CloudTask cloudTask = cloudTaskList.get(0);
|
||||||
|
cloudTask.setStartTime(LocalDateTime.now());
|
||||||
|
cloudTask.setUpdateTime(LocalDateTime.now());
|
||||||
|
cloudTaskMapper.updateById(cloudTask);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (progress.equals("ok")) {
|
if (progress.equals("ok")) {
|
||||||
String taskId = (String) designBatchResult.get("task_id");
|
|
||||||
QueryWrapper<CloudTask> qw = new QueryWrapper<>();
|
|
||||||
qw.lambda().eq(CloudTask::getTaskId, taskId);
|
|
||||||
List<CloudTask> cloudTaskList = cloudTaskMapper.selectList(qw);
|
|
||||||
if (CollectionUtil.isNotEmpty(cloudTaskList)) {
|
if (CollectionUtil.isNotEmpty(cloudTaskList)) {
|
||||||
CloudTask cloudTask = cloudTaskList.get(0);
|
CloudTask cloudTask = cloudTaskList.get(0);
|
||||||
cloudTask.setCompletedNum(cloudTask.getNums());
|
cloudTask.setCompletedNum(cloudTask.getNums());
|
||||||
|
|||||||
@@ -1086,45 +1086,101 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public GenerateResultVO modifySketch(GenerateModifyDTO generateModifyDTO) {
|
public GenerateResultVO modifySketch(GenerateModifyDTO generateModifyDTO) {
|
||||||
log.info("修改提取出的sketch,并加入到library");
|
log.info("修改生成或library中的sketch或print");
|
||||||
|
|
||||||
|
// 提取常用参数
|
||||||
Long accountId = UserContext.getUserHolder().getId();
|
Long accountId = UserContext.getUserHolder().getId();
|
||||||
String base64 = generateModifyDTO.getBase64();
|
String base64 = generateModifyDTO.getBase64();
|
||||||
String gender = generateModifyDTO.getGender();
|
String gender = generateModifyDTO.getGender();
|
||||||
String category = generateModifyDTO.getCategory();
|
String category = generateModifyDTO.getCategory();
|
||||||
|
Long originalId = generateModifyDTO.getOriginalId();
|
||||||
|
boolean isOverride = generateModifyDTO.getIsOverride();
|
||||||
|
boolean isFromLibrary = !StringUtil.isNullOrEmpty(generateModifyDTO.getOriginalIdSource())
|
||||||
|
&& generateModifyDTO.getOriginalIdSource().equals("Library");
|
||||||
|
boolean isSketch = generateModifyDTO.getType().equals(SKETCH_BOARD.getRealName());
|
||||||
|
|
||||||
// 将base64上传到minio
|
// 获取原始路径和可能的generateId
|
||||||
String path;
|
PathInfo pathInfo = getOriginalPathAndGenerateId(isFromLibrary, originalId);
|
||||||
GenerateDetail originalDetail = generateDetailMapper.selectById(generateModifyDTO.getOriginalId());
|
|
||||||
Long generateDetailId = originalDetail.getId();
|
// 确定存储路径
|
||||||
if (generateModifyDTO.getIsOverride()) {
|
String storagePath = isOverride
|
||||||
path = originalDetail.getUrl().replaceFirst("^[^/]+/", "").replaceFirst("\\.[^.]+$", "");
|
? pathInfo.originalPath.replaceFirst("^[^/]+/", "").replaceFirst("\\.[^.]+$", "")
|
||||||
} else {
|
: isSketch
|
||||||
path = accountId + "/sketchboard/" + gender.toLowerCase() + "/" + category + "/" + UUID.randomUUID();
|
? accountId + "/sketchboard/" + gender + "/" + category + "/" + UUID.randomUUID()
|
||||||
|
: accountId + "/printboard/" + UUID.randomUUID();
|
||||||
|
|
||||||
|
// 上传到MinIO
|
||||||
|
String minioPath = minioUtil.base64UploadToPath(base64, userBucket, storagePath);
|
||||||
|
log.info("修改后的图片:{}", minioPath);
|
||||||
|
|
||||||
|
// 保存到数据库并返回结果
|
||||||
|
return isFromLibrary
|
||||||
|
? handleLibrarySave(accountId, originalId, minioPath, category, gender, isOverride, generateModifyDTO.getType())
|
||||||
|
: handleGenerateSave(originalId, pathInfo.generateId, minioPath, category, isOverride);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class PathInfo {
|
||||||
|
String originalPath;
|
||||||
|
Long generateId;
|
||||||
|
|
||||||
|
PathInfo(String originalPath, Long generateId) {
|
||||||
|
this.originalPath = originalPath;
|
||||||
|
this.generateId = generateId;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String minioPath = minioUtil.base64UploadToPath(base64, userBucket, path);
|
private PathInfo getOriginalPathAndGenerateId(boolean isFromLibrary, Long originalId) {
|
||||||
|
if (isFromLibrary) {
|
||||||
|
return new PathInfo(libraryService.getById(originalId).getUrl(), null);
|
||||||
|
} else {
|
||||||
|
GenerateDetail detail = generateDetailMapper.selectById(originalId);
|
||||||
|
return new PathInfo(detail.getUrl(), detail.getGenerateId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.info("修改后的图片 : {}", minioPath);
|
private GenerateResultVO handleLibrarySave(Long accountId, Long libraryId, String minioPath,
|
||||||
|
String category, String gender, boolean isOverride, String type) {
|
||||||
|
Library library;
|
||||||
|
if (isOverride) {
|
||||||
|
library = new Library();
|
||||||
|
library.setId(libraryId);
|
||||||
|
library.setUrl(minioPath);
|
||||||
|
library.setUpdateDate(new Date());
|
||||||
|
libraryService.updateById(library);
|
||||||
|
} else {
|
||||||
|
library = new Library(accountId, type, category, gender, minioPath,
|
||||||
|
MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), false),
|
||||||
|
new Date());
|
||||||
|
libraryService.save(library);
|
||||||
|
libraryId = library.getId();
|
||||||
|
}
|
||||||
|
return buildResultVO(libraryId, minioPath, category);
|
||||||
|
}
|
||||||
|
|
||||||
// 存入db 保存到t_generate_detail
|
private GenerateResultVO handleGenerateSave(Long originalId, Long generateId, String minioPath,
|
||||||
if (!generateModifyDTO.getIsOverride()) {
|
String category, boolean isOverride) {
|
||||||
GenerateDetail generateDetail = new GenerateDetail();
|
GenerateDetail generateDetail = new GenerateDetail();
|
||||||
generateDetail.setGenerateId(originalDetail.getGenerateId());
|
if (isOverride) {
|
||||||
|
generateDetail.setId(originalId);
|
||||||
generateDetail.setUrl(minioPath);
|
generateDetail.setUrl(minioPath);
|
||||||
generateDetail.setIsLike((byte) 0);
|
generateDetail.setUpdateDate(new Date());
|
||||||
generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE));
|
generateDetailMapper.updateById(generateDetail);
|
||||||
|
} else {
|
||||||
|
generateDetail.setGenerateId(generateId);
|
||||||
|
generateDetail.setUrl(minioPath);
|
||||||
|
generateDetail.setIsLike((byte)0);
|
||||||
|
generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath,
|
||||||
|
CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE));
|
||||||
generateDetail.setCreateDate(LocalDateTime.now());
|
generateDetail.setCreateDate(LocalDateTime.now());
|
||||||
generateDetailMapper.insert(generateDetail);
|
generateDetailMapper.insert(generateDetail);
|
||||||
|
originalId = generateDetail.getId();
|
||||||
generateDetailId = generateDetail.getId();
|
|
||||||
} else {
|
|
||||||
GenerateDetail generateDetail = new GenerateDetail();
|
|
||||||
generateDetail.setUrl(minioPath);
|
|
||||||
generateDetail.setId(generateDetailId);
|
|
||||||
generateDetailMapper.updateById(generateDetail);
|
|
||||||
}
|
}
|
||||||
|
return buildResultVO(originalId, minioPath, category);
|
||||||
|
}
|
||||||
|
|
||||||
return new GenerateResultVO(generateDetailId, minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), "Success", category);
|
private GenerateResultVO buildResultVO(Long id, String minioPath, String category) {
|
||||||
|
String url = minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true);
|
||||||
|
return new GenerateResultVO(id, url, "Success", category);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@@ -1544,9 +1600,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
|
|||||||
poseTransformationMapper.updateById(poseTransformation);
|
poseTransformationMapper.updateById(poseTransformation);
|
||||||
|
|
||||||
String taskIdBatch = poseTransformation.getTaskIdBatch();
|
String taskIdBatch = poseTransformation.getTaskIdBatch();
|
||||||
// QueryWrapper<CloudTask> cloudTaskQueryWrapper = new QueryWrapper<>();
|
QueryWrapper<CloudTask> cloudTaskQueryWrapper = new QueryWrapper<>();
|
||||||
// cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch);
|
cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch);
|
||||||
// CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper);
|
CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper);
|
||||||
|
if (Objects.nonNull(cloudTask) && Objects.nonNull(cloudTask.getStartTime())){
|
||||||
|
cloudTask.setStartTime(LocalDateTime.now());
|
||||||
|
cloudTask.setUpdateTime(LocalDateTime.now());
|
||||||
|
cloudTaskMapper.updateById(cloudTask);
|
||||||
|
}else if (Objects.nonNull(cloudTask)){
|
||||||
|
cloudTask.setUpdateTime(LocalDateTime.now());
|
||||||
|
cloudTaskMapper.updateById(cloudTask);
|
||||||
|
}
|
||||||
// if (Objects.nonNull(cloudTask)) {
|
// if (Objects.nonNull(cloudTask)) {
|
||||||
// if (cloudTask.getCompletedNum() == null) {
|
// if (cloudTask.getCompletedNum() == null) {
|
||||||
// cloudTask.setCompletedNum(1);
|
// cloudTask.setCompletedNum(1);
|
||||||
|
|||||||
@@ -2921,6 +2921,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
CloudTask cloudTask = cloudTaskMapper.selectOne(qw);
|
CloudTask cloudTask = cloudTaskMapper.selectOne(qw);
|
||||||
cloudTask.setStatus(1);
|
cloudTask.setStatus(1);
|
||||||
cloudTask.setCompletedNum(cloudTask.getNums());
|
cloudTask.setCompletedNum(cloudTask.getNums());
|
||||||
|
cloudTask.setUpdateTime(LocalDateTime.now());
|
||||||
cloudTaskMapper.updateById(cloudTask);
|
cloudTaskMapper.updateById(cloudTask);
|
||||||
|
|
||||||
// 扣除积分
|
// 扣除积分
|
||||||
|
|||||||
Reference in New Issue
Block a user