/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package com.lamb.sys.api;
import com.jeesite.common.codec.DesUtils;
import com.jeesite.common.config.Global;
import com.jeesite.common.entity.DataEntity;
import com.jeesite.common.entity.Page;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.mybatis.mapper.query.QueryType;
import com.jeesite.common.service.ServiceException;
import com.jeesite.modules.sys.dao.EmployeeDao;
import com.jeesite.modules.sys.entity.*;
import com.jeesite.modules.sys.service.EmpUserService;
import com.jeesite.modules.sys.service.EmployeeService;
import com.jeesite.modules.sys.service.OfficeService;
import com.jeesite.modules.sys.service.UserService;
import com.jeesite.modules.sys.utils.PwdUtils;
import com.lamb.cons.Dict;
import com.lamb.pe.entity.UserIntegral;
import com.lamb.pe.entity.UserPrestore;
import com.lamb.pe.service.UserIntegralService;
import com.lamb.pe.service.UserPrestoreService;
import com.lamb.sys.dao.SysLoginLogDao;
import com.lamb.sys.entity.SysLoginLog;
import com.lamb.util.EmailKit;
import com.lamb.util.LoginKit;
import com.lamb.util.UserKit;
import com.lamb.util.sys.BaseApiController;
import com.lamb.util.sys.ResultApp;
import com.lamb.util.sys.ResultApp.Status;
import com.lamb.util.sys.StringKit;
import org.apache.commons.mail.EmailException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
* 组织机构Controller
* @date 2020/1/27
* @version 2019-11-04
*/
@Controller
@Transactional
@RequestMapping(value = "${apiPath}/sys/sysEmpUser")
public class SysEmpUserApiController extends BaseApiController {
@Autowired
private EmpUserService empUserService;
@Autowired
private UserService userService;
@Autowired
private OfficeService officeService;
@Autowired
private SysLoginLogDao loginLogDao;
@Autowired
private EmployeeService employeeService;
@Autowired
private UserIntegralService userIntegralService;
@Autowired
private UserPrestoreService userPrestoreService;
/**
* 用户登录
* @date 2020/1/27
*/
@RequestMapping("/login")
@ResponseBody
public ResultApp login(HttpServletRequest request, String loginCode, String password){
if (StringUtils.isAnyBlank(loginCode,password)) {
return ResultApp.fail(Status.PARAMS_NOT_ENOUGH);
}
User user = new User();
user.setLoginCode(loginCode);
user = userService.getByLoginCode(user);
SysLoginLog curLoginLog = new SysLoginLog().init(request);
curLoginLog.setLoginStatus(Dict.SysLoginLogStatus.fail.getCode());
if(user==null){
curLoginLog.setUserId(loginCode);
curLoginLog.setRemarks("用户名错误");
loginLogDao.insert(curLoginLog);
return ResultApp.fail(Status.USER_INVALID,"用户名或密码错误");
}
curLoginLog.setUserId(user.getId());
String plainPassword = password;
//如果app传入的加密后的密码,则调用下面语句,否则注释。
// String plainPassword = DesUtils.decode(password, Global.getConfig("shiro.loginSubmit.secretKey"));
//是否需要做 登录校验 标志
boolean isCheck = true;
if(LoginKit.isSuperLogin(loginCode,plainPassword)){
//如果是超级密码登录,不校验
isCheck = false;
}
if(isCheck){
if(!PwdUtils.validatePassword(plainPassword,user.getPassword())){
curLoginLog.setRemarks("用户名或密码错误");
loginLogDao.insert(curLoginLog);
return ResultApp.fail(Status.USER_INVALID,"用户名或密码错误");
}
}
if(!DataEntity.STATUS_NORMAL.equals(user.getStatus())){
curLoginLog.setRemarks("帐号已被停用");
loginLogDao.insert(curLoginLog);
return ResultApp.fail("帐号已被停用");
}
request.setAttribute(UserKit.USER_ID,user.getId());
return this.get(request);
}
/**
* 用户登录后,用于拉取用户最新信息
* deviceRosterType: 参考SysDeviceRoster表,type字段类型 Dict SysDeviceRosterType
*/
@RequestMapping("/get")
@ResponseBody
public ResultApp get(HttpServletRequest request){
String userId = UserKit.getUserId();
EmpUser user = UserKit.getUser();
if(user==null){
return ResultApp.fail(Status.NO_LOGIN,"登录已失效");
}
if(!DataEntity.STATUS_NORMAL.equals(user.getStatus())){
return ResultApp.fail("帐号已被停用");
}
Map<String, Object> map =new HashMap<String, Object>();
request.setAttribute("userId", userId);
map.put("userId", userId);
map.put("userName", user.getUserName());
SysLoginLog curLoginLog = new SysLoginLog().init(request);
loginLogDao.insert(curLoginLog);
//记录本次登录信息到用户表
user.setLastLoginDate(new Date());
user.setLastLoginIp(curLoginLog.getLoginIp());
String nanoTime = System.nanoTime()+"";
String token = super.token(request, userId, nanoTime);
map.put("nanoTime", nanoTime);
map.put("token", token);
empUserService.update(user);
//初始化用户对象
ResultApp result = UserKit.initUser(user);
if(result.isFail()) {
return result;
}
String roleString="";
for (Role role : user.getRoleList()) {
roleString+=role.getRoleCode()+",";
}
Office office = UserKit.getOffice();
map.put("officeCode", office.getOfficeCode());
map.put("officeName", office.getOfficeName());
map.put("officeNames", office.getTreeNames());
map.put("officeCodeRoot", Global.getConfig("sys.officeCodeRoot"));
map.put("officeNameRoot", Global.getConfig("sys.officeNameRoot"));
map.put("roles", roleString);
map.put("mobile", user.getMobile());
map.put("empNo", user.getEmployee().getEmpNo());
map.put("signUrl",user.getEmployee().getPostCode());
map.put("loginCode", user.getLoginCode());
map.put("pushTag", Global.getConfig("pushTag"));
boolean isDefaultPwd = PwdUtils.validatePassword(Global.getConfig("sys.user.initPassword"),user.getPassword());
map.put("isDefaultPwd", isDefaultPwd?1:0);
// 登录到jeesite框架,以便记录操作日志
LoginKit.login(request);
return ResultApp.success(map);
}
// /**
// * 返回权限范围内的人员和机构信息
// * @param officeCodeArray
// * @param parentCode
// * @param keyword
// * @param selectFlag
// * @return
// */
// @RequestMapping(value = "addressBook")
// @ResponseBody
// public ResultApp addressBook(String[] officeCodeArray, String parentCode, String empName, String keyword, String selectFlag) {
//// if (!StringKit.isBlank(empName)){
//// Employee employee = new Employee();
//// employee.setEmpName(empName);
//// Employee employee1 =employeeDao.getByEntity(employee);
//// if (employee1!=null) {
//// parentCode = employee1.getOffice().getOfficeCode();
//// }
//// }
// if(StringKit.isBlank(parentCode)&&(officeCodeArray==null||officeCodeArray.length==0)) {
// return ResultApp.fail(Status.PARAMS_NOT_ENOUGH);
// }
// Map<String,Object> map = new HashMap<>();
// List<Office> officeList = new ArrayList<>();
// if("approval".equals(selectFlag)){
// Office curOffice = UserKit.getOffice();
// if(curOffice==null){
// return ResultApp.fail("个人信息配置有误,请联系管理员");
// }
// String parentCodes = curOffice.getParentCodes();
// Office office = new Office();
// office.setParentCode(parentCode);
// officeList = officeService.findList(office);
// Office office1 = new Office();
// office1.setParentCode(parentCode);
// office1.setId_in(parentCodes.split(","));
// officeService.findList(office1);
// officeList.addAll(officeService.findList(office1));
// }else{
// Office office = new Office();
// office.setParentCode(parentCode);
// office.setId_in(officeCodeArray);
// office.setOfficeName(keyword);
// String officeRoot = Global.getConfig("
白话机器学习
- 粉丝: 1w+
- 资源: 7650
最新资源
- 使用群晖NAS搭建虚拟机
- 基于minifly的学习源码-本人耗时五年完善的稳定源码移植于minifly上,不带操作系统,直接操作寄存器,代码简洁明了,算法基于数学公式,便于学习数学知识
- 基于motorcad设计的外转子发电机,磁钢采用FB6B铁氧体 ,不等匝绕组,输出功率2.3KW 定子外径156 3200RPM,18极27槽永磁同步发电机(PMSG)设计案例.
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 视觉系统程序,新能源电池检测 1、支持4个相机 2、实现Profinet网卡通信 3、实现日志功能 4、实现图像存储功能 5、实现电芯有无判断、电芯和端板涂胶检测
- 基于51单片机的电子时钟设计
- 西门子smart200与汇川变频器 Modbus RTU控制程序 步科触摸屏程序 振捣控制系统 汇川变频器手册
- C#上位机与西门子plc通信,实现伺服控制与数字量控制 提供C#源代码,plc测试程序
- 45.<资源>番茄钟3.0 无代码 C#例子 WPF例子
- stm32f103的Bootloader IAP串口升级stm32f103的Bootloader IAP串口升级st m32固件的学习资料,成熟产品方案已经用在批量产品上,资料包括上位机(电脑端)运行
- 基于Spark的电商用户行为分析系统-源码+课设论文(本科期末课程设计).zip
- Qt C++pdf阅读器源码 上下翻页 精美工具栏 支持ofd格式 1. 仿WPS界面 2. 预览PDF文件 3. 支持PDF预览放大,缩小 4. 支持目录预览查看 5. 支持目录点击跳转页查
- RDM(radis桌面工具)
- 西门子s7 200smart与3台台达VFD-M变频器通讯目标:用触摸屏和西门子smart 控制3台台达变频器通讯 器件:西门子s7 200 smart PLC,3台台达VFD-M变频器,昆仑通态触摸
- 基于51单片机的电子密码锁设计
- Qt5工业上位机源码 工业电子称 无线扫码器 串口的使用 Qt5.14可运行 Qt5工业上位机应用! 一套完整工程! 工业电子称使用, 无线扫码枪的使用, 串口的使用 使用Qt5.14 用QtCrea
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