From db9900074fa83021a7e3b1445eaf28ab56e675ab Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 17 四月 2025 08:41:30 +0800
Subject: [PATCH] add 分类管理

---
 src/main/java/com/mzl/flower/domain/CategoryConfig.java                      |   15 +++
 src/main/java/com/mzl/flower/service/customer/CategoryConfigServiceImpl.java |   67 ++++++++++++++++
 src/main/java/com/mzl/flower/domain/CategoryConfigDO.java                    |   29 +++++++
 src/main/java/com/mzl/flower/web/customer/CategoryConfigController.java      |   27 ++++++
 src/main/java/com/mzl/flower/domain/CategoryConfigSync.java                  |   15 +++
 src/main/java/com/mzl/flower/mapper/CategoryConfigMapper.java                |   27 ++++++
 src/main/java/com/mzl/flower/service/customer/CategoryConfigService.java     |   11 ++
 7 files changed, 191 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/mzl/flower/domain/CategoryConfig.java b/src/main/java/com/mzl/flower/domain/CategoryConfig.java
new file mode 100644
index 0000000..846f6ba
--- /dev/null
+++ b/src/main/java/com/mzl/flower/domain/CategoryConfig.java
@@ -0,0 +1,15 @@
+package com.mzl.flower.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CategoryConfig   {
+    private Integer id;
+    private String name;
+    private Integer order;
+    private Boolean isEnabled;
+} 
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/domain/CategoryConfigDO.java b/src/main/java/com/mzl/flower/domain/CategoryConfigDO.java
new file mode 100644
index 0000000..da23a1f
--- /dev/null
+++ b/src/main/java/com/mzl/flower/domain/CategoryConfigDO.java
@@ -0,0 +1,29 @@
+package com.mzl.flower.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseAutoEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("category_config")
+public class CategoryConfigDO extends BaseAutoEntity {
+    
+    @TableField("user_id")
+    private String userId;
+    
+    @TableField("category_id")
+    private Integer categoryId;
+    
+    private String name;
+    
+    @TableField("`order`")
+    private Integer order;
+    
+    @TableField("is_enabled")
+    private Boolean isEnabled;
+} 
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/domain/CategoryConfigSync.java b/src/main/java/com/mzl/flower/domain/CategoryConfigSync.java
new file mode 100644
index 0000000..55c4398
--- /dev/null
+++ b/src/main/java/com/mzl/flower/domain/CategoryConfigSync.java
@@ -0,0 +1,15 @@
+package com.mzl.flower.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CategoryConfigSync {
+    private String userId;
+    private List<CategoryConfig> categories;
+} 
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/mapper/CategoryConfigMapper.java b/src/main/java/com/mzl/flower/mapper/CategoryConfigMapper.java
new file mode 100644
index 0000000..7f6333f
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/CategoryConfigMapper.java
@@ -0,0 +1,27 @@
+package com.mzl.flower.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mzl.flower.domain.CategoryConfigDO;
+import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CategoryConfigMapper extends BaseMapper<CategoryConfigDO> {
+
+//    @Insert("INSERT INTO category_config( user_id, category_id, name, `order`, is_enabled) " + "VALUES( #{userId}, #{categoryId}, #{name}, #{order}, #{isEnabled})")
+//    void insert(CategoryConfigDO categoryConfigDO);
+//
+//    @Update("UPDATE category_config SET name = #{name}, `order` = #{order}, " + "is_enabled = #{isEnabled} WHERE id = #{id}")
+//    void update(CategoryConfigDO categoryConfigDO);
+
+//    @Select("SELECT * FROM category_config WHERE id = #{id}")
+//    CategoryConfigDO findById(Long id);
+
+    @Select("SELECT * FROM category_config WHERE user_id = #{userId}")
+    List<CategoryConfigDO> findByUserId(String userId);
+
+    @Delete("DELETE FROM category_config WHERE user_id = #{userId}")
+    void deleteByUserId(String userId);
+} 
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/service/customer/CategoryConfigService.java b/src/main/java/com/mzl/flower/service/customer/CategoryConfigService.java
new file mode 100644
index 0000000..698bf18
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/customer/CategoryConfigService.java
@@ -0,0 +1,11 @@
+package com.mzl.flower.service.customer;
+
+import com.mzl.flower.domain.CategoryConfig;
+import com.mzl.flower.domain.CategoryConfigSync;
+
+import java.util.List;
+
+public interface CategoryConfigService {
+    void saveOrUpdateCategoryConfig(CategoryConfigSync categoryConfigSync);
+    List<CategoryConfig> getCategoryConfigsByUserId(String userId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/service/customer/CategoryConfigServiceImpl.java b/src/main/java/com/mzl/flower/service/customer/CategoryConfigServiceImpl.java
new file mode 100644
index 0000000..e6949b3
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/customer/CategoryConfigServiceImpl.java
@@ -0,0 +1,67 @@
+package com.mzl.flower.service.customer;
+
+import com.mzl.flower.domain.CategoryConfig;
+import com.mzl.flower.domain.CategoryConfigDO;
+import com.mzl.flower.domain.CategoryConfigSync;
+import com.mzl.flower.mapper.CategoryConfigMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CategoryConfigServiceImpl implements CategoryConfigService {
+
+    @Autowired
+    private CategoryConfigMapper categoryConfigMapper;
+
+    @Override
+    @Transactional
+    public void saveOrUpdateCategoryConfig(CategoryConfigSync categoryConfigSync) {
+        if (categoryConfigSync == null || categoryConfigSync.getUserId() == null) {
+            throw new IllegalArgumentException("用户ID不能为空");
+        }
+
+        // 先删除该用户之前的所有分类配置
+        categoryConfigMapper.deleteByUserId(categoryConfigSync.getUserId());
+
+        // 然后插入新的分类配置
+        if (categoryConfigSync.getCategories() != null && !categoryConfigSync.getCategories().isEmpty()) {
+            for (CategoryConfig clientCategory : categoryConfigSync.getCategories()) {
+                CategoryConfigDO dbCategory = new CategoryConfigDO();
+                dbCategory.setUserId(categoryConfigSync.getUserId());
+                dbCategory.setCategoryId(clientCategory.getId());
+                dbCategory.setName(clientCategory.getName());
+                dbCategory.setOrder(clientCategory.getOrder());
+                dbCategory.setIsEnabled(clientCategory.getIsEnabled());
+                categoryConfigMapper.insert(dbCategory);
+            }
+        }
+    }
+
+    @Override
+    public List<CategoryConfig> getCategoryConfigsByUserId(String userId) {
+        if (userId == null) {
+            throw new IllegalArgumentException("用户ID不能为空");
+        }
+
+        List<CategoryConfigDO> dbCategories = categoryConfigMapper.findByUserId(userId);
+        if (dbCategories == null || dbCategories.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        List<CategoryConfig> clientCategories = new ArrayList<>();
+        for (CategoryConfigDO dbCategory : dbCategories) {
+            CategoryConfig clientCategory = new CategoryConfig();
+            clientCategory.setId(dbCategory.getCategoryId());
+            clientCategory.setName(dbCategory.getName());
+            clientCategory.setOrder(dbCategory.getOrder());
+            clientCategory.setIsEnabled(dbCategory.getIsEnabled());
+            clientCategories.add(clientCategory);
+        }
+
+        return clientCategories;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/web/customer/CategoryConfigController.java b/src/main/java/com/mzl/flower/web/customer/CategoryConfigController.java
new file mode 100644
index 0000000..0551ab4
--- /dev/null
+++ b/src/main/java/com/mzl/flower/web/customer/CategoryConfigController.java
@@ -0,0 +1,27 @@
+package com.mzl.flower.web.customer;
+
+import com.mzl.flower.domain.CategoryConfig;
+import com.mzl.flower.domain.CategoryConfigSync;
+import com.mzl.flower.service.customer.CategoryConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/categoryConfig")
+public class CategoryConfigController {
+    
+    @Autowired
+    private CategoryConfigService categoryConfigService;
+
+    @PostMapping("/saveOrUpdate")
+    public void saveOrUpdateCategoryConfig(@RequestBody CategoryConfigSync categoryConfigSync) {
+        categoryConfigService.saveOrUpdateCategoryConfig(categoryConfigSync);
+    }
+
+    @GetMapping("/getByUserId/{userId}")
+    public List<CategoryConfig> getCategoryConfigsByUserId(@PathVariable String userId) {
+        return categoryConfigService.getCategoryConfigsByUserId(userId);
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3