jiazx0107@163.com
2023-05-26 6f4a366cad9109ddc338fd13c9d43ca2ce516f6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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;
    }
}