Skip to content

Commit 9f08d57

Browse files
committed
fix: normalize user gender dictionary values
1 parent 6dd734b commit 9f08d57

9 files changed

Lines changed: 123 additions & 17 deletions

File tree

keystone-common/src/main/java/app/keystone/common/enums/common/GenderEnum.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public enum GenderEnum implements DictionaryEnum<Integer> {
1313
/**
1414
* 用户性别
1515
*/
16+
FEMALE(0, "女", CssTag.PRIMARY),
1617
MALE(1, "男", CssTag.PRIMARY),
17-
FEMALE(2, "女", CssTag.PRIMARY),
18-
UNKNOWN(0, "未知", CssTag.PRIMARY);
18+
UNKNOWN(2, "未知", CssTag.PRIMARY);
1919

2020
private final int value;
2121
private final String description;

keystone-domain/src/main/java/app/keystone/domain/system/user/db/SysUserEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public class SysUserEntity extends BaseEntity<SysUserEntity> {
6666
@TableField("phone_number")
6767
private String phoneNumber;
6868

69-
@ApiModelProperty("用户性别(0男 1女 2未知)")
69+
@ApiModelProperty("用户性别(0女 1男 2未知)")
7070
@TableField("sex")
7171
private Integer sex;
7272

keystone-domain/src/test/java/app/keystone/domain/system/dict/DictApplicationServiceTest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,31 @@ void setUp() {
5757
void getDictionaryDataMap_shouldBuildFrontendDictionaryFromEnabledDatabaseRows() {
5858
when(dictTypeService.list(ArgumentMatchers.<Wrapper<SysDictTypeEntity>>any())).thenReturn(List.of(
5959
dictType(1L, "common.status"),
60-
dictType(2L, "sysUser.status")
60+
dictType(2L, "sysUser.status"),
61+
dictType(3L, "sysUser.sex")
6162
));
6263
when(dictDataService.list(ArgumentMatchers.<Wrapper<SysDictDataEntity>>any())).thenReturn(List.of(
6364
dictData("common.status", "正常", "1", 1, ""),
6465
dictData("common.status", "停用", "0", 2, "danger"),
65-
dictData("sysUser.status", "冻结", "3", 3, "warning")
66+
dictData("sysUser.status", "冻结", "3", 3, "warning"),
67+
dictData("sysUser.sex", "女", "0", 1, ""),
68+
dictData("sysUser.sex", "男", "1", 2, ""),
69+
dictData("sysUser.sex", "未知", "2", 3, "")
6670
));
6771

6872
Map<String, List<DictionaryData>> dictionary = service.getDictionaryDataMap();
6973

70-
assertEquals(List.of("common.status", "sysUser.status"), List.copyOf(dictionary.keySet()));
74+
assertEquals(List.of("common.status", "sysUser.status", "sysUser.sex"), List.copyOf(dictionary.keySet()));
7175
assertEquals("正常", dictionary.get("common.status").get(0).getLabel());
7276
assertEquals(1, dictionary.get("common.status").get(0).getValue());
7377
assertEquals("danger", dictionary.get("common.status").get(1).getCssTag());
7478
assertEquals("冻结", dictionary.get("sysUser.status").get(0).getLabel());
79+
assertEquals("女", dictionary.get("sysUser.sex").get(0).getLabel());
80+
assertEquals(0, dictionary.get("sysUser.sex").get(0).getValue());
81+
assertEquals("男", dictionary.get("sysUser.sex").get(1).getLabel());
82+
assertEquals(1, dictionary.get("sysUser.sex").get(1).getValue());
83+
assertEquals("未知", dictionary.get("sysUser.sex").get(2).getLabel());
84+
assertEquals(2, dictionary.get("sysUser.sex").get(2).getValue());
7585
}
7686

7787
@Test

keystone-infrastructure/src/main/resources/db/migrate/h2/keystone_data.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ VALUES (1, 'common.yesOrNo', '是', '1', 1, 0, '', 1, '是', NULL, NULL, CURRENT
5151
(2, 'common.yesOrNo', '', '0', 2, 0, 'danger', 1, '', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
5252
(3, 'common.status', '正常', '1', 1, 0, '', 1, '正常状态', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
5353
(4, 'common.status', '停用', '0', 2, 0, 'danger', 1, '停用状态', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
54-
(5, 'sysUser.sex', '', '1', 1, 0, '', 1, '性别男', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
55-
(6, 'sysUser.sex', '', '2', 2, 0, '', 1, '性别女', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
56-
(7, 'sysUser.sex', '未知', '0', 3, 0, '', 1, '性别未知', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
54+
(5, 'sysUser.sex', '', '0', 1, 0, '', 1, '性别女', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
55+
(6, 'sysUser.sex', '', '1', 2, 0, '', 1, '性别男', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
56+
(7, 'sysUser.sex', '未知', '2', 3, 0, '', 1, '性别未知', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
5757
(8, 'sysUser.status', '正常', '1', 1, 0, '', 1, '用户正常', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
5858
(9, 'sysUser.status', '禁用', '2', 2, 0, 'danger', 1, '用户禁用', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),
5959
(10, 'sysUser.status', '冻结', '3', 3, 0, 'warning', 1, '用户冻结', NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0),

keystone-infrastructure/src/main/resources/db/migrate/h2/keystone_schema.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ create table sys_user
201201
user_type smallint default 0 null comment '用户类型(00系统用户)',
202202
email varchar(128) default '' null comment '用户邮箱',
203203
phone_number varchar(18) default '' null comment '手机号码',
204-
sex smallint default 0 null comment '用户性别(0男 1女 2未知)',
204+
sex smallint default 2 null comment '用户性别(0女 1男 2未知)',
205205
avatar varchar(512) default '' null comment '头像地址',
206206
password varchar(128) default '' not null comment '密码',
207207
status smallint default 0 not null comment '帐号状态(1正常 2停用 3冻结)',

keystone-infrastructure/src/main/resources/db/migrate/mysql/V3_3_1__init_core_schema_data.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ create table sys_user
340340
user_type smallint default 0 null comment '用户类型(00系统用户)',
341341
email varchar(128) default '' null comment '用户邮箱',
342342
phone_number varchar(18) default '' null comment '手机号码',
343-
sex smallint default 0 null comment '用户性别(0男 1女 2未知)',
343+
sex smallint default 2 null comment '用户性别(0女 1男 2未知)',
344344
avatar varchar(512) default '' null comment '头像地址',
345345
password varchar(128) default '' not null comment '密码',
346346
status smallint default 0 not null comment '帐号状态(1正常 2停用 3冻结)',

keystone-infrastructure/src/main/resources/db/migrate/mysql/V3_3_2__init_dict_schema_data.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ VALUES
7070
('common.status', '正常', '1', 1, 0, '', 1, '正常状态', NULL, NULL, NOW(), NOW(), 0),
7171
('common.status', '停用', '0', 2, 0, 'danger', 1, '停用状态', NULL, NULL, NOW(), NOW(), 0),
7272
-- 用户性别
73-
('sysUser.sex', '', '1', 1, 0, '', 1, '性别男', NULL, NULL, NOW(), NOW(), 0),
74-
('sysUser.sex', '', '2', 2, 0, '', 1, '性别女', NULL, NULL, NOW(), NOW(), 0),
75-
('sysUser.sex', '未知', '0', 3, 0, '', 1, '性别未知', NULL, NULL, NOW(), NOW(), 0),
73+
('sysUser.sex', '', '0', 1, 0, '', 1, '性别女', NULL, NULL, NOW(), NOW(), 0),
74+
('sysUser.sex', '', '1', 2, 0, '', 1, '性别男', NULL, NULL, NOW(), NOW(), 0),
75+
('sysUser.sex', '未知', '2', 3, 0, '', 1, '性别未知', NULL, NULL, NOW(), NOW(), 0),
7676
-- 用户状态
7777
('sysUser.status', '正常', '1', 1, 0, '', 1, '用户正常', NULL, NULL, NOW(), NOW(), 0),
7878
('sysUser.status', '禁用', '2', 2, 0, 'danger', 1, '用户禁用', NULL, NULL, NOW(), NOW(), 0),

keystone-infrastructure/src/main/resources/db/migrate/mysql/V3_5_23__migrate_dictionary_annotations_to_database.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ FROM (
3030
UNION ALL SELECT 'common.yesOrNo', '', '0', 2, 0, 'danger', ''
3131
UNION ALL SELECT 'common.status', '正常', '1', 1, 0, '', '正常状态'
3232
UNION ALL SELECT 'common.status', '停用', '0', 2, 0, 'danger', '停用状态'
33-
UNION ALL SELECT 'sysUser.sex', '', '1', 1, 0, '', '性别男'
34-
UNION ALL SELECT 'sysUser.sex', '', '2', 2, 0, '', '性别女'
35-
UNION ALL SELECT 'sysUser.sex', '未知', '0', 3, 0, '', '性别未知'
33+
UNION ALL SELECT 'sysUser.sex', '', '0', 1, 0, '', '性别女'
34+
UNION ALL SELECT 'sysUser.sex', '', '1', 2, 0, '', '性别男'
35+
UNION ALL SELECT 'sysUser.sex', '未知', '2', 3, 0, '', '性别未知'
3636
UNION ALL SELECT 'sysUser.status', '正常', '1', 1, 0, '', '用户正常'
3737
UNION ALL SELECT 'sysUser.status', '禁用', '2', 2, 0, 'danger', '用户禁用'
3838
UNION ALL SELECT 'sysUser.status', '冻结', '3', 3, 0, 'warning', '用户冻结'
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
-- Normalize user gender dictionary values to 0=female, 1=male, and 2=unknown.
2+
3+
UPDATE sys_dict_data
4+
SET dict_label = '',
5+
dict_value = '0',
6+
dict_sort = 1,
7+
status = 1,
8+
remark = '性别女',
9+
deleted = 0,
10+
update_time = NOW()
11+
WHERE dict_type = 'sysUser.sex'
12+
AND dict_value = '0'
13+
AND deleted = 0
14+
ORDER BY dict_code
15+
LIMIT 1;
16+
17+
INSERT INTO sys_dict_data (dict_type, dict_label, dict_value, dict_sort, is_default, list_class, status, remark,
18+
creator_id, updater_id, create_time, update_time, deleted)
19+
SELECT 'sysUser.sex', '', '0', 1, 0, '', 1, '性别女', NULL, NULL, NOW(), NOW(), 0
20+
WHERE NOT EXISTS (
21+
SELECT 1 FROM sys_dict_data WHERE dict_type = 'sysUser.sex' AND dict_value = '0' AND deleted = 0
22+
);
23+
24+
UPDATE sys_dict_data
25+
SET dict_label = '',
26+
dict_value = '1',
27+
dict_sort = 2,
28+
status = 1,
29+
remark = '性别男',
30+
deleted = 0,
31+
update_time = NOW()
32+
WHERE dict_type = 'sysUser.sex'
33+
AND dict_value = '1'
34+
AND deleted = 0
35+
ORDER BY dict_code
36+
LIMIT 1;
37+
38+
INSERT INTO sys_dict_data (dict_type, dict_label, dict_value, dict_sort, is_default, list_class, status, remark,
39+
creator_id, updater_id, create_time, update_time, deleted)
40+
SELECT 'sysUser.sex', '', '1', 2, 0, '', 1, '性别男', NULL, NULL, NOW(), NOW(), 0
41+
WHERE NOT EXISTS (
42+
SELECT 1 FROM sys_dict_data WHERE dict_type = 'sysUser.sex' AND dict_value = '1' AND deleted = 0
43+
);
44+
45+
UPDATE sys_dict_data
46+
SET dict_label = '未知',
47+
dict_value = '2',
48+
dict_sort = 3,
49+
status = 1,
50+
remark = '性别未知',
51+
deleted = 0,
52+
update_time = NOW()
53+
WHERE dict_type = 'sysUser.sex'
54+
AND dict_value = '2'
55+
AND deleted = 0
56+
ORDER BY dict_code
57+
LIMIT 1;
58+
59+
INSERT INTO sys_dict_data (dict_type, dict_label, dict_value, dict_sort, is_default, list_class, status, remark,
60+
creator_id, updater_id, create_time, update_time, deleted)
61+
SELECT 'sysUser.sex', '未知', '2', 3, 0, '', 1, '性别未知', NULL, NULL, NOW(), NOW(), 0
62+
WHERE NOT EXISTS (
63+
SELECT 1 FROM sys_dict_data WHERE dict_type = 'sysUser.sex' AND dict_value = '2' AND deleted = 0
64+
);
65+
66+
UPDATE sys_dict_data
67+
SET deleted = 1,
68+
status = 0,
69+
update_time = NOW()
70+
WHERE dict_type = 'sysUser.sex'
71+
AND deleted = 0
72+
AND (
73+
dict_value NOT IN ('0', '1', '2')
74+
OR (dict_value = '0' AND dict_label <> '')
75+
OR (dict_value = '1' AND dict_label <> '')
76+
OR (dict_value = '2' AND dict_label <> '未知')
77+
);
78+
79+
CREATE TEMPORARY TABLE tmp_sys_user_sex_keep AS
80+
SELECT MIN(dict_code) AS dict_code
81+
FROM sys_dict_data
82+
WHERE dict_type = 'sysUser.sex'
83+
AND dict_value IN ('0', '1', '2')
84+
AND deleted = 0
85+
GROUP BY dict_value;
86+
87+
UPDATE sys_dict_data
88+
SET deleted = 1,
89+
status = 0,
90+
update_time = NOW()
91+
WHERE dict_type = 'sysUser.sex'
92+
AND dict_value IN ('0', '1', '2')
93+
AND deleted = 0
94+
AND dict_code NOT IN (SELECT dict_code FROM tmp_sys_user_sex_keep);
95+
96+
DROP TEMPORARY TABLE tmp_sys_user_sex_keep;

0 commit comments

Comments
 (0)