diff --git a/src/main/java/com/ai/da/AiDaApplication.java b/src/main/java/com/ai/da/AiDaApplication.java index 2454e1d8..87b3c27b 100644 --- a/src/main/java/com/ai/da/AiDaApplication.java +++ b/src/main/java/com/ai/da/AiDaApplication.java @@ -3,11 +3,13 @@ package com.ai.da; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @Slf4j @SpringBootApplication @EnableScheduling +@EnableAsync public class AiDaApplication { public static void main(String[] args) { 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 968bdab8..40f8ac09 100644 --- a/src/main/java/com/ai/da/common/utils/RedisUtil.java +++ b/src/main/java/com/ai/da/common/utils/RedisUtil.java @@ -514,7 +514,8 @@ public class RedisUtil { String key = "task:progress:" + taskId; String json = redisTemplate.opsForValue().get(key); if (StringUtils.isBlank(json)) { - return new ProgressDTO(0, 0, false); +// return new ProgressDTO(0, 0, false); + return null; } try { return JSON.parseObject(json, ProgressDTO.class); diff --git a/src/main/java/com/ai/da/controller/SavedCollectionController.java b/src/main/java/com/ai/da/controller/SavedCollectionController.java index f9f1c738..dacc4741 100644 --- a/src/main/java/com/ai/da/controller/SavedCollectionController.java +++ b/src/main/java/com/ai/da/controller/SavedCollectionController.java @@ -261,7 +261,7 @@ public class SavedCollectionController { @ApiOperation(value = "getInitializeProgress") @PostMapping("/getInitializeProgress") - public Response getInitializeProgress(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { + public Response getInitializeProgress(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { return Response.success(userLikeGroupService.getInitializeProgress(productImageInitializeDTO)); } diff --git a/src/main/java/com/ai/da/mapper/primary/entity/ProductImageAttribute.java b/src/main/java/com/ai/da/mapper/primary/entity/ProductImageAttribute.java index 7ea73085..ce7edaaa 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/ProductImageAttribute.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/ProductImageAttribute.java @@ -18,7 +18,7 @@ public class ProductImageAttribute implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; - private String imgName; +// private String imgName; private String length; private String sleeveLength; private String sleeveShape; diff --git a/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java b/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java index 880d579d..34efcdd4 100644 --- a/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java +++ b/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java @@ -9,4 +9,6 @@ public class ProductImageInitializeDTO { private List libraryIds; private Long brandId; + + private Boolean update; } diff --git a/src/main/java/com/ai/da/model/vo/InitializeProgressVO.java b/src/main/java/com/ai/da/model/vo/InitializeProgressVO.java new file mode 100644 index 00000000..47a7c876 --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/InitializeProgressVO.java @@ -0,0 +1,10 @@ +package com.ai.da.model.vo; + +import lombok.Data; + +@Data +public class InitializeProgressVO { + private Boolean analyzed; + + private double percent; +} diff --git a/src/main/java/com/ai/da/service/ProductImageService.java b/src/main/java/com/ai/da/service/ProductImageService.java index 4fc0024d..8727aa15 100644 --- a/src/main/java/com/ai/da/service/ProductImageService.java +++ b/src/main/java/com/ai/da/service/ProductImageService.java @@ -4,5 +4,5 @@ import com.ai.da.model.dto.ProgressDTO; public interface ProductImageService { void asyncInitialize(Long brandId); - double getInitializeProgress(Long brandId); +// double getInitializeProgress(Long brandId); } diff --git a/src/main/java/com/ai/da/service/UserLikeGroupService.java b/src/main/java/com/ai/da/service/UserLikeGroupService.java index 68127f49..ec2529c5 100644 --- a/src/main/java/com/ai/da/service/UserLikeGroupService.java +++ b/src/main/java/com/ai/da/service/UserLikeGroupService.java @@ -76,7 +76,7 @@ public interface UserLikeGroupService extends IService { Boolean productImageInitialize(ProductImageInitializeDTO productImageInitializeDTO); - double getInitializeProgress(ProductImageInitializeDTO productImageInitializeDTO); + InitializeProgressVO getInitializeProgress(ProductImageInitializeDTO productImageInitializeDTO); IPage getPage(ProjectQueryDTO projectQueryDTO); diff --git a/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java b/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java index 7d9cca08..2a4ad8da 100644 --- a/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java @@ -17,6 +17,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -45,6 +46,8 @@ public class ProductImageServiceImpl implements ProductImageService { @Async @Override public void asyncInitialize(Long brandId) { + System.out.println(">>> [asyncInitialize] 当前线程:" + Thread.currentThread().getName()); + String progressKey = String.valueOf(brandId); ProgressDTO progressDTO = new ProgressDTO(0, 0, false); redisUtil.setTaskProgressDTO(progressKey, progressDTO); @@ -62,15 +65,20 @@ public class ProductImageServiceImpl implements ProductImageService { Library library = libraryMapper.selectById(libraryId); String url = library.getUrl(); - JSONObject result = pythonService.segProduct(url); - JSONArray data = result.getJSONArray("data"); - for (int i = 0; i < data.size(); i++) { - JSONObject obj = data.getJSONObject(i); - JSONObject attribute = obj.getJSONObject("attribute"); - AttributeRecognitionJSON attrJSON = attribute.toJavaObject(AttributeRecognitionJSON.class); - ProductImageAttribute attr = toAttrDict(attrJSON); - attr.setLibraryId(libraryId); - productImageAttributeMapper.insert(attr); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(ProductImageAttribute::getLibraryId, libraryId); + List productImageAttributes = productImageAttributeMapper.selectList(qw); + if (!CollectionUtil.isNotEmpty(productImageAttributes)) { + JSONObject result = pythonService.segProduct(url); + JSONArray data = result.getJSONArray("data"); + for (int i = 0; i < data.size(); i++) { + JSONObject obj = data.getJSONObject(i); + JSONObject attribute = obj.getJSONObject("attribute"); + AttributeRecognitionJSON attrJSON = attribute.toJavaObject(AttributeRecognitionJSON.class); + ProductImageAttribute attr = toAttrDict(attrJSON); + attr.setLibraryId(libraryId); + productImageAttributeMapper.insert(attr); + } } // 更新当前进度 @@ -80,26 +88,26 @@ public class ProductImageServiceImpl implements ProductImageService { } } catch (Exception e) { + System.out.println(e.getMessage()); // log.error("初始化失败", e); redisUtil.setTaskProgressDTO(progressKey, new ProgressDTO(0, 0, true)); } } - @Override - public double getInitializeProgress(Long brandId) { - ProgressDTO dto = redisUtil.getTaskProgressDTO(String.valueOf(brandId)); - if (dto.getTotal() == 0 || dto.isError()) return 0.0; - return (dto.getCurrent() * 1.0 / dto.getTotal()); - } +// public double getInitializeProgress(Long brandId) { +// ProgressDTO dto = redisUtil.getTaskProgressDTO(String.valueOf(brandId)); +// if (dto.getTotal() == 0 || dto.isError()) return 0.0; +// return (dto.getCurrent() * 1.0 / dto.getTotal()); +// } private ProductImageAttribute toAttrDict(AttributeRecognitionJSON attrDictJSON) { ProductImageAttribute attributeRetrieval = new ProductImageAttribute(); // 处理 imgName - if (CollectionUtil.isNotEmpty(attrDictJSON.getImgName()) && attrDictJSON.getImgName().get(0) != null) { - attributeRetrieval.setImgName(attrDictJSON.getImgName().get(0)); - } +// if (CollectionUtil.isNotEmpty(attrDictJSON.getImgName()) && attrDictJSON.getImgName().get(0) != null) { +// attributeRetrieval.setImgName(attrDictJSON.getImgName().get(0)); +// } // 处理 length if (CollectionUtil.isNotEmpty(attrDictJSON.getLength()) && attrDictJSON.getLength().get(0) != null) { attributeRetrieval.setLength(attrDictJSON.getLength().get(0)); diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 19acb2ce..23a65bc5 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -1163,18 +1163,33 @@ public class UserLikeGroupServiceImpl extends ServiceImpl + + ProgressDTO dto = redisUtil.getTaskProgressDTO(String.valueOf(productImageInitializeDTO.getBrandId())); + + if (Objects.isNull(dto)) { + vo.setAnalyzed(false); + return vo; + } + vo.setAnalyzed(true); + if (dto.getTotal() == 0 || dto.isError()) { + vo.setPercent(0.0); + return vo; + } + vo.setPercent(dto.getCurrent() * 1.0 / dto.getTotal()); + return vo; } private ProductImageAttribute toAttrDict(AttributeRecognitionJSON attrDictJSON) { ProductImageAttribute attributeRetrieval = new ProductImageAttribute(); // 处理 imgName - if (CollectionUtil.isNotEmpty(attrDictJSON.getImgName()) && attrDictJSON.getImgName().get(0) != null) { - attributeRetrieval.setImgName(attrDictJSON.getImgName().get(0)); - } +// if (CollectionUtil.isNotEmpty(attrDictJSON.getImgName()) && attrDictJSON.getImgName().get(0) != null) { +// attributeRetrieval.setImgName(attrDictJSON.getImgName().get(0)); +// } // 处理 length if (CollectionUtil.isNotEmpty(attrDictJSON.getLength()) && attrDictJSON.getLength().get(0) != null) { attributeRetrieval.setLength(attrDictJSON.getLength().get(0));