From db9a9783a58b8df17567f186583a9325b418c3a1 Mon Sep 17 00:00:00 2001 From: TanYibin <5491541@qq.com> Date: Mon, 13 Mar 2023 10:15:44 +0800 Subject: [PATCH] 多仓支持提交(1) --- ant-design-vue-jeecg/src/views/user/LoginAccount.vue | 6 +++--- huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java | 10 ++++------ huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java | 7 +++++++ huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml | 7 ++++++- huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java | 30 +++++++++++++++++++++++++++--- huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/supplier/controller/SupplierController.java | 5 ++--- huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java | 7 +++---- huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 8 files changed, 129 insertions(+), 24 deletions(-) diff --git a/ant-design-vue-jeecg/src/views/user/LoginAccount.vue b/ant-design-vue-jeecg/src/views/user/LoginAccount.vue index cb5a247..daee67f 100644 --- a/ant-design-vue-jeecg/src/views/user/LoginAccount.vue +++ b/ant-design-vue-jeecg/src/views/user/LoginAccount.vue @@ -2,7 +2,7 @@ <div> <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-form-model-item required prop="username"> - <a-input v-model="model.username" size="large" placeholder="请输入帐户名 / admin" @blur="getWarehouse"> + <a-input v-model="model.username" size="large" placeholder="请输入帐户名 / admin" @blur="getWarehouse"> <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/> </a-input> </a-form-model-item> @@ -16,7 +16,7 @@ <a-form-model-item prop="warehouseCode"> <a-select show-search - placeholder="请选择仓库!" + placeholder="请选择仓库" option-filter-prop="label" v-model="model.warehouseCode"> <a-select-option v-for="item in warehouseList" :key="item.name" :value="item.code">{{ @@ -61,7 +61,7 @@ export default { required: true, message: '请输入密码!', validator: 'click' }], warehouseCode: [{ - required: true, message: '请选择仓库!', trigger: "change" ,validator: 'click' + required: true, message: '请选择仓库!', trigger: "change" , validator: 'click' }], } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java index 1375e75..76e06eb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -62,7 +62,7 @@ public class LoginController { public RedisTemplate<String, ?> redisTemplate; @Autowired private ISysDictService sysDictService; - @Resource + @Autowired private BaseCommonService baseCommonService; @ApiOperation("登录接口") @@ -112,12 +112,10 @@ public class LoginController { result.error500("用户名或密码错误"); return result; } - if (StringUtils.isEmpty(warehouseCode)) { - result.error500("仓库编码错误"); + result.error500("请选择仓库编码"); return result; } - // 用户登录信息 result = userInfo(sysUser, warehouseCode); // update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码 @@ -444,9 +442,9 @@ public class LoginController { // } // } // } - // update-end--Author:sunjianlei Date:20210802 for:获取用户租户信息 + List<String> roles = sysBaseAPI.getRolesByUsername(username); // 生成token - String token = HuahengJwtUtil.sign(username, syspassword, warehouseCode); + String token = HuahengJwtUtil.sign(username, syspassword, warehouseCode, roles); // 设置token缓存有效时间 redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java index ad49db9..e24adb2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java @@ -143,4 +143,11 @@ public interface SysUserMapper extends BaseMapper<SysUser> { * @return */ public List<Map<String, Object>> getWarehouseByUserName(@Param("username") String username); + + /** + * 查询所有仓库 + * @param username + * @return + */ + public List<Map<String, Object>> getWarehouses(); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml index 7121ad9..d39b4d5 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml @@ -180,7 +180,6 @@ </if> </select> - <select id="getWarehouseByUserName" resultType="java.util.HashMap"> SELECT r.name, r.code FROM sys_user u @@ -189,5 +188,11 @@ WHERE u.username = #{username,jdbcType=VARCHAR} AND r.enable = 1 </select> + + <select id="getWarehouses" resultType="java.util.HashMap"> + SELECT r.name, r.code + FROM warehouse r + WHERE r.enable = 1 + </select> </mapper> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java index 4e45d7d..222215a 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java +++ b/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; import org.jeecg.modules.wms.config.sysUserWarehouse.service.ISysUserWarehouseService; import org.jeecg.modules.wms.config.warehouse.entity.Warehouse; import org.jeecg.modules.wms.config.warehouse.service.IWarehouseService; +import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; @@ -54,36 +55,52 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl @Autowired private SysUserMapper userMapper; + @Autowired private SysPermissionMapper sysPermissionMapper; + @Autowired private SysUserRoleMapper sysUserRoleMapper; + @Autowired private SysUserDepartMapper sysUserDepartMapper; + @Resource private ISysUserService sysUserService; + @Resource private ISysRoleService sysRoleService; + @Resource private ISysUserWarehouseService sysUserWarehouseService; + @Autowired private ISysBaseAPI sysBaseAPI; + @Autowired private SysDepartMapper sysDepartMapper; + @Autowired private SysRoleMapper sysRoleMapper; + @Autowired private SysDepartRoleUserMapper departRoleUserMapper; + @Autowired private SysDepartRoleMapper sysDepartRoleMapper; + @Resource private BaseCommonService baseCommonService; + @Autowired private SysThirdAccountMapper sysThirdAccountMapper; + @Resource private IWarehouseService warehouseService; + @Autowired ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; + @Autowired ThirdAppDingtalkServiceImpl dingtalkService; @@ -592,9 +609,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl @Override public List<Map<String, Object>> getWarehouseByUserCode(String username) { - List<Map<String, Object>> list = null; - list = userMapper.getWarehouseByUserName(username); - return list; + List<String> roles = sysBaseAPI.getRolesByUsername(username); + if (!StringUtils.isEmpty(roles) && roles.contains(HuahengJwtUtil.USER_ROLE_INSPECTOR)) { + List<Map<String, Object>> returnList = userMapper.getWarehouses(); + Map<String, Object> inspectorWarehouse = new HashMap<String, Object>(); + inspectorWarehouse.put("name", HuahengJwtUtil.ALL_WAREHOUSE_NAME); + inspectorWarehouse.put("code", HuahengJwtUtil.ALL_WAREHOUSE_CODE); + returnList.add(inspectorWarehouse); + return returnList; + } + return userMapper.getWarehouseByUserName(username); } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/supplier/controller/SupplierController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/supplier/controller/SupplierController.java index 1efa367..f1e7b75 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/supplier/controller/SupplierController.java +++ b/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 * @param req */ @RequestMapping(value = "/getSupplierList") - public Result<?> getSupplierList(HttpServletRequest req) { - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); + public Result<?> getSupplierList(HttpServletRequest request) { LambdaQueryWrapper<Supplier> supplierLambdaQueryWrapper = Wrappers.lambdaQuery(); - supplierLambdaQueryWrapper.eq(Supplier::getWarehouseCode, warehouseCode); + HuahengJwtUtil.setWarehouseCode(supplierLambdaQueryWrapper, Supplier.class, request); List<Supplier> supplierList = supplierService.list(supplierLambdaQueryWrapper); return Result.OK(supplierList); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java index 5e7442c..e62a211 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java +++ b/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 @ApiOperation(value = "入库表主表-分页列表查询", notes = "入库表主表-分页列表查询") @GetMapping(value = "/list") public Result<IPage<ReceiptHeader>> queryPageList(ReceiptHeader receiptHeader, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); - receiptHeader.setWarehouseCode(warehouseCode); - QueryWrapper<ReceiptHeader> queryWrapper = QueryGenerator.initQueryWrapper(receiptHeader, req.getParameterMap()); + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + HuahengJwtUtil.setWarehouseCode(request, receiptHeader); + QueryWrapper<ReceiptHeader> queryWrapper = QueryGenerator.initQueryWrapper(receiptHeader, request.getParameterMap()); Page<ReceiptHeader> page = new Page<ReceiptHeader>(pageNo, pageSize); IPage<ReceiptHeader> pageList = receiptHeaderService.page(page, queryWrapper); return Result.OK(pageList); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java index abbfbc8..39ef290 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java @@ -1,7 +1,9 @@ package org.jeecg.utils; +import java.lang.reflect.Field; import java.util.Arrays; import java.util.Date; +import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; @@ -12,22 +14,36 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.wms.framework.aspectj.dto.ApiAuthentication; import org.jeecg.modules.wms.framework.aspectj.dto.RSA256Key; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTDecodeException; import com.auth0.jwt.interfaces.DecodedJWT; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ReflectUtil; +@Component public class HuahengJwtUtil { /** token失效时间 1天 */ public static final long EXPIRE_TIME = 12 * 60 * 60 * 1000; public static final String HUAHENG_SYSTEM_ID = "HUAHENG-WMS4"; + + /** 仓库视察员角色 */ + public static final String USER_ROLE_INSPECTOR = "inspector"; + + /** 全仓中文名称 */ + public static final String ALL_WAREHOUSE_NAME = "全部仓库"; + + /** 全仓CODE */ + public static final String ALL_WAREHOUSE_CODE = "ALL_WAREHOUSE"; /** * 根据request中的token获取用户账号 @@ -35,7 +51,7 @@ public class HuahengJwtUtil { * @return * @throws JeecgBootException */ - public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { + public static String getUserNameByToken(HttpServletRequest request) { String accessToken = request.getHeader("X-Access-Token"); String username = getUsername(accessToken); if (oConvertUtils.isEmpty(username)) { @@ -56,6 +72,19 @@ public class HuahengJwtUtil { return null; } } + + /** + * 获得token中的信息无需secret解密也能获得 + * @return token中包含的角色信息 + */ + public static List<String> getRoles(String token) { + try { + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim("roles").asList(String.class); + } catch (JWTDecodeException e) { + return null; + } + } /** * 根据request中的token获取用户账号 @@ -63,7 +92,7 @@ public class HuahengJwtUtil { * @return * @throws JeecgBootException */ - public static String getWarehouseCodeByToken(HttpServletRequest request) throws JeecgBootException { + public static String getWarehouseCodeByToken(HttpServletRequest request) { String accessToken = request.getHeader("X-Access-Token"); String warehouseCode = getWarehouseCode(accessToken); if (oConvertUtils.isEmpty(warehouseCode)) { @@ -72,6 +101,49 @@ public class HuahengJwtUtil { return warehouseCode; } + public static List<String> getRolesByToken(HttpServletRequest request) { + String accessToken = request.getHeader("X-Access-Token"); + List<String> roles = getRoles(accessToken); + if (CollectionUtils.isEmpty(roles)) { + throw new JeecgBootException("未获取到仓库编码"); + } + return roles; + } + + public static <T> void setWarehouseCode(HttpServletRequest request, T t) { + try { + Field warehouseCodeField = ReflectUtil.getField(t.getClass(), "warehouseCode"); + if (warehouseCodeField != null) { + List<String> roles = HuahengJwtUtil.getRolesByToken(request); + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(request); + if (roles.contains("inspector")) { + return; + } + ReflectUtil.setFieldValue(t, "warehouseCode", warehouseCode); + + } + } catch (Exception e) { + return; + } + } + + public static <T> void setWarehouseCode(LambdaQueryWrapper<T> lambdaQueryWrapper, Class<T> clazz, HttpServletRequest request) { + try { + Field warehouseCodeField = ReflectUtil.getField(clazz, "warehouseCode"); + if (warehouseCodeField != null) { + List<String> roles = HuahengJwtUtil.getRolesByToken(request); + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(request); + if (roles.contains("inspector")) { + return; + } + lambdaQueryWrapper.apply("warehouse_code = {0}", warehouseCode); + + } + } catch (Exception e) { + return; + } + } + /** * 生成签名 * @param username 用户名 @@ -90,13 +162,14 @@ public class HuahengJwtUtil { * @param username 用户名 * @param secret 用户的密码 * @param warehouseCode 登录仓库 + * @param roles 用户的角色 * @return 加密的token */ - public static String sign(String username, String secret, String warehouseCode) { + public static String sign(String username, String secret, String warehouseCode, List<String> roles) { Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); Algorithm algorithm = Algorithm.HMAC256(secret); // 附带username信息 - return JWT.create().withClaim("username", username).withClaim("warehouseCode", warehouseCode).withExpiresAt(date).sign(algorithm); + return JWT.create().withClaim("username", username).withClaim("warehouseCode", warehouseCode).withClaim("roles", roles).withExpiresAt(date).sign(algorithm); } /** -- libgit2 0.22.2