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 execute(Phone35Request 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 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; } }