diff --git a/src/main/java/com/cmhi/cf/configure/DictProviderConfigure.java b/src/main/java/com/cmhi/cf/configure/DictProviderConfigure.java index 9dcd46c..a17c2c2 100644 --- a/src/main/java/com/cmhi/cf/configure/DictProviderConfigure.java +++ b/src/main/java/com/cmhi/cf/configure/DictProviderConfigure.java @@ -1,6 +1,5 @@ package com.cmhi.cf.configure; -import com.cmhi.cf.common.CommonStatus; import com.cmhi.cf.database.common.mapper.DictTypeMapper; import com.houkunlin.system.dict.starter.bean.DictTypeVo; import com.houkunlin.system.dict.starter.provider.DictProvider; @@ -27,9 +26,7 @@ public class DictProviderConfigure implements DictProvider { dictTypeMapper.selectAllWithRelations().forEach(k -> { DictTypeVo.DictTypeBuilder builder = DictTypeVo.newBuilder(k.getDictType(), k.getDictName(), k.getRemark()); - k.getDictDataList() - .stream().filter(m -> m.getStatus().equals(CommonStatus.NORMAL.getValue())) - .forEach(v -> builder.add(v.getDictValue(), v.getDictLabel(), v.getDictSort())); + k.getDictDataList().forEach(v -> builder.add(v.getDictValue(), v.getDictLabel(), v.getDictSort())); dictItems.add(builder.build()); }); diff --git a/src/main/java/com/cmhi/cf/controller/SystemDictController.java b/src/main/java/com/cmhi/cf/controller/SystemDictController.java index bbda560..da96ec2 100644 --- a/src/main/java/com/cmhi/cf/controller/SystemDictController.java +++ b/src/main/java/com/cmhi/cf/controller/SystemDictController.java @@ -11,6 +11,7 @@ import com.cmhi.cf.restapi.pojo.base.BaseRespStatus; import com.cmhi.cf.restapi.pojo.dto.DictContentReq; import com.cmhi.cf.restapi.pojo.dto.NewUserDictReq; import com.cmhi.cf.restapi.pojo.dto.ProtocolReq; +import com.cmhi.cf.restapi.pojo.dto.RemoveDictReq; import com.cmhi.cf.restapi.pojo.po.DictContent; import com.cmhi.cf.restapi.pojo.po.PageResults; import com.cmhi.cf.restapi.pojo.po.UserDictionary; @@ -24,6 +25,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -97,6 +99,26 @@ public class SystemDictController { } } + @DeleteMapping("/user/delete") + @ResponseBody + @EncryptionProtocol + @DecryptionProtocol + @OperationLogAnnotation(OperationModule = "字典模块", OperationType = "创建", OperationDesc = "新建用户字典") + public ProtocolResp removeDictionary(@RequestBody ProtocolReq mr) { + List validate = HelperUtils.validate(mr, ValidGroups.ProtocolCommonValid.class, ValidGroups.DictReqValid.class); + // 如果校验通过,validate为空;否则,validate包含未校验通过项 + if (validate.isEmpty()) { + RemoveDictReq req = mr.getMsgContent(); + dictionaryService.removeUserDictionary(req.getDictName()); + return ProtocolResp.result(NewUserDictResp.builder() + .dictName(req.getDictName()) + .build()); + } else { + return ProtocolResp.result(ErrorCode.ERR_PARAMEXCEPTION, ErrorCode.ERR_PARAMEXCEPTION.getHttpCode(), + validate.toArray(new String[0])); + } + } + @PostMapping("/user/upgrade") @ResponseBody @EncryptionProtocol @@ -159,4 +181,24 @@ public class SystemDictController { validate.toArray(new String[0])); } } + +// @PutMapping("/user/addDictContent") +// @ResponseBody +// @EncryptionProtocol +// @DecryptionProtocol +// @OperationLogAnnotation(OperationModule = "字典模块", OperationType = "创建", OperationDesc = "新增用户字典内容项") +// public ProtocolResp createNewDictionaryContent(@RequestBody ProtocolReq mr) { +// List validate = HelperUtils.validate(mr, ValidGroups.ProtocolCommonValid.class, ValidGroups.DictReqValid.class); +// // 如果校验通过,validate为空;否则,validate包含未校验通过项 +// if (validate.isEmpty()) { +// NewUserDictReq req = mr.getMsgContent(); +// dictionaryService.addNewUserDictionary(req.getDictName(), req.getDictAlias(), req.getDictRemark()); +// return ProtocolResp.result(NewUserDictResp.builder() +// .dictName(req.getDictName()) +// .build()); +// } else { +// return ProtocolResp.result(ErrorCode.ERR_PARAMEXCEPTION, ErrorCode.ERR_PARAMEXCEPTION.getHttpCode(), +// validate.toArray(new String[0])); +// } +// } } diff --git a/src/main/java/com/cmhi/cf/database/common/entity/DictData.java b/src/main/java/com/cmhi/cf/database/common/entity/DictData.java index 0e23f94..dbfd02d 100644 --- a/src/main/java/com/cmhi/cf/database/common/entity/DictData.java +++ b/src/main/java/com/cmhi/cf/database/common/entity/DictData.java @@ -80,13 +80,6 @@ public class DictData { @Column(value = "is_default") private String isDefault; - /** - * 状态(0正常 1停用) - */ - @Schema(description = "状态 (CommonStatus):0-->正常,1-->锁定,2-->禁用,3-->删除") - @Column(value = "status") - private Integer status; - /** * 创建者 */ diff --git a/src/main/java/com/cmhi/cf/database/common/entity/DictType.java b/src/main/java/com/cmhi/cf/database/common/entity/DictType.java index 95eafae..22ca27e 100644 --- a/src/main/java/com/cmhi/cf/database/common/entity/DictType.java +++ b/src/main/java/com/cmhi/cf/database/common/entity/DictType.java @@ -43,13 +43,6 @@ public class DictType { @Column(value = "dict_type") private String dictType; - /** - * 状态(0正常 1停用) - */ - @Schema(description = "状态 (CommonStatus):0-->正常,1-->锁定,2-->禁用,3-->删除") - @Column(value = "status") - private Integer status; - /** * 创建者 */ diff --git a/src/main/java/com/cmhi/cf/restapi/pojo/dto/RemoveDictReq.java b/src/main/java/com/cmhi/cf/restapi/pojo/dto/RemoveDictReq.java new file mode 100644 index 0000000..04f315b --- /dev/null +++ b/src/main/java/com/cmhi/cf/restapi/pojo/dto/RemoveDictReq.java @@ -0,0 +1,22 @@ +package com.cmhi.cf.restapi.pojo.dto; + +import com.cmhi.cf.validation.group.ValidGroups; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +@Schema(name = "RemoveDictReq", description = "删除用户字典请求参数") +public class RemoveDictReq { + @Schema(description = "字典名,用于标识各个不同的字典") + @NotNull(message = "dictName 字典名不能为NULL", groups = ValidGroups.DictReqValid.class) + private String dictName; +} diff --git a/src/main/java/com/cmhi/cf/service/DictionaryService.java b/src/main/java/com/cmhi/cf/service/DictionaryService.java index bca768c..fb71c96 100644 --- a/src/main/java/com/cmhi/cf/service/DictionaryService.java +++ b/src/main/java/com/cmhi/cf/service/DictionaryService.java @@ -19,4 +19,6 @@ public interface DictionaryService { PageResults getUserDictionary(Long pageNumber, Long pageSize, Long totalSize); List getUserDictionaryContent(List dictName); + + void removeUserDictionary(String dictName); } diff --git a/src/main/java/com/cmhi/cf/service/impl/DictionaryServiceImpl.java b/src/main/java/com/cmhi/cf/service/impl/DictionaryServiceImpl.java index 6c3a169..433e01b 100644 --- a/src/main/java/com/cmhi/cf/service/impl/DictionaryServiceImpl.java +++ b/src/main/java/com/cmhi/cf/service/impl/DictionaryServiceImpl.java @@ -1,8 +1,9 @@ package com.cmhi.cf.service.impl; -import com.cmhi.cf.common.CommonStatus; import com.cmhi.cf.common.ErrorCode; +import com.cmhi.cf.database.common.entity.DictData; import com.cmhi.cf.database.common.entity.DictType; +import com.cmhi.cf.database.common.mapper.DictDataMapper; import com.cmhi.cf.database.common.mapper.DictTypeMapper; import com.cmhi.cf.exception.CommonErrorCodeException; import com.cmhi.cf.restapi.misc.ApiContextUtils; @@ -15,6 +16,7 @@ import com.houkunlin.system.dict.starter.DictUtil; import com.houkunlin.system.dict.starter.SystemDictStarter; import com.houkunlin.system.dict.starter.bean.DictTypeVo; import com.houkunlin.system.dict.starter.notice.RefreshDictTypeEvent; +import com.houkunlin.system.dict.starter.notice.RefreshDictValueEvent; import com.houkunlin.system.dict.starter.provider.SystemDictProvider; import com.houkunlin.system.dict.starter.store.DictStore; import com.mybatisflex.core.paginate.Page; @@ -37,6 +39,9 @@ public class DictionaryServiceImpl implements DictionaryService { @Resource private DictTypeMapper dictTypeMapper; + @Resource + private DictDataMapper dictDataMapper; + @Resource private ApplicationEventPublisher publisher; @@ -54,10 +59,10 @@ public class DictionaryServiceImpl implements DictionaryService { if (dictType.contains(k.getType())) { List children = new ArrayList<>(); k.getChildren().forEach(m -> children.add(DictDetails.builder() - .title(m.getTitle()) - .value((Integer) m.getValue()) - .disabled(false) - .build())); + .title(m.getTitle()) + .value((Integer) m.getValue()) + .disabled(m.isDisabled()) + .build())); sysDictList.add(DictContent.builder() .dictName(k.getType()) .children(children) @@ -82,7 +87,6 @@ public class DictionaryServiceImpl implements DictionaryService { dt.setRemark(remark); dt.setDictName(name); dt.setDictType(type); - dt.setStatus(CommonStatus.NORMAL.getValue()); dt.setCreateBy(ApiContextUtils.get().getUsername()); try { @@ -173,12 +177,12 @@ public class DictionaryServiceImpl implements DictionaryService { List children = new ArrayList<>(); k.getDictDataList().forEach(m -> children.add(DictDetails.builder() - .id(m.getId()) - .title(m.getDictLabel()) - .value(m.getDictValue()) - .sorted(m.getDictSort()) - .disabled(m.getStatus() != 0) - .build())); + .id(m.getId()) + .title(m.getDictLabel()) + .value(m.getDictValue()) + .sorted(m.getDictSort()) + .disabled(false) + .build())); resp.add(DictContent.builder() .dictId(k.getId()) @@ -202,4 +206,32 @@ public class DictionaryServiceImpl implements DictionaryService { return resp; } + + @Override + @Transactional(rollbackFor = Exception.class) + public void removeUserDictionary(String dictName) { + DictType dt = dictTypeMapper.selectOneWithRelationsByCondition(DICT_TYPE.DICT_TYPE_.eq(dictName)); + + if (dt == null) { + throw new CommonErrorCodeException(ErrorCode.ERR_NOSUCHITEM, + dictName + ": " + ErrorCode.ERR_NOSUCHITEM.getDescription()); + } + + List contentId = dt.getDictDataList().stream().map(DictData::getId).toList(); + + // 首先删除字典内容 + if (dictDataMapper.deleteBatchByIds(contentId) != contentId.size()) { + throw new CommonErrorCodeException(ErrorCode.ERR_DATABASE); + } + + // 删除用户字典 + if (dictTypeMapper.deleteById(dt.getId()) != 1) { + throw new CommonErrorCodeException(ErrorCode.ERR_DATABASE, dictName + ": " + ErrorCode.ERR_DATABASE.getDescription()); + } + + // 更新字典缓存 + DictTypeVo dv = DictUtil.getDictType(dictName); + dv.getChildren().forEach(v -> v.setDisabled(true)); + publisher.publishEvent(new RefreshDictValueEvent(dv.getChildren(), true)); + } } diff --git a/src/main/resources/rbac/data.sql b/src/main/resources/rbac/data.sql index eeff9d7..1b30623 100644 --- a/src/main/resources/rbac/data.sql +++ b/src/main/resources/rbac/data.sql @@ -42,8 +42,9 @@ INSERT IGNORE INTO rbac_resource_data VALUES (400, '8ac928d8-5a6a-47c7-8697-0fb9 INSERT IGNORE INTO rbac_resource_data VALUES (401, '9ecf1662-f891-4829-8d3e-81c42bf22e2a', '/api/dict/enum/dictContent', '获取枚举字典详细内容', 'POST', 0); INSERT IGNORE INTO rbac_resource_data VALUES (402, 'C083F441-9624-AF2C-B353-0768F9C0A932', '/api/dict/user/add', '新增用户字典', 'PUT', 0); INSERT IGNORE INTO rbac_resource_data VALUES (403, '953cea37-cc7a-4e7e-bd86-cb3c14daa8c4', '/api/dict/user/upgrade', '修改用户字典', 'POST', 0); -INSERT IGNORE INTO rbac_resource_data VALUES (404, '54b43614-45c6-4672-a1d8-fa8f326d5e53', '/api/dict/user/allDict', '分页获取所有用户字典', 'POST', 0); -INSERT IGNORE INTO rbac_resource_data VALUES (405, 'e441dbb4-b844-461c-a5f8-07ee3fa658cc', '/api/dict/user/dictContent', '获取用户字典详细信息', 'POST', 0); +INSERT IGNORE INTO rbac_resource_data VALUES (404, '247674fb-759d-4b01-8d35-2c0436d2ed99', '/api/dict/user/delete', '删除用户字典', 'DELETE', 0); +INSERT IGNORE INTO rbac_resource_data VALUES (405, '54b43614-45c6-4672-a1d8-fa8f326d5e53', '/api/dict/user/allDict', '分页获取所有用户字典', 'POST', 0); +INSERT IGNORE INTO rbac_resource_data VALUES (406, 'e441dbb4-b844-461c-a5f8-07ee3fa658cc', '/api/dict/user/dictContent', '获取用户字典详细信息', 'POST', 0); -- ---------------------------- -- Records of role_resource -- (role_id, resource_id, authorize) @@ -68,6 +69,7 @@ INSERT IGNORE INTO rbac_role_resource VALUES (1, 402, 1); INSERT IGNORE INTO rbac_role_resource VALUES (1, 403, 1); INSERT IGNORE INTO rbac_role_resource VALUES (1, 404, 1); INSERT IGNORE INTO rbac_role_resource VALUES (1, 405, 1); +INSERT IGNORE INTO rbac_role_resource VALUES (1, 406, 1); # INSERT IGNORE INTO role_resource (role_id, resource_id, authorize) VALUES (2, 1, 1); # INSERT IGNORE INTO role_resource (role_id, resource_id, authorize) VALUES (2, 2, 1); # INSERT IGNORE INTO role_resource (role_id, resource_id, authorize) VALUES (2, 3, 1); @@ -179,14 +181,14 @@ INSERT IGNORE INTO sys_dict_type (id, dict_name, dict_type, create_by, remark) V INSERT IGNORE INTO sys_dict_type (id, dict_name, dict_type, create_by, remark) VALUES (2, '用户组', 'sys_role_group', 'admin', '用户组列表'); -INSERT IGNORE INTO sys_dict_data VALUES (1, 1, '路由', 0, 1, '', '','Y', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, 'URI 路由资源', null); -INSERT IGNORE INTO sys_dict_data VALUES (2, 2, '菜单', 1, 1, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 菜单资源', null); -INSERT IGNORE INTO sys_dict_data VALUES (3, 3, '按钮', 2, 1, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 按钮资源', null); +INSERT IGNORE INTO sys_dict_data VALUES (1, 1, '路由', 0, 1, '', '','Y', 'admin', CURRENT_TIMESTAMP(6), '', null, 'URI 路由资源', null); +INSERT IGNORE INTO sys_dict_data VALUES (2, 2, '菜单', 1, 1, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 菜单资源', null); +INSERT IGNORE INTO sys_dict_data VALUES (3, 3, '按钮', 2, 1, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 按钮资源', null); -INSERT IGNORE INTO sys_dict_data VALUES (4, 1, 'ADMIN', 1, 2, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, '超级管理员可以对企业内的所有用户进行管理,请谨慎修改超管权限', null); -INSERT IGNORE INTO sys_dict_data VALUES (5, 2, 'DEVELOPMENT', 2, 2, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, '项目开发人员', null); -INSERT IGNORE INTO sys_dict_data VALUES (6, 3, 'USER', 3, 2, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, '普通的用户', null); -INSERT IGNORE INTO sys_dict_data VALUES (7, 4, 'GUEST', 4, 2, '', '','N', 0, 'admin', CURRENT_TIMESTAMP(6), '', null, '系统访客,不需要认证,最小权限', null); +INSERT IGNORE INTO sys_dict_data VALUES (4, 1, 'ADMIN', 1, 2, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, '超级管理员可以对企业内的所有用户进行管理,请谨慎修改超管权限', null); +INSERT IGNORE INTO sys_dict_data VALUES (5, 2, 'DEVELOPMENT', 2, 2, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, '项目开发人员', null); +INSERT IGNORE INTO sys_dict_data VALUES (6, 3, 'USER', 3, 2, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, '普通的用户', null); +INSERT IGNORE INTO sys_dict_data VALUES (7, 4, 'GUEST', 4, 2, '', '','N', 'admin', CURRENT_TIMESTAMP(6), '', null, '系统访客,不需要认证,最小权限', null); # INSERT IGNORE INTO sys_dict_data VALUES (4, 1, '正常', '0', 'sys_common_status', '', '','Y', '0', 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 按钮资源', null); # INSERT IGNORE INTO sys_dict_data VALUES (5, 2, '已锁定', '1', 'sys_common_status', '', '','N', '0', 'admin', CURRENT_TIMESTAMP(6), '', null, 'UI 按钮资源', null); diff --git a/src/main/resources/rbac/schema.sql b/src/main/resources/rbac/schema.sql index bb58eaa..c0628d9 100644 --- a/src/main/resources/rbac/schema.sql +++ b/src/main/resources/rbac/schema.sql @@ -177,20 +177,19 @@ CREATE TABLE IF NOT EXISTS `sys_operation_log` CREATE TABLE IF NOT EXISTS `sys_dict_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码', - `dict_sort` int(4) NULL DEFAULT 0 COMMENT '字典排序', - `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', + `dict_sort` int(4) NULL DEFAULT 0 COMMENT '字典排序', + `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', `dict_value` smallint NOT NULL COMMENT '字典键值', `type_id` bigint(20) NOT NULL COMMENT '字典类型', - `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', - `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', - `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', - `status` smallint NOT NULL DEFAULT 0 COMMENT '当前状态(CommonStatus):0-->正常,1-->锁定,2-->禁用,3-->删除', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` datetime(6) NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `delete_time` datetime NULL DEFAULT NULL COMMENT '逻辑删除标记', + `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', + `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(6) NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `delete_time` datetime NULL DEFAULT NULL COMMENT '逻辑删除标记', CONSTRAINT `FKa68196081fvovjhkekdicttype` FOREIGN KEY (`type_id`) REFERENCES `sys_dict_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB @@ -202,15 +201,14 @@ CREATE TABLE IF NOT EXISTS `sys_dict_data` CREATE TABLE IF NOT EXISTS `sys_dict_type` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键', - `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', - `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', - `status` smallint NOT NULL DEFAULT 0 COMMENT '当前状态(CommonStatus):0-->正常,1-->锁定,2-->禁用,3-->删除', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` datetime(6) NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` datetime(6) NULL DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `delete_time` datetime NULL DEFAULT NULL COMMENT '逻辑删除标记', + `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(6) NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(6) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `delete_time` datetime NULL DEFAULT NULL COMMENT '逻辑删除标记', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `dict_type` (`dict_type`) USING BTREE ) ENGINE = InnoDB