Commit db9a9783a58b8df17567f186583a9325b418c3a1

Authored by 谭毅彬
1 parent 5b0ec621

多仓支持提交(1)

Signed-off-by: TanYibin <5491541@qq.com>
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&lt;SysUser&gt; {
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&lt;SysUserMapper, SysUser&gt; 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&lt;SysUserMapper, SysUser&gt; 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&lt;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&lt;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 /**
... ...