package com.ld.igds.phone.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.bstek.bdf2.core.model.DefaultDept;
|
import com.bstek.bdf2.core.model.DefaultUser;
|
import com.bstek.dorado.core.Configure;
|
import com.ld.igds.common.CoreCommonService;
|
import com.ld.igds.constant.RespCodeEnum;
|
import com.ld.igds.models.DicSysConf;
|
import com.ld.igds.phone.constant.PhoneConstant;
|
import com.ld.igds.phone.dto.AuthUser;
|
import com.ld.igds.phone.dto.DtoUser;
|
import com.ld.igds.phone.dto.PhoneResponse;
|
import com.ld.igds.phone.mapper.PhoneCommonMapper;
|
import com.ld.igds.phone.param.ParamUser;
|
import com.ld.igds.phone.param.PhoneRequest;
|
import com.ld.igds.phone.service.PhoneService;
|
import com.ld.igds.phone.util.PhoneRespUtil;
|
import com.ld.igds.phone.util.PhoneUtil;
|
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.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 登录接口实现
|
*
|
* @author chen
|
*/
|
@Service
|
public class ServiceImpl5001 implements PhoneService {
|
@Autowired
|
private PhoneCommonMapper phoneCommonMapper;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@SuppressWarnings("deprecation")
|
@Resource(name = "bdf2.passwordEncoder")
|
private PasswordEncoder passwordEncoder;
|
|
@Autowired
|
private SysDeptService deptService;
|
|
@Autowired
|
private CoreCommonService coreCommonService;
|
|
@Override
|
public String getInterfaceId() {
|
return PhoneConstant.API_PHONE_5001;
|
}
|
|
@SuppressWarnings("unchecked")
|
@Override
|
public PhoneResponse<Object> execute(PhoneRequest<JSONObject> req, AuthUser auth)
|
throws Exception {
|
ParamUser param = JSONObject.parseObject(req.getData().toString(), ParamUser.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 = phoneCommonMapper.phoneGetUser(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, "用户名和密码错误,请重新登录!");
|
}
|
|
DicSysConf sysConf = coreCommonService.getCacheSysConf(user.getCompanyId());
|
|
DtoUser dtoUser = new DtoUser();
|
//设置用户信息
|
dtoUser.setCname(user.getCname());
|
dtoUser.setMobile(user.getMobile());
|
dtoUser.setUsername(user.getUsername());
|
dtoUser.setTokenAuth(ContextUtil.getUUID());
|
//设置售后信息
|
dtoUser.setSupport(sysConf.getSupport());
|
dtoUser.setEmail(sysConf.getEmail());
|
dtoUser.setPhone(sysConf.getPhone());
|
dtoUser.setWebsite(sysConf.getWebsite());
|
dtoUser.setAddress(sysConf.getAddress());
|
//设置版本信息
|
dtoUser.setVersions("V3.0");
|
Map<String, String> metaData = new HashMap<>();
|
String threeUrl = Configure.getString("default.threeUrl");
|
threeUrl = StringUtils.isEmpty(threeUrl) ? "" : "igds/" + threeUrl;
|
metaData.put("threeUrl", threeUrl);
|
dtoUser.setMetaData(metaData);
|
|
//设置AuthUser信息到缓存
|
AuthUser authUser = new AuthUser();
|
authUser.setCompanyId(user.getCompanyId());
|
authUser.setUsername(user.getUsername());
|
authUser.setCname(user.getCname());
|
// authUser.setAddress(user.getAddress());
|
authUser.setEmail(user.getEmail());
|
authUser.setMobile(user.getMobile());
|
//设置登录用户所属分库信息
|
List<DefaultDept> depts = deptService.loadUserDepts(user.getUsername());
|
if (null != depts && depts.size() > 0) {
|
authUser.setDeptId(depts.get(0).getId());
|
authUser.setDeptName(depts.get(0).getName());
|
}
|
|
redisUtil.set(PhoneUtil.createKey(dtoUser.getTokenAuth()),
|
authUser, 60 * 60 * 24);
|
|
return PhoneRespUtil.success(dtoUser, req);
|
|
}
|
|
/**
|
* 验证用户名和密码
|
*
|
* @param param
|
* @param user
|
* @return
|
*/
|
private boolean check(ParamUser param, DefaultUser user) {
|
boolean flag = passwordEncoder.isPasswordValid(user.getPassword(), param.getPassword(), user.getSalt());
|
if (param.getUsername().equals(user.getUsername()) && flag) {
|
return true;
|
}
|
return false;
|
}
|
}
|