From 56096e8d23c57a0978846a37a5acff05e3f5e721 Mon Sep 17 00:00:00 2001 From: litianxiang Date: Wed, 22 Oct 2025 14:56:53 +0800 Subject: [PATCH] second commit --- pom.xml | 36 +- .../lanecarford/common/CommonConstant.java | 15 + .../controller/CustomerPhotoController.java | 11 + .../controller/TryOnEffectController.java | 49 ++- .../controller/VisitRecordController.java | 47 +- .../lanecarford/dto/CustomerPhotoDto.java | 12 + .../com/aida/lanecarford/entity/Customer.java | 22 +- .../lanecarford/entity/CustomerPhoto.java | 28 +- .../aida/lanecarford/entity/ModelPhoto.java | 22 +- .../com/aida/lanecarford/entity/Sales.java | 22 +- .../com/aida/lanecarford/entity/Style.java | 22 +- .../aida/lanecarford/entity/TryOnEffect.java | 24 +- .../aida/lanecarford/entity/VisitRecord.java | 33 +- .../service/CustomerPhotoService.java | 2 + .../service/TryOnEffectService.java | 19 + .../service/VisitRecordService.java | 6 + .../impl/CustomerPhotoServiceImpl.java | 16 + .../service/impl/TryOnEffectServiceImpl.java | 415 +++++++++++++++++- .../service/impl/VisitRecordServiceImpl.java | 70 +++ .../com/aida/lanecarford/util/CopyUtil.java | 127 ++++++ .../com/aida/lanecarford/util/MinioUtil.java | 124 +++++- .../com/aida/lanecarford/vo/LibraryVo.java | 17 + .../aida/lanecarford/vo/TryOnResultVo.java | 17 + src/main/resources/application.yml | 4 +- src/main/resources/sql/schema.sql | 31 +- 25 files changed, 988 insertions(+), 203 deletions(-) create mode 100644 src/main/java/com/aida/lanecarford/common/CommonConstant.java create mode 100644 src/main/java/com/aida/lanecarford/dto/CustomerPhotoDto.java create mode 100644 src/main/java/com/aida/lanecarford/util/CopyUtil.java create mode 100644 src/main/java/com/aida/lanecarford/vo/LibraryVo.java create mode 100644 src/main/java/com/aida/lanecarford/vo/TryOnResultVo.java diff --git a/pom.xml b/pom.xml index 4a0ea15..8271620 100644 --- a/pom.xml +++ b/pom.xml @@ -100,9 +100,39 @@ 2.6.0 + + + com.google.auth + google-auth-library-oauth2-http + 1.38.0 + + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + + + cn.hutool + hutool-all + 5.8.25 + + + + com.alibaba + fastjson + 2.0.43 + + + + + org.springframework.boot + spring-boot-starter-data-redis + @@ -131,15 +161,11 @@ org.apache.maven.plugins maven-compiler-plugin - 3.12.1 + 3.11.0 21 21 - 21 UTF-8 - - --enable-preview - diff --git a/src/main/java/com/aida/lanecarford/common/CommonConstant.java b/src/main/java/com/aida/lanecarford/common/CommonConstant.java new file mode 100644 index 0000000..34f2d79 --- /dev/null +++ b/src/main/java/com/aida/lanecarford/common/CommonConstant.java @@ -0,0 +1,15 @@ +package com.aida.lanecarford.common; + +public class CommonConstant { + // 单位 秒 10分钟过期 +// public static final Long TASK_EXPIRE_TIME = 24 * 60 * 60L; + public static final Long TASK_EXPIRE_TIME = 10 * 60L; + // 单位 秒 两天过期 + public static final Long CREDITS_EXPIRE_TIME = 2 * 24 * 60 * 60L; + // 单位 分钟 + public static final Integer MINIO_IMAGE_EXPIRE_TIME = 24 * 60; + // 单位 秒 一天过期 in redis + public static final Long GENERATE_RESULT_EXPIRE_TIME = 24 * 60 * 60L; + // 单位 秒 7天过期 + public static final Long REDIS_SET_EXPIRE_TIME = 24 * 60 * 60 * 7L; +} \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/controller/CustomerPhotoController.java b/src/main/java/com/aida/lanecarford/controller/CustomerPhotoController.java index a8bcf2e..b020b24 100644 --- a/src/main/java/com/aida/lanecarford/controller/CustomerPhotoController.java +++ b/src/main/java/com/aida/lanecarford/controller/CustomerPhotoController.java @@ -1,7 +1,12 @@ package com.aida.lanecarford.controller; +import com.aida.lanecarford.common.ApiResponse; +import com.aida.lanecarford.dto.CustomerPhotoDto; +import com.aida.lanecarford.entity.CustomerPhoto; import com.aida.lanecarford.service.CustomerPhotoService; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -18,4 +23,10 @@ public class CustomerPhotoController { private final CustomerPhotoService customerPhotoService; + @PostMapping("/upload") + public ApiResponse upload(@RequestBody CustomerPhotoDto customerPhotoDto) { + CustomerPhoto customerPhoto = customerPhotoService.upload(customerPhotoDto); + return ApiResponse.success(customerPhoto); + } + } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java b/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java index 049c878..bccbca5 100644 --- a/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java +++ b/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java @@ -3,15 +3,15 @@ package com.aida.lanecarford.controller; import com.aida.lanecarford.common.ApiResponse; import com.aida.lanecarford.entity.TryOnEffect; import com.aida.lanecarford.service.TryOnEffectService; +import com.aida.lanecarford.vo.TryOnResultVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 试穿效果控制器 @@ -36,4 +36,45 @@ public class TryOnEffectController { return ApiResponse.success(taskId); } + @Operation(summary = "获取收藏的试穿效果", description = "获取指定进店记录的收藏的试穿效果") + @GetMapping("/favorites/{visitRecordId}") + public ApiResponse> getFavoriteTryOnEffects( + @Parameter(description = "进店记录ID", required = true) + @PathVariable Long visitRecordId) { + List tryOnResultVos = tryOnEffectService.getFavoriteTryOnEffects(visitRecordId); + return ApiResponse.success(tryOnResultVos); + } + + @GetMapping("/style/{styleId}") + @Operation(summary = "获取某套服装的所有生成结果", description = "获取某套服装的所有生成结果") + public ApiResponse> getTryOnEffectsByStyleId( + @Parameter(description = "服装ID", required = true) + @PathVariable Long styleId) { + List tryOnResultVos = tryOnEffectService.getTryOnEffectsByStyleId(styleId); + return ApiResponse.success(tryOnResultVos); + } + + /** + * 设置喜欢的试穿效果 + */ + @Operation(summary = "设置喜欢的试穿效果", description = "将指定试穿效果设置为收藏") + @PostMapping("/set-favorite/{tryOnId}") + public ApiResponse setFavoriteTryOnEffect( + @Parameter(description = "试穿效果ID", required = true) + @PathVariable Long tryOnId) { + tryOnEffectService.setFavoriteTryOnEffect(tryOnId); + return ApiResponse.success(); + } + + /** + * 取消喜欢的试穿效果 + */ + @Operation(summary = "取消喜欢的试穿效果", description = "取消指定试穿效果的收藏") + @PostMapping("/cancel-favorite/{tryOnId}") + public ApiResponse cancelFavoriteTryOnEffect( + @Parameter(description = "试穿效果ID", required = true) + @PathVariable Long tryOnId) { + tryOnEffectService.cancelFavoriteTryOnEffect(tryOnId); + return ApiResponse.success(); + } } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/controller/VisitRecordController.java b/src/main/java/com/aida/lanecarford/controller/VisitRecordController.java index 14be7d4..bd55c49 100644 --- a/src/main/java/com/aida/lanecarford/controller/VisitRecordController.java +++ b/src/main/java/com/aida/lanecarford/controller/VisitRecordController.java @@ -1,9 +1,15 @@ package com.aida.lanecarford.controller; +import com.aida.lanecarford.common.ApiResponse; +import com.aida.lanecarford.entity.VisitRecord; import com.aida.lanecarford.service.VisitRecordService; +import com.aida.lanecarford.vo.LibraryVo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 进店记录控制器 @@ -11,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; * @author AI Assistant * @since 2024-01-01 */ +@Slf4j @RestController @RequestMapping("/api/visit-records") @RequiredArgsConstructor @@ -18,4 +25,40 @@ public class VisitRecordController { private final VisitRecordService visitRecordService; + /** + * 根据ID删除进店记录(逻辑删除) + * + * @param id 进店记录ID + * @return 删除结果 + */ + @DeleteMapping("/{id}") + public ApiResponse deleteById(@PathVariable Long id) { + log.info("开始删除进店记录,ID: {}", id); + + Boolean result = visitRecordService.delete(id); + + if (result) { + log.info("进店记录删除成功,ID: {}", id); + return ApiResponse.success("Visit record deleted successfully"); + } else { + log.warn("进店记录删除失败,ID: {}", id); + return ApiResponse.error("Failed to delete visit record"); + } + } + //根据顾客ID查询所有进店记录 + @GetMapping("/customer/{customerId}") + public ApiResponse> getByCustomerId(@PathVariable Long customerId) { + log.info("开始查询顾客ID为{}的进店记录", customerId); + + List result = visitRecordService.getByCustomerId(customerId); + + if (result != null && !result.isEmpty()) { + log.info("查询成功,顾客ID为{}的进店记录为:{}", customerId, result); + return ApiResponse.success(result); + } else { + log.warn("没有找到顾客ID为{}的进店记录", customerId); + return ApiResponse.error("No visit records found for customer ID: " + customerId); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/dto/CustomerPhotoDto.java b/src/main/java/com/aida/lanecarford/dto/CustomerPhotoDto.java new file mode 100644 index 0000000..a532a0e --- /dev/null +++ b/src/main/java/com/aida/lanecarford/dto/CustomerPhotoDto.java @@ -0,0 +1,12 @@ +package com.aida.lanecarford.dto; + +import com.aida.lanecarford.entity.CustomerPhoto; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +@Data +public class CustomerPhotoDto extends CustomerPhoto { + @NotNull(message = "file.cannot.be.empty") + private MultipartFile file; +} diff --git a/src/main/java/com/aida/lanecarford/entity/Customer.java b/src/main/java/com/aida/lanecarford/entity/Customer.java index 851f381..0b73113 100644 --- a/src/main/java/com/aida/lanecarford/entity/Customer.java +++ b/src/main/java/com/aida/lanecarford/entity/Customer.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("customers") -public class Customer { - - /** - * 顾客ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class Customer extends BaseEntity { /** * 顾客姓名 @@ -58,16 +52,4 @@ public class Customer { */ @TableField("age_range") private String ageRange; - - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/CustomerPhoto.java b/src/main/java/com/aida/lanecarford/entity/CustomerPhoto.java index d25620b..2ed8f96 100644 --- a/src/main/java/com/aida/lanecarford/entity/CustomerPhoto.java +++ b/src/main/java/com/aida/lanecarford/entity/CustomerPhoto.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("customer_photos") -public class CustomerPhoto { - - /** - * 顾客照片ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class CustomerPhoto extends BaseEntity { /** * 顾客ID @@ -53,21 +47,5 @@ public class CustomerPhoto { @TableField("is_primary") private Integer isPrimary; - /** - * 上传时间 - */ - @TableField("upload_time") - private LocalDateTime uploadTime; - - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:uploadTime、createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/ModelPhoto.java b/src/main/java/com/aida/lanecarford/entity/ModelPhoto.java index 92d39cc..9ad1c36 100644 --- a/src/main/java/com/aida/lanecarford/entity/ModelPhoto.java +++ b/src/main/java/com/aida/lanecarford/entity/ModelPhoto.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("model_photos") -public class ModelPhoto { - - /** - * 模特照片ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class ModelPhoto extends BaseEntity { /** * 模特照片URL @@ -59,15 +53,5 @@ public class ModelPhoto { @TableField("sort_order") private Integer sortOrder; - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/Sales.java b/src/main/java/com/aida/lanecarford/entity/Sales.java index cf61be6..8c46ea8 100644 --- a/src/main/java/com/aida/lanecarford/entity/Sales.java +++ b/src/main/java/com/aida/lanecarford/entity/Sales.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("sales") -public class Sales { - - /** - * 导购ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class Sales extends BaseEntity { /** * 用户名 @@ -83,15 +77,5 @@ public class Sales { @TableField("is_active") private Integer isActive; - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/Style.java b/src/main/java/com/aida/lanecarford/entity/Style.java index e57f640..d88919d 100644 --- a/src/main/java/com/aida/lanecarford/entity/Style.java +++ b/src/main/java/com/aida/lanecarford/entity/Style.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("styles") -public class Style { - - /** - * 风格配置ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class Style extends BaseEntity { /** * 顾客ID @@ -71,15 +65,5 @@ public class Style { @TableField("error_message") private String errorMessage; - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/TryOnEffect.java b/src/main/java/com/aida/lanecarford/entity/TryOnEffect.java index 77c4d53..16f851d 100644 --- a/src/main/java/com/aida/lanecarford/entity/TryOnEffect.java +++ b/src/main/java/com/aida/lanecarford/entity/TryOnEffect.java @@ -19,15 +19,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("try_on_effects") -public class TryOnEffect { - - /** - * 试穿效果ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class TryOnEffect extends BaseEntity { /** * 顾客ID @@ -60,7 +54,7 @@ public class TryOnEffect { private Long modelPhotoId; /** - * 提示词 + * 提示词,当is_regenerated为1时才会有值 */ @TableField("prompt") private String prompt; @@ -107,15 +101,5 @@ public class TryOnEffect { @TableField("is_favorite") private Integer isFavorite; - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/entity/VisitRecord.java b/src/main/java/com/aida/lanecarford/entity/VisitRecord.java index dd087e2..024f62d 100644 --- a/src/main/java/com/aida/lanecarford/entity/VisitRecord.java +++ b/src/main/java/com/aida/lanecarford/entity/VisitRecord.java @@ -20,15 +20,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) +@EqualsAndHashCode(callSuper = true) @TableName("visit_records") -public class VisitRecord { - - /** - * 进店记录ID - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; +public class VisitRecord extends BaseEntity { /** * 顾客ID @@ -54,17 +48,6 @@ public class VisitRecord { @TableField("visit_time") private LocalDateTime visitTime; - /** - * 会话ID - */ - @TableField("session_id") - private String sessionId; - - /** - * 状态(0-已结束,1-进行中) - */ - @TableField("status") - private Integer status; /** * 备注 @@ -72,15 +55,5 @@ public class VisitRecord { @TableField("notes") private String notes; - /** - * 创建时间 - */ - @TableField(value = "created_time", fill = FieldFill.INSERT) - private LocalDateTime createdTime; - - /** - * 更新时间 - */ - @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE) - private LocalDateTime updatedTime; + // 注意:createdTime、updatedTime 字段已在 BaseEntity 中定义 } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/CustomerPhotoService.java b/src/main/java/com/aida/lanecarford/service/CustomerPhotoService.java index 5a992c8..b5afc77 100644 --- a/src/main/java/com/aida/lanecarford/service/CustomerPhotoService.java +++ b/src/main/java/com/aida/lanecarford/service/CustomerPhotoService.java @@ -1,5 +1,6 @@ package com.aida.lanecarford.service; +import com.aida.lanecarford.dto.CustomerPhotoDto; import com.aida.lanecarford.entity.CustomerPhoto; import com.baomidou.mybatisplus.extension.service.IService; @@ -11,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface CustomerPhotoService extends IService { + CustomerPhoto upload(CustomerPhotoDto customerPhotoDto); } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java b/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java index 8986803..89c33e7 100644 --- a/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java +++ b/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java @@ -1,9 +1,12 @@ package com.aida.lanecarford.service; import com.aida.lanecarford.entity.TryOnEffect; +import com.aida.lanecarford.vo.TryOnResultVo; import com.baomidou.mybatisplus.extension.service.IService; import jakarta.validation.Valid; +import java.util.List; + /** * 试穿效果服务接口 * @@ -13,4 +16,20 @@ import jakarta.validation.Valid; public interface TryOnEffectService extends IService { String generateTryOnEffect(@Valid TryOnEffect tryOnEffectDto); + + List getFavoriteTryOnEffects(Long visitRecordId); + + /** + * 设置试穿效果为收藏 + * @param tryOnId 试穿效果ID + */ + void setFavoriteTryOnEffect(Long tryOnId); + + /** + * 取消试穿效果的收藏 + * @param tryOnId 试穿效果ID + */ + void cancelFavoriteTryOnEffect(Long tryOnId); + + List getTryOnEffectsByStyleId(Long styleId); } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/VisitRecordService.java b/src/main/java/com/aida/lanecarford/service/VisitRecordService.java index 4c2c0de..b84e0e2 100644 --- a/src/main/java/com/aida/lanecarford/service/VisitRecordService.java +++ b/src/main/java/com/aida/lanecarford/service/VisitRecordService.java @@ -1,8 +1,11 @@ package com.aida.lanecarford.service; import com.aida.lanecarford.entity.VisitRecord; +import com.aida.lanecarford.vo.LibraryVo; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 进店记录服务接口 * @@ -11,4 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface VisitRecordService extends IService { + Boolean delete(Long id); + + List getByCustomerId(Long customerId); } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java index 84830a5..02b22c3 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java @@ -1,8 +1,11 @@ package com.aida.lanecarford.service.impl; +import com.aida.lanecarford.dto.CustomerPhotoDto; import com.aida.lanecarford.entity.CustomerPhoto; import com.aida.lanecarford.mapper.CustomerPhotoMapper; import com.aida.lanecarford.service.CustomerPhotoService; +import com.aida.lanecarford.util.CopyUtil; +import com.aida.lanecarford.util.MinioUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -16,5 +19,18 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class CustomerPhotoServiceImpl extends ServiceImpl implements CustomerPhotoService { + private final MinioUtil minioUtil; + @Override + public CustomerPhoto upload(CustomerPhotoDto customerPhotoDto) { + //TODO:设置桶名 + String url = minioUtil.uploadFile(customerPhotoDto.getFile()); + + CustomerPhoto customerPhoto = CopyUtil.copyObject(customerPhotoDto, CustomerPhoto.class); + customerPhoto.setPhotoUrl(url); + this.save(customerPhoto); + + + return customerPhoto; + } } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java index 4dcd80d..861797e 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java @@ -1,22 +1,39 @@ package com.aida.lanecarford.service.impl; +import cn.hutool.json.JSONObject; +import com.aida.lanecarford.common.CommonConstant; +import com.aida.lanecarford.common.response.ResultEnum; import com.aida.lanecarford.entity.CustomerPhoto; import com.aida.lanecarford.entity.ModelPhoto; import com.aida.lanecarford.entity.Style; import com.aida.lanecarford.entity.TryOnEffect; +import com.aida.lanecarford.exception.BusinessException; import com.aida.lanecarford.mapper.TryOnEffectMapper; import com.aida.lanecarford.service.CustomerPhotoService; import com.aida.lanecarford.service.ImageCompositionService; import com.aida.lanecarford.service.ModelPhotoService; import com.aida.lanecarford.service.StyleService; import com.aida.lanecarford.service.TryOnEffectService; +import com.aida.lanecarford.util.MinioUtil; +import com.aida.lanecarford.vo.TryOnResultVo; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.auth.oauth2.GoogleCredentials; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import okhttp3.*; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.UUID; +import java.util.concurrent.TimeUnit; /** * 试穿效果服务实现类 @@ -31,34 +48,43 @@ public class TryOnEffectServiceImpl extends ServiceImpl imageUrls = new ArrayList<>(); if (isRegenerated == 1) { - String prompt = tryOnEffectDto.getPrompt(); + prompt = tryOnEffectDto.getPrompt(); Long originalTryOnId = tryOnEffectDto.getOriginalTryOnId(); // 验证originalTryOnId不能为空 if (originalTryOnId == null) { throw new RuntimeException("originalTryOnId cannot be null"); } - TryOnEffect originalTryOn = tryOnEffectService.getById(originalTryOnId); + TryOnEffect originalTryOn = this.getById(originalTryOnId); String resultImageUrl = originalTryOn.getResultImageUrl(); imageUrls.add(resultImageUrl); + + Long customerPhotoId = tryOnEffectDto.getCustomerPhotoId(); + if (customerPhotoId != null) { + //根据id查到对应customerurl + CustomerPhoto customerPhoto = customerPhotoService.getById(customerPhotoId); + String customerPhotoUrl = customerPhoto.getPhotoUrl(); + if (customerPhotoUrl != null && !customerPhotoUrl.trim().isEmpty()) { + imageUrls.add(customerPhotoUrl); + } + } } else { Long styleId = tryOnEffectDto.getStyleId(); // 验证styleId不能为空 if (styleId == null) { throw new RuntimeException("styleId cannot be null"); } - - - //根据id查到对应styleurl Style style = styleService.getById(styleId); String styleImageUrl = style.getStyleImageUrl(); @@ -75,17 +101,7 @@ public class TryOnEffectServiceImpl extends ServiceImpl getFavoriteTryOnEffects(Long visitRecordId) { + List tryOnEffects = this.list(new LambdaQueryWrapper() + .eq(TryOnEffect::getVisitRecordId, visitRecordId) + .eq(TryOnEffect::getIsFavorite, 1)); + List tryOnResultVos = new ArrayList<>(); + for (TryOnEffect tryOnEffect : tryOnEffects) { + TryOnResultVo tryOnResultVo = new TryOnResultVo(); + tryOnResultVo.setTryOnId(tryOnEffect.getId()); + tryOnResultVo.setTryOnUrl(minioUtil.getPresignedUrl( + tryOnEffect.getResultImageUrl(), + CommonConstant.MINIO_IMAGE_EXPIRE_TIME + )); + // 如果是原始效果,则获取对应的style图片 + if (tryOnEffect.getIsRegenerated()==0){ + LambdaQueryWrapper