diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index e202e1e4..2ccc1e6a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -58,7 +58,6 @@ public class AdminController { dto.setLimit((String) params.get(Constant.LIMIT)); dto.setPage((String) params.get(Constant.PAGE)); ValidatorUtils.validateEntity(dto); - ValidatorUtils.validateEntity(dto); PageData page = sysUserService.page(dto); return new Result>().ok(page); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictDataController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictDataController.java new file mode 100644 index 00000000..e1a91df9 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictDataController.java @@ -0,0 +1,96 @@ +package xiaozhi.modules.sys.controller; + +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.Result; +import xiaozhi.common.validator.ValidatorUtils; +import xiaozhi.modules.sys.dto.SysDictDataDTO; +import xiaozhi.modules.sys.service.SysDictDataService; +import xiaozhi.modules.sys.vo.SysDictDataVO; + +/** + * 字典数据管理 + * + * @author czc + * @since 2025-04-30 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/admin/dict/data") +@Tag(name = "字典数据管理") +public class SysDictDataController { + private final SysDictDataService sysDictDataService; + + @GetMapping("/page") + @Operation(summary = "分页查询字典数据") + @RequiresPermissions("sys:role:superAdmin") + @Parameters({@Parameter(name = "dictTypeId", description = "字典类型ID", required = true), + @Parameter(name = "dictLabel", description = "数据标签"), @Parameter(name = "dictValue", description = "数据值"), + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)}) + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + ValidatorUtils.validateEntity(params); + // 强制校验dictTypeId是否存在 + if (!params.containsKey("dictTypeId") || StringUtils.isEmpty(String.valueOf(params.get("dictTypeId")))) { + return new Result>().error("dictTypeId不能为空"); + } + + PageData page = sysDictDataService.page(params); + return new Result>().ok(page); + } + + @GetMapping("/{id}") + @Operation(summary = "获取字典数据详情") + @RequiresPermissions("sys:role:superAdmin") + public Result get(@PathVariable("id") Long id) { + SysDictDataVO vo = sysDictDataService.get(id); + return new Result().ok(vo); + } + + @PostMapping("/save") + @Operation(summary = "新增字典数据") + @RequiresPermissions("sys:role:superAdmin") + public Result save(@RequestBody SysDictDataDTO dto) { + ValidatorUtils.validateEntity(dto); + sysDictDataService.save(dto); + return new Result<>(); + } + + @PutMapping("/update") + @Operation(summary = "修改字典数据") + @RequiresPermissions("sys:role:superAdmin") + public Result update(@RequestBody SysDictDataDTO dto) { + ValidatorUtils.validateEntity(dto); + sysDictDataService.update(dto); + return new Result<>(); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除字典数据") + @RequiresPermissions("sys:role:superAdmin") + @Parameter(name = "ids", description = "ID数组", required = true) + public Result delete(@RequestBody Long[] ids) { + sysDictDataService.delete(ids); + return new Result<>(); + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictTypeController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictTypeController.java new file mode 100644 index 00000000..bf152c19 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictTypeController.java @@ -0,0 +1,93 @@ +package xiaozhi.modules.sys.controller; + +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.Result; +import xiaozhi.common.validator.ValidatorUtils; +import xiaozhi.modules.sys.dto.SysDictTypeDTO; +import xiaozhi.modules.sys.service.SysDictTypeService; +import xiaozhi.modules.sys.vo.SysDictTypeVO; + +/** + * 字典类型管理 + * + * @author czc + * @since 2025-04-30 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/admin/dict/type") +@Tag(name = "字典类型管理") +public class SysDictTypeController { + private final SysDictTypeService sysDictTypeService; + + @GetMapping("/page") + @Operation(summary = "分页查询字典类型") + @RequiresPermissions("sys:role:superAdmin") + @Parameters({@Parameter(name = "dictType", description = "字典类型编码"), + @Parameter(name = "dictName", description = "字典类型名称"), + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)}) + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + ValidatorUtils.validateEntity(params); + PageData page = sysDictTypeService.page(params); + return new Result>().ok(page); + } + + @GetMapping("/{id}") + @Operation(summary = "获取字典类型详情") + @RequiresPermissions("sys:role:superAdmin") + public Result get(@PathVariable("id") Long id) { + SysDictTypeVO vo = sysDictTypeService.get(id); + return new Result().ok(vo); + } + + @PostMapping("/save") + @Operation(summary = "保存字典类型") + @RequiresPermissions("sys:role:superAdmin") + public Result save(@RequestBody SysDictTypeDTO dto) { + // 参数校验 + ValidatorUtils.validateEntity(dto); + + sysDictTypeService.save(dto); + return new Result<>(); + } + + @PutMapping("/update") + @Operation(summary = "修改字典类型") + @RequiresPermissions("sys:role:superAdmin") + public Result update(@RequestBody SysDictTypeDTO dto) { + // 参数校验 + ValidatorUtils.validateEntity(dto); + + sysDictTypeService.update(dto); + return new Result<>(); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除字典类型") + @RequiresPermissions("sys:role:superAdmin") + @Parameter(name = "ids", description = "ID数组", required = true) + public Result delete(@RequestBody Long[] ids) { + sysDictTypeService.delete(ids); + return new Result<>(); + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java index 9dd124fe..3ca5fb8c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java @@ -1,12 +1,8 @@ package xiaozhi.modules.sys.dao; -import java.util.List; - import org.apache.ibatis.annotations.Mapper; import xiaozhi.common.dao.BaseDao; -import xiaozhi.modules.sys.dto.SysDictDataDTO; -import xiaozhi.modules.sys.entity.DictData; import xiaozhi.modules.sys.entity.SysDictDataEntity; /** @@ -15,10 +11,4 @@ import xiaozhi.modules.sys.entity.SysDictDataEntity; @Mapper public interface SysDictDataDao extends BaseDao { - /** - * 字典数据列表 - */ - List getDictDataList(); - - List getDataByTypeCode(String dictType); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java index 5a9d5a27..6c271e31 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java @@ -1,11 +1,8 @@ package xiaozhi.modules.sys.dao; -import java.util.List; - import org.apache.ibatis.annotations.Mapper; import xiaozhi.common.dao.BaseDao; -import xiaozhi.modules.sys.entity.DictType; import xiaozhi.modules.sys.entity.SysDictTypeEntity; /** @@ -14,9 +11,4 @@ import xiaozhi.modules.sys.entity.SysDictTypeEntity; @Mapper public interface SysDictTypeDao extends BaseDao { - /** - * 字典类型列表 - */ - List getDictTypeList(); - } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java index 01d69795..912c817c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java @@ -51,5 +51,6 @@ public class SysDictTypeDTO implements Serializable { @Schema(description = "更新时间") @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) private Date updateDate; } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java deleted file mode 100644 index c8deac81..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java +++ /dev/null @@ -1,16 +0,0 @@ -package xiaozhi.modules.sys.entity; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Data; - -/** - * 字典数据 - */ -@Data -public class DictData { - @JsonIgnore - private Long dictTypeId; - private String dictLabel; - private String dictValue; -} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java deleted file mode 100644 index 4a1e2ca5..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java +++ /dev/null @@ -1,19 +0,0 @@ -package xiaozhi.modules.sys.entity; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Data; - -/** - * 字典类型 - */ -@Data -public class DictType { - @JsonIgnore - private Long id; - private String dictType; - private List dataList = new ArrayList<>(); -} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java index fa372055..350d857b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java @@ -18,7 +18,7 @@ import xiaozhi.common.entity.BaseEntity; @TableName("sys_dict_type") public class SysDictTypeEntity extends BaseEntity { /** - * 字典类型 + * 字典类型编码 */ private String dictType; /** diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java index a33df029..5b4a9317 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java @@ -6,20 +6,48 @@ import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.SysDictDataDTO; import xiaozhi.modules.sys.entity.SysDictDataEntity; +import xiaozhi.modules.sys.vo.SysDictDataVO; /** * 数据字典 */ public interface SysDictDataService extends BaseService { - PageData page(Map params); + /** + * 分页查询数据字典信息 + * + * @param params 查询参数,包含分页信息和查询条件 + * @return 返回数据字典的分页查询结果 + */ + PageData page(Map params); - SysDictDataDTO get(Long id); + /** + * 根据ID获取数据字典实体 + * + * @param id 数据字典实体的唯一标识 + * @return 返回数据字典实体的详细信息 + */ + SysDictDataVO get(Long id); + /** + * 保存新的数据字典项 + * + * @param dto 数据字典项的保存数据传输对象 + */ void save(SysDictDataDTO dto); + /** + * 更新数据字典项 + * + * @param dto 数据字典项的更新数据传输对象 + */ void update(SysDictDataDTO dto); + /** + * 删除数据字典项 + * + * @param ids 要删除的数据字典项的ID数组 + */ void delete(Long[] ids); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java index a18e086f..697b2d10 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java @@ -6,25 +6,55 @@ import java.util.Map; import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.SysDictTypeDTO; -import xiaozhi.modules.sys.entity.DictType; import xiaozhi.modules.sys.entity.SysDictTypeEntity; +import xiaozhi.modules.sys.vo.SysDictTypeVO; /** * 数据字典 */ public interface SysDictTypeService extends BaseService { - PageData page(Map params); + /** + * 分页查询字典类型信息 + * + * @param params 查询参数,包含分页信息和查询条件 + * @return 返回分页的字典类型数据 + */ + PageData page(Map params); - SysDictTypeDTO get(Long id); + /** + * 根据ID获取字典类型信息 + * + * @param id 字典类型ID + * @return 返回字典类型对象 + */ + SysDictTypeVO get(Long id); + /** + * 保存字典类型信息 + * + * @param dto 字典类型数据传输对象 + */ void save(SysDictTypeDTO dto); + /** + * 更新字典类型信息 + * + * @param dto 字典类型数据传输对象 + */ void update(SysDictTypeDTO dto); + /** + * 删除字典类型信息 + * + * @param ids 要删除的字典类型ID数组 + */ void delete(Long[] ids); - List getAllList(); - - List getDictTypeList(); + /** + * 列出所有字典类型信息 + * + * @return 返回字典类型列表 + */ + List list(Map params); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java index 20530e6b..6ca83eea 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -1,43 +1,58 @@ package xiaozhi.modules.sys.service.impl; import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import xiaozhi.common.exception.RenException; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; import xiaozhi.modules.sys.dao.SysDictDataDao; +import xiaozhi.modules.sys.dao.SysUserDao; import xiaozhi.modules.sys.dto.SysDictDataDTO; import xiaozhi.modules.sys.entity.SysDictDataEntity; +import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.service.SysDictDataService; +import xiaozhi.modules.sys.vo.SysDictDataVO; /** * 字典类型 */ @Service +@AllArgsConstructor public class SysDictDataServiceImpl extends BaseServiceImpl - implements SysDictDataService { + implements SysDictDataService { + private final SysUserDao sysUserDao; @Override - public PageData page(Map params) { - IPage page = baseDao.selectPage( - getPage(params, "sort", true), - getWrapper(params)); + public PageData page(Map params) { + IPage page = baseDao.selectPage(getPage(params, "sort", true), getWrapper(params)); - return getPageData(page, SysDictDataDTO.class); + PageData pageData = getPageData(page, SysDictDataVO.class); + + setUserName(pageData.getList()); + + return pageData; } private QueryWrapper getWrapper(Map params) { - String dictTypeId = (String) params.get("dictTypeId"); - String dictLabel = (String) params.get("dictLabel"); - String dictValue = (String) params.get("dictValue"); + String dictTypeId = (String)params.get("dictTypeId"); + String dictLabel = (String)params.get("dictLabel"); + String dictValue = (String)params.get("dictValue"); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("dict_type_id", Long.parseLong(dictTypeId)); @@ -48,15 +63,18 @@ public class SysDictDataServiceImpl extends BaseServiceImpl sysDictDataList) { + // 收集所有用户 ID + Set userIds = sysDictDataList.stream().flatMap(vo -> Stream.of(vo.getCreator(), vo.getUpdater())) + .filter(Objects::nonNull).collect(Collectors.toSet()); + + // 设置更新者和创建者名称 + if (!userIds.isEmpty()) { + List sysUserEntities = sysUserDao.selectBatchIds(userIds); + // 把List转成Map,Map + Map userNameMap = sysUserEntities.stream().collect(Collectors.toMap(SysUserEntity::getId, + SysUserEntity::getUsername, (existing, replacement) -> existing)); + + sysDictDataList.forEach(vo -> { + vo.setCreatorName(userNameMap.get(vo.getCreator())); + vo.setUpdaterName(userNameMap.get(vo.getUpdater())); + }); + } + } + + private void checkDictValueUnique(Long dictTypeId, String dictValue, String excludeId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDictDataEntity::getDictTypeId, dictTypeId).eq(SysDictDataEntity::getDictLabel, dictValue); + if (StringUtils.isNotBlank(excludeId)) { + queryWrapper.ne(SysDictDataEntity::getId, excludeId); + } + boolean exists = baseDao.exists(queryWrapper); + if (exists) { + throw new RenException("字典标签重复"); + } + } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java index ce2e423e..415b7adb 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java @@ -3,47 +3,56 @@ package xiaozhi.modules.sys.service.impl; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; +import xiaozhi.common.exception.RenException; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; -import xiaozhi.modules.sys.dao.SysDictDataDao; import xiaozhi.modules.sys.dao.SysDictTypeDao; +import xiaozhi.modules.sys.dao.SysUserDao; import xiaozhi.modules.sys.dto.SysDictTypeDTO; -import xiaozhi.modules.sys.entity.DictData; -import xiaozhi.modules.sys.entity.DictType; import xiaozhi.modules.sys.entity.SysDictTypeEntity; +import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.service.SysDictTypeService; +import xiaozhi.modules.sys.vo.SysDictTypeVO; /** * 字典类型 */ -@AllArgsConstructor @Service +@AllArgsConstructor public class SysDictTypeServiceImpl extends BaseServiceImpl - implements SysDictTypeService { - private final SysDictDataDao sysDictDataDao; + implements SysDictTypeService { + + private final SysUserDao sysUserDao; @Override - public PageData page(Map params) { - IPage page = baseDao.selectPage( - getPage(params, "sort", true), - getWrapper(params)); + public PageData page(Map params) { + IPage page = baseDao.selectPage(getPage(params, "sort", true), getWrapper(params)); - return getPageData(page, SysDictTypeDTO.class); + PageData pageData = getPageData(page, SysDictTypeVO.class); + + setUserName(pageData.getList()); + + return pageData; } private QueryWrapper getWrapper(Map params) { - String dictType = (String) params.get("dictType"); - String dictName = (String) params.get("dictName"); + String dictType = (String)params.get("dictType"); + String dictName = (String)params.get("dictName"); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.like(StringUtils.isNotBlank(dictType), "dict_type", dictType); @@ -53,15 +62,21 @@ public class SysDictTypeServiceImpl extends BaseServiceImpl getAllList() { - List typeList = baseDao.getDictTypeList(); - List dataList = sysDictDataDao.getDictDataList(); - for (DictType type : typeList) { - for (DictData data : dataList) { - if (type.getId().equals(data.getDictTypeId())) { - type.getDataList().add(data); - } - } + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + List sysDictTypeVOList = ConvertUtils.sourceToTarget(entityList, SysDictTypeVO.class); + // 设置用户名 + setUserName(sysDictTypeVOList); + + return sysDictTypeVOList; + } + + /** + * 设置用户名 + * + * @param sysDictTypeList 字典类型集合 + */ + private void setUserName(List sysDictTypeList) { + // 收集所有用户 ID + Set userIds = sysDictTypeList.stream().flatMap(vo -> Stream.of(vo.getCreator(), vo.getUpdater())) + .filter(Objects::nonNull).collect(Collectors.toSet()); + + // 设置更新者和创建者名称 + if (!userIds.isEmpty()) { + List sysUserEntities = sysUserDao.selectBatchIds(userIds); + // 把List转成Map,Map + Map userNameMap = sysUserEntities.stream().collect(Collectors.toMap(SysUserEntity::getId, + SysUserEntity::getUsername, (existing, replacement) -> existing)); + + sysDictTypeList.forEach(vo -> { + vo.setCreatorName(userNameMap.get(vo.getCreator())); + vo.setUpdaterName(userNameMap.get(vo.getUpdater())); + }); } - return typeList; } - @Override - public List getDictTypeList() { - return baseDao.getDictTypeList(); + private void checkDictTypeUnique(String dictType, String excludeId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDictTypeEntity::getDictType, dictType); + if (StringUtils.isNotBlank(excludeId)) { + queryWrapper.ne(SysDictTypeEntity::getId, excludeId); + } + boolean exists = baseDao.exists(queryWrapper); + if (exists) { + throw new RenException("字典类型编码重复"); + } } - } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java index 8fd0351a..f4fe601a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserUtilServiceImpl.java @@ -20,7 +20,9 @@ public class SysUserUtilServiceImpl extends BaseServiceImpl setter) { String userIdKey = RedisKeys.getUserIdKey(userId); - String username = redisUtils.get(userIdKey).toString(); + + Object value = redisUtils.get(userIdKey); + String username = (value != null) ? value.toString() : null; if(username != null){ setter.accept(username); }else { diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictDataVO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictDataVO.java new file mode 100644 index 00000000..40025b70 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictDataVO.java @@ -0,0 +1,50 @@ +package xiaozhi.modules.sys.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典数据VO + */ +@Data +@Schema(description = "字典数据VO") +public class SysDictDataVO implements Serializable { + @Schema(description = "主键") + private Long id; + + @Schema(description = "字典类型ID") + private Long dictTypeId; + + @Schema(description = "字典标签") + private String dictLabel; + + @Schema(description = "字典值") + private String dictValue; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建者名称") + private String creatorName; + + @Schema(description = "创建时间") + private Date createDate; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新者名称") + private String updaterName; + + @Schema(description = "更新时间") + private Date updateDate; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictTypeVO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictTypeVO.java new file mode 100644 index 00000000..5e5844f3 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/vo/SysDictTypeVO.java @@ -0,0 +1,47 @@ +package xiaozhi.modules.sys.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典类型VO + */ +@Data +@Schema(description = "字典类型VO") +public class SysDictTypeVO implements Serializable { + @Schema(description = "主键") + private Long id; + + @Schema(description = "字典类型") + private String dictType; + + @Schema(description = "字典名称") + private String dictName; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建者名称") + private String creatorName; + + @Schema(description = "创建时间") + private Date createDate; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新者名称") + private String updaterName; + + @Schema(description = "更新时间") + private Date updateDate; +} diff --git a/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml index 7ea5e429..f1044e27 100644 --- a/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml +++ b/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml @@ -3,11 +3,4 @@ - - - \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml index 11887552..825db02b 100644 --- a/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml +++ b/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml @@ -3,8 +3,4 @@ - - \ No newline at end of file