Prechádzať zdrojové kódy

修改登录用户根据模块黑名单检测,新增黑名单接口

车车 10 mesiacov pred
rodič
commit
b71f439846
19 zmenil súbory, kde vykonal 405 pridanie a 83 odobranie
  1. 30 19
      ktg-admin/src/main/java/com/ktg/web/controller/system/SysLoginController.java
  2. 6 1
      ktg-common/src/main/java/com/ktg/common/constant/Constants.java
  3. 1 1
      ktg-framework/src/main/java/com/ktg/framework/config/SecurityConfig.java
  4. 1 2
      ktg-framework/src/main/java/com/ktg/framework/config/WebMvcConfig.java
  5. 48 30
      ktg-framework/src/main/java/com/ktg/framework/web/service/SysLoginService.java
  6. 33 23
      ktg-framework/src/main/java/com/ktg/framework/web/service/UserDetailsServiceImpl.java
  7. 124 0
      ktg-iscs/src/main/java/com/ktg/iscs/controller/IsBlacklistController.java
  8. 39 0
      ktg-iscs/src/main/java/com/ktg/iscs/domain/IsBlacklist.java
  9. 16 0
      ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsBlacklistMapper.java
  10. 17 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/IIsBlacklistService.java
  11. 31 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsBlacklistServiceImpl.java
  12. 7 7
      ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsIsolationPointServiceImpl.java
  13. 7 0
      ktg-iscs/src/main/resources/mapper/IsBlacklistMapper.xml
  14. 4 0
      ktg-iscs/src/main/resources/mapper/IsIsolationPointMapper.xml
  15. 26 0
      ktg-system/src/main/java/com/ktg/system/domain/vo/UserBlackVo.java
  16. 3 0
      ktg-system/src/main/java/com/ktg/system/mapper/SysUserMapper.java
  17. 3 0
      ktg-system/src/main/java/com/ktg/system/service/ISysUserService.java
  18. 6 0
      ktg-system/src/main/java/com/ktg/system/service/impl/SysUserServiceImpl.java
  19. 3 0
      ktg-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 30 - 19
ktg-admin/src/main/java/com/ktg/web/controller/system/SysLoginController.java

@@ -1,12 +1,5 @@
 package com.ktg.web.controller.system;
 
-import java.util.List;
-import java.util.Set;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
 import com.ktg.common.constant.Constants;
 import com.ktg.common.core.domain.AjaxResult;
 import com.ktg.common.core.domain.entity.SysMenu;
@@ -16,15 +9,22 @@ import com.ktg.common.utils.SecurityUtils;
 import com.ktg.framework.web.service.SysLoginService;
 import com.ktg.framework.web.service.SysPermissionService;
 import com.ktg.system.service.ISysMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Set;
 
 /**
  * 登录验证
- * 
+ *
  * @author ruoyi
  */
 @RestController
