Procházet zdrojové kódy

【feat】【第二版开发】
1.增加字典批量查询功能
2.更新字典表的SQL

ChenYL před 1 rokem
rodič
revize
e16621676e

+ 99 - 1
doc/sql/update-v2.sql

@@ -249,4 +249,102 @@ ALTER TABLE punch_settle.user ADD UNIQUE punch_in_settlement_open_id (open_id);
 ALTER TABLE punch_settle.user_claim_reward_record ADD INDEX user_claim_reward_record_claim_reward_time (claim_reward_time);
 ALTER TABLE punch_settle.user_claim_reward_record ADD INDEX user_claim_reward_record_created_by (created_by);
 
-
+update lottery_scratch_record
+set source = 'WELFARE_SCRATCH'
+where id = 1;
+
+-- MySQL dump 10.13  Distrib 8.0.19, for Win64 (x86_64)
+--
+-- Host: localhost    Database: punch_settle
+-- ------------------------------------------------------
+-- Server version	8.4.3
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!50503 SET NAMES utf8mb4 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `sys_dict_item`
+--
+
+DROP TABLE IF EXISTS `sys_dict_item`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `sys_dict_item` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `dict_id` bigint NOT NULL COMMENT '字典主键',
+  `data_type` int NOT NULL DEFAULT '0' COMMENT '数据类型(0-String,1-Number)',
+  `item_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码',
+  `item_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项名称',
+  `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '描述',
+  `status` int NOT NULL DEFAULT '1' COMMENT '状态(1-启用,0-失效)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统字典项表';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `sys_dict_item`
+--
+
+LOCK TABLES `sys_dict_item` WRITE;
+/*!40000 ALTER TABLE `sys_dict_item` DISABLE KEYS */;
+INSERT INTO `sys_dict_item` VALUES (1,1,0,'WELFARE_SCRATCH','福利彩票',NULL,1,1,'2024-12-12 10:39:00',1,'2024-12-22 02:44:00',1,0),(2,1,0,'SPORTS_SCRATCH','体育彩票',NULL,1,1,'2024-12-12 10:39:56',1,'2024-12-22 02:44:00',1,0),(3,2,0,'XINGYUN88','幸运88',NULL,1,1,'2024-12-12 10:40:06',1,'2024-12-22 02:44:00',1,0),(4,2,0,'CHAOGEILI','超给力',NULL,1,1,'2024-12-12 10:40:06',1,'2024-12-22 02:44:00',1,0),(5,4,1,'0','投入',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(6,4,1,'1','中奖',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(7,5,1,'0','关闭',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(8,5,1,'1','启用',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(9,6,1,'0','单次打卡',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(10,6,1,'1','计数',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(11,6,1,'2','计时',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(12,7,1,'0','大于等于',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:44:00',1,0),(13,7,1,'1','小于等于',NULL,1,1,'2024-12-21 13:32:14',1,'2024-12-22 02:52:59',1,0),(14,2,0,'XIXIANGFENG','喜相逢',NULL,1,1,'2024-12-12 10:40:06',1,'2024-12-22 02:44:00',1,0);
+/*!40000 ALTER TABLE `sys_dict_item` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `sys_dict`
+--
+
+DROP TABLE IF EXISTS `sys_dict`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `sys_dict` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `dict_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典编码',
+  `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典名称',
+  `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '描述',
+  `status` int NOT NULL DEFAULT '1' COMMENT '状态(1-启用,0-失效)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统字典';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `sys_dict`
+--
+
+LOCK TABLES `sys_dict` WRITE;
+/*!40000 ALTER TABLE `sys_dict` DISABLE KEYS */;
+INSERT INTO `sys_dict` VALUES (1,'LOTTERY_SCRATCH_SOURCE','刮刮乐来源',NULL,1,1,'2024-12-12 10:36:59',1,'2024-12-21 13:27:19',1,0),(2,'WELFARE_SCRATCH','福利彩票刮刮乐种类',NULL,1,1,'2024-12-12 10:38:27',1,'2024-12-21 13:27:19',1,0),(3,'SPORTS_SCRATCH','体育彩票刮刮乐种类',NULL,1,1,'2024-12-21 13:27:12',1,'2024-12-21 13:27:12',1,0),(4,'SCRATCH_ACTION_TYPE','刮刮乐动作类型',NULL,1,1,'2024-12-21 13:27:12',1,'2024-12-21 13:27:12',1,0),(5,'ENABLE_STATUS','启用状态标志',NULL,1,1,'2024-12-21 13:27:12',1,'2024-12-21 13:27:12',1,0),(6,'PUNCH_IN_CATEGORY','打卡类型',NULL,1,1,'2024-12-21 13:27:12',1,'2024-12-21 13:27:12',1,0),(7,'PUNCH_IN_RULE','打卡比较规则',NULL,1,1,'2024-12-21 13:27:19',1,'2024-12-21 13:27:19',1,0);
+/*!40000 ALTER TABLE `sys_dict` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2024-12-22 15:57:44

+ 90 - 10
doc/技术文档.md

@@ -141,33 +141,112 @@ ui设计工具:即时设计
 
 
 
-### 彩票来源
+### 刮刮乐来源
 
-字典名称:彩票来源
+字典名称:刮刮乐来源
 
-字典编码:LOTTERY_SOURCE
+字典编码:LOTTERY_SCRATCH_SOURCE
 
 字典项:
 
 | 字典项编码      | 字典名称 |
 | --------------- | -------- |
-| WELFARE_LOTTERY | 福利彩票 |
-| SPORTS_LOTTERY  | 体育彩票 |
+| WELFARE_SCRATCH | 福利彩票 |
+| SPORTS_SCRATCH  | 体育彩票 |
 
 
 
-### 彩票刮刮乐种类
+### 福利彩票刮刮乐种类
 
-字典名称:彩票刮刮乐种类
+字典名称:福利彩票刮刮乐种类
 
-字典编码:LOTTERY_SCRATCH_OFF_CATEGORY
+字典编码:WELFARE_SCRATCH
+
+字典项
+
+| 字典项编码  | 字典名称 |
+| ----------- | -------- |
+| XINGYUN88   | 幸运88   |
+| CHAOGEILI   | 超给力   |
+| XIXIANGFENG | 喜相逢   |
+
+
+
+### 体育彩票刮刮乐种类
+
+字典名称:体育彩票刮刮乐种类
+
+字典编码:SPORTS_SCRATCH
+
+字典项
+
+| 字典项编码 | 字典名称 |
+| ---------- | -------- |
+|            |          |
+|            |          |
+
+
+
+### 刮刮乐动作类型
+
+字典名称:刮刮乐动作类型
+
+字典编码:SCRATCH_ACTION_TYPE
+
+字典项
+
+| 字典项编码 | 字典名称 |
+| ---------- | -------- |
+| 0          | 投入     |
+| 1          | 中奖     |
+
+
+
+### 启用状态标志
+
+字典名称:启用状态标志
+
+字典编码:ENABLE_STATUS
+
+字典项
+
+| 字典项编码 | 字典名称 |
+| ---------- | -------- |
+| 0          | 关闭     |
+| 1          | 启用     |
+
+
+
+### 打卡类型
+
+字典名称:打卡类型
+
+字典编码:PUNCH_IN_CATEGORY
 
 字典项
 
 | 字典项编码 | 字典名称 |
 | ---------- | -------- |
-| XINGYUN88  | 幸运88   |
-| CHAOGEILI  | 超给力   |
+| 0          | 单次打卡 |
+| 1          | 计数     |
+| 2          | 计时     |
+
+
+
+### 打卡比较规则
+
+字典名称:打卡比较规则
+
+字典编码:PUNCH_IN_RULE
+
+字典项
+
+| 字典项编码 | 字典名称 |
+| ---------- | -------- |
+| 0          | 大于等于 |
+| 1          | 小于等于 |
+
+
 
 
 
@@ -407,6 +486,7 @@ ui设计工具:即时设计
 | ---------------- | ------------ | ---------------------------------- |
 | id               | bigint       | 主键                               |
 | dict_id          | bigint       | 字典表主键                         |
+| data_type        | int          | 数据类型(0-String,1-Number)     |
 | item_code        | varchar(100) | 字典项编码                         |
 | item_name        | varchar(100) | 字典项名称                         |
 | description      | varchar(200) | 描述                               |

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java

@@ -4,11 +4,14 @@ import java.io.Serial;
 import java.io.Serializable;
 
 import com.punchsettle.server.common.pojo.BaseEntity;
+import com.punchsettle.server.common.typehandler.EnumValueTypeHandler;
+import com.punchsettle.server.constant.DictDataType;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import tk.mybatis.mapper.annotation.ColumnType;
 
 /**
  * @author tyuio
@@ -30,6 +33,13 @@ public class SysDictItem extends BaseEntity implements Serializable {
     @Column(name = "dict_id")
     private Long dictId;
 
+    /**
+     * 数据类型(0-String,1-Number)
+     */
+    @ColumnType(typeHandler = EnumValueTypeHandler.class)
+    @Column(name = "data_type")
+    private DictDataType dataType;
+
     /**
      * 字典项编码
      */

