Quellcode durchsuchen

交易市场平台(供应商)

wwh vor 2 Wochen
Ursprung
Commit
8b958d9878

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/service/impl/BizDistributorServiceImpl.java

@@ -140,7 +140,7 @@ public class BizDistributorServiceImpl implements IBizDistributorService
140 140
         DistributorValidation.validateForAssignAccount(row);
141 141
         SysUser user = accountAssigner.createAccount(
142 142
                 row.getDistributorName(), row.getContactPhone(), row.getId(),
143
-                DistributorRules.ROLE_ID_DISTRIBUTOR, operator);
143
+                TradePartnerAccountRules.ROLE_KEY_DISTRIBUTOR, operator);
144 144
         row.setAccountAssigned(TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES);
145 145
         row.setSysUserId(user.getUserId());
146 146
         row.setAssignedLoginName(user.getUserName());

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/service/impl/BizSupplierServiceImpl.java

@@ -141,7 +141,7 @@ public class BizSupplierServiceImpl implements IBizSupplierService
141 141
         SupplierValidation.validateForAssignAccount(row);
142 142
         SysUser user = accountAssigner.createAccount(
143 143
                 row.getSupplierName(), row.getContactPhone(), row.getId(),
144
-                SupplierRules.ROLE_ID_SUPPLIER, operator);
144
+                TradePartnerAccountRules.ROLE_KEY_SUPPLIER, operator);
145 145
         row.setAccountAssigned(TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES);
146 146
         row.setSysUserId(user.getUserId());
147 147
         row.setAssignedLoginName(user.getUserName());

+ 3 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/DistributorRules.java

@@ -22,6 +22,9 @@ public final class DistributorRules
22 22
     public static final String DEL_FLAG_DELETED = "2";
23 23
 
24 24
     /** 承销商平台角色(sys_role.role_id) */
25
+    /**
26
+     * 历史常量;分配账号请使用 {@link TradePartnerAccountRules#ROLE_KEY_DISTRIBUTOR} 解析角色。
27
+     */
25 28
     public static final long ROLE_ID_DISTRIBUTOR = 104L;
26 29
 
27 30
     public static final String MSG_DELETE_UNPAID_ORDER = "存在未支付订单,无法删除";

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/DistributorValidation.java

@@ -140,7 +140,7 @@ public final class DistributorValidation
140 140
         if (db.getAccountAssigned() != null
141 141
                 && db.getAccountAssigned() == TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES)
142 142
         {
143
-            throw new ServiceException("该承销商已分配账号,不可重复分配");
143
+            throw new ServiceException(TradePartnerAccountRules.MSG_ALREADY_ASSIGNED_DISTRIBUTOR);
144 144
         }
145 145
     }
146 146
 }

+ 3 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/SupplierRules.java

@@ -23,7 +23,9 @@ public final class SupplierRules
23 23
 
24 24
     public static final String DEL_FLAG_DELETED = "2";
25 25
 
26
-    /** 供应商平台角色(sys_role.role_id) */
26
+    /**
27
+     * 历史常量;分配账号请使用 {@link TradePartnerAccountRules#ROLE_KEY_SUPPLIER} 解析角色。
28
+     */
27 29
     public static final long ROLE_ID_SUPPLIER = 103L;
28 30
 
29 31
     public static final String MSG_DELETE_UNSETTLED_SETTLEMENT = "存在未结算的结算单,无法删除";

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/SupplierValidation.java

@@ -230,7 +230,7 @@ public final class SupplierValidation
230 230
         if (db.getAccountAssigned() != null
231 231
                 && db.getAccountAssigned() == TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES)
232 232
         {
233
-            throw new ServiceException("该供应商已分配账号,不可重复分配");
233
+            throw new ServiceException(TradePartnerAccountRules.MSG_ALREADY_ASSIGNED_SUPPLIER);
234 234
         }
235 235
     }
236 236
 }

+ 25 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/TradePartnerAccountAssigner.java

@@ -2,10 +2,12 @@ package com.ruoyi.web.modules.trading.support;
2 2
 
3 3
 import org.springframework.beans.factory.annotation.Autowired;
4 4
 import org.springframework.stereotype.Component;
5
+import com.ruoyi.common.core.domain.entity.SysRole;
5 6
 import com.ruoyi.common.core.domain.entity.SysUser;
6 7
 import com.ruoyi.common.exception.ServiceException;
7 8
 import com.ruoyi.common.utils.SecurityUtils;
8 9
 import com.ruoyi.common.utils.StringUtils;
10
+import com.ruoyi.system.mapper.SysRoleMapper;
9 11
 import com.ruoyi.system.service.ISysConfigService;
10 12
 import com.ruoyi.system.service.ISysUserService;
11 13
 
@@ -21,7 +23,14 @@ public class TradePartnerAccountAssigner
21 23
     @Autowired
