Merge branch 'dev/dev' into dev/dev_xp

# Conflicts:
#	src/main/java/com/ai/da/common/RabbitMQ/GenerateConsumer.java
#	src/main/java/com/ai/da/service/impl/AccountServiceImpl.java
#	src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java
#	src/main/resources/application-dev.properties
#	src/main/resources/messages_en.properties
#	src/main/resources/messages_zh.properties
This commit is contained in:
2024-06-12 10:50:05 +08:00
49 changed files with 1086 additions and 182 deletions

View File

@@ -44,6 +44,8 @@ public class GenerateConsumer {
@Value("${redis.key.generateResult}") @Value("${redis.key.generateResult}")
private String generateResultKey; private String generateResultKey;
@Value("${redis.key.toProductImageResultKey}")
private String toProductImageResultKey;
public void generate(Message msg, Channel channel, String consumerName) { public void generate(Message msg, Channel channel, String consumerName) {
log.info("============start listening=========="); log.info("============start listening==========");
@@ -158,6 +160,54 @@ public class GenerateConsumer {
} }
public void processToProductImageResult(Message msg, Channel channel) {
log.info("============processToProductImageResult listening==========");
long start = System.currentTimeMillis();
Map<String, String> generateResult = JSONObject.parseObject(msg.getBody(), Map.class);
log.info("toProductImage response : {}", generateResult);
try {
log.info("tasks_id : {} start ", generateResult.get("tasks_id"));
if (generateResult.get("status").equals("SUCCESS")) {
String url = generateResult.get("image_url");
String taskId = generateResult.get("tasks_id");
String category = generateResult.get("category");
generateService.processToProductImageResult(taskId, url, category);
} else {
// 修改redis中的数据状态为exception
String key = toProductImageResultKey + ":" + generateResult.get("tasks_id");
redisUtil.addToString(key, new Gson().toJson(new GenerateResultVO(generateResult.get("tasks_id"), null, null, "Fail")), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
// 将异常信息存到exception中
HashMap<String, String> exceptionInfo = new HashMap<>();
exceptionInfo.put(generateResult.get("tasks_id"), generateResult.get("data"));
// 存redis
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
}
} catch (Exception e) {
log.error(e.getMessage());
try {
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
// 将消息从redis排队队列中删除,需保证被消费的消息存储到db之后再从redis删除
redisUtil.removeFromZSet(consumptionOrderKey, generateResult.get("tasks_id"));
} catch (IOException exception) {
log.error("手动确认,取消返回队列,不再重新消费");
}
// 将入参和错误信息存入数据库
String exceptionMessage = JSONObject.toJSONString(generateResult) +
" Exception message " + e.getMessage();
HashMap<String, String> exceptionInfo = new HashMap<>();
exceptionInfo.put(String.valueOf(generateResult.get("tasks_id")), exceptionMessage);
// 存redis
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
}
long end = System.currentTimeMillis();
log.info("tasks_id : {}, end , message : {}, 执行时长: {} 毫秒", generateResult.get("tasks_id"), generateResult.get("message"), (end - start));
log.info("============ProcessGenerateResult End listening==========");
}
@RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
@RabbitHandler @RabbitHandler
public void generateConsumer1(Message msg, Channel channel) { public void generateConsumer1(Message msg, Channel channel) {
@@ -217,4 +267,10 @@ public class GenerateConsumer {
public void getGenerateResult(Message msg, Channel channel) { public void getGenerateResult(Message msg, Channel channel) {
processGenerateResult(msg, channel); processGenerateResult(msg, channel);
} }
@RabbitListener(queues = MQConfig.TO_PRODUCT_IMAGE_RESULT_QUEUE)
@RabbitHandler
public void getToProductImageResult(Message msg, Channel channel) {
processToProductImageResult(msg, channel);
}
} }

View File

@@ -23,6 +23,7 @@ public class MQConfig {
// public static final String GENERATE_RESULT_QUEUE = "GenerateImage-local"; // public static final String GENERATE_RESULT_QUEUE = "GenerateImage-local";
public static final String GENERATE_RESULT_QUEUE = "GenerateImage-prod"; public static final String GENERATE_RESULT_QUEUE = "GenerateImage-prod";
public static final String TO_PRODUCT_IMAGE_RESULT_QUEUE = "ToProductImage-local";
public MQConfig() { public MQConfig() {
} }

View File

@@ -1,11 +1,11 @@
package com.ai.da.common.config; package com.ai.da.common.config;
import com.ai.da.common.utils.MinioUtil;
import com.ai.da.common.utils.SendEmailUtil; import com.ai.da.common.utils.SendEmailUtil;
import com.ai.da.mapper.primary.AccountMapper; import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.TrialOrderMapper; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.mapper.primary.entity.TrialOrder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@@ -22,10 +22,16 @@ import java.nio.file.Paths;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class MyTaskScheduler { public class MyTaskScheduler {
@PostConstruct
public void test() {
// clearMinio();
}
@Resource @Resource
private AccountMapper accountMapper; private AccountMapper accountMapper;
@@ -71,7 +77,7 @@ public class MyTaskScheduler {
@Scheduled(cron = "0 0 8 * * ?") @Scheduled(cron = "0 0 8 * * ?")
public void sendTrialOrderExcelToManagements() { public void sendTrialOrderExcelToManagements() {
// 获取前一天日期 // 获取前一天日期
LocalDate yesterday = LocalDate.now().minusDays(1); LocalDate yesterday = LocalDate.now().minusDays(3);
// 查询前一天的试用订单 // 查询前一天的试用订单
QueryWrapper<TrialOrder> qw = new QueryWrapper<>(); QueryWrapper<TrialOrder> qw = new QueryWrapper<>();
@@ -134,4 +140,69 @@ public class MyTaskScheduler {
SendEmailUtil.sendNoExcelEmail("kimwong@code-create.com.hk", null); SendEmailUtil.sendNoExcelEmail("kimwong@code-create.com.hk", null);
} }
} }
@Resource
private UserLikeGroupMapper userLikeGroupMapper;
@Resource
private UserLikeMapper userLikeMapper;
@Resource
private TDesignPythonOutfitMapper designPythonOutfitMapper;
@Resource
private TDesignPythonOutfitDetailMapper designPythonOutfitDetailMapper;
@Resource
private DesignItemMapper designItemMapper;
@Resource
private DesignItemDetailMapper designItemDetailMapper;
@Resource
private MinioUtil minioUtil;
public void clearMinio() {
// 获取当前所有history
QueryWrapper<UserLikeGroup> userLikeGroupQueryWrapper = new QueryWrapper<>();
List<UserLikeGroup> userLikeGroupList = userLikeGroupMapper.selectList(userLikeGroupQueryWrapper);
List<Long> userLikeGroupIdList = userLikeGroupList.stream().map(UserLikeGroup::getId).collect(Collectors.toList());
QueryWrapper<UserLike> userLikeQueryWrapper = new QueryWrapper<>();
userLikeQueryWrapper.lambda().in(UserLike::getUserLikeGroupId, userLikeGroupIdList);
// 所有喜欢的图片
List<UserLike> userLikes = userLikeMapper.selectList(userLikeQueryWrapper);
List<Long> designOutfitIdList = userLikes.stream().map(UserLike::getDesignOutfitId).collect(Collectors.toList());
QueryWrapper<TDesignPythonOutfit> designPythonOutfitQueryWrapper = new QueryWrapper<>();
designPythonOutfitQueryWrapper.lambda().notIn(TDesignPythonOutfit::getId, designOutfitIdList);
List<TDesignPythonOutfit> tDesignPythonOutfits = designPythonOutfitMapper.selectList(designPythonOutfitQueryWrapper);
// int i = 0;
// for (TDesignPythonOutfit tDesignPythonOutfit : tDesignPythonOutfits) {
// String designUrl = tDesignPythonOutfit.getDesignUrl();
// if (StringUtils.isNotBlank(designUrl)) {
// minioUtil.deleteObject(designUrl);
// i ++;
// }
// QueryWrapper<TDesignPythonOutfitDetail> designPythonOutfitDetailQueryWrapper = new QueryWrapper<>();
// designPythonOutfitDetailQueryWrapper.lambda().eq(TDesignPythonOutfitDetail::getDesignPythonOutfitId, tDesignPythonOutfit.getId());
// List<TDesignPythonOutfitDetail> tDesignPythonOutfitDetails = designPythonOutfitDetailMapper.selectList(designPythonOutfitDetailQueryWrapper);
// for (TDesignPythonOutfitDetail tDesignPythonOutfitDetail : tDesignPythonOutfitDetails) {
// if (!tDesignPythonOutfitDetail.getImageCategory().equals("body")) {
// if (StringUtils.isNotBlank(tDesignPythonOutfitDetail.getImageUrl())) {
// minioUtil.deleteObject(tDesignPythonOutfitDetail.getImageUrl());
// i ++;
// }
// if (StringUtils.isNotBlank(tDesignPythonOutfitDetail.getMaskUrl())) {
// minioUtil.deleteObject(tDesignPythonOutfitDetail.getMaskUrl());
// i ++;
// }
// }
// }
// }
System.out.println("i");
// List<Long> designItemIdList = userLikes.stream().map(UserLike::getDesignItemId).collect(Collectors.toList());
// QueryWrapper<DesignItem> designItemQueryWrapper = new QueryWrapper<>();
// designItemQueryWrapper.lambda().in(DesignItem::getId,designItemIdList);
// List<DesignItem> designItems = designItemMapper.selectList(designItemQueryWrapper);
// for (DesignItem designItem : designItems) {
// QueryWrapper<DesignItemDetail> designItemDetailQueryWrapper = new QueryWrapper<>();
// designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItem.getId());
// List<DesignItemDetail> designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper);
// for (DesignItemDetail designItemDetail : designItemDetails) {
//
// }
// }
}
} }

View File

@@ -153,4 +153,10 @@ public class AccountController {
accountService.upgradeNotification(); accountService.upgradeNotification();
return Response.success(true); return Response.success(true);
} }
@ApiOperation(value = "广场用户注册")
@PostMapping("/designWorksRegister")
public Response<Boolean> designWorksRegister(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
return Response.success(accountService.designWorksRegister(accountDesignWorksRegisterDTO));
}
} }

View File

@@ -2,6 +2,7 @@ package com.ai.da.controller;
import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.model.dto.DesignWorksRegisterDTO;
import com.ai.da.model.dto.PortfolioDTO; import com.ai.da.model.dto.PortfolioDTO;
import com.ai.da.model.dto.QueryPortfolioPageDTO; import com.ai.da.model.dto.QueryPortfolioPageDTO;
import com.ai.da.model.vo.PortfolioVO; import com.ai.da.model.vo.PortfolioVO;
@@ -10,10 +11,8 @@ import com.ai.da.service.PortfolioService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
@@ -29,16 +28,18 @@ public class PortfolioController {
@ApiOperation(value = "发布作品集") @ApiOperation(value = "发布作品集")
@PostMapping("/publish") @PostMapping("/publish")
public Response<Boolean> preLogin(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<Boolean> preLogin(@RequestParam("file") MultipartFile canvas, @RequestParam("data") String data) {
return Response.success(portfolioService.publish(portfolioDTO)); return Response.success(portfolioService.publish(canvas, data));
} }
@CrossOrigin
@ApiOperation(value = "作品集page") @ApiOperation(value = "作品集page")
@PostMapping("/page") @PostMapping("/page")
public Response<PageBaseResponse<PortfolioVO>> page(@Valid @RequestBody QueryPortfolioPageDTO query) { public Response<PageBaseResponse<PortfolioVO>> page(@Valid @RequestBody QueryPortfolioPageDTO query) {
return Response.success(portfolioService.page(query)); return Response.success(portfolioService.page(query));
} }
@CrossOrigin
@ApiOperation(value = "作品详情") @ApiOperation(value = "作品详情")
@PostMapping("/detail") @PostMapping("/detail")
public Response<PortfolioVO> detail(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<PortfolioVO> detail(@Valid @RequestBody PortfolioDTO portfolioDTO) {
@@ -56,4 +57,10 @@ public class PortfolioController {
public Response<PortfolioVO> update(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<PortfolioVO> update(@Valid @RequestBody PortfolioDTO portfolioDTO) {
return Response.success(portfolioService.update(portfolioDTO)); return Response.success(portfolioService.update(portfolioDTO));
} }
@ApiOperation(value = "广场用户注册")
@PostMapping("/designWorksRegister")
public Response<Boolean> designWorksRegister(@Valid @RequestBody DesignWorksRegisterDTO designWorksRegisterDTO) {
return Response.success(portfolioService.designWorksRegister(designWorksRegisterDTO));
}
} }

View File

@@ -8,13 +8,11 @@ import com.ai.da.common.response.Response;
import com.ai.da.common.utils.CopyUtil; import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.primary.TDesignPythonOutfitMapper; import com.ai.da.mapper.primary.TDesignPythonOutfitMapper;
import com.ai.da.mapper.primary.entity.Account; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.mapper.primary.entity.Library;
import com.ai.da.mapper.primary.entity.TDesignPythonOutfit;
import com.ai.da.mapper.primary.entity.UserLikeGroup;
import com.ai.da.model.dto.*; import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
@@ -159,4 +158,52 @@ public class SavedCollectionController {
return Response.success(userLikeGroupService.choose(userGroupId)); return Response.success(userLikeGroupService.choose(userGroupId));
} }
@ApiOperation(value = "exportSave")
@PostMapping("/exportSave")
public Response<Boolean> exportSave(@RequestParam("file") MultipartFile file, @RequestParam("userLikeGroupId") Long userLikeGroupId) {
return Response.success(userLikeGroupService.exportSave(file, userLikeGroupId));
}
@ApiOperation(value = "exportSearch")
@PostMapping("/exportSearch")
public Response<JSONObject> exportSearch(@Valid @RequestBody ExportSearchDTO exportSearchDTO) {
return Response.success(userLikeGroupService.exportSearch(exportSearchDTO.getUserLikeGroupId()));
}
@ApiOperation(value = "toProduct")
@PostMapping("/toProduct")
public Response<List<ToProductImageResult>> toProduct(@Valid @RequestBody ToProductImageDTO toProductImageDTO) {
return Response.success(userLikeGroupService.toProduct(toProductImageDTO));
}
@ApiOperation(value = "toProductImageElementUpload")
@PostMapping("/toProductImageElementUpload")
public Response<ToProductElementVO> toProductImageElementUpload(@RequestParam("file") MultipartFile file, @RequestParam(value = "userlikeGroupId") Long userLikeGroupId) {
return Response.success(userLikeGroupService.toProductImageElementUpload(file, userLikeGroupId));
}
@ApiOperation(value = "productImageLike")
@PostMapping("/productImageLike")
public Response<Boolean> productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) {
return Response.success(userLikeGroupService.productImageLike(productImageLikeDTO));
}
@ApiOperation(value = "获取生成结果")
@PostMapping("/toProductImageResult")
public Response<List<GenerateResultVO>> getToProductImageResult(@Valid @RequestBody List<String> taskIdList) {
List<GenerateResultVO> generateResult = userLikeGroupService.getToProductImageResultList(taskIdList);
return Response.success(generateResult);
}
@ApiOperation(value = "画布用户上传元素")
@PostMapping("/canvasElementUpload")
public Response<CanvasElementUpload> canvasElementUpload(@RequestParam("file") MultipartFile file) {
return Response.success(userLikeGroupService.canvasElementUpload(file));
}
@ApiOperation("productImageLikeList")
@PostMapping("/productImageLikeList")
public Response<List<ToProductImageResult>> productImageLikeList(@Valid @RequestBody ToProductImageDTO toProductImageDTO) {
return Response.success(userLikeGroupService.productImageLikeList(toProductImageDTO));
}
} }

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.Canvas;
public interface CanvasMapper extends CommonMapper<Canvas> {
}

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.ExportFile;
public interface ExportFileMapper extends CommonMapper<ExportFile> {
}

