package com.ld.igds.phone35.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.bstek.bdf2.core.model.DefaultDept;
|
import com.bstek.bdf2.core.model.DefaultUser;
|
import com.ld.igds.constant.RespCodeEnum;
|
import com.ld.igds.phone35.constant.Phone35Constant;
|
import com.ld.igds.phone35.dto.Phone35AuthUser;
|
import com.ld.igds.phone35.dto.Phone35UserDto;
|
import com.ld.igds.phone35.dto.PhoneResponse;
|
import com.ld.igds.phone35.param.Phone35UserParam;
|
import com.ld.igds.phone35.param.Phone35Request;
|
import com.ld.igds.phone35.service.Phone35Service;
|
import com.ld.igds.phone35.util.PhoneRespUtil;
|
import com.ld.igds.phone35.util.Phone35Util;
|
import com.ld.igds.sys.service.SysDeptService;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.util.RedisUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.authentication.encoding.PasswordEncoder;
|
import org.springframework.stereotype.Service;
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
/**
|
* 登录接口实现
|
*
|
* @author chen
|
*/
|
@Service
|
public class Phone35ServiceImpl5001 implements Phone35Service {
|
@Autowired
|
private HPhoneServiceImpl hPhoneService;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@SuppressWarnings("deprecation")
|
@Resource(name = "bdf2.passwordEncoder")
|
private PasswordEncoder passwordEncoder;
|
|
@Autowired
|
private SysDeptService deptService;
|
|
@Override
|
public String getInterfaceId() {
|
return Phone35Constant.API_PHONE_5001;
|
}
|
|
@SuppressWarnings("unchecked")
|
@Override
|
public PhoneResponse<Object> execute(Phone35Request<JSONObject> req, Phone35AuthUser auth)
|
throws Exception {
|
Phone35UserParam param = JSONObject.parseObject(req.getData().toString(), Phone35UserParam.class);
|
|
//验证参数
|
if (null == param) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1007, "登录名和密码为空,请核查!");
|
}
|
if (StringUtils.isEmpty(param.getUsername())) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1007, "用户名不能为空,请输入后重新登陆!");
|
}
|
if (StringUtils.isEmpty(param.getPassword())) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1007, "密码不能为空,请输入后重新登陆!");
|
}
|
|
//查询用户并验证
|
DefaultUser user = hPhoneService.getUserByUsername(param.getUsername());
|
if (null == user) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "系统无当前用户,请核查后重新登录!");
|
}
|
//判断用户是否离职
|
if (!user.isEnabled()) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "当前账号已离职,无法登陆!");
|
}
|
|
boolean flag = this.check(param, user);
|
if (!flag) {
|
return PhoneRespUtil.error(RespCodeEnum.CODE_1111, "用户名和密码错误,请重新登录!");
|
}
|
|
Phone35UserDto phone35UserDto = new Phone35UserDto();
|
//设置用户信息
|
phone35UserDto.setCname(user.getCname());
|
phone35UserDto.setMobile(user.getMobile());
|
phone35UserDto.setUsername(user.getUsername());
|
phone35UserDto.setTokenAuth(ContextUtil.getUUID());
|
|
//设置AuthUser信息到缓存
|
Phone35AuthUser phone35AuthUser = new Phone35AuthUser();
|
phone35AuthUser.setCompanyId(user.getCompanyId());
|
phone35AuthUser.setUsername(user.getUsername());
|
phone35AuthUser.setCname(user.getCname());
|
phone35AuthUser.setEmail(user.getEmail());
|
phone35AuthUser.setMobile(user.getMobile());
|
|
//设置登录用户所属分库信息
|
List<DefaultDept> depts = deptService.loadUserDepts(user.getUsername());
|
if (null != depts && depts.size() > 0) {
|
phone35AuthUser.setDeptId(depts.get(0).getId());
|
phone35AuthUser.setDeptName(depts.get(0).getName());
|
}
|
|
phone35UserDto.setCompanyId(phone35AuthUser.getCompanyId());
|
phone35UserDto.setDeptId(phone35AuthUser.getDeptId());
|
phone35UserDto.setDeptName(phone35AuthUser.getDeptName());
|
|
redisUtil.set(Phone35Util.createKey(phone35UserDto.getTokenAuth()),
|
phone35AuthUser, 60 * 60 * 24);
|
|
return PhoneRespUtil.success(phone35UserDto, req);
|
}
|
|
/**
|
* 验证用户名和密码
|
*
|
* @param param
|
* @param user
|
* @return
|
*/
|
private boolean check(Phone35UserParam param, DefaultUser user) {
|
boolean flag = passwordEncoder.isPasswordValid(user.getPassword(), param.getPassword(), user.getSalt());
|
if (param.getUsername().equals(user.getUsername()) && flag) {
|
return true;
|
}
|
return false;
|
}
|
}
|