22 24
     private ISysConfigService configService;
23 25
 
24
-    public SysUser createAccount(String partnerName, String contactPhone, Long partnerId, long roleId, String operator)
26
+    @Autowired
27
+    private SysRoleMapper sysRoleMapper;
28
+
29
+    /**
30
+     * 登录名:名称汉字拼音首字母 + 主键 id;角色按 {@code roleKey} 解析。
31
+     */
32
+    public SysUser createAccount(String partnerName, String contactPhone, Long partnerId, String roleKey,
33
+            String operator)
25 34
     {
26 35
         String loginName = TradingPartnerLoginNameGenerator.generate(partnerName, partnerId);
27 36
         SysUser probe = new SysUser();
@@ -42,7 +51,7 @@ public class TradePartnerAccountAssigner
42 51
         user.setPassword(SecurityUtils.encryptPassword(initPwd));
43 52
         user.setStatus("0");
44 53
         user.setCreateBy(operator);
45
-        user.setRoleIds(new Long[] { roleId });
54
+        user.setRoleIds(new Long[] { resolveRoleId(roleKey) });
46 55
         int rows = sysUserService.insertUser(user);
47 56
         if (rows <= 0 || user.getUserId() == null)
48 57
         {
@@ -61,4 +70,18 @@ public class TradePartnerAccountAssigner
61 70
         }
62 71
         sysUserService.deleteUserById(sysUserId);
63 72
     }
73
+
74
+    private long resolveRoleId(String roleKey)
75
+    {
76
+        if (StringUtils.isEmpty(roleKey))
77
+        {
78
+            throw new ServiceException(String.format(TradePartnerAccountRules.MSG_ROLE_NOT_FOUND, ""));
79
+        }
80
+        SysRole role = sysRoleMapper.checkRoleKeyUnique(roleKey.trim());
81
+        if (role == null || role.getRoleId() == null)
82
+        {
83
+            throw new ServiceException(String.format(TradePartnerAccountRules.MSG_ROLE_NOT_FOUND, roleKey));
84
+        }
85
+        return role.getRoleId();
86
+    }
64 87
 }

+ 12 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/trading/support/TradePartnerAccountRules.java

@@ -9,6 +9,18 @@ public final class TradePartnerAccountRules
9 9
 
10 10
     public static final int ACCOUNT_ASSIGNED_YES = 1;
11 11
 
12
+    /** 供应商小程序角色权限字符(sys_role.role_key) */
13
+    public static final String ROLE_KEY_SUPPLIER = "supplier";
14
+
15
+    /** 承销商小程序角色权限字符(sys_role.role_key) */
16
+    public static final String ROLE_KEY_DISTRIBUTOR = "distributor";
17
+
18
+    public static final String MSG_ROLE_NOT_FOUND = "未配置权限字符为「%s」的角色,无法分配账号";
19
+
20
+    public static final String MSG_ALREADY_ASSIGNED_SUPPLIER = "该供应商已分配账号,不可重复分配";
21
+
22
+    public static final String MSG_ALREADY_ASSIGNED_DISTRIBUTOR = "该承销商已分配账号,不可重复分配";
23
+
12 24
     private TradePartnerAccountRules()
13 25
     {
14 26
     }

+ 2 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/trading/service/impl/BizDistributorServiceImplTest.java

@@ -98,7 +98,7 @@ class BizDistributorServiceImplTest
98 98
         user.setUserId(200L);
99 99
         user.setUserName("zxcxs3");
100 100
         when(accountAssigner.createAccount(eq("扎西承销商"), eq(VALID_PHONE), eq(3L),
101
-                eq(DistributorRules.ROLE_ID_DISTRIBUTOR), eq("admin"))).thenReturn(user);
101
+                eq(TradePartnerAccountRules.ROLE_KEY_DISTRIBUTOR), eq("admin"))).thenReturn(user);
102 102
         when(mapper.updateBizDistributor(any())).thenReturn(1);
103 103
         assertEquals(1, service.assignAccount(3L, "admin"));
104 104
         verify(mapper).updateBizDistributor(argThat(r ->
@@ -115,7 +115,7 @@ class BizDistributorServiceImplTest
115 115
         db.setAccountAssigned(TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES);
116 116
         when(mapper.selectBizDistributorById(4L)).thenReturn(db);
117 117
         assertThrows(ServiceException.class, () -> service.assignAccount(4L, "admin"));
118
-        verify(accountAssigner, never()).createAccount(any(), any(), any(), anyLong(), any());
118
+        verify(accountAssigner, never()).createAccount(any(), any(), any(), any(), any());
119 119
     }
120 120
 
121 121
     @Test

+ 2 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/trading/service/impl/BizSupplierServiceImplTest.java

@@ -117,7 +117,7 @@ class BizSupplierServiceImplTest
117 117
         user.setUserId(100L);
118 118
         user.setUserName("zxgys1");
119 119
         when(accountAssigner.createAccount(eq("扎西供应商"), eq(VALID_PHONE), eq(1L),
120
-                eq(SupplierRules.ROLE_ID_SUPPLIER), eq("admin"))).thenReturn(user);
120
+                eq(TradePartnerAccountRules.ROLE_KEY_SUPPLIER), eq("admin"))).thenReturn(user);
121 121
         when(mapper.updateBizSupplier(any())).thenReturn(1);
