You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/controller/auth/LoginController.java

496 lines
20 KiB
Java

3 years ago
package com.glxp.api.controller.auth;
import cn.hutool.core.date.DateUnit;
import cn.hutool.crypto.SecureUtil;
5 months ago
import com.glxp.api.constant.FileConstant;
import com.glxp.api.res.basic.UserWorkResponse;
import com.glxp.api.res.basic.WorkBindWorkResponse;
import com.glxp.api.service.basic.BasicCollectUserService;
import org.springframework.beans.BeanUtils;
3 years ago
import cn.hutool.core.util.StrUtil;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.constant.Constant;
import com.glxp.api.controller.BaseController;
import com.glxp.api.dao.auth.AuthLicenseDao;
import com.glxp.api.entity.auth.*;
import com.glxp.api.entity.system.CompanyEntity;
import com.glxp.api.entity.system.SysPdaKeyEntity;
3 years ago
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.auth.LoginRequest;
import com.glxp.api.req.auth.PCLoginRequest;
import com.glxp.api.req.auth.UpdatePasswordRequest;
import com.glxp.api.res.auth.LoginResponse;
import com.glxp.api.res.auth.LoginUserInfoResponse;
import com.glxp.api.res.auth.WebTitleResponse;
3 years ago
import com.glxp.api.service.system.CompanyService;
import com.glxp.api.service.monitor.LogininforService;
import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.service.auth.*;
import com.glxp.api.util.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
3 years ago
import org.springframework.validation.BindingResult;
5 months ago
import org.springframework.web.bind.annotation.*;
3 years ago
import javax.annotation.Resource;
5 months ago
import javax.imageio.ImageIO;
3 years ago
import javax.servlet.http.HttpServletRequest;
5 months ago
import javax.servlet.http.HttpServletResponse;
3 years ago
import javax.validation.Valid;
5 months ago
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
3 years ago
import java.util.*;
import java.util.stream.Collectors;
3 years ago
/**
*
*/
@RestController
@Slf4j
public class LoginController extends BaseController {
@Resource
3 years ago
private AuthAdminService authAdminService;
@Resource
private LogininforService logininforService;
@Resource
private AuthCheckService authCheckService;
@Resource
SysPdaKeyService sysPdaKeyService;
3 years ago
@Resource
SysPermissionService sysPermissionService;
@Resource
private CompanyService companyService;
@Resource
private AuthLicenseDao authLicenseDao;
@Resource
BasicCollectUserService basicCollectUserService;
3 years ago
/**
*
*
* @return
*/
@PostMapping(value = "/login")
public BaseResponse index(@RequestBody @Valid LoginRequest loginRequest,
BindingResult bindingResult,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
AuthAdmin authAdmin = authAdminService.findByUserName(loginRequest.getUsername());
if (authAdmin == null) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
log.info(loginRequest.getPassword());
log.info(PasswordUtils.authAdminPwd(authAdmin.getPassWord()));
if (PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(PasswordUtils.authAdminPwd(authAdmin.getPassWord()))
|| loginRequest.getPassword().equals(authAdmin.getPassWord())
|| (loginRequest.getPassword().equals(PasswordUtils.authAdminPwd(authAdmin.getPassWord())))
) {
} else {
if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(SecureUtil.sha256(authAdmin.getPassWord()))) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
}
3 years ago
if (authAdmin.getUserFlag() == 0) {
throw new JsonException(ResultEnum.DATA_NOT, "该用户已被禁用!");
}
if (StrUtil.isNotEmpty(loginRequest.getImei())) {
SysPdaKeyEntity sysPdaKeyEntity = sysPdaKeyService.findDeviceByImei(loginRequest.getImei());
if (sysPdaKeyEntity == null) {
3 years ago
return ResultVOUtils.error(410, "该设备未注册");
} else if (sysPdaKeyEntity.getIsCheck() == 0) {
3 years ago
return ResultVOUtils.error(411, "该设备登记审核中,请等待,或联系管理员");
} else if (sysPdaKeyEntity.getIsCheck() == 2) {
3 years ago
return ResultVOUtils.error(412, "该设备被拒绝登录,请联系管理员!");
}
}
// 更新登录状态
AuthAdmin authAdminUp = new AuthAdmin();
authAdminUp.setId(authAdmin.getId());
authAdminUp.setLastLoginTime(new Date());
authAdminUp.setLastLoginIp(IpUtils.getIpAddr(request));
authAdminService.updateAuthAdmin(authAdminUp);
// 登录成功后获取权限,这里面会设置到缓存
// authLoginService.listRuleByAdminId(authAdmin.getId());
3 years ago
// cn.hutool.core.date.DateUtil.between(authAdmin.getLastUpdatePwdTime() == null ?
// if (cn.hutool.core.date.DateUtil.between(authAdmin.getLastUpdatePwdTime() == null ? cn.hutool.core.date.DateUtil.date() : authAdmin.getLastUpdatePwdTime()
// , cn.hutool.core.date.DateUtil.date(), DateUnit.DAY) >= 90) {
// return ResultVOUtils.error(509, "密码已过期,请修改密码");
// }
3 years ago
Map<String, Object> claims = new HashMap<>();
claims.put("admin_id", authAdmin.getId());
String token = JwtUtils.createToken(claims, 86400L); // 一天后过期
3 years ago
Map<String, Object> map = new HashMap<>();
map.put("id", authAdmin.getId());
map.put("token", token);
map.put("time", MsDateUtil.getDateTime());
3 years ago
LoginResponse loginResponse = new LoginResponse();
loginResponse.setId(authAdmin.getId() + "");
loginResponse.setToken(token);
loginResponse.setDept(authAdmin.getLocDeptCode());
3 years ago
loginResponse.setDeptName(authAdmin.getDeptName());
loginResponse.setNeedChangePwd(cn.hutool.core.date.DateUtil.between(authAdmin.getLastUpdatePwdTime() == null ? cn.hutool.core.date.DateUtil.date() : authAdmin.getLastUpdatePwdTime()
, cn.hutool.core.date.DateUtil.date(), DateUnit.DAY) >= 60);
3 years ago
logininforService.recordLogininfor(authAdmin.getEmployeeName(), Constant.LOGIN_SUCCESS, "登录成功!", request);
return ResultVOUtils.success(loginResponse);
}
/**
*
*
* @return
*/
@PostMapping(value = "/pda/login")
public BaseResponse pdaLogin(@RequestBody @Valid LoginRequest loginRequest,
BindingResult bindingResult,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
AuthAdmin authAdmin = authAdminService.findByUserName(loginRequest.getUsername());
if (authAdmin == null) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
12 months ago
if (PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(PasswordUtils.authAdminPwd(authAdmin.getPassWord()))
|| loginRequest.getPassword().equals(authAdmin.getPassWord())
|| (loginRequest.getPassword().equals(PasswordUtils.authAdminPwd(authAdmin.getPassWord())))
) {
} else {
if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(SecureUtil.sha256(authAdmin.getPassWord()))) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
}
if (authAdmin.getUserFlag() == 0) {
throw new JsonException(ResultEnum.DATA_NOT, "该用户已被禁用!");
}
SysPdaKeyEntity sysPdaKeyEntity = sysPdaKeyService.findDeviceByImei(loginRequest.getImei());
if (sysPdaKeyEntity == null) {
return ResultVOUtils.error(410, "该设备未注册");
} else if (sysPdaKeyEntity.getIsCheck() == 0) {
return ResultVOUtils.error(411, "该设备登记审核中,请等待,或联系管理员");
} else if (sysPdaKeyEntity.getIsCheck() == 2) {
return ResultVOUtils.error(412, "该设备被拒绝登录,请联系管理员!");
}
// 更新登录状态
AuthAdmin authAdminUp = new AuthAdmin();
authAdminUp.setId(authAdmin.getId());
authAdminUp.setLastLoginTime(new Date());
authAdminUp.setLastLoginIp(IpUtils.getIpAddr(request));
authAdminService.updateAuthAdmin(authAdminUp);
// 登录成功后获取权限,这里面会设置到缓存
// authLoginService.listRuleByAdminId(authAdmin.getId());
Map<String, Object> claims = new HashMap<>();
claims.put("admin_id", authAdmin.getId());
String token = JwtUtils.createToken(claims, 86400L); // 一天后过期
Map<String, Object> map = new HashMap<>();
map.put("id", authAdmin.getId());
map.put("token", token);
map.put("time", MsDateUtil.getDateTime());
LoginResponse loginResponse = new LoginResponse();
loginResponse.setId(authAdmin.getId() + "");
loginResponse.setUserName(authAdmin.getUserName());
loginResponse.setEmployeeName(authAdmin.getEmployeeName());
loginResponse.setToken(token);
loginResponse.setDept(authAdmin.getLocDeptCode());
loginResponse.setInvCode(authAdmin.getLocInvCode());
DeptEntity deptEntity = deptService.selectByCode(authAdmin.getLocDeptCode());
if (deptEntity != null) {
loginResponse.setDeptName(deptEntity.getName());
}
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(authAdmin.getLocInvCode());
if (invWarehouseEntity != null) {
loginResponse.setInvName(invWarehouseEntity.getName());
}
List<SysMenu> sysMenus = menuService.selectMenuList(authAdmin.getId());
// .stream().filter(item -> item.getMenuName().equals("单据管理")).findFirst().get().getChildren().
List<PdaMainItemEntity> menus = sysMenus.stream().filter(
item ->
item.getComponent() != null && (item.getComponent().equals("inout/IoCreateScanOrder")
|| item.getComponent().equals("inout/IoDealOrder")
|| item.getComponent().equals("inout/IoDealCheckOrder")
|| item.getComponent().equals("inout/IoCheckSuccessOrder")
|| item.getComponent().equals("inout/IoCheckAuditOrder")
)
).distinct().map(item ->
new PdaMainItemEntity(item.getMenuName(), item.getComponent())
).collect(Collectors.toList());
loginResponse.setMenus(menus);
logininforService.recordLogininfor(authAdmin.getEmployeeName(), Constant.LOGIN_SUCCESS, "登录成功!", request);
return ResultVOUtils.success(loginResponse);
}
3 years ago
/**
*
*
* @return
*/
@PostMapping(value = "/pc/login")
public BaseResponse pcLogin(@RequestBody @Valid PCLoginRequest loginRequest,
BindingResult bindingResult,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
AuthCheckEntity authCheckEntity = authCheckService.findByMachine(loginRequest.getMachineInfo());
if (authCheckEntity == null) {
authCheckEntity = new AuthCheckEntity();
authCheckEntity.setMachineInfo(loginRequest.getMachineInfo().trim());
authCheckEntity.setCreateDate(new Date());
authCheckService.insertDevices(authCheckEntity);
throw new JsonException(ResultEnum.DATA_NOT, "该软件未注册!请联系管理员");
} else {
if (authCheckEntity.getRegisterCode() == null) {
throw new JsonException(ResultEnum.DATA_NOT, "该软件未注册!请联系管理员");
} else {
try {
String data = RsaUtils.publicKeyDecrypt(authCheckEntity.getRegisterCode(), RsaUtils.publicKey);
if (!data.equals(authCheckEntity.getMachineInfo())) {
throw new JsonException(ResultEnum.DATA_NOT, "注册码不匹配,请联系管理员!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
AuthAdmin authAdmin = authAdminService.findByUserName(loginRequest.getUsername());
if (authAdmin == null) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(authAdmin.getPassWord())) {
throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误");
}
// 更新登录状态
AuthAdmin authAdminUp = new AuthAdmin();
authAdminUp.setId(authAdmin.getId());
authAdminUp.setLastLoginTime(new Date());
authAdminUp.setLastLoginIp(IpUtils.getIpAddr(request));
authAdminService.updateAuthAdmin(authAdminUp);
// 登录成功后获取权限,这里面会设置到缓存
// authLoginService.listRuleByAdminId(authAdmin.getId());
3 years ago
Map<String, Object> claims = new HashMap<>();
claims.put("admin_id", authAdmin.getId());
String token = JwtUtils.createToken(claims, 86400L); // 一天后过期
Map<String, Object> map = new HashMap<>();
map.put("id", authAdmin.getId());
map.put("token", token);
map.put("time", MsDateUtil.getDateTime());
3 years ago
return ResultVOUtils.success(map);
}
@Resource
DeptService deptService;
@Resource
InvWarehouseService invWarehouseService;
@AuthRuleAnnotation("")
@GetMapping("/admin/auth/login/getInv")
public BaseResponse getInv(HttpServletRequest request) {
String adminId = request.getHeader("ADMINID");
3 years ago
Long id = Long.valueOf(adminId);
AuthAdmin authAdmin = authAdminService.findById(id);
LoginUserInfoResponse loginUserInfoResponse = new LoginUserInfoResponse();
BeanUtils.copyProperties(authAdmin, loginUserInfoResponse);
DeptEntity deptEntity = deptService.selectByCode(authAdmin.getLocDeptCode());
if (deptEntity != null) {
loginUserInfoResponse.setLocDeptName(deptEntity.getName());
}
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(authAdmin.getLocInvCode());
if (invWarehouseEntity != null) {
loginUserInfoResponse.setLocInvName(invWarehouseEntity.getName());
}
3 years ago
return ResultVOUtils.success(loginUserInfoResponse);
}
@Resource
ISysRoleService sysRoleService;
@AuthRuleAnnotation("")
@GetMapping("/getInfo")
public BaseResponse getUserInfo(HttpServletRequest request) {
String adminId = request.getHeader("ADMINID");
3 years ago
Long id = Long.valueOf(adminId);
AuthAdmin authAdmin = authAdminService.findById(id);
LoginUserInfoResponse loginUserInfoResponse = new LoginUserInfoResponse();
BeanUtils.copyProperties(authAdmin, loginUserInfoResponse);
3 years ago
CompanyEntity companyEntity = companyService.findCompany();
loginUserInfoResponse.setCompanyName(companyEntity.getName());
loginUserInfoResponse.setLocDeptName(deptService.getInvName(loginUserInfoResponse.getLocDeptCode()));
loginUserInfoResponse.setLocInvName(invWarehouseService.getSubInvName(loginUserInfoResponse.getLocInvCode()));
3 years ago
// 角色集合
Set<String> roles = sysPermissionService.getRolePermission(authAdmin);
List<SysRole> sysRoles = sysRoleService.selectRolesByUserId(id);
authAdmin.setRoles(sysRoles);
// 权限集合
Set<String> permissions = sysPermissionService.getMenuPermission(authAdmin);
//工位集合
List<UserWorkResponse> workPlaces = basicCollectUserService.getUserWorkPlaceList(id);
3 years ago
loginUserInfoResponse.setRoles(roles);
loginUserInfoResponse.setPermissions(permissions);
loginUserInfoResponse.setWorkPlaces(workPlaces);
3 years ago
return ResultVOUtils.success(loginUserInfoResponse);
}
@Resource
ISysMenuService menuService;
@GetMapping("/spms/getRouters")
public BaseResponse getRouters() {
AuthAdmin authAdmin = getUser();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(authAdmin.getId());
return ResultVOUtils.success(menuService.buildMenus(menus));
}
/**
*
*
* @return
*/
@PostMapping("/admin/auth/login/out")
public BaseResponse out() {
return ResultVOUtils.success();
}
/**
*
*
* @return
*/
@AuthRuleAnnotation("") // 需要登录验证,但是不需要权限验证时,value 值填空字符串
@PostMapping("/admin/auth/login/password")
public BaseResponse password(@RequestBody @Valid UpdatePasswordRequest updatePasswordRequest,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL.getCode(),
bindingResult.getFieldError().getDefaultMessage());
}
AuthAdmin authAdmin = authAdminService.findById(updatePasswordRequest.getAdminId());
if (authAdmin == null) {
throw new JsonException(ResultEnum.DATA_NOT);
}
String oldPwd = PasswordUtils.authAdminPwd(updatePasswordRequest.getOldPassword());
// 旧密码不对
if (authAdmin.getPassWord() != null
&& !authAdmin.getPassWord().equals(oldPwd)) {
throw new JsonException(ResultEnum.DATA_NOT, "旧密码匹配失败");
}
AuthAdmin authAdminUp = new AuthAdmin();
authAdminUp.setId(authAdmin.getId());
authAdminUp.setLastUpdatePwdTime(new Date());
3 years ago
String newPwd = PasswordUtils.authAdminPwd(updatePasswordRequest.getNewPassword());
authAdminUp.setPassWord(newPwd);
authAdmin.setLastModifyTime(new Date());
boolean b = authAdminService.updateAuthAdmin(authAdminUp);
if (b) {
return ResultVOUtils.success();
}
return ResultVOUtils.error(ResultEnum.DATA_CHANGE);
}
@Value("${WEB_TITLE}")
private String WEB_TITLE;
@Value("${WEB_SUB_TITLE}")
private String WEB_SUB_TITLE;
5 months ago
@Value("${WEB_VERSION}")
private String WEB_VERSION;
@Value("${WEB_LOGO}")
private String WEB_LOGO;
@GetMapping("/spms/getTitleConfig")
public BaseResponse getTitleConfig() {
WebTitleResponse webTitleResponse = new WebTitleResponse();
webTitleResponse.setTitle(WEB_TITLE);
webTitleResponse.setSubTitle(WEB_SUB_TITLE);
5 months ago
webTitleResponse.setWebVersion(WEB_VERSION);
webTitleResponse.setWebLogo(WEB_LOGO);
return ResultVOUtils.success(webTitleResponse);
}
5 months ago
@Value("${file_path}")
private String filePath;
@GetMapping(value = "/udiwms/image/getImage")
public void getImage(HttpServletResponse response,
@RequestParam String type,
@RequestParam String name) throws IOException {
File file = new File(filePath + "/register/" + type + "/" + name);
// 检查文件是否存在
if (!file.exists()) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
OutputStream os = null;
try {
// 读取图片
BufferedImage image = ImageIO.read(new FileInputStream(file));
response.setContentType("image/png");
os = response.getOutputStream();
5 months ago
if (image != null) {
ImageIO.write(image, "png", os);
}
5 months ago
} catch (IOException e) {
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} finally {
if (os != null) {
try {
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3 years ago
}