+ 2 - 2
src/main/java/com/punchsettle/server/atomic/mapper/SysDictItemMapper.java

@@ -2,7 +2,7 @@ package com.punchsettle.server.atomic.mapper;
 
 import com.punchsettle.server.atomic.entity.SysDictItem;
 
-import tk.mybatis.mapper.common.BaseMapper;
+import tk.mybatis.mapper.common.Mapper;
 
 /**
  * @author tyuio
@@ -10,5 +10,5 @@ import tk.mybatis.mapper.common.BaseMapper;
  * @description 系统字典项 Mapper
  * @date 2024/12/12 19:07
  */
-public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
+public interface SysDictItemMapper extends Mapper<SysDictItem> {
 }

+ 2 - 2
src/main/java/com/punchsettle/server/atomic/mapper/SysDictMapper.java

@@ -2,7 +2,7 @@ package com.punchsettle.server.atomic.mapper;
 
 import com.punchsettle.server.atomic.entity.SysDict;
 
-import tk.mybatis.mapper.common.BaseMapper;
+import tk.mybatis.mapper.common.Mapper;
 
 /**
  * @author tyuio
@@ -10,5 +10,5 @@ import tk.mybatis.mapper.common.BaseMapper;
  * @description 系统字典 Mapper
  * @date 2024/12/12 19:06
  */