122 122
         assertEquals(1, service.assignAccount(1L, "admin"));
123 123
         verify(mapper).updateBizSupplier(argThat(r ->
@@ -135,7 +135,7 @@ class BizSupplierServiceImplTest
135 135
         db.setAccountAssigned(TradePartnerAccountRules.ACCOUNT_ASSIGNED_YES);
136 136
         when(mapper.selectBizSupplierById(2L)).thenReturn(db);
137 137
         assertThrows(ServiceException.class, () -> service.assignAccount(2L, "admin"));
138
-        verify(accountAssigner, never()).createAccount(any(), any(), any(), org.mockito.ArgumentMatchers.anyLong(), any());
138
+        verify(accountAssigner, never()).createAccount(any(), any(), any(), any(), any());
139 139
     }
140 140
 
141 141
     @Test

+ 68 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/trading/support/TradePartnerAccountAssignerTest.java

@@ -0,0 +1,68 @@
1
+package com.ruoyi.web.modules.trading.support;
2
+
3
+import static org.junit.jupiter.api.Assertions.assertEquals;
4
+import static org.junit.jupiter.api.Assertions.assertThrows;
5
+import static org.mockito.ArgumentMatchers.any;
6
+import static org.mockito.Mockito.verify;
7
+import static org.mockito.Mockito.when;
8
+
9
+import com.ruoyi.common.core.domain.entity.SysRole;
10
+import com.ruoyi.common.core.domain.entity.SysUser;
11
+import com.ruoyi.common.exception.ServiceException;
12
+import com.ruoyi.system.mapper.SysRoleMapper;
13
+import com.ruoyi.system.service.ISysConfigService;
14
+import com.ruoyi.system.service.ISysUserService;
15
+import org.junit.jupiter.api.DisplayName;
16
+import org.junit.jupiter.api.Test;
17
+import org.junit.jupiter.api.extension.ExtendWith;
18
+import org.mockito.InjectMocks;
19
+import org.mockito.Mock;
20
+import org.mockito.junit.jupiter.MockitoExtension;
21
+
22
+@ExtendWith(MockitoExtension.class)
23
+@DisplayName("TradePartnerAccountAssigner")
24
+class TradePartnerAccountAssignerTest
25
+{
26
+    @Mock
27
+    private ISysUserService sysUserService;
28
+
29
+    @Mock
30
+    private ISysConfigService configService;
31
+
32
+    @Mock
33
+    private SysRoleMapper sysRoleMapper;
34
+
35
+    @InjectMocks
36
+    private TradePartnerAccountAssigner assigner;
37
+
38
+    @Test
39
+    @DisplayName("按 role_key 绑定供应商角色")
40
+    void createAccountSupplierRole()
41
+    {
42
+        SysRole role = new SysRole();
43
+        role.setRoleId(103L);
44
+        when(sysRoleMapper.checkRoleKeyUnique(TradePartnerAccountRules.ROLE_KEY_SUPPLIER)).thenReturn(role);
45
+        when(sysUserService.checkUserNameUnique(any())).thenReturn(true);
46
+        when(configService.selectConfigByKey("sys.user.initPassword")).thenReturn("123456");
47
+        when(sysUserService.insertUser(any())).thenAnswer(inv -> {
48
+            SysUser u = inv.getArgument(0);
49
+            u.setUserId(1L);
50
+            return 1;
51
+        });
52
+
53
+        SysUser user = assigner.createAccount("扎西供应商", "13800138000", 12L,
54
+                TradePartnerAccountRules.ROLE_KEY_SUPPLIER, "admin");
55
+        assertEquals("zxgys12", user.getUserName());
56
+        verify(sysRoleMapper).checkRoleKeyUnique(TradePartnerAccountRules.ROLE_KEY_SUPPLIER);
57
+    }
58
+
59
+    @Test
60
+    @DisplayName("角色不存在")
61
+    void roleMissing()
62
+    {
63
+        when(sysUserService.checkUserNameUnique(any())).thenReturn(true);
64
+        when(sysRoleMapper.checkRoleKeyUnique(TradePartnerAccountRules.ROLE_KEY_SUPPLIER)).thenReturn(null);
65
+        assertThrows(ServiceException.class, () -> assigner.createAccount("甲", "13800138000", 1L,
66
+                TradePartnerAccountRules.ROLE_KEY_SUPPLIER, "admin"));
67
+    }
68
+}