diff --git a/src/main/java/com/ai/da/common/config/RedisConfig.java b/src/main/java/com/ai/da/common/config/RedisConfig.java index 5f01753c..78c13d7d 100644 --- a/src/main/java/com/ai/da/common/config/RedisConfig.java +++ b/src/main/java/com/ai/da/common/config/RedisConfig.java @@ -39,4 +39,30 @@ public class RedisConfig { redisTemplate.afterPropertiesSet(); return redisTemplate; } + + @Bean(name = "redisListTemplate") + public RedisTemplate getRedisListTemplate(RedisConnectionFactory factory) { + RedisTemplate redisListTemplate = new RedisTemplate<>(); + redisListTemplate.setConnectionFactory(factory); + + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + + redisListTemplate.setKeySerializer(stringRedisSerializer); // key的序列化类型 + + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 方法过期,改为下面代码 +// objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, + ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + + redisListTemplate.setValueSerializer(jackson2JsonRedisSerializer); // value的序列化类型 + redisListTemplate.setHashKeySerializer(stringRedisSerializer); + redisListTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisListTemplate.afterPropertiesSet(); + return redisListTemplate; + } } diff --git a/src/main/java/com/ai/da/common/utils/RedisUtil.java b/src/main/java/com/ai/da/common/utils/RedisUtil.java index ffb0f424..1c17bec9 100644 --- a/src/main/java/com/ai/da/common/utils/RedisUtil.java +++ b/src/main/java/com/ai/da/common/utils/RedisUtil.java @@ -21,6 +21,9 @@ public class RedisUtil { @Resource private RedisTemplate redisTemplate; + @Resource + private RedisTemplate>> redisListTemplate; + public Boolean hasKey(String key){ return redisTemplate.hasKey(key); } @@ -228,5 +231,14 @@ public class RedisUtil { return redisTemplate.opsForValue().increment(key, 0); } + public final static String NO_GRADIENT = "NoGradient"; + public final static String WITH_GRADIENT = "WithGradient"; + public void addToStringList(String key, List> list){ + redisListTemplate.opsForValue().set(key, list); + } + + public List> getFromStringList(String key){ + return redisListTemplate.opsForValue().get(key); + } } diff --git a/src/main/java/com/ai/da/controller/DesignDetailController.java b/src/main/java/com/ai/da/controller/DesignDetailController.java index 1e06e825..92e28ecc 100644 --- a/src/main/java/com/ai/da/controller/DesignDetailController.java +++ b/src/main/java/com/ai/da/controller/DesignDetailController.java @@ -81,6 +81,13 @@ public class DesignDetailController { return Response.success(designItemService.editLayersPositionAndScale(positionAndScaleVO)); } + @ApiOperation(value = "按是否使用了渐变色对历史like进行分类") + @GetMapping("/classificationByGradientColor") + public Response classificationByGradientColor(){ + designItemService.classificationByGradientColor(); + return Response.success("success"); + } + @ApiOperation(value = "mask数据兼容") @PostMapping("/convertWithoutGradient") public Response convertHistoryMaskWithoutGradient(){ @@ -88,11 +95,22 @@ public class DesignDetailController { return Response.success("success"); } - @Resource - private UserLikeService userLikeService; @ApiOperation(value = "获取历史like中包含有渐变色的design") - @PostMapping("/getHistoryLikeWithGradient") - public Response>> getHistoryLikeWithGradient(){ - return Response.success(userLikeService.getHistoryLikeWithGradient()); + @GetMapping("/getHistoryLikeWithGradient") + public Response>> getHistoryLikeWithGradient(){ + return Response.success(designItemService.getHistoryLikeWithGradient()); + } + + @ApiOperation(value = "删除没有model的designItem") + @GetMapping("/deleteNotFoundModelDesign") + public Response deleteNotFoundModelDesign(){ + designItemService.deleteNotFoundModelDesign(); + return Response.success("success"); + } + + @ApiOperation(value = "单个design 有渐变色的mask替换") + @PostMapping("/designSingleWithGradient") + public Response designSingleWithGradient(@Valid @RequestBody DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO) { + return Response.success(designItemService.designSingleIncludeLayers(designSingleIncludeLayersDTO)); } } diff --git a/src/main/java/com/ai/da/mapper/primary/TDesignPythonOutfitDetailMapper.java b/src/main/java/com/ai/da/mapper/primary/TDesignPythonOutfitDetailMapper.java index ecdf8b45..4ec7fe8e 100644 --- a/src/main/java/com/ai/da/mapper/primary/TDesignPythonOutfitDetailMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/TDesignPythonOutfitDetailMapper.java @@ -4,6 +4,8 @@ import com.ai.da.common.config.mybatis.plus.CommonMapper; import com.ai.da.mapper.primary.entity.TDesignPythonOutfitDetail; import com.ai.da.model.vo.TDesignPythonOutfitDetailVO; import com.baomidou.mybatisplus.core.metadata.IPage; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Delete; import java.util.List; @@ -24,4 +26,7 @@ public interface TDesignPythonOutfitDetailMapper extends CommonMapper selectTDesignPythonOutfitDetailPage(IPage page, TDesignPythonOutfitDetailVO tDesignPythonOutfitDetail); + @Delete("DELETE FROM t_design_python_outfit_detail WHERE design_python_outfit_id = #{designPythonOutfitId}") + void deleteByDesignPythonOutfitIdPhysical(@Param("designPythonOutfitId") Long designPythonOutfitId); + } diff --git a/src/main/java/com/ai/da/mapper/primary/UserLikeMapper.java b/src/main/java/com/ai/da/mapper/primary/UserLikeMapper.java index 5632606a..7343698b 100644 --- a/src/main/java/com/ai/da/mapper/primary/UserLikeMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/UserLikeMapper.java @@ -18,4 +18,6 @@ public interface UserLikeMapper extends CommonMapper { List> getHistoryLikeWithGradient(); + List> getHistoryLikeWithoutModel(); + } diff --git a/src/main/java/com/ai/da/service/DesignItemService.java b/src/main/java/com/ai/da/service/DesignItemService.java index 5a0935f6..e7d94d47 100644 --- a/src/main/java/com/ai/da/service/DesignItemService.java +++ b/src/main/java/com/ai/da/service/DesignItemService.java @@ -61,5 +61,11 @@ public interface DesignItemService extends IService { Long getCountByUserAndTime(String startTime, String endTime, List accountIds); + void classificationByGradientColor(); + + List> getHistoryLikeWithGradient(); + void convertHistoryMaskWithoutGradient(); + + void deleteNotFoundModelDesign(); } diff --git a/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java b/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java index c11bb759..0802ee98 100644 --- a/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java +++ b/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java @@ -36,7 +36,9 @@ public interface ITDesignPythonOutfitDetailService extends IService offset); - void deleteByDesignPythonOutfitId(Long designPythonOutfitId); + void deleteByDesignPythonOutfitIdLogical(Long designPythonOutfitId); + + void deleteByDesignPythonOutfitIdPhysical(Long designPythonOutfitId); void setDesignPythonOutfitDetailPriority(List details); diff --git a/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java index 99f0b6be..66361706 100644 --- a/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java @@ -24,9 +24,11 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import com.mysql.cj.util.StringUtils; import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SerializationUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -85,6 +87,8 @@ public class DesignItemServiceImpl extends ServiceImpl { // 如果sketch截图不为空,则将该截图上传,并替换path - if (!StringUtil.isNullOrEmpty(item.getMaskUrl())){ - // 由于前端不好处理这块,所以,当mask没有做任何修改的时候,仍然会传原始mask的minio地址 - if (!item.getMaskUrl().startsWith("data:image") && item.getMaskUrl().startsWith("https://")){ - // 当没有修改mask时,还是用之前的mask地址 - item.setMaskUrl(item.getMaskMinioUrl()); - }else { - // 将原图地址作为修改后的图片地址,放在不同的桶 - String path = minioUtil.base64UploadToPath(item.getMaskUrl(), clothingBucket, "labelingMask/" + UUID.randomUUID()); - if (StringUtil.isNullOrEmpty(path)){ - log.error("标注的mask图片上传失败"); - throw new BusinessException("image.modify.failed"); + if (setNull){ + item.setMaskUrl(null); + }else { + if (!StringUtil.isNullOrEmpty(item.getMaskUrl())){ + // 由于前端不好处理这块,所以,当mask没有做任何修改的时候,仍然会传原始mask的minio地址 + if (!item.getMaskUrl().startsWith("data:image") && item.getMaskUrl().startsWith("https://")){ + // 当没有修改mask时,还是用之前的mask地址 + item.setMaskUrl(item.getMaskMinioUrl()); + }else { + // 将原图地址作为修改后的图片地址,放在不同的桶 + String path = minioUtil.base64UploadToPath(item.getMaskUrl(), clothingBucket, "labelingMask/" + UUID.randomUUID()); + if (StringUtil.isNullOrEmpty(path)){ + log.error("标注的mask图片上传失败"); + throw new BusinessException("image.modify.failed"); + } + item.setMaskUrl(path); } - item.setMaskUrl(path); } } }); @@ -909,94 +924,167 @@ public class DesignItemServiceImpl extends ServiceImpl> noGradientList = new ArrayList<>(); + List> withGradientList = new ArrayList<>(); + List> duplicateGradientList = new ArrayList<>(); + + // 1、获取t_user_like表中design_item_id不为-1的所有design_item_id, design_outfit_id + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("design_item_id", -1); + queryWrapper.ne("converted", 1); + + List userLikes = userLikeMapper.selectList(queryWrapper); + log.info("userLike 总数 :{}", userLikes.size()); + + long start = System.currentTimeMillis(); + // 2、遍历每个design_item_id + try { + userLikes.forEach(userLike -> { + log.info("user_like_id:{}, design_item_id:{}, design_python_outfit_id:{}", userLike.getId(), userLike.getDesignItemId(), userLike.getDesignOutfitId()); + List designItemDetails = designItemDetailService.selectByDesignItemId(userLike.getDesignItemId()); + if (designItemDetails.isEmpty()){ + log.error("无法找到history中的被like的design item => design_item_id : {}", userLike.getDesignItemId()); + }else { + boolean flag = true; + for (DesignItemDetail designItemDetail : designItemDetails) { + if (!designItemDetail.getType().equals("Body") && !StringUtils.isNullOrEmpty(designItemDetail.getGradientString())) { + flag = false; + break; + } + } + List list = Arrays.asList(userLike.getDesignItemId(), userLike.getDesignOutfitId()); + if (flag){ + // 如果design_item_id对应的每个单品都没有使用渐变色,则将该design_item_id noGradientList + if (!noGradientList.contains(list)){ + noGradientList.add(list); + }else { + duplicateGradientList.add(list); + } + }else { + // 如果design_item_id对应的任一个单品使用了渐变色,则将该design_item_id design_python_outfit_id加入withGradientList + if (!withGradientList.contains(list)){ + withGradientList.add(list); + }else { + duplicateGradientList.add(list); + } + } + } + }); + }catch (Exception e){ + log.error(e.getMessage()); + } + + long end = System.currentTimeMillis(); + log.info("按是否使用了渐变色对历史like进行分类 执行时长:{}毫秒", end - start); + + // 3、将分类好的数据存入redis中 + redisUtil.addToStringList(RedisUtil.NO_GRADIENT, noGradientList); + redisUtil.addToStringList(RedisUtil.WITH_GRADIENT, withGradientList); + + log.info("从t_user_like表,通过渐变色分类,完成,其中总like量为:{}, 没有使用渐变色的like量为:{}, 使用了渐变色的like量为:{}", userLikes.size(), noGradientList.size(), withGradientList.size()); + log.info("使用了渐变色的like: {}", withGradientList); + log.info("未使用渐变色的like: {}", noGradientList); + log.info("重复的like: {},总数:{}", duplicateGradientList, duplicateGradientList.size()); + + } + + public List> getHistoryLikeWithGradient(){ + return redisUtil.getFromStringList(RedisUtil.WITH_GRADIENT); + } + // todo 1、新增一个字段 用于记录历史like的design中 没有新的mask的design // 2、获取design detail时,当其design_item_id和design_python_outfit_id在like中时,重新调用design,并更新标志字段 @Resource private UserLikeMapper userLikeMapper; @Override - @Transactional(rollbackFor = Exception.class) public void convertHistoryMaskWithoutGradient(){ // 查询用户like过的design 且没有使用渐变色的 design_item_id和design_python_outfit_id - List> historyLikeWithoutGradient = userLikeMapper.getHistoryLikeWithoutGradient(); + List> historyLikeWithoutGradient = redisUtil.getFromStringList(RedisUtil.NO_GRADIENT); log.info("historyLikeWithoutGradient total count : {}", historyLikeWithoutGradient.size()); // 遍历list - // 先试一下,刷新10条,需要花费的时间 - - /*Map userLikeMap = historyLikeWithoutGradient.get(0); - log.info("test 替换mask" + userLikeMap.toString()); - - // 查每个design_item_id和design_python_outfit_id的detail - DesignItemDetailVO detail = designService.detail(userLikeMap.get("design_outfit_id"), userLikeMap.get("design_item_id")); - Long accountId = userLikeMap.get("account_id"); - // 组装参数 - DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO = convertToDesignSingleIncludeLayersDTO(detail, accountId); - if (Objects.isNull(designSingleIncludeLayersDTO)){ - throw new BusinessException("cannot find model"); - } - // 调用design single - designSingleIncludeLayers(designSingleIncludeLayersDTO, accountId); - - // 标志字段置为1 - UserLike userLike = new UserLike(); - userLike.setId(userLikeMap.get("id")); - userLike.setConverted(1); - - userLikeMapper.updateById(userLike);*/ long start = System.currentTimeMillis(); - for (int i = 0; i < 10; i++){ - try { - Map userLikeMap = historyLikeWithoutGradient.get(0); - log.info("test 替换mask" + userLikeMap.toString()); - Long designItemId = userLikeMap.get("design_item_id"); - Long designOutfitId = userLikeMap.get("design_outfit_id"); + int count = 0; + try { + for (int i = 45; i < 50; i++){ + List userLikeMap = historyLikeWithoutGradient.get(i); + log.info("test 替换mask{}", userLikeMap.toString()); + Long designItemId = userLikeMap.get(0); + Long designOutfitId = userLikeMap.get(1); - // 查每个design_item_id和design_python_outfit_id的detail + // 1、查询design_item_id和design_python_outfit_id对应的accountId + List userLikeList = getUserLikeByDesignItemId(designItemId, designOutfitId); + // 如果已经替换了新的mask则直接跳过 + if (userLikeList.get(0).getConverted() == 1){ + log.info("designItemId: {}, designOutfitId : {} mask已替换", designItemId, designOutfitId); + continue; + } + UserLikeGroup userLikeGroup = userLikeGroupService.getById(userLikeList.get(0).getUserLikeGroupId()); + if (userLikeGroup == null) { + log.error("在t_user_like_group表中找不到id为:{} 的记录", userLikeList.get(0).getUserLikeGroupId()); + continue; + } + + // 2、查每个design_item_id和design_python_outfit_id的detail + long startDetail = System.currentTimeMillis(); DesignItemDetailVO detail = designService.detail(designOutfitId, designItemId); - Long accountId = userLikeMap.get("account_id"); - // 组装参数 + long endDetail = System.currentTimeMillis(); + log.info("查询design detail 执行时长:{}毫秒", endDetail - startDetail); + + Long accountId = userLikeGroup.getAccountId(); + // 3、组装参数 + long startConvert = System.currentTimeMillis(); DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO = convertToDesignSingleIncludeLayersDTO(detail, accountId); if (Objects.isNull(designSingleIncludeLayersDTO)){ - throw new BusinessException("cannot find model. designItemId: " + designItemId + "designOutfitId : " + designOutfitId ); + log.error("cannot find model. designItemId: {}, designOutfitId : {}", designItemId, designOutfitId); + continue; } - // 调用design single + long endConvert = System.currentTimeMillis(); + log.info("组装designSingle参数 执行时长:{}毫秒", endConvert - startConvert); + + // 4、调用design single + long startDesignSingle = System.currentTimeMillis(); designSingleIncludeLayers(designSingleIncludeLayersDTO, accountId); + long endDesignSingle = System.currentTimeMillis(); + log.info("执行designSingle 执行时长:{}毫秒", endDesignSingle - startDesignSingle); - // 标志字段置为1 - UserLike userLike = new UserLike(); - userLike.setId(userLikeMap.get("id")); - userLike.setConverted(1); + // 5、标志字段置为1 + for (UserLike item : userLikeList ) { + UserLike userLike = new UserLike(); + userLike.setId(item.getId()); + userLike.setConverted(1); - userLikeMapper.updateById(userLike); - }catch (BusinessException e){ - log.error("mask convert error : {}", e.getMessage()); + userLikeMapper.updateById(userLike); + } + log.info("designItemId: {}, designOutfitId : {} mask替换完成", designItemId, designOutfitId); + count++; } + }catch (BusinessException e){ + log.error("mask convert error : {}", e.getMessage()); + e.printStackTrace(); } long end = System.currentTimeMillis(); - log.info("convert mask ,10条 执行时长:" + (end - start) + "毫秒"); - + log.info("convert mask 成功 {}条 执行时长:{}毫秒", count, end - start); } + private List getUserLikeByDesignItemId(Long designItemId, Long designOutfitId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("design_item_id", designItemId) + .eq("design_outfit_id", designOutfitId); + + return userLikeMapper.selectList(queryWrapper); + } public DesignSingleIncludeLayersDTO convertToDesignSingleIncludeLayersDTO(DesignItemDetailVO designItemDetailVO, Long userId){ DesignSingleIncludeLayersDTO resp = new DesignSingleIncludeLayersDTO(); Long designItemId = designItemDetailVO.getDesignItemId(); - String gender ; - String modelPath = designItemDetailVO.getOthers().get(0).getMinIOPath(); - List modelSysFile = sysFileService.getByUrlList(Collections.singletonList(modelPath)); - if (modelSysFile.isEmpty()){ - log.error("cannot find model 【{}】 in t_sys_file ", modelPath); - return null; - }else { - gender = modelSysFile.get(0).getLevel2Type(); - } - resp.setDesignItemId(designItemId); - resp.setGender(gender); resp.setIsPreview(Boolean.FALSE); resp.setProcessId(String.valueOf(userId)); resp.setTimeZone("Etc/GMT-8"); @@ -1046,15 +1134,11 @@ public class DesignItemServiceImpl extends ServiceImpl " + JSONObject.toJSONString(clone)); -// Long userId = UserContext.getUserHolder().getId(); DesignItem designItem = selectById(designSingleIncludeLayersDTO.getDesignItemId()); if (Objects.isNull(designItem)) { throw new BusinessException("designItem.not.found"); @@ -1078,6 +1162,7 @@ public class DesignItemServiceImpl extends ServiceImpl 不存数据库 submit -> 存数据库 - List tDesignPythonOutfitDetails; + long end = System.currentTimeMillis(); + log.info("design 执行时长:{}毫秒", end - start); + JSONObject data = jsonObject.getJSONObject("data"); if (data == null) { throw new BusinessException("python response data is null"); @@ -1121,10 +1206,8 @@ public class DesignItemServiceImpl extends ServiceImpl categoryAndUndividedLayer = setTypeAndUndividedLayer(layers); // 直接更新及保存图层信息,全部走submit 不走preview - saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId() - , userId, outfit, designSingleIncludeLayersDTO.getTimeZone() - , designSingleIncludeLayersDTO.getDesignSingleItemDTOList() - , categoryAndUndividedLayer); + saveDesignSingleItemDetailAndLayersCopy(design.getId(), designSingleIncludeLayersDTO.getDesignItemId() + , userId, outfit, designSingleIncludeLayersDTO.getDesignSingleItemDTOList()); // 如果当前item被like过,需要更新t_user_like表和t_user_like_group表 // - 这里,因为处理的都是like过的,所以都需要更新 @@ -1133,4 +1216,50 @@ public class DesignItemServiceImpl extends ServiceImpl designSingleItemDTOList) { + + // 6、删除designPythonOutfitDetail表中原始的图层信息(物理删除) + Long designPythonOutfitId = designPythonOutfitService.getByDesignItemId(designItemId).getId(); + designPythonOutfitDetailService.deleteByDesignPythonOutfitIdPhysical(designPythonOutfitId); + + // 7、将新生成的图层信息存入designPythonOutfitDetail表 + JSONArray layers = outfit.getJSONArray("layers"); + + Map> priorityOffset = designSingleItemDTOList.stream() + .collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset)); + List list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfitId, userId, priorityOffset); + + designPythonOutfitDetailService.saveBatch(list); + } + + public void deleteNotFoundModelDesign(){ + // 查询在user_like的design_item_detail中使用了找不到的model的design_item_id,design_outfit_id有哪些 + List> historyLikeWithoutModel = userLikeMapper.getHistoryLikeWithoutModel(); + List> convertedList = new ArrayList<>(); + for (Map map : historyLikeWithoutModel) { + Long designItemId = map.get("designItemId"); + Long designOutfitId = map.get("designOutfitId"); + convertedList.add(Arrays.asList(designItemId, designOutfitId)); + } + + // 将redis中的这些数据删除,再存回 + List> withGradientList = redisUtil.getFromStringList(RedisUtil.WITH_GRADIENT); + List> noGradientList = redisUtil.getFromStringList(RedisUtil.NO_GRADIENT); + log.info("有渐变色的design item:{},size: {}", withGradientList, withGradientList.size()); + log.info("没有渐变色的design item:{},size: {}", noGradientList, noGradientList.size()); + + withGradientList.removeAll(convertedList); + noGradientList.removeAll(convertedList); + log.info("移除没有model的design后,有渐变色的design item:{},size: {}", withGradientList, withGradientList.size()); + log.info("移除没有model的design后,没有渐变色的design item:{},size: {}", noGradientList, noGradientList.size()); + + redisUtil.addToStringList(RedisUtil.WITH_GRADIENT, withGradientList); + redisUtil.addToStringList(RedisUtil.NO_GRADIENT, noGradientList); + } + + public void designSingleWithGradient(){ + + } + } 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 7f779570..40d1fa13 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -1001,7 +1001,6 @@ public class DesignServiceImpl extends ServiceImpl impleme response.setSingleOverall(design.getSingleOverall()); response.setSwitchCategory(design.getSwitchCategory()); response.setDesignItemId(designItemId); -// response.setDesignItemUrl(designItem.getDesignUrl()); response.setHighDesignUrl(designItem.getHighDesignUrl()); List filterDetail = designItemDetails.stream() .filter(f -> OUTWEAR_DRESS_BLOUSE.contains(f.getType()) || SKIRT_TROUSERS.contains(f.getType()) @@ -1035,8 +1034,6 @@ public class DesignServiceImpl extends ServiceImpl impleme .filter(f -> SYS_HAIRSTYLE_SHOES_BODY.contains(f.getType())) .collect(Collectors.toList()); response.setOthers(CopyUtil.copyList(filterDetail2, DesignItemOthersDetailVO.class, (o, d) -> { - // todo 不确定businessId的作用,暂时取消传递,查看影响 -// d.setId(o.getBusinessId()); d.setId(0L); d.setPath(minioUtil.getPreSignedUrl(o.getPath(), 24 * 60)); d.setMinIOPath(o.getPath()); @@ -1172,12 +1169,6 @@ public class DesignServiceImpl extends ServiceImpl impleme designPythonOutfitDetailService.setDesignPythonOutfitDetailPriority(details); details.forEach(detail -> { -// List offset = new ArrayList<>(); -// if (StringUtil.isNullOrEmpty(detail.getOffset()) || detail.getOffset().equals("null")) { -// offset = Arrays.asList(0L, 0L); -// } else { -// offset = Arrays.stream(detail.getOffset().replaceAll("\\[|\\]", "").split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); -// } detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, null)); }); @@ -1185,11 +1176,7 @@ public class DesignServiceImpl extends ServiceImpl impleme designItemDetailVO.setDesignItemUrl(minioUtil.getPreSignedUrl(designPythonOutfit.getDesignUrl(), 24 * 60)); // 2.1 填充clothes designItemDetailVO.getClothes().forEach(c -> { -// String type = c.getType().toLowerCase(); -// List outfitVOS = detailsVO.stream().filter((detail -> detail.getImageCategory().equals(type + "_back") || -// detail.getImageCategory().equals(type + "_front"))).collect(Collectors.toList()); List outfitVOS = detailsVO.stream().filter(detail -> detail.getPriority().equals(c.getPriority())).collect(Collectors.toList()); - c.setLayersObject(outfitVOS); }); // 2.2 填充others diff --git a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java index 8604dccf..5003523e 100644 --- a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java @@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import javax.annotation.Resource; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Objects; @@ -106,18 +107,21 @@ public class TDesignPythonOutfitDetailServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); -// queryWrapper.eq("design_python_outfit_id",designPythonOutfitId); -// TDesignPythonOutfitDetail tDesignPythonOutfitDetail = new TDesignPythonOutfitDetail(); -// tDesignPythonOutfitDetail.setIsDeleted(1); + public void deleteByDesignPythonOutfitIdLogical(Long designPythonOutfitId) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("design_python_outfit_id", designPythonOutfitId); updateWrapper.set("is_deleted", (byte) 1); + updateWrapper.set("update_date", new Date()); baseMapper.update(null, updateWrapper); } + @Override + public void deleteByDesignPythonOutfitIdPhysical(Long designPythonOutfitId) { + // 执行物理删除 + baseMapper.deleteByDesignPythonOutfitIdPhysical(designPythonOutfitId); + } + @Override public void setDesignPythonOutfitDetailPriority(List details){ diff --git a/src/main/java/com/ai/da/service/impl/UserLikeServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeServiceImpl.java index 57ba60c5..892ea5eb 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeServiceImpl.java @@ -70,8 +70,11 @@ public class UserLikeServiceImpl extends ServiceImpl i public UserLike getByDesignItemId(Long designItemId){ QueryWrapper qw = new QueryWrapper<>(); qw.eq("design_item_id",designItemId); - - return baseMapper.selectOne(qw); + List userLikes = baseMapper.selectList(qw); + if (!userLikes.isEmpty()){ + return baseMapper.selectList(qw).get(0); + } + return null; } @Override diff --git a/src/main/resources/mapper/primary/UserLikeMapper.xml b/src/main/resources/mapper/primary/UserLikeMapper.xml index 5067caab..41567bf0 100644 --- a/src/main/resources/mapper/primary/UserLikeMapper.xml +++ b/src/main/resources/mapper/primary/UserLikeMapper.xml @@ -103,6 +103,28 @@ a.design_outfit_id; + +