-public interface SysDictMapper extends BaseMapper<SysDict> {
+public interface SysDictMapper extends Mapper<SysDict> {
 }

+ 11 - 0
src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java

@@ -1,5 +1,9 @@
 package com.punchsettle.server.atomic.service;
 
+import com.punchsettle.server.atomic.entity.SysDictItem;
+
+import java.util.List;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -7,4 +11,11 @@ package com.punchsettle.server.atomic.service;
  * @date 2024/12/12 19:09
  */
 public interface ISysDictItemService {
+
+    /**
+     * 根据字典ID查询字典项(批量)
+     * @param dictIds
+     * @return
+     */
+    List<SysDictItem> getDictItemByDictId(List<Long> dictIds);
 }

+ 11 - 0
src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java

@@ -1,5 +1,9 @@
 package com.punchsettle.server.atomic.service;
 
+import com.punchsettle.server.atomic.entity.SysDict;
+
+import java.util.List;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -7,4 +11,11 @@ package com.punchsettle.server.atomic.service;
  * @date 2024/12/12 19:09
  */
 public interface ISysDictService {
+
+    /**
+     * 根据字典编码获取字典信息(批量)
+     * @param dictCodes
+     * @return
+     */
+    List<SysDict> getByDictCode(List<String> dictCodes);
 }

+ 24 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java

@@ -1,9 +1,18 @@
 package com.punchsettle.server.atomic.service.impl;
 
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import com.punchsettle.server.atomic.entity.SysDictItem;
+import com.punchsettle.server.atomic.mapper.SysDictItemMapper;
 import com.punchsettle.server.atomic.service.ISysDictItemService;
 
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -12,4 +21,19 @@ import com.punchsettle.server.atomic.service.ISysDictItemService;
  */
 @Service
 public class SysDictItemServiceImpl implements ISysDictItemService {
+
+    @Autowired
+    private SysDictItemMapper dictItemMapper;
+
+    @Override
+    public List<SysDictItem> getDictItemByDictId(List<Long> dictIds) {
+        if(CollectionUtils.isEmpty(dictIds)) {
+            return List.of();
+        }
+
+        Weekend<SysDictItem> weekend = Weekend.of(SysDictItem.class);
+        WeekendCriteria<SysDictItem, Object> criteria = weekend.weekendCriteria();
+        criteria.andIn(SysDictItem::getDictId, dictIds);
+        return dictItemMapper.selectByExample(weekend);
+    }
 }

+ 24 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java

@@ -1,9 +1,18 @@
 package com.punchsettle.server.atomic.service.impl;
 
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import com.punchsettle.server.atomic.entity.SysDict;
+import com.punchsettle.server.atomic.mapper.SysDictMapper;
 import com.punchsettle.server.atomic.service.ISysDictService;
 
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -12,4 +21,19 @@ import com.punchsettle.server.atomic.service.ISysDictService;
  */
 @Service
 public class SysDictServiceImpl implements ISysDictService {
+
+    @Autowired
+    private SysDictMapper dictMapper;
+
+    @Override
+    public List<SysDict> getByDictCode(List<String> dictCodes) {
+        if (CollectionUtils.isEmpty(dictCodes)) {
+            return List.of();
+        }
+
+        Weekend<SysDict> weekend = Weekend.of(SysDict.class);
+        WeekendCriteria<SysDict, Object> criteria = weekend.weekendCriteria();
+        criteria.andIn(SysDict::getDictCode, dictCodes);
+        return dictMapper.selectByExample(weekend);
+    }
 }

+ 32 - 0
src/main/java/com/punchsettle/server/constant/DictDataType.java

@@ -0,0 +1,32 @@
+package com.punchsettle.server.constant;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.punchsettle.server.common.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/22 10:38
+ * @description 字典数据类型(0-String,1-Number)
+ */
+@Getter
+@AllArgsConstructor
+public enum DictDataType {
+
+    STRING("字符串", 0),
+    NUMBER("数字", 1);
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 编码
+     */
+    @JsonValue
+    @EnumValue
+    private Integer code;
+}

+ 27 - 0
src/main/java/com/punchsettle/server/pojo/dict/DictItemVO.java

@@ -0,0 +1,27 @@
+package com.punchsettle.server.pojo.dict;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.Data;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/21 21:01
+ * @description 字典项查询结果
+ */
+@Data
+public class DictItemVO {
+
+    /**
+     * 字典项编码
+     */
+    @JsonProperty(value = "value")
+    private Object itemCode;
+
+    /**
+     * 字典项名称
+     */
+    @JsonProperty(value = "text")
+    private String itemName;
+}

+ 22 - 0
src/main/java/com/punchsettle/server/pojo/dict/DictQuery.java

@@ -0,0 +1,22 @@
+package com.punchsettle.server.pojo.dict;
+
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/21 20:58
+ * @description 字典查询请求
+ */
+@Data
+public class DictQuery {
+
+    /**
+     * 字典编码
+     */
+    @NotEmpty(message = "字典编码不能为空")
+    private List<String> dictCodes;
+}

+ 30 - 0
src/main/java/com/punchsettle/server/pojo/dict/DictVO.java

@@ -0,0 +1,30 @@
+package com.punchsettle.server.pojo.dict;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/22 9:27
+ * @description 字典
+ */
+@Data
+public class DictVO {
+
+    /**
+     * 字典编码
+     */
+    private String dictCode;
+
+    /**
+     * 字典名称
+     */
+    private String dictName;
+
+    /**
+     * 字典项
+     */
+    private List<DictItemVO> dictItems;
+}

+ 37 - 0
src/main/java/com/punchsettle/server/service/controller/DictController.java

@@ -0,0 +1,37 @@
+package com.punchsettle.server.service.controller;
+
+import com.punchsettle.server.pojo.dict.DictQuery;
+import com.punchsettle.server.pojo.dict.DictVO;
+import com.punchsettle.server.service.manager.IDictManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author ChenYL
+ * @version V1.0
+ * @description 系统字典 controller
+ * @date 2023/10/04 16:21
+ **/
+@RestController
+@RequestMapping("/dict")
+public class DictController {
+
+    @Autowired
+    private IDictManager dictManager;
+
+    /**
+     * 根据字典编码查询字典项(批量)
+     * @param query
+     * @return
+     */
+    @PostMapping("/queryDictItems")
+    public List<DictVO> queryDictItems(@RequestBody @Validated DictQuery query) {
+        return dictManager.queryDictItems(query);
+    }
+}

+ 22 - 0
src/main/java/com/punchsettle/server/service/manager/IDictManager.java

@@ -0,0 +1,22 @@
+package com.punchsettle.server.service.manager;
+
+import com.punchsettle.server.pojo.dict.DictQuery;
+import com.punchsettle.server.pojo.dict.DictVO;
+
+import java.util.List;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/21 21:03
+ * @description 字典管理类
+ */
+public interface IDictManager {
+
+    /**
+     * 根据字典编码查询字典项(批量)
+     * @param query
+     * @return
+     */
+    List<DictVO> queryDictItems(DictQuery query);
+}

+ 76 - 0
src/main/java/com/punchsettle/server/service/manager/impl/DictManagerImpl.java

@@ -0,0 +1,76 @@
+package com.punchsettle.server.service.manager.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import com.punchsettle.server.atomic.entity.SysDict;
+import com.punchsettle.server.atomic.entity.SysDictItem;
+import com.punchsettle.server.atomic.service.ISysDictItemService;
+import com.punchsettle.server.atomic.service.ISysDictService;
+import com.punchsettle.server.constant.DictDataType;
+import com.punchsettle.server.pojo.dict.DictItemVO;
+import com.punchsettle.server.pojo.dict.DictQuery;
+import com.punchsettle.server.pojo.dict.DictVO;
+import com.punchsettle.server.service.manager.IDictManager;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/21 21:04
+ * @description 字典管理类
+ */
+@Service
+public class DictManagerImpl implements IDictManager {
+
+    @Autowired
+    private ISysDictService dictService;
+
+    @Autowired
+    private ISysDictItemService dictItemService;
+
+    @Override
+    public List<DictVO> queryDictItems(DictQuery query) {
+        // 获取字典
+        List<SysDict> dictList = dictService.getByDictCode(query.getDictCodes());
+        if (CollectionUtils.isEmpty(dictList)) {
+            return List.of();
+        }
+
+        // 获取字典项
+        List<Long> dictIds = dictList.stream().map(SysDict::getId).collect(Collectors.toList());
+        List<SysDictItem> dictItemList = dictItemService.getDictItemByDictId(dictIds);
+        if (CollectionUtils.isEmpty(dictItemList)) {
+            return null;
+        }
+
+        // 字典-字典项 map
+        Map<Long, List<SysDictItem>> dictItemMap = dictItemList.stream().collect(Collectors.groupingBy(SysDictItem::getDictId));
+
+        return dictList.stream().map(dict -> {
+            DictVO dictVO = new DictVO();
+            BeanUtils.copyProperties(dict, dictVO);
+            List<SysDictItem> itemList = dictItemMap.get(dict.getId());
+            if (!CollectionUtils.isEmpty(itemList)) {
+                List<DictItemVO> itemVOList = itemList.stream().map(item -> {
+                    DictItemVO itemVO = new DictItemVO();
+                    itemVO.setItemName(item.getItemName());
+                    if (DictDataType.NUMBER.equals(item.getDataType())) {
+                        itemVO.setItemCode(Integer.valueOf(item.getItemCode()));
+                    }
+                    if (DictDataType.STRING.equals(item.getDataType())) {
+                        itemVO.setItemCode(item.getItemCode());
+                    }
+                    return itemVO;
+                }).collect(Collectors.toList());
+                dictVO.setDictItems(itemVOList);
+            }
+            return dictVO;
+        }).collect(Collectors.toList());
+    }
+}