View File

@@ -0,0 +1,8 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.ToProductElement;
public interface ToProductElementMapper extends CommonMapper<ToProductElement> {
}

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.ToProductImageRecord;
public interface ToProductImageRecordMapper extends CommonMapper<ToProductImageRecord> {
}

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.ToProductImageResult;
public interface ToProductImageResultMapper extends CommonMapper<ToProductImageResult> {
}

View File

@@ -0,0 +1,42 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* Attendance
*
* @author easy-generator
* @since 2022-06-13
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("canvas")
public class Canvas implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("url")
private String url;
@ApiModelProperty("accountId")
private Long accountId;
@ApiModelProperty("createTime")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,9 @@
package com.ai.da.mapper.primary.entity;
import lombok.Data;
@Data
public class CanvasElementUpload {
private String url;
private String minioUrl;
}

View File

@@ -0,0 +1,24 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("export_file")
public class ExportFile implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String url;
private Long userLikeGroupId;
}

View File

@@ -35,12 +35,18 @@ public class Portfolio implements Serializable {
@ApiModelProperty(value = "作品类型") @ApiModelProperty(value = "作品类型")
private String portfolioType; private String portfolioType;
@ApiModelProperty(value = "画布ID")
private Long canvasId;
@ApiModelProperty(value = "封面ID") @ApiModelProperty(value = "封面ID")
private Long coverId; private Long coverId;
@ApiModelProperty(value = "作品状态1公开0隐藏") @ApiModelProperty(value = "作品状态1公开0隐藏")
private Integer status; private Integer status;
@ApiModelProperty(value = "是否允许二次创作1允许0不允许")
private Integer openSource;
@ApiModelProperty(value = "作品集作者ID") @ApiModelProperty(value = "作品集作者ID")
private Long accountId; private Long accountId;

View File

@@ -0,0 +1,27 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ToProductElement implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "userLikeGroupId")
private Long userLikeGroupId;
@ApiModelProperty(value = "url")
private String url;
@ApiModelProperty(value = "createTime")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,27 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ToProductImageRecord implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "userLikeGroupId")
private Long userLikeGroupId;
@ApiModelProperty(value = "prompt")
private String prompt;
@ApiModelProperty(value = "createTime")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,42 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ToProductImageResult implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "elementId")
private Long elementId;
@ApiModelProperty(value = "elementType")
private String elementType;
@ApiModelProperty(value = "url")
private String url;
@ApiModelProperty(value = "isLike 1是0否")
private Integer isLike;
@ApiModelProperty(value = "createTime")
private LocalDateTime createTime;
@ApiModelProperty(value = "toProductImageRecordId")
private Long toProductImageRecordId;
@ApiModelProperty(value = "taskId")
private String taskId;
@ApiModelProperty(value = "userLikeGroupId")
private Long userLikeGroupId;
}

