Ver Fonte

获取店铺分类信息提交

panzhilin há 1 semana atrás
pai
commit
8c38f48f32

+ 7 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreInfoDto.java

@@ -3,11 +3,13 @@ package shop.alien.entity.store.dto;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 import shop.alien.entity.store.StoreBusinessInfo;
+import shop.alien.entity.store.dto.deserializer.StringToListDeserializer;
 
 import java.util.Date;
 import java.util.List;
@@ -118,6 +120,7 @@ public class StoreInfoDto {
     private Integer businessSection;
 
     @ApiModelProperty(value = "经营种类ids")
+    @JsonDeserialize(using = StringToListDeserializer.class)
     private List<String> businessTypes;
 
     @ApiModelProperty(value = "经营种类名称s")
@@ -179,4 +182,8 @@ public class StoreInfoDto {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date foodLicenceExpirationTime;
+
+    @ApiModelProperty(value = "分类id(词典表 键为 business_classify)(多个ID用逗号拼接)")
+    @JsonDeserialize(using = StringToListDeserializer.class)
+    private List<String> businessClassify;
 }

+ 66 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/deserializer/StringToListDeserializer.java

@@ -0,0 +1,66 @@
+package shop.alien.entity.store.dto.deserializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 自定义反序列化器:将字符串或数组转换为List<String>
+ * 支持以下格式:
+ * - 字符串:"0" 或 "1,2,3"
+ * - 数组:["1", "2", "3"]
+ * - null:返回空列表
+ */
+public class StringToListDeserializer extends JsonDeserializer<List<String>> {
+
+    @Override
+    public List<String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        JsonNode node = p.getCodec().readTree(p);
+        
+        if (node == null || node.isNull()) {
+            return new ArrayList<>();
+        }
+        
+        List<String> result = new ArrayList<>();
+        
+        // 如果是数组
+        if (node.isArray()) {
+            for (JsonNode item : node) {
+                if (item != null && !item.isNull()) {
+                    result.add(item.asText());
+                }
+            }
+        } 
+        // 如果是字符串
+        else if (node.isTextual()) {
+            String value = node.asText();
+            if (value != null && !value.trim().isEmpty()) {
+                // 如果是逗号分隔的字符串,则分割
+                if (value.contains(",")) {
+                    String[] parts = value.split(",");
+                    for (String part : parts) {
+                        String trimmed = part.trim();
+                        if (!trimmed.isEmpty()) {
+                            result.add(trimmed);
+                        }
+                    }
+                } else {
+                    // 单个值
+                    result.add(value.trim());
+                }
+            }
+        }
+        // 如果是数字,转换为字符串
+        else if (node.isNumber()) {
+            result.add(node.asText());
+        }
+        
+        return result;
+    }
+}
+

+ 1 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreInfoController.java

@@ -93,6 +93,7 @@ public class StoreInfoController {
         return R.fail("失败");
     }
 
+
     @ApiOperation("新增门店草稿")
     @ApiOperationSupport(order = 3)
     @PostMapping("/saveStoreInfoDraft")

+ 95 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

@@ -643,6 +643,38 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         storeInfo.setBusinessSectionName(businessSectionName.getDictDetail());
         storeInfo.setBusinessTypes(String.join(",", businessTypes));
         storeInfo.setBusinessTypesName(String.join(",", businessTypeNames));
+        
+        //处理分类信息
+        List<String> businessClassify = storeInfoDto.getBusinessClassify();
+        if (!CollectionUtils.isEmpty(businessClassify)) {
+            List<String> businessClassifyNames = new ArrayList<>();
+            //批量查询分类名称
+            List<StoreDictionary> classifyDicts = storeDictionaryMapper.selectList(
+                    new LambdaQueryWrapper<StoreDictionary>()
+                            .in(StoreDictionary::getDictId, businessClassify)
+                            .eq(StoreDictionary::getTypeName, "business_classify")
+                            .eq(StoreDictionary::getDeleteFlag, 0)
+            );
+            //转为Map方便快速获取
+            Map<String, StoreDictionary> classifyDictMap = classifyDicts.stream()
+                    .collect(Collectors.toMap(
+                            dict -> dict.getDictId().toString(),
+                            Function.identity(),
+                            (existing, replacement) -> existing
+                    ));
+            //提取分类名称
+            for (String classifyId : businessClassify) {
+                StoreDictionary dict = classifyDictMap.get(classifyId);
+                if (Objects.nonNull(dict)) {
+                    businessClassifyNames.add(dict.getDictDetail());
+                } else {
+                    log.warn("无效的分类id:" + classifyId);
+                }
+            }
+            storeInfo.setBusinessClassify(String.join(",", businessClassify));
+            storeInfo.setBusinessClassifyName(String.join(",", businessClassifyNames));
+        }
+        
         //存入审批状态为待审批
         storeInfo.setStoreApplicationStatus(0);
         //处理一下行政区域信息
