Commit db9a9783a58b8df17567f186583a9325b418c3a1
1 parent
5b0ec621
多仓支持提交(1)
Signed-off-by: TanYibin <5491541@qq.com>
Showing
8 changed files
with
129 additions
and
24 deletions
ant-design-vue-jeecg/src/views/user/LoginAccount.vue
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | <div> |
3 | 3 | <a-form-model ref="form" :model="model" :rules="validatorRules"> |
4 | 4 | <a-form-model-item required prop="username"> |
5 | - <a-input v-model="model.username" size="large" placeholder="请输入帐户名 / admin" @blur="getWarehouse"> | |
5 | + <a-input v-model="model.username" size="large" placeholder="请输入帐户名 / admin" @blur="getWarehouse"> | |
6 | 6 | <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/> |
7 | 7 | </a-input> |
8 | 8 | </a-form-model-item> |
... | ... | @@ -16,7 +16,7 @@ |
16 | 16 | <a-form-model-item prop="warehouseCode"> |
17 | 17 | <a-select |
18 | 18 | show-search |
19 | - placeholder="请选择仓库!" | |
19 | + placeholder="请选择仓库" | |
20 | 20 | option-filter-prop="label" |
21 | 21 | v-model="model.warehouseCode"> |
22 | 22 | <a-select-option v-for="item in warehouseList" :key="item.name" :value="item.code">{{ |
... | ... | @@ -61,7 +61,7 @@ export default { |
61 | 61 | required: true, message: '请输入密码!', validator: 'click' |
62 | 62 | }], |
63 | 63 | warehouseCode: [{ |
64 | - required: true, message: '请选择仓库!', trigger: "change" ,validator: 'click' | |
64 | + required: true, message: '请选择仓库!', trigger: "change" , validator: 'click' | |
65 | 65 | }], |
66 | 66 | } |
67 | 67 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java
... | ... | @@ -62,7 +62,7 @@ public class LoginController { |
62 | 62 | public RedisTemplate<String, ?> redisTemplate; |
63 | 63 | @Autowired |
64 | 64 | private ISysDictService sysDictService; |
65 | - @Resource | |
65 | + @Autowired | |
66 | 66 | private BaseCommonService baseCommonService; |
67 | 67 | |
68 | 68 | @ApiOperation("登录接口") |
... | ... | @@ -112,12 +112,10 @@ public class LoginController { |
112 | 112 | result.error500("用户名或密码错误"); |
113 | 113 | return result; |
114 | 114 | } |
115 | - | |
116 | 115 | if (StringUtils.isEmpty(warehouseCode)) { |
117 | - result.error500("仓库编码错误"); | |
116 | + result.error500("请选择仓库编码"); | |
118 | 117 | return result; |
119 | 118 | } |
120 | - | |
121 | 119 | // 用户登录信息 |
122 | 120 | result = userInfo(sysUser, warehouseCode); |
123 | 121 | // update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码 |
... | ... | @@ -444,9 +442,9 @@ public class LoginController { |
444 | 442 | // } |
445 | 443 | // } |
446 | 444 | // } |
447 | - // update-end--Author:sunjianlei Date:20210802 for:获取用户租户信息 | |
445 | + List<String> roles = sysBaseAPI.getRolesByUsername(username); | |
448 | 446 | // 生成token |
449 | - String token = HuahengJwtUtil.sign(username, syspassword, warehouseCode); | |
447 | + String token = HuahengJwtUtil.sign(username, syspassword, warehouseCode, roles); | |
450 | 448 | // 设置token缓存有效时间 |
451 | 449 | redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
452 | 450 | redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
... | ... | @@ -143,4 +143,11 @@ public interface SysUserMapper extends BaseMapper<SysUser> { |
143 | 143 | * @return |
144 | 144 | */ |
145 | 145 | public List<Map<String, Object>> getWarehouseByUserName(@Param("username") String username); |
146 | + | |
147 | + /** | |
148 | + * 查询所有仓库 | |
149 | + * @param username | |
150 | + * @return | |
151 | + */ | |
152 | + public List<Map<String, Object>> getWarehouses(); | |
146 | 153 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
... | ... | @@ -180,7 +180,6 @@ |
180 | 180 | </if> |
181 | 181 | </select> |
182 | 182 | |
183 | - | |
184 | 183 | <select id="getWarehouseByUserName" resultType="java.util.HashMap"> |
185 | 184 | SELECT r.name, r.code |
186 | 185 | FROM sys_user u |
... | ... | @@ -189,5 +188,11 @@ |
189 | 188 | WHERE u.username = #{username,jdbcType=VARCHAR} |
190 | 189 | AND r.enable = 1 |
191 | 190 | </select> |
191 | + | |
192 | + <select id="getWarehouses" resultType="java.util.HashMap"> | |
193 | + SELECT r.name, r.code | |
194 | + FROM warehouse r | |
195 | + WHERE r.enable = 1 | |
196 | + </select> | |
192 | 197 | |
193 | 198 | </mapper> |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
... | ... | @@ -25,6 +25,7 @@ import org.jeecg.modules.wms.config.sysUserWarehouse.entity.SysUserWarehouse; |
25 | 25 | import org.jeecg.modules.wms.config.sysUserWarehouse.service.ISysUserWarehouseService; |
26 | 26 | import org.jeecg.modules.wms.config.warehouse.entity.Warehouse; |
27 | 27 | import org.jeecg.modules.wms.config.warehouse.service.IWarehouseService; |
28 | +import org.jeecg.utils.HuahengJwtUtil; | |
28 | 29 | import org.jeecg.utils.StringUtils; |
29 | 30 | import org.springframework.beans.factory.annotation.Autowired; |
30 | 31 | import org.springframework.cache.annotation.CacheEvict; |
... | ... | @@ -54,36 +55,52 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl |
54 | 55 | |
55 | 56 | @Autowired |
56 | 57 | private SysUserMapper userMapper; |
58 | + | |
57 | 59 | @Autowired |
58 | 60 | private SysPermissionMapper sysPermissionMapper; |
61 | + | |
59 | 62 | @Autowired |
60 | 63 | private SysUserRoleMapper sysUserRoleMapper; |
64 | + | |
61 | 65 | @Autowired |
62 | 66 | private SysUserDepartMapper sysUserDepartMapper; |
67 | + | |
63 | 68 | @Resource |
64 | 69 | private ISysUserService sysUserService; |
70 | + | |
65 | 71 | @Resource |
66 | 72 | private ISysRoleService sysRoleService; |
73 | + | |
67 | 74 | @Resource |
68 | 75 | private ISysUserWarehouseService sysUserWarehouseService; |
76 | + | |
69 | 77 | @Autowired |
70 | 78 | private ISysBaseAPI sysBaseAPI; |
79 | + | |
71 | 80 | @Autowired |
72 | 81 | private SysDepartMapper sysDepartMapper; |
82 | + | |
73 | 83 | @Autowired |
74 | 84 | private SysRoleMapper sysRoleMapper; |
85 | + | |
75 | 86 | @Autowired |
76 | 87 | private SysDepartRoleUserMapper departRoleUserMapper; |
88 | + | |
77 | 89 | @Autowired |
78 | 90 | private SysDepartRoleMapper sysDepartRoleMapper; |
91 | + | |
79 | 92 | @Resource |
80 | 93 | private BaseCommonService baseCommonService; |
94 | + | |
81 | 95 | @Autowired |
82 | 96 | private SysThirdAccountMapper sysThirdAccountMapper; |
97 | + | |
83 | 98 | @Resource |
84 | 99 | private IWarehouseService warehouseService; |
100 | + | |
85 | 101 | @Autowired |
86 | 102 | ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; |
103 | + | |
87 | 104 | @Autowired |
88 | 105 | ThirdAppDingtalkServiceImpl dingtalkService; |
89 | 106 | |
... | ... | @@ -592,9 +609,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl |
592 | 609 | |
593 | 610 | @Override |
594 | 611 | public List<Map<String, Object>> getWarehouseByUserCode(String username) { |
595 | - List<Map<String, Object>> list = null; | |
596 | - list = userMapper.getWarehouseByUserName(username); | |
597 | - return list; | |
612 | + List<String> roles = sysBaseAPI.getRolesByUsername(username); | |
613 | + if (!StringUtils.isEmpty(roles) && roles.contains(HuahengJwtUtil.USER_ROLE_INSPECTOR)) { | |
614 | + List<Map<String, Object>> returnList = userMapper.getWarehouses(); | |
615 | + Map<String, Object> inspectorWarehouse = new HashMap<String, Object>(); | |
616 | + inspectorWarehouse.put("name", HuahengJwtUtil.ALL_WAREHOUSE_NAME); | |
617 | + inspectorWarehouse.put("code", HuahengJwtUtil.ALL_WAREHOUSE_CODE); | |
618 | + returnList.add(inspectorWarehouse); | |
619 | + return returnList; | |
620 | + } | |
621 | + return userMapper.getWarehouseByUserName(username); | |
598 | 622 | } |
599 | 623 | |
600 | 624 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/supplier/controller/SupplierController.java
... | ... | @@ -180,10 +180,9 @@ public class SupplierController extends JeecgController<Supplier, ISupplierServi |
180 | 180 | * @param req |
181 | 181 | */ |
182 | 182 | @RequestMapping(value = "/getSupplierList") |
183 | - public Result<?> getSupplierList(HttpServletRequest req) { | |
184 | - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
183 | + public Result<?> getSupplierList(HttpServletRequest request) { | |
185 | 184 | LambdaQueryWrapper<Supplier> supplierLambdaQueryWrapper = Wrappers.lambdaQuery(); |
186 | - supplierLambdaQueryWrapper.eq(Supplier::getWarehouseCode, warehouseCode); | |
185 | + HuahengJwtUtil.setWarehouseCode(supplierLambdaQueryWrapper, Supplier.class, request); | |
187 | 186 | List<Supplier> supplierList = supplierService.list(supplierLambdaQueryWrapper); |
188 | 187 | return Result.OK(supplierList); |
189 | 188 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
... | ... | @@ -95,10 +95,9 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
95 | 95 | @ApiOperation(value = "入库表主表-分页列表查询", notes = "入库表主表-分页列表查询") |
96 | 96 | @GetMapping(value = "/list") |
97 | 97 | public Result<IPage<ReceiptHeader>> queryPageList(ReceiptHeader receiptHeader, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, |
98 | - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { | |
99 | - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
100 | - receiptHeader.setWarehouseCode(warehouseCode); | |
101 | - QueryWrapper<ReceiptHeader> queryWrapper = QueryGenerator.initQueryWrapper(receiptHeader, req.getParameterMap()); | |
98 | + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { | |
99 | + HuahengJwtUtil.setWarehouseCode(request, receiptHeader); | |
100 | + QueryWrapper<ReceiptHeader> queryWrapper = QueryGenerator.initQueryWrapper(receiptHeader, request.getParameterMap()); | |
102 | 101 | Page<ReceiptHeader> page = new Page<ReceiptHeader>(pageNo, pageSize); |
103 | 102 | IPage<ReceiptHeader> pageList = receiptHeaderService.page(page, queryWrapper); |
104 | 103 | return Result.OK(pageList); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java
1 | 1 | package org.jeecg.utils; |
2 | 2 | |
3 | +import java.lang.reflect.Field; | |
3 | 4 | import java.util.Arrays; |
4 | 5 | import java.util.Date; |
6 | +import java.util.List; | |
5 | 7 | import java.util.UUID; |
6 | 8 | |
7 | 9 | import javax.servlet.http.HttpServletRequest; |
... | ... | @@ -12,22 +14,36 @@ import org.jeecg.common.system.vo.LoginUser; |
12 | 14 | import org.jeecg.common.util.oConvertUtils; |
13 | 15 | import org.jeecg.modules.wms.framework.aspectj.dto.ApiAuthentication; |
14 | 16 | import org.jeecg.modules.wms.framework.aspectj.dto.RSA256Key; |
17 | +import org.springframework.stereotype.Component; | |
18 | +import org.springframework.util.CollectionUtils; | |
15 | 19 | |
16 | 20 | import com.auth0.jwt.JWT; |
17 | 21 | import com.auth0.jwt.JWTVerifier; |
18 | 22 | import com.auth0.jwt.algorithms.Algorithm; |
19 | 23 | import com.auth0.jwt.exceptions.JWTDecodeException; |
20 | 24 | import com.auth0.jwt.interfaces.DecodedJWT; |
25 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
21 | 26 | |
22 | 27 | import cn.hutool.core.date.DatePattern; |
23 | 28 | import cn.hutool.core.date.DateUtil; |
29 | +import cn.hutool.core.util.ReflectUtil; | |
24 | 30 | |
31 | +@Component | |
25 | 32 | public class HuahengJwtUtil { |
26 | 33 | |
27 | 34 | /** token失效时间 1天 */ |
28 | 35 | public static final long EXPIRE_TIME = 12 * 60 * 60 * 1000; |
29 | 36 | |
30 | 37 | public static final String HUAHENG_SYSTEM_ID = "HUAHENG-WMS4"; |
38 | + | |
39 | + /** 仓库视察员角色 */ | |
40 | + public static final String USER_ROLE_INSPECTOR = "inspector"; | |
41 | + | |
42 | + /** 全仓中文名称 */ | |
43 | + public static final String ALL_WAREHOUSE_NAME = "全部仓库"; | |
44 | + | |
45 | + /** 全仓CODE */ | |
46 | + public static final String ALL_WAREHOUSE_CODE = "ALL_WAREHOUSE"; | |
31 | 47 | |
32 | 48 | /** |
33 | 49 | * 根据request中的token获取用户账号 |
... | ... | @@ -35,7 +51,7 @@ public class HuahengJwtUtil { |
35 | 51 | * @return |
36 | 52 | * @throws JeecgBootException |
37 | 53 | */ |
38 | - public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { | |
54 | + public static String getUserNameByToken(HttpServletRequest request) { | |
39 | 55 | String accessToken = request.getHeader("X-Access-Token"); |
40 | 56 | String username = getUsername(accessToken); |
41 | 57 | if (oConvertUtils.isEmpty(username)) { |
... | ... | @@ -56,6 +72,19 @@ public class HuahengJwtUtil { |
56 | 72 | return null; |
57 | 73 | } |
58 | 74 | } |
75 | + | |
76 | + /** | |
77 | + * 获得token中的信息无需secret解密也能获得 | |
78 | + * @return token中包含的角色信息 | |
79 | + */ | |
80 | + public static List<String> getRoles(String token) { | |
81 | + try { | |
82 | + DecodedJWT jwt = JWT.decode(token); | |
83 | + return jwt.getClaim("roles").asList(String.class); | |
84 | + } catch (JWTDecodeException e) { | |
85 | + return null; | |
86 | + } | |
87 | + } | |
59 | 88 | |
60 | 89 | /** |
61 | 90 | * 根据request中的token获取用户账号 |
... | ... | @@ -63,7 +92,7 @@ public class HuahengJwtUtil { |
63 | 92 | * @return |
64 | 93 | * @throws JeecgBootException |
65 | 94 | */ |
66 | - public static String getWarehouseCodeByToken(HttpServletRequest request) throws JeecgBootException { | |
95 | + public static String getWarehouseCodeByToken(HttpServletRequest request) { | |
67 | 96 | String accessToken = request.getHeader("X-Access-Token"); |
68 | 97 | String warehouseCode = getWarehouseCode(accessToken); |
69 | 98 | if (oConvertUtils.isEmpty(warehouseCode)) { |
... | ... | @@ -72,6 +101,49 @@ public class HuahengJwtUtil { |
72 | 101 | return warehouseCode; |
73 | 102 | } |
74 | 103 | |
104 | + public static List<String> getRolesByToken(HttpServletRequest request) { | |
105 | + String accessToken = request.getHeader("X-Access-Token"); | |
106 | + List<String> roles = getRoles(accessToken); | |
107 | + if (CollectionUtils.isEmpty(roles)) { | |
108 | + throw new JeecgBootException("未获取到仓库编码"); | |
109 | + } | |
110 | + return roles; | |
111 | + } | |
112 | + | |
113 | + public static <T> void setWarehouseCode(HttpServletRequest request, T t) { | |
114 | + try { | |
115 | + Field warehouseCodeField = ReflectUtil.getField(t.getClass(), "warehouseCode"); | |
116 | + if (warehouseCodeField != null) { | |
117 | + List<String> roles = HuahengJwtUtil.getRolesByToken(request); | |
118 | + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(request); | |
119 | + if (roles.contains("inspector")) { | |
120 | + return; | |
121 | + } | |
122 | + ReflectUtil.setFieldValue(t, "warehouseCode", warehouseCode); | |
123 | + | |
124 | + } | |
125 | + } catch (Exception e) { | |
126 | + return; | |
127 | + } | |
128 | + } | |
129 | + | |
130 | + public static <T> void setWarehouseCode(LambdaQueryWrapper<T> lambdaQueryWrapper, Class<T> clazz, HttpServletRequest request) { | |
131 | + try { | |
132 | + Field warehouseCodeField = ReflectUtil.getField(clazz, "warehouseCode"); | |
133 | + if (warehouseCodeField != null) { | |
134 | + List<String> roles = HuahengJwtUtil.getRolesByToken(request); | |
135 | + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(request); | |
136 | + if (roles.contains("inspector")) { | |
137 | + return; | |
138 | + } | |
139 | + lambdaQueryWrapper.apply("warehouse_code = {0}", warehouseCode); | |
140 | + | |
141 | + } | |
142 | + } catch (Exception e) { | |
143 | + return; | |
144 | + } | |
145 | + } | |
146 | + | |
75 | 147 | /** |
76 | 148 | * 生成签名 |
77 | 149 | * @param username 用户名 |
... | ... | @@ -90,13 +162,14 @@ public class HuahengJwtUtil { |
90 | 162 | * @param username 用户名 |
91 | 163 | * @param secret 用户的密码 |
92 | 164 | * @param warehouseCode 登录仓库 |
165 | + * @param roles 用户的角色 | |
93 | 166 | * @return 加密的token |
94 | 167 | */ |
95 | - public static String sign(String username, String secret, String warehouseCode) { | |
168 | + public static String sign(String username, String secret, String warehouseCode, List<String> roles) { | |
96 | 169 | Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); |
97 | 170 | Algorithm algorithm = Algorithm.HMAC256(secret); |
98 | 171 | // 附带username信息 |
99 | - return JWT.create().withClaim("username", username).withClaim("warehouseCode", warehouseCode).withExpiresAt(date).sign(algorithm); | |
172 | + return JWT.create().withClaim("username", username).withClaim("warehouseCode", warehouseCode).withClaim("roles", roles).withExpiresAt(date).sign(algorithm); | |
100 | 173 | } |
101 | 174 | |
102 | 175 | /** |
... | ... |