View File

@@ -0,0 +1,8 @@
package com.ai.da.model.dto;
import com.ai.da.mapper.primary.entity.Account;
import lombok.Data;
@Data
public class AccountDesignWorksRegisterDTO extends Account {
}

View File

@@ -0,0 +1,10 @@
package com.ai.da.model.dto;
import lombok.Data;
@Data
public class DesignWorksRegisterDTO {
private String userName;
private String email;
private String password;
}

View File

@@ -0,0 +1,8 @@
package com.ai.da.model.dto;
import lombok.Data;
@Data
public class ExportSaveDTO {
private String data;
}

View File

@@ -0,0 +1,8 @@
package com.ai.da.model.dto;
import lombok.Data;
@Data
public class ExportSearchDTO {
private Long userLikeGroupId;
}

View File

@@ -2,9 +2,11 @@ package com.ai.da.model.dto;
import com.ai.da.mapper.primary.entity.Portfolio; import com.ai.da.mapper.primary.entity.Portfolio;
import lombok.Data; import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
@Data @Data
public class PortfolioDTO extends Portfolio { public class PortfolioDTO extends Portfolio {
private Long userLikeGroupId; private Long userLikeGroupId;
} }

View File

@@ -0,0 +1,10 @@
package com.ai.da.model.dto;
import lombok.Data;
import java.util.List;
@Data
public class ProductImageLikeDTO {
private List<Long> toProductImageResultId;
}

View File

@@ -0,0 +1,13 @@
package com.ai.da.model.dto;
import com.ai.da.model.vo.ToProductImageVO;
import lombok.Data;
import java.util.List;
@Data
public class ToProductImageDTO {
private Long userLikeGroupId;
private List<ToProductImageVO> toProductImageVOList;
private String prompt;
}

View File

