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