diff --git a/src/main/java/com/ai/da/mapper/primary/UserBehaviorMapper.java b/src/main/java/com/ai/da/mapper/primary/UserBehaviorMapper.java new file mode 100644 index 00000000..6d67a5eb --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/UserBehaviorMapper.java @@ -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.UserBehavior; + +public interface UserBehaviorMapper extends CommonMapper { +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/UserBehavior.java b/src/main/java/com/ai/da/mapper/primary/entity/UserBehavior.java new file mode 100644 index 00000000..65dca46c --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/UserBehavior.java @@ -0,0 +1,39 @@ +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; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("user_behavior") +public class UserBehavior implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long accountId; + + private String behaviorType; + + private String gender; + + private String category; + + private String url; + + private LocalDateTime createTime; + +} diff --git a/src/main/java/com/ai/da/model/enums/UserBehaviorType.java b/src/main/java/com/ai/da/model/enums/UserBehaviorType.java new file mode 100644 index 00000000..fcaf42f5 --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/UserBehaviorType.java @@ -0,0 +1,44 @@ +package com.ai.da.model.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum UserBehaviorType implements IEnumDisplay { + + PORTFOLIO_CLICK("portfolioClick"), + PORTFOLIO_LIKE("portfolioLike"), + SECOND_CREATION("secondCreation"), + SKETCH_LIKE("sketchLike") + +// CHILD("Child") + ; + + private String value; + + UserBehaviorType(String value) { + this.value = value; + } + + public static boolean isValidName(String name) { + for (Sex sex : Sex.values()) { + if (sex.name().equalsIgnoreCase(name)) { + return true; + } + } + return false; + } + + @Override + @JsonValue + public String getValue() { + return this.value; + } + + public static UserBehaviorType getType(String value) { + for (UserBehaviorType type : values()) { + if (type.value.equalsIgnoreCase(value)) { + return type; + } + } + throw new IllegalArgumentException("No matching constant for [" + value + "]"); + } +} diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 3fbd37c6..c68a6b64 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -665,7 +665,7 @@ public class PythonService { if (useSystem) { // 获取系统推荐sketch String categoryParam = elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, elementVO.getBrandId(), elementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, styleCategory, elementVO); @@ -679,7 +679,7 @@ public class PythonService { return coverSketchToDesignPythonItem(collectionElements.get(randomNum).getId(), collectionElements.get(randomNum), elementVO); }else { String categoryParam = elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, elementVO.getBrandId(), elementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, styleCategory, elementVO); @@ -1035,7 +1035,7 @@ public class PythonService { // 获取随机pin sketch的category String category = element.getLevel2Type(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1058,7 +1058,7 @@ public class PythonService { String category = dressings.get(randomNum).getStyleCategory(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1094,7 +1094,7 @@ public class PythonService { String category = element.getLevel2Type(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1118,7 +1118,7 @@ public class PythonService { String category = dressings.get(randomNum).getStyleCategory(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1702,7 +1702,7 @@ public class PythonService { elementVO.setDesignLibraryModelPointVO(vo); } else { // pythonItem.setBody_path("/workspace/python_code/Multi-layer-Virtual-Try-on/dataset_for_test/Img_model.png"); - pythonItem.setBody_path("aida-mannequins/model_1693218345.2714432.png"); + pythonItem.setBody_path("aida-sys-image/models/female/dd6b48ce-1bab-4861-bb87-a30b82377a8f.png"); } // if (Objects.nonNull(designLibraryModelPoint)) { // pythonItem.setBody_path(designLibraryModelPoint.getTemplateUrl()); @@ -3934,7 +3934,7 @@ public class PythonService { throw new BusinessException("design.interface.exception"); } - public List getSystemSketchByCategory(String category) { + public List getSystemSketchByCategory(String category, Long brandId, Double brandScale) { AuthPrincipalVo userHolder = UserContext.getUserHolder(); OkHttpClient client = new OkHttpClient().newBuilder() @@ -3953,7 +3953,9 @@ public class PythonService { "http://18.167.251.121", "9994", userHolder.getId(), - category); + category, + brandId, + brandScale); log.info("Recommendation request URL: {}", url); diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 46d69c24..5a97d1c1 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -16,6 +16,7 @@ import com.ai.da.model.dto.*; import com.ai.da.model.enums.BuildType; import com.ai.da.model.enums.CollectionType; import com.ai.da.model.enums.DesignProcess; +import com.ai.da.model.enums.UserBehaviorType; import com.ai.da.model.vo.*; import com.ai.da.python.PythonService; import com.ai.da.python.vo.*; @@ -147,6 +148,10 @@ public class DesignServiceImpl extends ServiceImpl impleme private ToProductImageRecordMapper toProductImageRecordMapper; @Resource private ColorLoopUpTableService colorLoopUpTableService; + @Resource + private UserBehaviorMapper userBehaviorMapper; + @Resource + private CollectionElementRelModelMapper collectionElementRelModelMapper; private final ConcurrentHashMap> designContext = new ConcurrentHashMap<>(); @@ -1214,9 +1219,32 @@ public class DesignServiceImpl extends ServiceImpl impleme } //修改designItem为like状态 designItemService.updateLikeStatus(designLikeDTO.getDesignItemId(), (byte) 1); + // 记录喜欢的系统sketch + addSystemLikeSketch(designItem); return new DesignLikeVO(userLikeSortId, userGroupId, groupDetailId, pictureName, userLike.getId(), userLikeSort.getSort()); } + private void addSystemLikeSketch(DesignItem designItem) { + AuthPrincipalVo userHolder = UserContext.getUserHolder(); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(DesignItemDetail::getDesignItemId, designItem.getId()); + qw.lambda().ne(DesignItemDetail::getType, "Body"); + List designItemDetails = designItemDetailMapper.selectList(qw); + for (DesignItemDetail designItemDetail : designItemDetails) { + if (designItemDetail.getPath().startsWith("aida-sys-image")) { + String[] split = designItemDetail.getPath().split("/"); + UserBehavior userBehavior = new UserBehavior(); + userBehavior.setAccountId(userHolder.getId()); + userBehavior.setBehaviorType(UserBehaviorType.SKETCH_LIKE.getValue()); + userBehavior.setGender(split[2]); + userBehavior.setCategory(split[3]); + userBehavior.setUrl(designItemDetail.getPath()); + userBehavior.setCreateTime(LocalDateTime.now()); + userBehaviorMapper.insert(userBehavior); + } + } + } + @Override public CollectionSort addCollectionSort(Long relationId, String relationType, Long projectId) { int sort = getNextSort(projectId); @@ -2319,11 +2347,30 @@ public class DesignServiceImpl extends ServiceImpl impleme }else { designCollectionDTO.setSketchBoards(new ArrayList<>()); } + if (CollectionUtil.isNotEmpty(groupedMap.get("Models"))) { + List mannequins = new ArrayList<>(); + List modelList = groupedMap.get("Models"); + for (CollectionElement collectionElement : modelList) { + MannequinDTO dto = new MannequinDTO(); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(CollectionElementRelModel::getCollectionElementId, collectionElement.getId()); + List collectionElementRelModels = collectionElementRelModelMapper.selectList(qw); + if (!CollectionUtils.isEmpty(collectionElementRelModels)) { + CollectionElementRelModel relModel = collectionElementRelModels.get(0); + dto.setId(relModel.getRelationId()); + dto.setType(relModel.getRelationType()); + } + } + + }else { + designCollectionDTO.setMannequins(new ArrayList<>()); + } }else { designCollectionDTO.setMoodBoards(new ArrayList<>()); designCollectionDTO.setPrintBoards(new ArrayList<>()); designCollectionDTO.setColorBoards(new ArrayList<>()); designCollectionDTO.setSketchBoards(new ArrayList<>()); + designCollectionDTO.setMannequins(new ArrayList<>()); } Long workspaceId = workspaceService.getByProjectId(projectId); Workspace workspace = workspaceService.getById(workspaceId);