Sfoglia il codice sorgente

fix:"优化登录接口,增加邮箱登录"

soobin 2 mesi fa
parent
commit
cc11e551f9

+ 80 - 2
src/main/java/com/szwl/controller/TAdminController.java

@@ -2,7 +2,6 @@ package com.szwl.controller;
 
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,6 +19,7 @@ import com.szwl.model.bo.UserDetailBO;
 import com.szwl.model.dto.RegisterParamDTO;
 import com.szwl.model.entity.*;
 import com.szwl.model.param.AddLoginUserParam;
+import com.szwl.model.param.LoginParam;
 import com.szwl.model.param.UpdateLoginUserParam;
 import com.szwl.model.utils.AdminUtils;
 import com.szwl.service.*;
@@ -37,7 +37,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.util.*;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -684,6 +683,68 @@ public class TAdminController {
         return R.ok(userDetailBO);
     }
 
+    @ApiOperation(value = "登录")
+    @PostMapping("/loginSys")
+    @Audit(type = AuditEnum.LOGIN, content = "#username + '请求登录'")
+    public ResponseModel<UserDetailBO> loginSys(@RequestBody LoginParam loginParam, HttpServletRequest request) {
+        String username = loginParam.getUsername();
+        String password = loginParam.getPassword();
+        String hostName = loginParam.getHostName();
+
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
+            return R.fail(ResponseCodesEnum.A0001, "参数有空");
+        }
+
+        //验证用户名/手机/邮箱
+        LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
+        query.eq(TAdmin::getPassword, password);
+        query.and(wrapper -> wrapper.eq(TAdmin::getUsername, username).or().eq(TAdmin::getPhone, username).eq(TAdmin::getEmail, username));
+        TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query))
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002));
+
+        // 判断是为申泽用户还是七云用户
+        String companyType = tAdmin.getCompanyType();
+        String sZ = "Sunzee";
+        String sC = "Sevencloud";
+        // 如果不为管理员
+        if (tAdmin.getType() >= 1) {
+            if (sZ.equals(hostName)) {
+                // 如果companyType不为空,且不等于“0”
+                if (StringUtils.isNotEmpty(companyType) && !companyType.equals("0")) {
+                    return R.fail(ResponseCodesEnum.L0002);
+                }
+            }
+            if (sC.equals(hostName)) {
+                // 如果companyType为空,或者不等于“1”
+                if (StringUtils.isEmpty(companyType) || !(companyType.equals("1"))) {
+                    return R.fail(ResponseCodesEnum.L0002);
+                }
+            }
+        }
+        // 添加系统id
+        if (StringUtils.isEmpty(tAdmin.getManagerId())) {
+            String managerId = AdminUtils.encrypt(false, tAdmin.getId());
+            tAdmin.setManagerId(managerId);
+        }
+        // 设置登录时间
+        tAdmin.setLoginDate(new Date());
+        // 登录IP
+        String ipAddress;
+        // 获取通过代理服务器传递的真实IP地址
+        String xForwardedForHeader = request.getHeader("X-Forwarded-For");
+        if (xForwardedForHeader == null) {
+            ipAddress = request.getRemoteAddr();
+        } else {
+            // 多次反向代理后会有多个IP值,第一个IP才是真实IP
+            String[] ips = xForwardedForHeader.split(",");
+            ipAddress = ips[0].trim();
+        }
+        tAdmin.setLoginIp(ipAddress);
+        tAdminService.updateById(tAdmin);
+        UserDetailBO userDetailBO = tAdminService.getUserDetailBO(tAdmin);
+        return R.ok(userDetailBO);
+    }
+
     @ApiOperation(value = "切换自动登录")
     @GetMapping("/autoLogin")
     @Audit(type = AuditEnum.LOGIN, content = "切换登录'")
@@ -854,9 +915,26 @@ public class TAdminController {
             oldAdmin.setPromoCodeOpen(admin.getPromoCodeOpen());
         }
         if (StringUtils.isNotEmpty(admin.getPhone())) {
+            // 如果手机号不同,则验证手机号是否存在
+            if (!admin.getPhone().equals(oldAdmin.getPhone())) {
+                LambdaQueryWrapper<TAdmin> query2 = Wrappers.lambdaQuery();
+                query2.eq(TAdmin::getPhone, admin.getPhone());
+                TAdmin admin1 = tAdminService.getOne(query2);
+                if (admin1 != null) {
+                    return R.fail(ResponseCodesEnum.A0001, "手机号已存在");
+                }
+            }
             oldAdmin.setPhone(admin.getPhone());
         }
         if (StringUtils.isNotEmpty(admin.getEmail())) {
+            if (!admin.getEmail().equals(oldAdmin.getEmail())) {
+                LambdaQueryWrapper<TAdmin> query2 = Wrappers.lambdaQuery();
+                query2.eq(TAdmin::getEmail, admin.getEmail());
+                TAdmin admin1 = tAdminService.getOne(query2);
+                if (admin1 != null) {
+                    return R.fail(ResponseCodesEnum.A0001, "邮箱已存在");
+                }
+            }
             oldAdmin.setEmail(admin.getEmail());
         }
         if (StringUtils.isNotEmpty(admin.getCurrencySymbol())) {

+ 14 - 0
src/main/java/com/szwl/model/param/LoginParam.java

@@ -0,0 +1,14 @@
+package com.szwl.model.param;
+
+import lombok.Data;
+
+@Data
+public class LoginParam {
+
+    private String username;
+
+    private String password;
+
+    private String hostName;
+
+}