-public class SysLoginController
-{
+public class SysLoginController {
     @Autowired
     private SysLoginService loginService;
 
@@ -36,13 +36,12 @@ public class SysLoginController
 
     /**
      * 登录方法
-     * 
+     *
      * @param loginBody 登录信息
      * @return 结果
      */
     @PostMapping("/login")
-    public AjaxResult login(@RequestBody LoginBody loginBody)
-    {
+    public AjaxResult login(@RequestBody LoginBody loginBody) {
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
@@ -51,14 +50,27 @@ public class SysLoginController
         return ajax;
     }
 
+    /**
+     * 机柜登录,防止多机柜操作,只允许同时在线一个
+     *
+     * @param loginBody
+     * @return
+     */
+    @PostMapping("/machineLogin")
+    public AjaxResult machineLogin(@RequestBody LoginBody loginBody) {
+        AjaxResult ajax = AjaxResult.success();
+        String token = loginService.machineLogin(loginBody);
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
     /**
      * 获取用户信息
-     * 
+     *
      * @return 用户信息
      */
     @GetMapping("getInfo")
-    public AjaxResult getInfo()
-    {
+    public AjaxResult getInfo() {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);
@@ -73,12 +85,11 @@ public class SysLoginController
 
     /**
      * 获取路由信息
-     * 
+     *
      * @return 路由信息
      */
     @GetMapping("getRouters")
-    public AjaxResult getRouters()
-    {
+    public AjaxResult getRouters() {
         Long userId = SecurityUtils.getUserId();
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return AjaxResult.success(menuService.buildMenus(menus));

+ 6 - 1
ktg-common/src/main/java/com/ktg/common/constant/Constants.java

@@ -4,7 +4,7 @@ import io.jsonwebtoken.Claims;
 
 /**
  * 通用常量信息
- * 
+ *
  * @author ruoyi
  */
 public class Constants
@@ -69,6 +69,11 @@ public class Constants
      */
     public static final String LOGIN_TOKEN_KEY = "login_tokens:";
 
+    /**
+     * 机柜登录用户 redis key
+     */
+    public static final String CABINET_LOGIN_TOKEN_KEY = "cabinet_login_tokens:";
+
     /**
      * 防重提交 redis key
      */

+ 1 - 1
ktg-framework/src/main/java/com/ktg/framework/config/SecurityConfig.java

@@ -97,7 +97,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage").anonymous()
+                .antMatchers("/login", "/register", "/captchaImage", "/cabinetLogin").anonymous()
                 .antMatchers("/mobile/login/**").permitAll()
                 .antMatchers("/iscs/card/login").permitAll()
                 .antMatchers(

+ 1 - 2
ktg-framework/src/main/java/com/ktg/framework/config/WebMvcConfig.java

@@ -1,6 +1,5 @@
 package com.ktg.framework.config;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -25,7 +24,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 
         Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
         // 忽略序列化时null字段的显示
-        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
+        // builder.serializationInclusion(JsonInclude.Include.NON_NULL);
         ObjectMapper objectMapper = builder.build();
 
         SimpleModule simpleModule = new SimpleModule();

+ 48 - 30
ktg-framework/src/main/java/com/ktg/framework/web/service/SysLoginService.java

@@ -2,6 +2,7 @@ package com.ktg.framework.web.service;
 
 import com.ktg.common.constant.Constants;
 import com.ktg.common.core.domain.entity.SysUser;
+import com.ktg.common.core.domain.model.LoginBody;
 import com.ktg.common.core.domain.model.LoginUser;
 import com.ktg.common.core.redis.RedisCache;
 import com.ktg.common.exception.ServiceException;
@@ -18,7 +19,10 @@ import com.ktg.framework.manager.factory.AsyncFactory;
 import com.ktg.system.service.ISysConfigService;
 import com.ktg.system.service.ISysUserOnlineService;
 import com.ktg.system.service.ISysUserService;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -36,8 +40,7 @@ import javax.annotation.Resource;
  * @author guoruan
  */
 @Component
-public class SysLoginService
-{
+public class SysLoginService {
     @Autowired
     private TokenService tokenService;
     @Resource
@@ -52,7 +55,9 @@ public class SysLoginService
     private ISysUserOnlineService userOnlineService;
     @Resource
     private SysPermissionService permissionService;
-
+    // 令牌秘钥
+    @Value("${token.secret}")
+    private String secret;
 
 
     /**
@@ -60,35 +65,27 @@ public class SysLoginService
      *
      * @param username 用户名
      * @param password 密码
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public String login(String username, String password, String code, String uuid)
-    {
+    public String login(String username, String password, String code, String uuid) {
         boolean captchaOnOff = configService.selectCaptchaOnOff();
         // 验证码开关
-        if (captchaOnOff)
-        {
+        if (captchaOnOff) {
             validateCaptcha(username, code, uuid);
         }
         // 用户验证
         Authentication authentication = null;
-        try
-        {
+        try {
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager
                     .authenticate(new UsernamePasswordAuthenticationToken(username, password));
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                 throw new UserPasswordNotMatchException();
-            }
-            else
-            {
+            } else {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 throw new ServiceException(e.getMessage());
             }
@@ -99,7 +96,7 @@ public class SysLoginService
         // 生成token
         String token = tokenService.createToken(loginUser);
         // 清理多余的登录者
-        userOnlineService.forceLogoutByName(username);
+        // userOnlineService.forceLogoutByName(username);
         return token;
     }
 
@@ -134,22 +131,19 @@ public class SysLoginService
      * 校验验证码
      *
      * @param username 用户名
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
+    public void validateCaptcha(String username, String code, String uuid) {
         String verifyKey = Constants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
         String captcha = redisCache.getCacheObject(verifyKey);
         redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
+        if (captcha == null) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
             throw new CaptchaExpireException();
         }
-        if (!code.equalsIgnoreCase(captcha))
-        {
+        if (!code.equalsIgnoreCase(captcha)) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
             throw new CaptchaException();
         }
@@ -160,12 +154,36 @@ public class SysLoginService
      *
      * @param userId 用户ID
      */
-    public void recordLoginInfo(Long userId)
-    {
+    public void recordLoginInfo(Long userId) {
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
         sysUser.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(sysUser);
     }
+
+    public String machineLogin(LoginBody loginBody) {
+        // 生成令牌
+        String token = login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+
+        // 因为只能同时在线一个,清理之前的登录
+        String oldToken = redisCache.getCacheObject(Constants.CABINET_LOGIN_TOKEN_KEY + loginBody.getUsername());
+        // 删除之前的登陆信息
+        if (StringUtils.isNotEmpty(oldToken)) {
+            try {
+                Claims claims = Jwts.parser()
+                        .setSigningKey(secret)
+                        .parseClaimsJws(oldToken)
+                        .getBody();
+                // 解析对应的权限以及用户信息
+                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
+                redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + uuid);
+            } catch (Exception ignored) {
+            }
+        }
+        // 更换上次登录信息的记录
+        redisCache.setCacheObject(Constants.CABINET_LOGIN_TOKEN_KEY + loginBody.getUsername(), token);
+        return token;
+    }
 }

+ 33 - 23
ktg-framework/src/main/java/com/ktg/framework/web/service/UserDetailsServiceImpl.java

@@ -1,6 +1,16 @@
 package com.ktg.framework.web.service;
 
+import com.ktg.common.core.domain.entity.SysUser;
+import com.ktg.common.core.domain.model.LoginUser;
+import com.ktg.common.enums.UserStatus;
+import com.ktg.common.exception.ServiceException;
+import com.ktg.common.utils.DictUtils;
+import com.ktg.common.utils.ServletUtils;
+import com.ktg.common.utils.StringUtils;
+import com.ktg.system.domain.vo.UserBlackVo;
+import com.ktg.system.service.ISysUserService;
 import com.ktg.system.strategy.PhoneUtils;
+import eu.bitwalker.useragentutils.UserAgent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -8,12 +18,6 @@ import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
-import com.ktg.common.core.domain.entity.SysUser;
-import com.ktg.common.core.domain.model.LoginUser;
-import com.ktg.common.enums.UserStatus;
-import com.ktg.common.exception.ServiceException;
-import com.ktg.common.utils.StringUtils;
-import com.ktg.system.service.ISysUserService;
 
 import java.util.List;
 
@@ -23,8 +27,7 @@ import java.util.List;
  * @author guoruan
  */
 @Service
-public class UserDetailsServiceImpl implements UserDetailsService
-{
+public class UserDetailsServiceImpl implements UserDetailsService {
     private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
 
     @Autowired
@@ -34,14 +37,13 @@ public class UserDetailsServiceImpl implements UserDetailsService
     private SysPermissionService permissionService;
 
     @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
-    {
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
         SysUser user = null;
-        if(PhoneUtils.isMobile(username)){
+        if (PhoneUtils.isMobile(username)) {
             user = userService.selectUserByMobile(username);
         }
 
-        if(!StringUtils.isNotNull(user)){
+        if (!StringUtils.isNotNull(user)) {
             user = userService.selectUserByUserName(username);
             // 开始放入岗位的权限数据
             List<Long> userWorkstationIds = userService.getUserWorkstationIds(user.getUserId());
@@ -53,27 +55,35 @@ public class UserDetailsServiceImpl implements UserDetailsService
             }
         }
 
-        if (StringUtils.isNull(user))
-        {
+        if (StringUtils.isNull(user)) {
             log.info("登录用户:{} 不存在.", username);
             throw new ServiceException("登录用户:" + username + " 不存在");
-        }
-        else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
-        {
+        } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
             log.info("登录用户:{} 已被删除.", username);
             throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
-        }
-        else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
-        {
+        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
             log.info("登录用户:{} 已被停用.", username);
             throw new ServiceException("对不起,您的账号:" + username + " 已停用");
+        } else {
+            // 检查用户在该模块是否是黑名单
+            UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+            String header = ServletUtils.getRequest().getHeader("module");
+            // 获取用户黑名单
+            List<UserBlackVo> userBlackList = userService.getUserBlackList(user.getUserId());
+            if (!userBlackList.isEmpty()) {
+                for (UserBlackVo userBlackVo : userBlackList) {
+                    String module = DictUtils.getDictLabel("module", userBlackVo.getModule());
+                    if (StringUtils.isNotBlank(module) && userAgent.getOperatingSystem().getName().contains(module)) {
+                        log.info("登录用户:{} 已被拉入 {} 模块黑名单.", username, module);
+                        throw new ServiceException("对不起,您的账号:" + username + " 已被拉入" + module + "模块黑名单,暂时无法登录!");
+                    }
+                }
+            }
         }
-
         return createLoginUser(user);
     }
 
-    public UserDetails createLoginUser(SysUser user)
-    {
+    public UserDetails createLoginUser(SysUser user) {
         return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
     }
 }

+ 124 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsBlacklistController.java

@@ -0,0 +1,124 @@
+package com.ktg.iscs.controller;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.common.pojo.CommonResult;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.iscs.domain.IsBlacklist;
+import com.ktg.iscs.service.IIsBlacklistService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 黑名单关联Controller
+ *
+ * @author cgj
+ * @date 2025-01-10
+ */
+@Api(tags = "黑名单关联")
+@RestController
+@RequestMapping("/iscs/blacklist")
+public class IsBlacklistController extends BaseController
+{
+    @Autowired
+    private IIsBlacklistService isBlacklistService;
+
+    /**
+     * 查询黑名单关联分页
+     */
+    @ApiOperation("查询黑名单关联-分页")
+    @Parameters({
+            @Parameter(name = "page", description = "Page"),
+            @Parameter(name = "isBlacklist", description = "实体参数")
+    })
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:list')")
+    @GetMapping("/getIsBlacklistPage")
+    public CommonResult<Page<IsBlacklist>> getIsBlacklistPage(Page<IsBlacklist> page, IsBlacklist isBlacklist)
+    {
+        Page<IsBlacklist> result = isBlacklistService.getIsBlacklistPage(page, isBlacklist);
+        return CommonResult.success(result);
+    }
+
+    /**
+     * 导出黑名单关联列表
+     */
+    @ApiOperation("导出黑名单关联列表")
+    @Parameter(name = "isBlacklist", description = "实体参数")
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:export')")
+    @Log(title = "黑名单关联", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportIsBlacklist")
+    public void exportIsBlacklist(HttpServletResponse response, IsBlacklist isBlacklist)
+    {
+        Page<IsBlacklist> page = new Page<>();
+        page.setSize(-1);
+        page.setCurrent(1);
+        List<IsBlacklist> list = isBlacklistService.page(page, Wrappers.<IsBlacklist>lambdaQuery()
+                .orderByDesc(IsBlacklist::getRecordId)).getRecords();
+        ExcelUtil<IsBlacklist> util = new ExcelUtil<IsBlacklist>(IsBlacklist.class);
+        util.exportExcel(response, list, "黑名单关联数据");
+    }
+
+    /**
+     * 获取黑名单关联详细信息
+     */
+    @ApiOperation("获取黑名单关联详细信息")
+    @Parameter(name = "recordId", description = "recordId")
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:query')")
+    @GetMapping(value = "/selectIsBlacklistById")
+    public CommonResult<IsBlacklist> selectIsBlacklistById(Long recordId)
+    {
+        return CommonResult.success(isBlacklistService.getById(recordId));
+    }
+
+    /**
+     * 新增黑名单关联
+     */
+    @ApiOperation("新增黑名单关联")
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:add')")
+    @Log(title = "黑名单关联", businessType = BusinessType.INSERT)
+    @PostMapping("/insertIsBlacklist")
+    public CommonResult<Boolean> insertIsBlacklist(@RequestBody @Parameter(name = "isBlacklist", description = "新增数据类,放到body") IsBlacklist isBlacklist)
+    {
+        return CommonResult.success(isBlacklistService.save(isBlacklist));
+    }
+
+    /**
+     * 修改黑名单关联
+     */
+    @ApiOperation("修改黑名单关联")
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:edit')")
+    @Log(title = "黑名单关联", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateIsBlacklist")
+    public CommonResult<Boolean> updateIsBlacklist(@RequestBody @Parameter(name = "isBlacklist", description = "修改数据类,放到body") IsBlacklist isBlacklist)
+    {
+        return CommonResult.success(isBlacklistService.updateById(isBlacklist));
+    }
+
+    /**
+     * 删除黑名单关联
+     */
+    @ApiOperation("删除黑名单关联")
+    @PreAuthorize("@ss.hasPermi('iscs:blacklist:remove')")
+    @Log(title = "黑名单关联", businessType = BusinessType.DELETE)
+	@PostMapping("/deleteIsBlacklistByRecordIds")
+    public CommonResult<Boolean> deleteIsBlacklistByRecordIds(String recordIds)
+    {
+        Assert.notBlank(recordIds, "请选择需要删除的数据!");
+        Long[] longIds = Convert.toLongArray(recordIds);
+        return CommonResult.success(isBlacklistService.removeBatchByIds(Arrays.asList(longIds)));
+    }
+}

+ 39 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsBlacklist.java

@@ -0,0 +1,39 @@
+package com.ktg.iscs.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.ktg.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 黑名单关联对象 is_blacklist
+ *
+ * @author cgj
+ * @date 2025-01-10
+ */
+@EqualsAndHashCode(callSuper = false)
+@Data
+public class IsBlacklist
+{
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "记录D")
+    @TableId(type = IdType.AUTO)
+    private Long recordId;
+
+    @ApiModelProperty(value = "用户ID")
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "模块")
+    @Excel(name = "模块")
+    private String module;
+
+    @ApiModelProperty(value = "物资柜ID")
+    @Excel(name = "物资柜ID")
+    private Long cabinetId;
+
+
+}

+ 16 - 0
ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsBlacklistMapper.java

@@ -0,0 +1,16 @@
+package com.ktg.iscs.mapper;
+
+import com.ktg.common.mapper.BaseMapperX;
+import com.ktg.iscs.domain.IsBlacklist;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 黑名单关联Mapper接口
+ *
+ * @author cgj
+ * @date 2025-01-10
+ */
+@Mapper
+public interface IsBlacklistMapper extends BaseMapperX<IsBlacklist> {
+
+}

+ 17 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsBlacklistService.java

@@ -0,0 +1,17 @@
+package com.ktg.iscs.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ktg.iscs.domain.IsBlacklist;
+
+/**
+ * 黑名单关联Service接口
+ *
+ * @author cgj
+ * @date 2025-01-10
+ */
+public interface IIsBlacklistService extends IService<IsBlacklist> {
+
+    Page<IsBlacklist> getIsBlacklistPage(Page<IsBlacklist> page, IsBlacklist isBlacklist);
+
+}

+ 31 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsBlacklistServiceImpl.java

@@ -0,0 +1,31 @@
+package com.ktg.iscs.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ktg.iscs.domain.IsBlacklist;
+import com.ktg.iscs.mapper.IsBlacklistMapper;
+import com.ktg.iscs.service.IIsBlacklistService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 黑名单关联Service业务层处理
+ *
+ * @author cgj
+ * @date 2025-01-10
+ */
+@Service
+public class IsBlacklistServiceImpl extends ServiceImpl<IsBlacklistMapper, IsBlacklist> implements IIsBlacklistService {
+
+    @Autowired
+    private IsBlacklistMapper isBlacklistMapper;
+
+    @Override
+    public Page<IsBlacklist> getIsBlacklistPage(Page<IsBlacklist> page, IsBlacklist isBlacklist) {
+        Page<IsBlacklist> result = page(page, Wrappers.<IsBlacklist>lambdaQuery()
+                .orderByDesc(IsBlacklist::getRecordId));
+        return result;
+    }
+
+}

+ 7 - 7
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsIsolationPointServiceImpl.java

@@ -70,10 +70,10 @@ public class IsIsolationPointServiceImpl extends ServiceImpl<IsIsolationPointMap
     {
         // 断言校验
         Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointName()), "隔离点名称不可为空!");
-        Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointCode()), "隔离点编号名称不可为空!");
-        List<IsIsolationPoint> list = list(Wrappers.<IsIsolationPoint>lambdaQuery()
+        // Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointCode()), "隔离点编号名称不可为空!");
+       /* List<IsIsolationPoint> list = list(Wrappers.<IsIsolationPoint>lambdaQuery()
                 .eq(IsIsolationPoint::getPointCode, isIsolationPoint.getPointCode()));
-        Assert.isTrue(list.isEmpty(), "该隔离点编号已被使用!");
+        Assert.isTrue(list.isEmpty(), "该隔离点编号已被使用!");*/
         return isIsolationPointMapper.insertIsIsolationPoint(isIsolationPoint);
     }
 
@@ -89,12 +89,12 @@ public class IsIsolationPointServiceImpl extends ServiceImpl<IsIsolationPointMap
         // 断言校验
         Assert.notNull(isIsolationPoint.getPointId(), "隔离点ID不可为空!");
         Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointName()), "隔离点名称不可为空!");
-        Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointCode()), "隔离点编号名称不可为空!");
-        Assert.notNull(isIsolationPoint.getWorkareaId(), "所属区域不可为空!");
-        List<IsIsolationPoint> list = list(Wrappers.<IsIsolationPoint>lambdaQuery()
+        // Assert.isTrue(StringUtils.isNotBlank(isIsolationPoint.getPointCode()), "隔离点编号名称不可为空!");
+        // Assert.notNull(isIsolationPoint.getWorkareaId(), "所属区域不可为空!");
+        /*List<IsIsolationPoint> list = list(Wrappers.<IsIsolationPoint>lambdaQuery()
                 .eq(IsIsolationPoint::getPointCode, isIsolationPoint.getPointCode())
                 .ne(IsIsolationPoint::getPointId, isIsolationPoint.getPointId()));
-        Assert.isTrue(list.isEmpty(), "该隔离点编号已被使用!");
+        Assert.isTrue(list.isEmpty(), "该隔离点编号已被使用!");*/
         isIsolationPoint.setUpdateTime(DateUtils.getNowDate());
         return isIsolationPointMapper.updateIsIsolationPoint(isIsolationPoint);
     }

+ 7 - 0
ktg-iscs/src/main/resources/mapper/IsBlacklistMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ktg.iscs.mapper.IsBlacklistMapper">
+
+</mapper>

+ 4 - 0
ktg-iscs/src/main/resources/mapper/IsIsolationPointMapper.xml

@@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="locksetTypeId"    column="lockset_type_id"    />
         <result property="workstationId"    column="workstation_id"    />
         <result property="lotoId"    column="loto_id"    />
+        <result property="remark"    column="remark"    />
     </resultMap>
 
     <sql id="selectIsIsolationPointVo">
@@ -70,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="locksetTypeId != null">lockset_type_id,</if>
             <if test="workstationId != null">workstation_id,</if>
             <if test="lotoId != null">loto_id,</if>
+            <if test="remark != null and remark != ''">remark,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="pointCode != null and pointCode != ''">#{pointCode},</if>
@@ -91,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="locksetTypeId != null">#{locksetTypeId},</if>
             <if test="workstationId != null">#{workstationId},</if>
             <if test="lotoId != null">#{lotoId},</if>
+            <if test="remark != null and remark != ''">#{remark},</if>
          </trim>
     </insert>
 
@@ -116,6 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="locksetTypeId != null">lockset_type_id = #{locksetTypeId},</if>
             <if test="workstationId != null">workstation_id = #{workstationId},</if>
             <if test="lotoId != null">loto_id = #{lotoId},</if>
+            <if test="remark != null and remark != ''">remark = #{remark},</if>
         </trim>
         where point_id = #{pointId}
     </update>

+ 26 - 0
ktg-system/src/main/java/com/ktg/system/domain/vo/UserBlackVo.java

@@ -0,0 +1,26 @@
+package com.ktg.system.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 用户黑名单信息
+ *
+ * @author guoruan
+ */
+@Data
+public class UserBlackVo
+{
+    @ApiModelProperty(value = "记录ID")
+    public Long recordId;
+
+    @ApiModelProperty(value = "用户ID")
+    public Long userId;
+
+    @ApiModelProperty(value = "模块")
+    public String module;
+
+    @ApiModelProperty(value = "物资柜ID")
+    public Long cabinetId;
+
+}

+ 3 - 0
ktg-system/src/main/java/com/ktg/system/mapper/SysUserMapper.java

@@ -2,6 +2,7 @@ package com.ktg.system.mapper;
 
 import com.ktg.common.core.domain.entity.SysUser;
 import com.ktg.common.mapper.BaseMapperX;
+import com.ktg.system.domain.vo.UserBlackVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -142,4 +143,6 @@ public interface SysUserMapper extends BaseMapperX<SysUser>
 
     List<Long> getChildWorkstations(@Param(value = "userWorkstationId") Long userWorkstationId);
 
+    List<UserBlackVo> getUserBlackList(@Param(value = "userId") Long userId);
+
 }

+ 3 - 0
ktg-system/src/main/java/com/ktg/system/service/ISysUserService.java

@@ -2,6 +2,7 @@ package com.ktg.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.common.core.domain.entity.SysUser;
+import com.ktg.system.domain.vo.UserBlackVo;
 
 import java.util.List;
 
@@ -216,4 +217,6 @@ public interface ISysUserService extends IService<SysUser>
     List<Long> getUserWorkstationIds(Long userId);
 
     List<Long> getAllChildWorkstationByUserId(Long userId);
+
+    List<UserBlackVo> getUserBlackList(Long userId);
 }

+ 6 - 0
ktg-system/src/main/java/com/ktg/system/service/impl/SysUserServiceImpl.java

@@ -15,6 +15,7 @@ import com.ktg.common.utils.spring.SpringUtils;
 import com.ktg.system.domain.SysPost;
 import com.ktg.system.domain.SysUserPost;
 import com.ktg.system.domain.SysUserRole;
+import com.ktg.system.domain.vo.UserBlackVo;
 import com.ktg.system.mapper.*;
 import com.ktg.system.service.ISysConfigService;
 import com.ktg.system.service.ISysUserService;
@@ -635,4 +636,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         // 将Set转换回List
         return new ArrayList<>(set);
     }
+
+    @Override
+    public List<UserBlackVo> getUserBlackList(Long userId) {
+        return userMapper.getUserBlackList(userId);
+    }
 }

+ 3 - 0
ktg-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -252,5 +252,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="getChildWorkstations" resultType="java.lang.Long">
 		SELECT workstation_id FROM is_workstation WHERE workstation_id = #{userWorkstationId} or find_in_set( #{userWorkstationId} , ancestors )
 	</select>
+    <select id="getUserBlackList" resultType="com.ktg.system.domain.vo.UserBlackVo">
+		select * from is_blacklist where user_id = #{userId}
+	</select>
 
 </mapper>