jiazx0107@163.com
2023-06-08 08cea428e888b6fdd2a3c3783e87e4f828385783
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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;
    }
}