|
@@ -25,6 +25,8 @@ import org.dromara.mall.service.IEpCategoryMainService;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 分类设置主Service业务层处理
|
|
* 分类设置主Service业务层处理
|
|
@@ -41,6 +43,8 @@ public class EpCategoryMainServiceImpl extends ServiceImpl<EpCategoryMainMapper
|
|
|
|
|
|
|
|
private final EpCategoryItemMapper categoryItemMapper;
|
|
private final EpCategoryItemMapper categoryItemMapper;
|
|
|
|
|
|
|
|
|
|
+ private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 查询分类设置主
|
|
* 查询分类设置主
|
|
|
*
|
|
*
|
|
@@ -164,15 +168,9 @@ public class EpCategoryMainServiceImpl extends ServiceImpl<EpCategoryMainMapper
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
if (flag) {
|
|
if (flag) {
|
|
|
bo.setId(add.getId());
|
|
bo.setId(add.getId());
|
|
|
- List<EpCategoryItemBo> categoryItemList = bo.getCategoryItemList();
|
|
|
|
|
- if (categoryItemList != null && !categoryItemList.isEmpty()) {
|
|
|
|
|
- for (EpCategoryItemBo categoryItem : categoryItemList) {
|
|
|
|
|
- categoryItem.setCategoryId(add.getId());
|
|
|
|
|
- }
|
|
|
|
|
- // 将BO转换为实体并批量插入
|
|
|
|
|
- List<EpCategoryItem> items = MapstructUtils.convert(categoryItemList, EpCategoryItem.class);
|
|
|
|
|
- categoryItemMapper.insertBatch(items);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 保存分类项列表
|
|
|
|
|
+ saveCategoryItems(add.getId(), bo);
|
|
|
}
|
|
}
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
@@ -193,17 +191,89 @@ public class EpCategoryMainServiceImpl extends ServiceImpl<EpCategoryMainMapper
|
|
|
categoryItemMapper.delete(Wrappers.<EpCategoryItem>lambdaQuery().eq(EpCategoryItem::getCategoryId, update.getId()));
|
|
categoryItemMapper.delete(Wrappers.<EpCategoryItem>lambdaQuery().eq(EpCategoryItem::getCategoryId, update.getId()));
|
|
|
|
|
|
|
|
// 再重新添加新的子项
|
|
// 再重新添加新的子项
|
|
|
- List<EpCategoryItemBo> categoryItemList = bo.getCategoryItemList();
|
|
|
|
|
- if (categoryItemList != null && !categoryItemList.isEmpty()) {
|
|
|
|
|
- for (EpCategoryItemBo categoryItem : categoryItemList) {
|
|
|
|
|
- categoryItem.setCategoryId(update.getId());
|
|
|
|
|
|
|
+ saveCategoryItems(update.getId(), bo);
|
|
|
|
|
+ }
|
|
|
|
|
+ return flag;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 保存分类项(从 remark 和 categoryItemList 中解析)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param categoryId 分类ID
|
|
|
|
|
+ * @param bo 业务对象
|
|
|
|
|
+ */
|
|
|
|
|
+ private void saveCategoryItems(Long categoryId, EpCategoryMainBo bo) {
|
|
|
|
|
+ List<EpCategoryItem> items = new java.util.ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 处理 remark 中的 JSON 数据
|
|
|
|
|
+ String remark = bo.getRemark();
|
|
|
|
|
+ if (StringUtils.isNotBlank(remark)) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ JsonNode rootNode = objectMapper.readTree(remark);
|
|
|
|
|
+
|
|
|
|
|
+ // 处理 tags
|
|
|
|
|
+ JsonNode tagsNode = rootNode.get("tags");
|
|
|
|
|
+ if (tagsNode != null && tagsNode.isArray()) {
|
|
|
|
|
+ int sortOrder = 0;
|
|
|
|
|
+ for (JsonNode tagNode : tagsNode) {
|
|
|
|
|
+ EpCategoryItem item = new EpCategoryItem();
|
|
|
|
|
+ item.setCategoryId(categoryId);
|
|
|
|
|
+ item.setItemType("tag");
|
|
|
|
|
+ item.setName(tagNode.has("name") ? tagNode.get("name").asText() : null);
|
|
|
|
|
+ item.setLink(tagNode.has("link") ? tagNode.get("link").asText() : null);
|
|
|
|
|
+ item.setSortOrder((long) sortOrder++);
|
|
|
|
|
+ items.add(item);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 处理 notes
|
|
|
|
|
+ JsonNode notesNode = rootNode.get("notes");
|
|
|
|
|
+ if (notesNode != null && notesNode.isArray()) {
|
|
|
|
|
+ int sortOrder = items.size();
|
|
|
|
|
+ for (JsonNode noteNode : notesNode) {
|
|
|
|
|
+ EpCategoryItem item = new EpCategoryItem();
|
|
|
|
|
+ item.setCategoryId(categoryId);
|
|
|
|
|
+ item.setItemType("note");
|
|
|
|
|
+ item.setName(noteNode.has("name") ? noteNode.get("name").asText() : null);
|
|
|
|
|
+ item.setLink(noteNode.has("link") ? noteNode.get("link").asText() : null);
|
|
|
|
|
+ item.setSortOrder((long) sortOrder++);
|
|
|
|
|
+ items.add(item);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 处理 groups(如果需要)
|
|
|
|
|
+ JsonNode groupsNode = rootNode.get("groups");
|
|
|
|
|
+ if (groupsNode != null && groupsNode.isArray()) {
|
|
|
|
|
+ int sortOrder = items.size();
|
|
|
|
|
+ for (JsonNode groupNode : groupsNode) {
|
|
|
|
|
+ EpCategoryItem item = new EpCategoryItem();
|
|
|
|
|
+ item.setCategoryId(categoryId);
|
|
|
|
|
+ item.setItemType("group");
|
|
|
|
|
+ item.setName(groupNode.has("name") ? groupNode.get("name").asText() : null);
|
|
|
|
|
+ item.setLink(groupNode.has("link") ? groupNode.get("link").asText() : null);
|
|
|
|
|
+ item.setSortOrder((long) sortOrder++);
|
|
|
|
|
+ items.add(item);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- // 将BO转换为实体并批量插入
|
|
|
|
|
- List<EpCategoryItem> items = MapstructUtils.convert(categoryItemList, EpCategoryItem.class);
|
|
|
|
|
- categoryItemMapper.insertBatch(items);
|
|
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("解析 remark JSON 数据失败", e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- return flag;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 处理 categoryItemList(如果存在,优先级更高)
|
|
|
|
|
+ List<EpCategoryItemBo> categoryItemList = bo.getCategoryItemList();
|
|
|
|
|
+ if (categoryItemList != null && !categoryItemList.isEmpty()) {
|
|
|
|
|
+ for (EpCategoryItemBo categoryItemBo : categoryItemList) {
|
|
|
|
|
+ categoryItemBo.setCategoryId(categoryId);
|
|
|
|
|
+ EpCategoryItem item = MapstructUtils.convert(categoryItemBo, EpCategoryItem.class);
|
|
|
|
|
+ items.add(item);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 批量插入
|
|
|
|
|
+ if (!items.isEmpty()) {
|
|
|
|
|
+ categoryItemMapper.insertBatch(items);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|