diff --git a/src/main/java/com/ai/da/mapper/primary/WorkspaceMapper.java b/src/main/java/com/ai/da/mapper/primary/WorkspaceMapper.java index 214e97c0..426b1342 100644 --- a/src/main/java/com/ai/da/mapper/primary/WorkspaceMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/WorkspaceMapper.java @@ -24,4 +24,5 @@ public interface WorkspaceMapper extends CommonMapper { */ List selectWorkspacePage(IPage page, WorkspaceVO workspace); + String getStyleByProjectId(Long projectId); } diff --git a/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java b/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java index 74fa789a..d7881a10 100644 --- a/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java +++ b/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java @@ -30,4 +30,8 @@ public interface AttributeRetrievalMapper { void updateStyleByFileName(String style, String fileName, String tableName); String getStyleByUrl(String replace,String tableName); + + Integer getCountByStyle(String tableName, String style); + + String getOneSystemSketchRadom(String tableName, String style, Integer randomNum); } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 83a31a0e..26f5b1c8 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -29,6 +29,7 @@ import com.google.common.collect.Maps; import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; import okhttp3.*; +import org.apache.commons.lang3.RandomUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -666,33 +667,24 @@ public class PythonService { BigDecimal randomValue = generateRandomValue(); boolean useSystem = randomValue.compareTo(systemScale) <= 0; - if (useSystem) { - // 获取系统推荐sketch - String categoryParam = elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, elementVO.getBrandId(), elementVO.getBrandScale()); - if (!CollectionUtils.isEmpty(recommentdUrlList)) { - String recommendSystemSketch = recommentdUrlList.get(0); - return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, styleCategory, elementVO); - }else { - throw new BusinessException("failed.to.obtain.system.sketch.recommendation"); - } - }else { - if (CollectionUtil.isNotEmpty(collectionElements)) { - int collectionNoPinSize = collectionElements.size(); - int randomNum = RandomsUtil.randomSysFile(collectionNoPinSize); - return coverSketchToDesignPythonItem(collectionElements.get(randomNum).getId(), collectionElements.get(randomNum), elementVO); - }else { - String categoryParam = elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, elementVO.getBrandId(), elementVO.getBrandScale()); - if (!CollectionUtils.isEmpty(recommentdUrlList)) { - String recommendSystemSketch = recommentdUrlList.get(0); - return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, styleCategory, elementVO); - }else { - throw new BusinessException("failed.to.obtain.system.sketch.recommendation"); - } - } + // 用过存在用户上传,则优先使用用户上传 + if (!useSystem && CollectionUtil.isNotEmpty(collectionElements)) { + int collectionNoPinSize = collectionElements.size(); + int randomNum = RandomsUtil.randomSysFile(collectionNoPinSize); + return coverSketchToDesignPythonItem(collectionElements.get(randomNum).getId(), collectionElements.get(randomNum), elementVO); } + // 其他所有情况,都回退到使用系统推荐 + String categoryParam = elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase(); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, elementVO.getBrandId(), elementVO.getBrandScale(),elementVO.getStyle()); + + if (CollectionUtils.isEmpty(recommentdUrlList)) { + throw new BusinessException("failed.to.obtain.system.sketch.recommendation"); + } + + String recommendSystemSketch = recommentdUrlList.get(0); + return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, styleCategory, elementVO); + // int poolNum = 20; // if (CollectionUtil.isNotEmpty(collectionElements)) { // int collectionNoPinSize = collectionElements.size(); @@ -1039,7 +1031,7 @@ public class PythonService { // 获取随机pin sketch的category String category = element.getLevel2Type(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale(), validateElementVO.getStyle()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1062,7 +1054,7 @@ public class PythonService { String category = dressings.get(randomNum).getStyleCategory(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale(), validateElementVO.getStyle()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1098,7 +1090,7 @@ public class PythonService { String category = element.getLevel2Type(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale(), validateElementVO.getStyle()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -1122,7 +1114,7 @@ public class PythonService { String category = dressings.get(randomNum).getStyleCategory(); String categoryParam = validateElementVO.getModelSex().toLowerCase() + "_" + category.toLowerCase(); - List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale()); + List recommentdUrlList = getSystemSketchByCategory(categoryParam, validateElementVO.getBrandId(), validateElementVO.getBrandScale(), validateElementVO.getStyle()); if (!CollectionUtils.isEmpty(recommentdUrlList)) { String recommendSystemSketch = recommentdUrlList.get(0); return coverSystemSketchUrlToDesignPythonItem(recommendSystemSketch, category, validateElementVO); @@ -3962,7 +3954,30 @@ public class PythonService { throw new BusinessException("design.interface.exception"); } - public List getSystemSketchByCategory(String category, Long brandId, Double brandScale) { + public List getSystemSketchByCategory(String category, Long brandId, Double brandScale,String style) { + //******3.1.2版本临时使用java推荐方案去解决style未使用的问题********** + try { + //使用新库attribute_retrieval_style,表命名修改为elementVO.getModelSex().toLowerCase() + "_" + styleCategory.toLowerCase()比如female_skirt,与传入的category保持一致 + Integer countByStyle = attributeRetrievalMapper.getCountByStyle(category, style); + //根据数量随机获取一个系统sketch + if (countByStyle > 0) { + //获取一个不大于countByStyle的随机整数 + Integer randomNum = RandomUtils.nextInt(0, countByStyle); + //返回格式为 dress/0902000649.jpg + String oneSystemSketchRadom = attributeRetrievalMapper.getOneSystemSketchRadom(category, style,randomNum); + String imgName = oneSystemSketchRadom.split("/")[1]; + //补齐正确格式aida-sys-image/images/male/tops/mens_test_5689.png + //裁切category前半部分 + String sex = category.split("_")[0]; + String realCategory = category.split("_")[1]; + String path = "aida-sys-image/images/" + sex + "/" +realCategory +"/" +imgName; + return Arrays.asList(path); + } + } catch (Exception e) { + log.info("推荐失败:{}",e.getMessage()); + throw new BusinessException("system.error"); + } + //**********************end*********************************** AuthPrincipalVo userHolder = UserContext.getUserHolder(); OkHttpClient client = new OkHttpClient().newBuilder() diff --git a/src/main/java/com/ai/da/service/WorkspaceService.java b/src/main/java/com/ai/da/service/WorkspaceService.java index cbd2160d..1c967b38 100644 --- a/src/main/java/com/ai/da/service/WorkspaceService.java +++ b/src/main/java/com/ai/da/service/WorkspaceService.java @@ -68,4 +68,6 @@ public interface WorkspaceService extends IService { String getProjectSexById(Long projectId); + + String getStyleByProjectId(Long projectId); } diff --git a/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java b/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java index 6528d88a..a6f9b0f0 100644 --- a/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CollectionElementServiceImpl.java @@ -82,7 +82,7 @@ public class CollectionElementServiceImpl extends ServiceImpl i if (base64Data != null && !base64Data.isEmpty()) { String resultPath = userId + "/product_image" + "/" + uuid; String minioPath = minioUtil.base64UploadToPath("data:image/png;base64," + base64Data, userBucket, resultPath); + if (StringUtil.isNullOrEmpty(minioPath)){ + log.warn("Google API调用成功,但图片保存失败 for taskId: {}", taskId); + } // 生成成功,更新Redis状态和URL GenerateResultVO successResultVO = new GenerateResultVO(taskId, null, minioPath, "Success"); redisUtil.addToString(key, new Gson().toJson(successResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); @@ -1495,9 +1498,6 @@ public class GenerateServiceImpl extends ServiceImpl i GenerateResultVO successResultVO = new GenerateResultVO(taskId, null, imageUrl, "Success"); redisUtil.addToString(key, new Gson().toJson(successResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); - - // TODO: 处理积分扣除逻辑 - } catch (Exception e) { log.error("Doubao image generation failed for taskId: {}", taskId, e); LambdaQueryWrapper select = new LambdaQueryWrapper().eq(Account::getId, userId).select(Account::getLanguage); diff --git a/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java index 2531c5e7..d311ea3b 100644 --- a/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java @@ -898,6 +898,11 @@ public class WorkspaceServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); diff --git a/src/main/resources/mapper/primary/WorkspaceMapper.xml b/src/main/resources/mapper/primary/WorkspaceMapper.xml index 592084e1..3da9d6f8 100644 --- a/src/main/resources/mapper/primary/WorkspaceMapper.xml +++ b/src/main/resources/mapper/primary/WorkspaceMapper.xml @@ -27,5 +27,10 @@ + diff --git a/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml b/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml index 3c2f0f49..0e118820 100644 --- a/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml +++ b/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml @@ -110,4 +110,21 @@ ${tableName} WHERE img_name = #{replace} + + +