From ff8edc9c28ad4f2b98b2cba014af267fd6ba41da Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 15 一月 2025 10:43:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java                              |   21 +++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java          |    2 
 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AgentApplicationMapper.xml             |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java |    5 +
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java                                 |   54 +++++++++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                  |    1 
 ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml                       |    6 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java        |   55 +++++++++++--
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java         |   28 ++++--
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java               |    1 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java       |    4 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java                 |    2 
 12 files changed, 162 insertions(+), 19 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
index 012d8b9..edd38a6 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -26,6 +26,8 @@
      */
     @GetMapping("/user/info/{username}")
     public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+    @GetMapping("/user/infoShop/{username}")
+    public R<LoginUser> infoShop(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
     /**
      * 注册用户信息
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
index 7d7f7e8..c7fee51 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
@@ -30,6 +30,11 @@
             {
                 return R.fail("获取用户失败:" + throwable.getMessage());
             }
+            @Override
+            public R<LoginUser> infoShop(String username, String source)
+            {
+                return R.fail("门店登录获取用户失败:" + throwable.getMessage());
+            }
 
             @Override
             public R<Boolean> registerUserInfo(SysUser sysUser, String source)
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
index 6b128cc..6b53013 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -64,6 +64,27 @@
 		userClient.updateSysUser(sysUser);
 		return R.ok(map);
 	}
+	@PostMapping("loginShop")
+	public R<?> loginShop(@RequestBody LoginBody form, HttpServletRequest request) {
+		// 用户登录
+		LoginUser userInfo = sysLoginService.loginShop(form.getUsername(), form.getPassword(), request);
+		HashMap<String, Object> map = new HashMap<>();
+		map.put("token", tokenService.createToken(userInfo));
+		List<SysRole> roles = userInfo.getSysUser().getRoles();
+        if(CollectionUtils.isEmpty(roles)){
+            return R.fail("请关联角色!");
+        }
+
+        map.put("roleName",roles.get(0).getRoleName());
+		map.put("info", userInfo);
+		// 修改用户最后登录时间
+		SysUser sysUser = new SysUser();
+		sysUser.setUserId(userInfo.getSysUser().getUserId());
+		sysUser.setLoginDate(new Date());
+		System.out.println("修改用户登录时间" + sysUser);
+		userClient.updateSysUser(sysUser);
+		return R.ok(map);
+	}
 	
 	@DeleteMapping("logout")
 	public R<?> logout(HttpServletRequest request) {
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index 3b82526..ed689ec 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -91,6 +91,60 @@
 		if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员");
 //			throw new ServiceException("对不起,您的账号:" + username + " 已停用");
+			throw new ServiceException("您所属门店已被冻结,请联系平台");
+		}
+		passwordService.validate(user, password, request);
+		recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "登录成功");
+		return userInfo;
+	}
+	public LoginUser loginShop(String username, String password, HttpServletRequest request) {
+		username = username.trim();
+		// 查询用户信息
+		R<LoginUser> userResult = remoteUserService.infoShop(username, SecurityConstants.INNER);
+
+		if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
+			recordLogService.recordLogininfor(request, null, username, Constants.LOGIN_FAIL_STATUS, "登录用户不存在");
+			throw new ServiceException("登录用户:" + username + " 不存在");
+		}
+		LoginUser userInfo = userResult.getData();
+		SysUser user = userResult.getData().getSysUser();
+
+		// 用户名或密码为空 错误
+		if (StringUtils.isAnyBlank(username, password)) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户/密码必须填写");
+			throw new ServiceException("用户/密码必须填写");
+		}
+		// 密码如果不在指定范围内 错误
+		if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+				|| password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户密码不在指定范围");
+			throw new ServiceException("用户密码不在指定范围");
+		}
+		// 用户名不在指定范围内 错误
+		if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+				|| username.length() > UserConstants.USERNAME_MAX_LENGTH) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户名不在指定范围");
+			throw new ServiceException("用户名不在指定范围");
+		}
+		// IP黑名单校验
+		String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
+		if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "很遗憾,访问IP已被列入系统黑名单");
+			throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
+		}
+
+		if (R.FAIL == userResult.getCode()) {
+			throw new ServiceException(userResult.getMsg());
+		}
+
+
+		if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "对不起,您的账号已被删除");
+			throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
+		}
+		if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+			recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员");
+//			throw new ServiceException("对不起,您的账号:" + username + " 已停用");
 			throw new ServiceException("您的账号已被禁用,请联系平台");
 		}
 		passwordService.validate(user, password, request);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 2259d4d..9a8431d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -425,7 +425,7 @@
     @InnerAuth
     @GetMapping("/infoShop/{username}")
     public R<LoginUser> infoShop(@PathVariable("username") String username) {
-        SysUser sysUser = userService.selectUserByUserName(username);
+        SysUser sysUser = userService.selectUserShopByUserName(username);
         if (StringUtils.isNull(sysUser)) {
             return R.fail("用户名或密码错误");
         }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 072eb64..1e31dc7 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -48,6 +48,7 @@
      * @return 用户对象信息
      */
     SysUser selectUserByUserName(String userName);
+    SysUser selectUserShopByUserName(String userName);
 
     /**
      * 通过用户ID查询用户
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index d6a88df..776f124 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -47,6 +47,7 @@
      * @return 用户对象信息
      */
     SysUser selectUserByUserName(String userName);
+    SysUser selectUserShopByUserName(String userName);
 
     /**
      * 通过用户ID查询用户
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 5098818..1e08638 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -137,6 +137,10 @@
 	public SysUser selectUserByUserName(String userName) {
 		return userMapper.selectUserByUserName(userName);
 	}
+	@Override
+	public SysUser selectUserShopByUserName(String userName) {
+		return userMapper.selectUserShopByUserName(userName);
+	}
 	
 	/**
 	 * 通过用户ID查询用户
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml
index d1cd882..ac04b1d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml
@@ -105,6 +105,12 @@
 	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 		where u.user_name = #{userName} and u.del_flag = '0'
+		and u.role_type = 1
+	</select>
+	<select id="selectUserShopByUserName" parameterType="String" resultMap="SysUserResult">
+	    <include refid="selectUserVo"/>
+		where u.user_name = #{userName} and u.del_flag = '0'
+		and u.role_type = 2
 	</select>
 	
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
index d7472d4..c27d467 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -272,15 +272,54 @@
             user.setTopUser(byId);
         }
         //获取绑定下级列表
-        List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, user.getId()).list();
+        List<AppUser> list = appUserService.lambdaQuery()
+                .eq(AppUser::getInviteUserId, user.getId())
+                .eq(AppUser::getDelFlag, 0)
+                .ne(AppUser::getStatus, 3)
+                .list();
         for (AppUser appUser : list) {
-            Long count1 = appUserService.lambdaQuery().eq(AppUser::getVipId, 1).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count2 = appUserService.lambdaQuery().eq(AppUser::getVipId, 2).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count3 = appUserService.lambdaQuery().eq(AppUser::getVipId, 3).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count4 = appUserService.lambdaQuery().eq(AppUser::getVipId, 4).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count5 = appUserService.lambdaQuery().eq(AppUser::getVipId, 5).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count6 = appUserService.lambdaQuery().eq(AppUser::getVipId, 6).eq(AppUser::getInviteUserId, appUser.getId()).count();
-            Long count7 = appUserService.lambdaQuery().eq(AppUser::getVipId, 7).eq(AppUser::getInviteUserId, appUser.getId()).count();
+            Long count1 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 1)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count2 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 2)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count3 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 3)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count4 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 4)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count5 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 5)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count6 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 6)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
+            Long count7 = appUserService.lambdaQuery()
+                    .eq(AppUser::getVipId, 7)
+                    .eq(AppUser::getInviteUserId, appUser.getId())
+                    .eq(AppUser::getDelFlag, 0)
+                    .ne(AppUser::getStatus, 3)
+                    .count();
             appUser.setCount1(count1);
             appUser.setCount2(count2);
             appUser.setCount3(count3);
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AgentApplicationMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AgentApplicationMapper.xml
index a681db5..9c925bc 100644
--- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AgentApplicationMapper.xml
+++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AgentApplicationMapper.xml
@@ -39,7 +39,7 @@
                 and t2.phone like concat('%',#{agentQuery.phone},'%')
             </if>
             <if test="agentQuery.vipId !=null">
-                and t1.applicationVipId = #{agentQuery.vipId}
+                and t1.application_vip_id = #{agentQuery.vipId}
             </if>
             <if test="agentQuery.status !=null">
                 and t1.status = #{agentQuery.status}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
index d5d560c..3691afe 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
@@ -77,6 +77,7 @@
         Page<Technician> page = technicianService.lambdaQuery().like(name != null, Technician::getName, name)
                 .like(phone != null, Technician::getPhone, phone)
                 .eq(Technician::getShopId, sysUser.getObjectId())
+                .eq(Technician::getDelFlag, 0)
                 .page(Page.of(pageNum, pageSize));
         return R.ok(page);
     }
@@ -89,7 +90,10 @@
         SysUser sysUser = sysUserClient.getSysUser(userid).getData();
         if (technician.getId()==null) {
             technician.setSubscribeStatus(2);
-            List<Technician> list = technicianService.lambdaQuery().eq(Technician::getPhone, technician.getPhone()).eq(Technician::getShopId, sysUser.getObjectId()).list();
+            List<Technician> list = technicianService.lambdaQuery()
+                    .eq(Technician::getPhone, technician.getPhone())
+                    .eq(Technician::getShopId, sysUser.getObjectId())
+                    .eq(Technician::getDelFlag, 0).list();
             if (!list.isEmpty()) {
                 return R.fail("当前号码已经添加");
             }
@@ -107,14 +111,20 @@
             appUserShopClient.saveAppUserShop(appUserShop);
 
         }else {
-            List<Technician> list = technicianService.lambdaQuery().eq(Technician::getPhone, technician.getPhone()).eq(Technician::getShopId, sysUser.getObjectId())
-                    .ne(Technician::getId, technician.getId()).list();
-            if(list.size() > 0){
-                return R.fail("当前号码已经添加");
-            }
-            R<AppUser> appUserByPhone1 = appUserClient.getAppUserByPhone1(technician.getPhone());
-            if (appUserByPhone1.getData()==null){
-                return R.fail("当前号码暂无注册用户");
+            Technician byId = technicianService.getById(technician.getId());
+            if (byId.getPhone()!=technician.getPhone()){
+                List<Technician> list = technicianService.lambdaQuery()
+                        .eq(Technician::getPhone, technician.getPhone())
+                        .eq(Technician::getShopId, sysUser.getObjectId())
+                        .ne(Technician::getId, byId.getId())
+                        .eq(Technician::getDelFlag, 0).list();
+                if (!list.isEmpty()) {
+                    return R.fail("当前号码已经添加");
+                }
+                R<AppUser> appUserByPhone1 = appUserClient.getAppUserByPhone1(technician.getPhone());
+                if (appUserByPhone1.getData()==null){
+                    return R.fail("当前号码暂无注册用户");
+                }
             }
         }
         technician.setShopId(sysUser.getObjectId());

--
Gitblit v1.7.1