@@ -2,7 +2,7 @@ package com.ai.da.model.enums;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
public enum DesignElementsEnum { public enum DesignElementsEnum implements IEnumDisplay {
EMBROIDERY("刺绣", "Embroidery"), EMBROIDERY("刺绣", "Embroidery"),
BEADING("钉珠", "Beading"), BEADING("钉珠", "Beading"),
PEARL("珍珠", "Pearl"), PEARL("珍珠", "Pearl"),
@@ -16,6 +16,12 @@ public enum DesignElementsEnum {
private final String chinese; private final String chinese;
private final String english; private final String english;
@Override
@JsonValue
public String getValue() {
return this.english;
}
// 构造函数 // 构造函数
DesignElementsEnum(String chinese, String english) { DesignElementsEnum(String chinese, String english) {
this.chinese = chinese; this.chinese = chinese;

View File

@@ -1,6 +1,8 @@
package com.ai.da.model.enums; package com.ai.da.model.enums;
public enum PrintboardLevel2TypeEnum { import com.fasterxml.jackson.annotation.JsonValue;
public enum PrintboardLevel2TypeEnum implements IEnumDisplay {
SLOGAN("标语", "Slogan"), SLOGAN("标语", "Slogan"),
LOGO("标志", "Logo"), LOGO("标志", "Logo"),
PATTERN("图案", "Pattern"); PATTERN("图案", "Pattern");
@@ -14,6 +16,12 @@ public enum PrintboardLevel2TypeEnum {
this.english = english; this.english = english;
} }
@Override
@JsonValue
public String getValue() {
return this.english;
}
// 获取中文描述 // 获取中文描述
public String getChinese() { public String getChinese() {
return chinese; return chinese;

View File

@@ -9,7 +9,7 @@ import java.util.List;
@Data @Data
public class PortfolioVO extends Portfolio { public class PortfolioVO extends Portfolio {
private String designPythonOutfitUrl; private String canvasUrl;
private List<CollectionElement> collectionElementList; private List<CollectionElement> collectionElementList;
private List<TDesignPythonOutfit> designPythonOutfitList; private List<TDesignPythonOutfit> designPythonOutfitList;

View File

@@ -0,0 +1,8 @@
package com.ai.da.model.vo;
import com.ai.da.mapper.primary.entity.ToProductElement;
import lombok.Data;
@Data
public class ToProductElementVO extends ToProductElement {
}

View File

@@ -0,0 +1,9 @@
package com.ai.da.model.vo;
import com.ai.da.mapper.primary.entity.ToProductImageResult;
import lombok.Data;
@Data
public class ToProductImageVO extends ToProductImageResult {
}

View File

@@ -0,0 +1,8 @@
package com.ai.da.model.vo;
import com.ai.da.mapper.primary.entity.UserLike;
import lombok.Data;
@Data
public class ToProductVO extends UserLike {
}

View File

@@ -8,10 +8,7 @@ import com.ai.da.common.enums.*;
import com.ai.da.common.utils.*; import com.ai.da.common.utils.*;
import com.ai.da.mapper.primary.CollocationMapper; import com.ai.da.mapper.primary.CollocationMapper;
import com.ai.da.mapper.primary.DressingMapper; import com.ai.da.mapper.primary.DressingMapper;
import com.ai.da.mapper.primary.entity.CollectionElement; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.mapper.primary.entity.Collocation;
import com.ai.da.mapper.primary.entity.DesignHistory;
import com.ai.da.mapper.primary.entity.Dressing;
import com.ai.da.mapper.secondary.AttributeRetrievalMapper; import com.ai.da.mapper.secondary.AttributeRetrievalMapper;
import com.ai.da.mapper.secondary.entity.AttributeRetrieval; import com.ai.da.mapper.secondary.entity.AttributeRetrieval;
import com.ai.da.mapper.secondary.entity.AttributeRecognitionJSON; import com.ai.da.mapper.secondary.entity.AttributeRecognitionJSON;
@@ -165,7 +162,7 @@ public class PythonService {
* @param operateType * @param operateType
* @return * @return
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public String upload(MultipartFile file, String operateType) { public String upload(MultipartFile file, String operateType) {
//用户信息 //用户信息
PythonToJavaApiOperationTypeEnum operationType = PythonToJavaApiOperationTypeEnum.uploadOf(operateType); PythonToJavaApiOperationTypeEnum operationType = PythonToJavaApiOperationTypeEnum.uploadOf(operateType);
@@ -3303,4 +3300,44 @@ public class PythonService {
return text; return text;
} }
public Boolean toProductImage(String url, String taskId, String prompt) {
// todo 限流校验
// AccessLimitUtils.validate("design",5);
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(30, TimeUnit.SECONDS)
.pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒)
.readTimeout(60, TimeUnit.SECONDS)//读取超时(单位:秒)
.writeTimeout(60, TimeUnit.SECONDS)//写入超时(单位:秒)
.build();
MediaType mediaType = MediaType.parse("application/json");
//关闭FastJson的引用检测 防止出现$ref 现象
Map<String, String> map = new HashMap<>();
map.put("tasks_id", taskId);
map.put("image_url", url);
map.put("prompt", prompt);
log.info("toProductImage请求python 参数:####{}", map);
String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty);
RequestBody body = RequestBody.create(mediaType, param);
Request request = new Request.Builder()
// .url(accessPythonIp + ":" + accessPythonPort + "/api/generate_product_image")
.url(accessPythonIp + ":9996/api/generate_product_image")
.method("POST", body)
.addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
.addHeader("Content-Type", "application/json")
.build();
Response response;
String responseBody;
try {
response = client.newCall(request).execute();
} catch (IOException ioException) {
log.error("PythonService##toProductImage异常###{}", ExceptionUtil.getThrowableList(ioException));
throw new BusinessException("toProductImage.interface.exception");
}
if (response.isSuccessful()) {
return Boolean.TRUE;
}
log.error("PythonService##toProductImage异常response###{}", response);
//生成失败
throw new BusinessException("toProductImage.interface.exception");
}
} }

View File

@@ -130,4 +130,6 @@ public interface AccountService extends IService<Account> {
void moveLibraryDate(); void moveLibraryDate();
void updateCredits(Long accountId, String value); void updateCredits(Long accountId, String value);
Boolean designWorksRegister(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);
} }

View File

@@ -17,6 +17,8 @@ public interface GenerateService extends IService<Generate> {
void processGenerateResult(String taskId, String url, String category); void processGenerateResult(String taskId, String url, String category);
void processToProductImageResult(String taskId, String url, String category);
GenerateLikeVO generateLike(GenerateLikeDTO generateLikeDTO); GenerateLikeVO generateLike(GenerateLikeDTO generateLikeDTO);
Boolean generateDislike(Long generateDetailId, String timeZone); Boolean generateDislike(Long generateDetailId, String timeZone);
@@ -34,5 +36,4 @@ public interface GenerateService extends IService<Generate> {
Long getRankPosition(String uniqueId); Long getRankPosition(String uniqueId);
void cancelGenerate(Long userId, List<String> uniqueId, String timeZone); void cancelGenerate(Long userId, List<String> uniqueId, String timeZone);
} }

View File

@@ -2,14 +2,16 @@ package com.ai.da.service;
import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.mapper.primary.entity.Portfolio; import com.ai.da.mapper.primary.entity.Portfolio;
import com.ai.da.model.dto.DesignWorksRegisterDTO;
import com.ai.da.model.dto.PortfolioDTO; import com.ai.da.model.dto.PortfolioDTO;
import com.ai.da.model.dto.QueryPortfolioPageDTO; import com.ai.da.model.dto.QueryPortfolioPageDTO;
import com.ai.da.model.vo.PortfolioVO; import com.ai.da.model.vo.PortfolioVO;
import com.ai.da.model.vo.UserLikeChooseVO; import com.ai.da.model.vo.UserLikeChooseVO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
public interface PortfolioService extends IService<Portfolio> { public interface PortfolioService extends IService<Portfolio> {
Boolean publish(PortfolioDTO portfolioDTO); Boolean publish(MultipartFile canvas, String data);
PortfolioVO update(PortfolioDTO portfolioDTO); PortfolioVO update(PortfolioDTO portfolioDTO);
@@ -18,4 +20,6 @@ public interface PortfolioService extends IService<Portfolio> {
PortfolioVO detail(PortfolioDTO portfolioDTO); PortfolioVO detail(PortfolioDTO portfolioDTO);
UserLikeChooseVO choose(PortfolioDTO portfolioDTO); UserLikeChooseVO choose(PortfolioDTO portfolioDTO);
Boolean designWorksRegister(DesignWorksRegisterDTO designWorksRegisterDTO);
} }

View File

@@ -1,9 +1,17 @@
package com.ai.da.service; package com.ai.da.service;
import com.ai.da.mapper.primary.entity.CanvasElementUpload;
import com.ai.da.mapper.primary.entity.ToProductImageResult;
import com.ai.da.mapper.primary.entity.UserLikeGroup; import com.ai.da.mapper.primary.entity.UserLikeGroup;
import com.ai.da.model.vo.HistoryUpdateVO; import com.ai.da.model.dto.ExportSaveDTO;
import com.ai.da.model.vo.UserLikeChooseVO; import com.ai.da.model.dto.ProductImageLikeDTO;
import com.ai.da.model.dto.ToProductImageDTO;
import com.ai.da.model.vo.*;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/** /**
* 服务类 * 服务类
@@ -30,4 +38,20 @@ public interface UserLikeGroupService extends IService<UserLikeGroup> {
void deleteTrialData(Long id); void deleteTrialData(Long id);
void updateDate(Long id,String timeZone); void updateDate(Long id,String timeZone);
Boolean exportSave(MultipartFile file, Long userLikeGroupId);
List<ToProductImageResult> toProduct(ToProductImageDTO toProductImageDTO);
ToProductElementVO toProductImageElementUpload(MultipartFile file, Long userLikeGroupId);
Boolean productImageLike(ProductImageLikeDTO productImageLikeDTO);
List<GenerateResultVO> getToProductImageResultList(List<String> taskIdList);
JSONObject exportSearch(Long userLikeGroupId);
CanvasElementUpload canvasElementUpload(MultipartFile file);
List<ToProductImageResult> productImageLikeList(ToProductImageDTO toProductImageDTO);
} }

View File

@@ -29,7 +29,7 @@ public class AccountLoginLogServiceImpl extends ServiceImpl<AccountLoginLogMappe
AccountLoginLogMapper accountLoginLogMapper; AccountLoginLogMapper accountLoginLogMapper;
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public Boolean saveLoginLog(String ip, Long accountId) { public Boolean saveLoginLog(String ip, Long accountId) {
AccountLoginLog accountLoginLog = new AccountLoginLog(); AccountLoginLog accountLoginLog = new AccountLoginLog();
accountLoginLog.setAccountId(accountId); accountLoginLog.setAccountId(accountId);

View File

@@ -74,7 +74,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public AccountPreLoginVO preLogin(AccountPreLoginDTO accountDTO) { public AccountPreLoginVO preLogin(AccountPreLoginDTO accountDTO) {
log.info("aida预先登入accountDTO###{}", JSON.toJSONString(accountDTO)); log.info("aida预先登入accountDTO###{}", JSON.toJSONString(accountDTO));
Account account = getOneByEmail(accountDTO.getEmail()); Account account = getOneByEmail(accountDTO.getEmail());
@@ -127,7 +127,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
return new AccountPreLoginVO(account.getId()); return new AccountPreLoginVO(account.getId());
} }
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public AccountLoginVO login(AccountLoginDTO accountLoginDTO, HttpServletRequest request) { public AccountLoginVO login(AccountLoginDTO accountLoginDTO, HttpServletRequest request) {
// Assert.isTrue(StringUtils.isNotBlank(accountLoginDTO.getEmail()), "Please input a email !"); // Assert.isTrue(StringUtils.isNotBlank(accountLoginDTO.getEmail()), "Please input a email !");
@@ -250,7 +250,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
return Boolean.TRUE; return Boolean.TRUE;
} }
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public Boolean forgetPwd(AccountRegisterDTO accountDTO) { public Boolean forgetPwd(AccountRegisterDTO accountDTO) {
// Account emailAccount = getOneByEmail(accountDTO.getEmail()); // Account emailAccount = getOneByEmail(accountDTO.getEmail());
@@ -519,7 +519,6 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
account.setIsTrial(1); account.setIsTrial(1);
account.setIsBeginner(1); account.setIsBeginner(1);
account.setValidStartTime(System.currentTimeMillis()); account.setValidStartTime(System.currentTimeMillis());
if (link) { if (link) {
account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli()); account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli());
}else { }else {
@@ -938,4 +937,17 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
account.setCredits(new BigDecimal(value)); account.setCredits(new BigDecimal(value));
accountMapper.updateById(account); accountMapper.updateById(account);
} }
@Override
public Boolean designWorksRegister(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
QueryWrapper<Account> qw = new QueryWrapper<>();
qw.eq("BINARY user_email", accountDesignWorksRegisterDTO.getUserEmail());
List<Account> accountList = accountMapper.selectList(qw);
if (CollectionUtil.isNotEmpty(accountList)) {
throw new BusinessException("The email has already been registered");
}
Account account = CopyUtil.copyObject(accountDesignWorksRegisterDTO, Account.class);
accountMapper.insert(account);
return null;
}
} }

View File

@@ -109,17 +109,17 @@ public class ClassificationServiceImpl implements ClassificationService {
if (CollectionUtil.isNotEmpty(classificationList)) { if (CollectionUtil.isNotEmpty(classificationList)) {
// 获取结果集 // 获取结果集
List<ClassificationVO> classificationVOList = getClassificationVOList(classificationList); List<ClassificationVO> classificationVOList = getClassificationVOList(classificationList);
if (classificationDTO.getType().equals("DesignElements")) { // if (classificationDTO.getType().equals("DesignElements")) {
for (ClassificationVO classificationVO : classificationVOList) { // for (ClassificationVO classificationVO : classificationVOList) {
String classificationName = classificationVO.getClassificationName(); // String classificationName = classificationVO.getClassificationName();
DesignElementsEnum designElementsEnum = DesignElementsEnum.fromName(classificationName); // DesignElementsEnum designElementsEnum = DesignElementsEnum.fromName(classificationName);
if (userHolder.getLanguage().equals(Language.ENGLISH.name())) { // if (userHolder.getLanguage().equals(Language.ENGLISH.name())) {
classificationVO.setClassificationName(designElementsEnum.getEnglish()); // classificationVO.setClassificationName(designElementsEnum.getEnglish());
}else { // }else {
classificationVO.setClassificationName(designElementsEnum.getChinese()); // classificationVO.setClassificationName(designElementsEnum.getChinese());
} // }
} // }
} // }
return classificationVOList; return classificationVOList;
} }
return new ArrayList<>(); return new ArrayList<>();

View File

@@ -80,7 +80,7 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
@Value("${minio.bucketName.gradient}") @Value("${minio.bucketName.gradient}")
private String gradientBucketName; private String gradientBucketName;
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public CollectionElementVO upload(CollectionElementUploadDTO uploadDTO) { public CollectionElementVO upload(CollectionElementUploadDTO uploadDTO) {
//用户信息 //用户信息
@@ -709,7 +709,7 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
} }
} }
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public void relationCollection(List<Long> elementIds, Long collectionId) { public void relationCollection(List<Long> elementIds, Long collectionId) {
if (CollectionUtils.isEmpty(elementIds) || null == collectionId) { if (CollectionUtils.isEmpty(elementIds) || null == collectionId) {
@@ -723,7 +723,7 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
collectionElementMapper.update(element, queryWrapper); collectionElementMapper.update(element, queryWrapper);
} }
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public List<CollectionElementVO> saveColorBoard(List<CollectionColorDTO> colorBoards, Long collectionId, String timeZone) { public List<CollectionElementVO> saveColorBoard(List<CollectionColorDTO> colorBoards, Long collectionId, String timeZone) {
//用户信息 //用户信息

View File

@@ -45,7 +45,7 @@ public class CollectionServiceImpl extends ServiceImpl<CollectionMapper, Collect
@Resource @Resource
private MinioUtil minioUtil; private MinioUtil minioUtil;
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public Long saveCollection(Long accountId, String timeZone, String moodTemplateId) { public Long saveCollection(Long accountId, String timeZone, String moodTemplateId) {
Collection collection = new Collection(); Collection collection = new Collection();

View File

@@ -587,6 +587,7 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url")); designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url"));
designPythonOutfitDetail.setUserId(userInfo.getId()); designPythonOutfitDetail.setUserId(userInfo.getId());
designPythonOutfitDetail.setPriority(Integer.parseInt(jsonObject.getString("priority"))); designPythonOutfitDetail.setPriority(Integer.parseInt(jsonObject.getString("priority")));
designPythonOutfitDetail.setCreateDate(LocalDateTime.now());
list.add(designPythonOutfitDetail); list.add(designPythonOutfitDetail);
} }
designPythonOutfitDetailService.saveBatch(list); designPythonOutfitDetailService.saveBatch(list);
@@ -778,7 +779,7 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
} }
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public DesignLikeVO like(DesignLikeDTO designLikeDTO) { public DesignLikeVO like(DesignLikeDTO designLikeDTO) {
Long userGroupId = designLikeDTO.getUserGroupId();; Long userGroupId = designLikeDTO.getUserGroupId();;
Long groupDetailId; Long groupDetailId;

View File

@@ -7,10 +7,7 @@ import com.ai.da.common.enums.CollectionLevel2TypeEnum;
import com.ai.da.common.enums.GenerateModeEnum; import com.ai.da.common.enums.GenerateModeEnum;
import com.ai.da.common.enums.ModelNameEnum; import com.ai.da.common.enums.ModelNameEnum;
import com.ai.da.common.utils.*; import com.ai.da.common.utils.*;
import com.ai.da.mapper.primary.CollectionElementMapper; import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.GenerateCancelMapper;
import com.ai.da.mapper.primary.GenerateDetailMapper;
import com.ai.da.mapper.primary.GenerateMapper;
import com.ai.da.mapper.primary.entity.*; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.model.dto.GenerateLikeDTO; import com.ai.da.model.dto.GenerateLikeDTO;
import com.ai.da.model.dto.GenerateThroughImageTextDTO; import com.ai.da.model.dto.GenerateThroughImageTextDTO;
@@ -87,6 +84,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
@Value("${minio.bucketName.slogan}") @Value("${minio.bucketName.slogan}")
private String sloganBucket; private String sloganBucket;
@Value("${redis.key.toProductImageResultKey}")
private String toProductImageResultKey;
@Override @Override
public GenerateCaptionVO generateCaption(Long sketchElementId) { public GenerateCaptionVO generateCaption(Long sketchElementId) {
CollectionElement collectionElement = collectionElementMapper.selectById(sketchElementId); CollectionElement collectionElement = collectionElementMapper.selectById(sketchElementId);
@@ -259,6 +259,30 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
} }
@Resource
private ToProductImageResultMapper toProductImageResultMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void processToProductImageResult(String taskId, String url, String category) {
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
qw.lambda().eq(ToProductImageResult::getTaskId, taskId);
List<ToProductImageResult> toProductImageResults = toProductImageResultMapper.selectList(qw);
if (CollectionUtils.isEmpty(toProductImageResults)) {
return;
// throw new BusinessException("");
}
ToProductImageResult toProductImageResult = toProductImageResults.get(0);
toProductImageResult.setUrl(url);
toProductImageResultMapper.updateById(toProductImageResult);
String key = toProductImageResultKey + ":" + taskId;
String imageName = url.substring(url.lastIndexOf("/") + 1);
String status = imageName.equals("white_image.jpg") ? "Invalid" : "Success";
GenerateResultVO generateResultVO = new GenerateResultVO(taskId, toProductImageResult.getId(), url, status, category);
redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
}
private void validateGeneraType(Generate generate, String text, Long elementId) { private void validateGeneraType(Generate generate, String text, Long elementId) {
String generateType = ""; String generateType = "";
if (StringUtil.isNullOrEmpty(text.trim()) && Objects.isNull(elementId)) { if (StringUtil.isNullOrEmpty(text.trim()) && Objects.isNull(elementId)) {

View File

@@ -7,12 +7,14 @@ import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.primary.*; import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.entity.*; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.model.dto.DesignWorksRegisterDTO;
import com.ai.da.model.dto.PortfolioDTO; import com.ai.da.model.dto.PortfolioDTO;
import com.ai.da.model.dto.QueryPortfolioPageDTO; import com.ai.da.model.dto.QueryPortfolioPageDTO;
import com.ai.da.model.enums.Position; import com.ai.da.model.enums.Position;
import com.ai.da.model.enums.Sex; import com.ai.da.model.enums.Sex;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,6 +23,7 @@ import com.google.common.base.Function;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -85,10 +88,22 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
@Resource @Resource
private UserLikeGroupService userLikeGroupService; private UserLikeGroupService userLikeGroupService;
@Resource
private CanvasMapper canvasMapper;
@Override @Override
public Boolean publish(PortfolioDTO portfolioDTO) { public Boolean publish(MultipartFile file, String data) {
if (portfolioDTO.getPortfolioType().equals("History")) { PortfolioDTO portfolioDTO = JSONObject.parseObject(data, PortfolioDTO.class);
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder(); AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
if (file != null && file.getOriginalFilename() != null) {
String upload = minioUtil.upload("aida-canvas", String.valueOf(authPrincipalVo.getId()), file);
Canvas canvas = new Canvas();
canvas.setUrl(upload);
canvas.setCreateTime(LocalDateTime.now());
canvas.setAccountId(authPrincipalVo.getId());
canvasMapper.insert(canvas);
if (portfolioDTO.getOpenSource() == 1) {
UserLikeGroup userLikeGroup = userLikeGroupMapper.selectById(portfolioDTO.getUserLikeGroupId()); UserLikeGroup userLikeGroup = userLikeGroupMapper.selectById(portfolioDTO.getUserLikeGroupId());
UserLikeGroup userLikeGroupNew = userLikeGroup.setId(null); UserLikeGroup userLikeGroupNew = userLikeGroup.setId(null);
userLikeGroupNew.setAccountId(-1L); userLikeGroupNew.setAccountId(-1L);
@@ -100,7 +115,6 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
Long collectionIdNew = collectionOld.getId(); Long collectionIdNew = collectionOld.getId();
userLikeGroupNew.setCollectionId(collectionIdNew); userLikeGroupNew.setCollectionId(collectionIdNew);
userLikeGroupMapper.insert(userLikeGroupNew); userLikeGroupMapper.insert(userLikeGroupNew);
// List<TCollectionElementRelation> collectionElementRelationListNew = new ArrayList<>();
for (CollectionElement element : collectionElementListOld) { for (CollectionElement element : collectionElementListOld) {
element.setCollectionId(collectionIdNew); element.setCollectionId(collectionIdNew);
element.setId(null); element.setId(null);
@@ -112,7 +126,12 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
collectionElementRelationMapper.insert(collectionElementRelationNew); collectionElementRelationMapper.insert(collectionElementRelationNew);
} }
Portfolio portfolio = new Portfolio(); Portfolio portfolio = new Portfolio();
Long coverIdOld = portfolioDTO.getCoverId(); QueryWrapper<Portfolio> portfolioQueryWrapper = new QueryWrapper<>();
portfolioQueryWrapper.lambda().eq(Portfolio::getUserLikeGroupSourceId, portfolioDTO.getUserLikeGroupId());
List<Portfolio> portfolios = portfolioMapper.selectList(portfolioQueryWrapper);
if (!CollectionUtils.isEmpty(portfolios)) {
portfolio = portfolios.get(0);
}
portfolio.setPortfolioName(portfolioDTO.getPortfolioName()); portfolio.setPortfolioName(portfolioDTO.getPortfolioName());
portfolio.setPortfolioType("History"); portfolio.setPortfolioType("History");
portfolio.setCollectionId(collectionIdNew); portfolio.setCollectionId(collectionIdNew);
@@ -120,27 +139,28 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
portfolio.setCreateDate(LocalDateTime.now()); portfolio.setCreateDate(LocalDateTime.now());
portfolio.setUpdateDate(LocalDateTime.now()); portfolio.setUpdateDate(LocalDateTime.now());
portfolio.setStatus(1); portfolio.setStatus(1);
portfolio.setOpenSource(1);
portfolio.setIsDeleted(0); portfolio.setIsDeleted(0);
portfolio.setUserLikeGroupSourceId(portfolioDTO.getUserLikeGroupId()); portfolio.setUserLikeGroupSourceId(portfolioDTO.getUserLikeGroupId());
portfolio.setCanvasId(canvas.getId());
if (!CollectionUtils.isEmpty(portfolios)) {
portfolioMapper.updateById(portfolio);
}else {
portfolioMapper.insert(portfolio); portfolioMapper.insert(portfolio);
}
List<UserLike> userLikeList = userLikeService.getUserLikeList(portfolioDTO.getUserLikeGroupId()); List<UserLike> userLikeList = userLikeService.getUserLikeList(portfolioDTO.getUserLikeGroupId());
// List<Long> designPythonOutfitIdList = userLikeList.stream().map(UserLike::getDesignOutfitId).collect(Collectors.toList()); // Long coverIdNew = null;
// // Boolean flag = false;
// QueryWrapper<TDesignPythonOutfit> qw = new QueryWrapper<>();
// qw.lambda().in(TDesignPythonOutfit::getId, designPythonOutfitIdList);
// List<TDesignPythonOutfit> designPythonOutfits = designPythonOutfitMapper.selectList(qw);
Long coverIdNew = null;
Boolean flag = false;
for (UserLike userLike : userLikeList) { for (UserLike userLike : userLikeList) {
Long designOutfitIdOld = userLike.getDesignOutfitId(); Long designOutfitIdOld = userLike.getDesignOutfitId();
TDesignPythonOutfit designPythonOutfit = designPythonOutfitMapper.selectById(designOutfitIdOld); TDesignPythonOutfit designPythonOutfit = designPythonOutfitMapper.selectById(designOutfitIdOld);
designPythonOutfit.setDesignId(-1L); designPythonOutfit.setDesignId(-1L);
designPythonOutfit.setDesignItemId(-1L); designPythonOutfit.setDesignItemId(-1L);
designPythonOutfit.setCollectionId(collectionIdNew); designPythonOutfit.setCollectionId(collectionIdNew);
if (designPythonOutfit.getId().equals(coverIdOld)) { // if (designPythonOutfit.getId().equals(coverIdOld)) {
flag = true; // flag = true;
} // }
designPythonOutfit.setId(null); designPythonOutfit.setId(null);
designPythonOutfitMapper.insert(designPythonOutfit); designPythonOutfitMapper.insert(designPythonOutfit);
Long designOutfitIdNew = designPythonOutfit.getId(); Long designOutfitIdNew = designPythonOutfit.getId();
@@ -156,12 +176,12 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
designPythonOutfitDetailMapper.insert(tDesignPythonOutfitDetail); designPythonOutfitDetailMapper.insert(tDesignPythonOutfitDetail);
} }
if (flag) { // if (flag) {
coverIdNew = designOutfitIdNew; // coverIdNew = designOutfitIdNew;
portfolio.setCoverId(coverIdNew); // portfolio.setCoverId(coverIdNew);
portfolioMapper.updateById(portfolio); // portfolioMapper.updateById(portfolio);
flag = false; // flag = false;
} // }
Long designItemIdOld = userLike.getDesignItemId(); Long designItemIdOld = userLike.getDesignItemId();
DesignItem designItemOld = designItemMapper.selectById(designItemIdOld); DesignItem designItemOld = designItemMapper.selectById(designItemIdOld);
@@ -197,8 +217,30 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
designItemDetailPrintMapper.insert(designItemDetailPrint); designItemDetailPrintMapper.insert(designItemDetailPrint);
} }
} }
} else {
QueryWrapper<Portfolio> portfolioQueryWrapper = new QueryWrapper<>();
portfolioQueryWrapper.lambda().eq(Portfolio::getUserLikeGroupSourceId, portfolioDTO.getUserLikeGroupId());
List<Portfolio> portfolios = portfolioMapper.selectList(portfolioQueryWrapper);
Portfolio portfolio = new Portfolio();
if (!CollectionUtils.isEmpty(portfolios)) {
portfolio = portfolios.get(0);
}
portfolio.setPortfolioName(portfolioDTO.getPortfolioName());
portfolio.setPortfolioType("Canvas");
portfolio.setAccountId(authPrincipalVo.getId());
portfolio.setCreateDate(LocalDateTime.now());
portfolio.setUpdateDate(LocalDateTime.now());
portfolio.setStatus(1);
portfolio.setIsDeleted(0);
portfolio.setOpenSource(0);
portfolio.setUserLikeGroupSourceId(portfolioDTO.getUserLikeGroupId());
portfolio.setCanvasId(canvas.getId());
if (!CollectionUtils.isEmpty(portfolios)) {
portfolioMapper.updateById(portfolio);
}else { }else {
portfolioMapper.insert(portfolio);
}
}
} }
@@ -329,8 +371,8 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
IPage<PortfolioVO> convert = page.convert((Function<Portfolio, PortfolioVO>) portfolio -> { IPage<PortfolioVO> convert = page.convert((Function<Portfolio, PortfolioVO>) portfolio -> {
if (portfolio != null) { if (portfolio != null) {
PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class); PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class);
TDesignPythonOutfit designPythonOutfit = designPythonOutfitMapper.selectById(vo.getCoverId()); Canvas canvas = canvasMapper.selectById(vo.getCanvasId());
vo.setDesignPythonOutfitUrl(minioUtil.getPresignedUrl(designPythonOutfit.getDesignUrl(), 24 * 60)); vo.setCanvasUrl(minioUtil.getPresignedUrl(canvas.getUrl(), 24 * 60));
return vo; return vo;
} }
return null; return null;
@@ -342,6 +384,7 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
public PortfolioVO detail(PortfolioDTO portfolioDTO) { public PortfolioVO detail(PortfolioDTO portfolioDTO) {
Portfolio portfolio = portfolioMapper.selectById(portfolioDTO.getId()); Portfolio portfolio = portfolioMapper.selectById(portfolioDTO.getId());
PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class); PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class);
if (vo.getOpenSource() == 1) {
Long collectionId = portfolio.getCollectionId(); Long collectionId = portfolio.getCollectionId();
List<CollectionElement> collectionElementList = collectionElementService.getByCollectionId(collectionId); List<CollectionElement> collectionElementList = collectionElementService.getByCollectionId(collectionId);
for (CollectionElement element : collectionElementList) { for (CollectionElement element : collectionElementList) {
@@ -358,6 +401,9 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
tDesignPythonOutfit.setDesignUrl(minioUtil.getPresignedUrl(tDesignPythonOutfit.getDesignUrl(), 24 * 60)); tDesignPythonOutfit.setDesignUrl(minioUtil.getPresignedUrl(tDesignPythonOutfit.getDesignUrl(), 24 * 60));
} }
vo.setDesignPythonOutfitList(designPythonOutfitList); vo.setDesignPythonOutfitList(designPythonOutfitList);
}
Canvas canvas = canvasMapper.selectById(vo.getCanvasId());
vo.setCanvasUrl(minioUtil.getPresignedUrl(canvas.getUrl(), 24 * 60));
return vo; return vo;
} }
@@ -471,4 +517,9 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
return userLikeGroupService.choose(userLikeGroupNew.getId()); return userLikeGroupService.choose(userLikeGroupNew.getId());
} }
@Override
public Boolean designWorksRegister(DesignWorksRegisterDTO designWorksRegisterDTO) {
return null;
}
} }

View File

@@ -44,7 +44,7 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
@Resource @Resource
private FileProperties fileProperties; private FileProperties fileProperties;
@Transactional @Transactional(rollbackFor = Exception.class)
@Override @Override
public void initDefaultSysFile() { public void initDefaultSysFile() {
//删除已有的sysFile数据 //删除已有的sysFile数据

View File

@@ -2,29 +2,43 @@ package com.ai.da.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.constant.CommonConstant;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil; import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.MinioUtil;
import com.ai.da.common.utils.RedisUtil;
import com.ai.da.mapper.primary.*; import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.entity.TDesignPythonOutfit; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.mapper.primary.entity.UserLike; import com.ai.da.model.dto.ExportSaveDTO;
import com.ai.da.mapper.primary.entity.UserLikeGroup; import com.ai.da.model.dto.ProductImageLikeDTO;
import com.ai.da.model.dto.ToProductImageDTO;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.python.PythonService;
import com.ai.da.service.AccountService; import com.ai.da.service.AccountService;
import com.ai.da.service.CollectionService; import com.ai.da.service.CollectionService;
import com.ai.da.service.UserLikeGroupService; import com.ai.da.service.UserLikeGroupService;
import com.ai.da.service.UserLikeService; import com.ai.da.service.UserLikeService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.Gson;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.io.BufferedReader;
import java.util.List; import java.io.InputStream;
import java.util.Objects; import java.io.InputStreamReader;
import java.util.TimeZone; import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -167,4 +181,216 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
baseMapper.update(null,uw); baseMapper.update(null,uw);
} }
@Resource
private ExportFileMapper exportFileMapper;
@Override
public Boolean exportSave(MultipartFile file, Long userLikeGroupId) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
String upload = minioUtil.upload("aida-users", userHolder.getId() + "/exportFile", file);
QueryWrapper<ExportFile> qw = new QueryWrapper<>();
qw.lambda().eq(ExportFile::getUserLikeGroupId, userLikeGroupId);
List<ExportFile> exportFiles = exportFileMapper.selectList(qw);
if (CollectionUtil.isNotEmpty(exportFiles)) {
ExportFile exportFile = exportFiles.get(0);
exportFile.setUserLikeGroupId(userLikeGroupId);
exportFile.setUrl(upload);
exportFileMapper.updateById(exportFile);
}else {
ExportFile exportFile = new ExportFile();
exportFile.setUserLikeGroupId(userLikeGroupId);
exportFile.setUrl(upload);
exportFileMapper.insert(exportFile);
}
return Boolean.TRUE;
}
@Resource
private ToProductImageRecordMapper toProductImageRecordMapper;
@Resource
private ToProductImageResultMapper toProductImageResultMapper;
@Resource
private PythonService pythonService;
@Override
@Transactional(rollbackFor = Exception.class)
public List<ToProductImageResult> toProduct(ToProductImageDTO toProductImageDTO) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
Long userLikeGroupId = toProductImageDTO.getUserLikeGroupId();
ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
toProductImageRecord.setUserLikeGroupId(userLikeGroupId);
toProductImageRecord.setCreateTime(LocalDateTime.now());
if (!StringUtils.isEmpty(toProductImageDTO.getPrompt())) {
toProductImageRecord.setPrompt(toProductImageDTO.getPrompt());
}
toProductImageRecordMapper.insert(toProductImageRecord);
List<ToProductImageResult> result = new ArrayList<>();
int i = 0;
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
if (toProductImageVO.getElementType().equals("DesignOutfit")) {
String taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
i ++;
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId());
// 走模型
pythonService.toProductImage(tDesignPythonOutfit.getDesignUrl(), taskId, toProductImageDTO.getPrompt());
ToProductImageResult toProductImageResult = new ToProductImageResult();
toProductImageResult.setElementId(tDesignPythonOutfit.getId());
toProductImageResult.setElementType("DesignOutfit");
toProductImageResult.setCreateTime(LocalDateTime.now());
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
// toProductImageResult.setUrl(productImageUrl);
toProductImageResult.setIsLike(0);
toProductImageResult.setTaskId(taskId);
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
toProductImageResultMapper.insert(toProductImageResult);
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
result.add(toProductImageResult);
}else {
String taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
// 走模型
pythonService.toProductImage(toProductElement.getUrl(), taskId, toProductImageDTO.getPrompt());
ToProductImageResult toProductImageResult = new ToProductImageResult();
toProductImageResult.setElementId(toProductElement.getId());
toProductImageResult.setElementType("ProductElement");
toProductImageResult.setCreateTime(LocalDateTime.now());
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
// toProductImageResult.setUrl(productImageUrl);
toProductImageResult.setIsLike(0);
toProductImageResult.setTaskId(taskId);
toProductImageResultMapper.insert(toProductImageResult);
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
result.add(toProductImageResult);
}
}
return result;
}
@Resource
private ToProductElementMapper toProductElementMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public ToProductElementVO toProductImageElementUpload(MultipartFile file, Long userLikeGroupId) {
if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) {
throw new BusinessException("file.cannot.be.empty");
}
if (userLikeGroupId == null) {
throw new BusinessException("userLikeGroupId.cannot.be.empty");
}
AuthPrincipalVo userHolder = UserContext.getUserHolder();
String bucketName = "aida-users";
String minioUrl = minioUtil.upload(bucketName, userHolder.getId() + "/toProductImageElement", file);
ToProductElement toProductElement = new ToProductElement();
toProductElement.setUrl(minioUrl);
toProductElement.setUserLikeGroupId(userLikeGroupId);
toProductElement.setCreateTime(LocalDateTime.now());
toProductElementMapper.insert(toProductElement);
ToProductElementVO toProductElementVO = CopyUtil.copyObject(toProductElement, ToProductElementVO.class);
toProductElementVO.setUrl(minioUtil.getPresignedUrl(toProductElementVO.getUrl(), 24 * 60));
return toProductElementVO;
}
@Override
public Boolean productImageLike(ProductImageLikeDTO productImageLikeDTO) {
List<Long> toProductImageResultId = productImageLikeDTO.getToProductImageResultId();
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
qw.lambda().in(ToProductImageResult::getId, toProductImageResultId);
ToProductImageResult toProductImageResult = new ToProductImageResult();
toProductImageResult.setIsLike(1);
toProductImageResultMapper.update(toProductImageResult, qw);
return Boolean.TRUE;
}
@Resource
private RedisUtil redisUtil;
@Value("${redis.key.toProductImageResultKey}")
private String toProductImageResultKey;
@Override
public List<GenerateResultVO> getToProductImageResultList(List<String> taskIdList) {
List<GenerateResultVO> results = new ArrayList<>();
Set<String> collect = new HashSet<>();
taskIdList.forEach(taskId -> {
String key = toProductImageResultKey + ":" + taskId;
GenerateResultVO generateResultVO = new Gson().fromJson(redisUtil.getFromString(key), GenerateResultVO.class);
if (!Objects.isNull(generateResultVO) && !StringUtil.isNullOrEmpty(generateResultVO.getUrl())) {
String url = generateResultVO.getUrl();
if (url.substring(url.lastIndexOf("/") + 1).equals("white_image.jpg")) {
generateResultVO.setStatus("Invalid");
} else {
generateResultVO.setUrl(minioUtil.getPresignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME));
}
} else if (Objects.isNull(generateResultVO)) {
generateResultVO = new GenerateResultVO();
}
if (!StringUtil.isNullOrEmpty(generateResultVO.getStatus())) collect.add(generateResultVO.getStatus());
results.add(generateResultVO);
});
return results;
}
@Override
public JSONObject exportSearch(Long userLikeGroupId) {
QueryWrapper<ExportFile> qw = new QueryWrapper<>();
qw.lambda().eq(ExportFile::getUserLikeGroupId, userLikeGroupId);
List<ExportFile> exportFiles = exportFileMapper.selectList(qw);
if (CollectionUtil.isNotEmpty(exportFiles)) {
try {
InputStream download = minioUtil.download(exportFiles.get(0).getUrl());
String convert = convert(download);
JSONObject jsonObject = JSONObject.parseObject(convert);
JSONArray objects = jsonObject.getJSONArray("objects");
for (int i = 0; i < objects.size(); i++) {
JSONObject jsonObject1 = objects.getJSONObject(i);
String type = jsonObject1.getString("type");
if (type.equals("image")) {
String minioUrl = jsonObject1.getString("minioUrl");
jsonObject1.put("src", minioUtil.getPresignedUrl(minioUrl, 24 * 60));
}
objects.set(i, jsonObject1);
}
jsonObject.put("objects", objects);
System.out.println(jsonObject);
return jsonObject;
}catch (Exception e){
return null;
}
}else {
return null;
}
}
@Override
public CanvasElementUpload canvasElementUpload(MultipartFile file) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
CanvasElementUpload canvasElementUpload = new CanvasElementUpload();
String url = minioUtil.upload("aida-users", userHolder.getId() + "/canvasElementUpload", file);
canvasElementUpload.setUrl(url);
canvasElementUpload.setMinioUrl(minioUtil.getPresignedUrl(url, 24 * 60));
return canvasElementUpload;
}
@Override
public List<ToProductImageResult> productImageLikeList(ToProductImageDTO toProductImageDTO) {
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
qw.lambda().eq(ToProductImageResult::getIsLike, 1);
qw.lambda().eq(ToProductImageResult::getUserLikeGroupId, toProductImageDTO.getUserLikeGroupId());
List<ToProductImageResult> toProductImageResults = toProductImageResultMapper.selectList(qw);
for (ToProductImageResult toProductImageResult : toProductImageResults) {
toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
}
return toProductImageResults;
}
public static String convert(InputStream inputStream) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
return reader.lines().collect(Collectors.joining("\n"));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
} }

View File

@@ -85,6 +85,7 @@ redis.key.SRExceptionMap=SRExceptionMap
redis.key.taskList=TaskList redis.key.taskList=TaskList
redis.key.credits.pre-deduction=Credits:PreDeduction redis.key.credits.pre-deduction=Credits:PreDeduction
redis.key.generateResult=Generate:Result redis.key.generateResult=Generate:Result
redis.key.toProductImageResultKey=ToProductImage:Result
aws.s3.accessKeyId=AKIAVD3OJIMF6UJFLSHZ aws.s3.accessKeyId=AKIAVD3OJIMF6UJFLSHZ
aws.s3.secretKey=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 aws.s3.secretKey=LNIwFFB27/QedtZ+Q/viVUoX9F5x1DbuM8N0DkD8

View File

@@ -186,6 +186,17 @@ TROUSERS=Trousers
SKIRT=Skirt SKIRT=Skirt
FEMALE=Women's wear FEMALE=Women's wear
MALE=Men's wear MALE=Men's wear
SLOGAN=Slogan SLOGAN=Slogan
LOGO=Logo LOGO=Logo
PATTERN=Pattern PATTERN=Pattern
EMBROIDERY=Embroidery
BEADING=Beading
PEARL=Pearl
RIVET=Rivet
BUTTON=Button
BELT=Belt
CORSAGE=Corsage
ZIPPER=Zipper
POCKET=Pocket

View File

@@ -179,6 +179,17 @@ TROUSERS=裤子
SKIRT=短裙 SKIRT=短裙
FEMALE=女装 FEMALE=女装
MALE=男装 MALE=男装
SLOGAN=标语 SLOGAN=标语
LOGO=标志 LOGO=标志
PATTERN=图案 PATTERN=图案
EMBROIDERY=刺绣
BEADING=钉珠
PEARL=珍珠
RIVET=铆钉
BUTTON=纽扣
BELT=腰带
CORSAGE=胸花
ZIPPER=拉链
POCKET=口袋