@@ -848,6 +880,38 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         storeInfo.setBusinessSectionName(businessSectionName.getDictDetail());
         storeInfo.setBusinessTypes(String.join(",", businessTypes));
         storeInfo.setBusinessTypesName(String.join(",", businessTypeNames));
+        
+        //处理分类信息
+        List<String> businessClassify = storeInfoDto.getBusinessClassify();
+        if (!CollectionUtils.isEmpty(businessClassify)) {
+            List<String> businessClassifyNames = new ArrayList<>();
+            //批量查询分类名称
+            List<StoreDictionary> classifyDicts = storeDictionaryMapper.selectList(
+                    new LambdaQueryWrapper<StoreDictionary>()
+                            .in(StoreDictionary::getDictId, businessClassify)
+                            .eq(StoreDictionary::getTypeName, "business_classify")
+                            .eq(StoreDictionary::getDeleteFlag, 0)
+            );
+            //转为Map方便快速获取
+            Map<String, StoreDictionary> classifyDictMap = classifyDicts.stream()
+                    .collect(Collectors.toMap(
+                            dict -> dict.getDictId().toString(),
+                            Function.identity(),
+                            (existing, replacement) -> existing
+                    ));
+            //提取分类名称
+            for (String classifyId : businessClassify) {
+                StoreDictionary dict = classifyDictMap.get(classifyId);
+                if (Objects.nonNull(dict)) {
+                    businessClassifyNames.add(dict.getDictDetail());
+                } else {
+                    log.warn("无效的分类id:" + classifyId);
+                }
+            }
+            storeInfo.setBusinessClassify(String.join(",", businessClassify));
+            storeInfo.setBusinessClassifyName(String.join(",", businessClassifyNames));
+        }
+        
         //处理一下行政区域信息
         EssentialCityCode essentialCityCode1 = essentialCityCodeMapper.selectOne(new LambdaQueryWrapper<EssentialCityCode>().eq(EssentialCityCode::getAreaCode, storeInfo.getAdministrativeRegionProvinceAdcode()));
         storeInfo.setAdministrativeRegionProvinceName(essentialCityCode1.getAreaName());
@@ -2199,6 +2263,37 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
                 storeInfo.setBusinessTypes(String.join(",", businessTypes));
                 storeInfo.setBusinessTypesName(String.join(",", businessTypeNames));
             }
+            
+            // 处理分类信息
+            List<String> businessClassify = storeInfodto.getBusinessClassify();
+            if (!CollectionUtils.isEmpty(businessClassify)) {
+                List<String> businessClassifyNames = new ArrayList<>();
+                //批量查询分类名称
+                List<StoreDictionary> classifyDicts = storeDictionaryMapper.selectList(
+                        new LambdaQueryWrapper<StoreDictionary>()
+                                .in(StoreDictionary::getDictId, businessClassify)
+                                .eq(StoreDictionary::getTypeName, "business_classify")
+                                .eq(StoreDictionary::getDeleteFlag, 0)
+                );
+                //转为Map方便快速获取
+                Map<String, StoreDictionary> classifyDictMap = classifyDicts.stream()
+                        .collect(Collectors.toMap(
+                                dict -> dict.getDictId().toString(),
+                                Function.identity(),
+                                (existing, replacement) -> existing
+                        ));
+                //提取分类名称
+                for (String classifyId : businessClassify) {
+                    StoreDictionary dict = classifyDictMap.get(classifyId);
+                    if (Objects.nonNull(dict)) {
+                        businessClassifyNames.add(dict.getDictDetail());
+                    } else {
+                        log.warn("无效的分类id:" + classifyId);
+                    }
+                }
+                storeInfo.setBusinessClassify(String.join(",", businessClassify));
+                storeInfo.setBusinessClassifyName(String.join(",", businessClassifyNames));
+            }
 
             // 5. 处理行政区域信息(抽取为方法,减少重复) 不存在单独查的情况
             if (!Objects.isNull(storeInfo.getAdministrativeRegionProvinceAdcode())) {