UserServiceImpl.java 12 KB
Newer Older
manxiaoqiang committed
1 2
package common.service.impl;

manxiaoqiang committed
3 4
import common.model.Auth;
import common.model.Code;
manxiaoqiang committed
5
import common.model.User;
manxiaoqiang committed
6 7 8
import common.repository.AuthRepository;
import common.repository.CodeRepository;
import common.repository.UserRepository;
manxiaoqiang committed
9
import common.service.UserService;
manxiaoqiang committed
10 11
import dic.RoleEnum;
import dic.RoleTypeEnum;
manxiaoqiang committed
12 13
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
manxiaoqiang committed
14
import office.service.BussinussManService;
manxiaoqiang committed
15 16
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
manxiaoqiang committed
17
import tkio.service.SalesManService;
manxiaoqiang committed
18 19 20
import util.CharacterUtils;
import util.CipherUtil;
import util.MailUtils;
manxiaoqiang committed
21
import util.ValidateUtil;
manxiaoqiang committed
22

manxiaoqiang committed
23
import java.util.*;
manxiaoqiang committed
24 25 26 27 28 29 30 31

/**
 * Created by mxq on 2017/12/21.
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
manxiaoqiang committed
32
    private UserRepository userRepository;
manxiaoqiang committed
33

manxiaoqiang committed
34 35 36 37
    @Autowired
    private AuthRepository authRepository;
    @Autowired
    private CodeRepository codeRepository;
manxiaoqiang committed
38 39
    @Autowired
    BussinussManService bussinussManService;
manxiaoqiang committed
40 41
    @Autowired
    private SalesManService salesManService;
manxiaoqiang committed
42

manxiaoqiang committed
43 44 45 46 47 48 49 50 51
    @Override
    public Boolean validEmail(String email) {
        User user = userRepository.login(email);
        if(null == user){
            return true;
        }
        return false;
    }

manxiaoqiang committed
52 53 54
    @Override
    public User create(User login, User resource) {

manxiaoqiang committed
55 56 57 58
        if(!login.getRole().equals(RoleEnum.MANAGER.getKey())){//非管理员只能创建本部门普通账户
            resource.setRole(login.getRole());
            resource.setRoleType(RoleTypeEnum.COMMON.getKey());
        }
manxiaoqiang committed
59
        resource.setPassword(CipherUtil.generatePassword(resource.getPassword()));
manxiaoqiang committed
60 61
        resource.setCreateTime(new Date());
        resource.setCreateAccount(login.getId());
manxiaoqiang committed
62
        resource.setStatus(true);
manxiaoqiang committed
63 64
        User save = userRepository.save(resource);

manxiaoqiang committed
65
        if(resource.getRole().equals(RoleEnum.SOUTH_BUSSINUSS.getKey())){
manxiaoqiang committed
66
            bussinussManService.create(login.getEmail(), save.getEmail(), save.getName(),"华北");
manxiaoqiang committed
67 68
            salesManService.create(login.getEmail(), save.getEmail(), save.getName());
        } else if(resource.getRole().equals(RoleEnum.NORTH_BUSSINUSS.getKey())){
manxiaoqiang committed
69
            bussinussManService.create(login.getEmail(), save.getEmail(), save.getName(),"华南");
manxiaoqiang committed
70
            salesManService.create(login.getEmail(), save.getEmail(), save.getName());
manxiaoqiang committed
71 72 73
        }


manxiaoqiang committed
74 75 76 77 78 79 80 81 82 83 84 85
        //auth
        Auth auth = new Auth();
        auth.setCreateTime(new Date());
        auth.setCreateAccount(login.getId());
        auth.setAuth(resource.getAuth());
        auth.setUser(save.getId());
        authRepository.save(auth);
        return save;
    }

    @Override
    public User update(User login, User resource) {
manxiaoqiang committed
86
        User one = userRepository.findOne(resource.getId());
manxiaoqiang committed
87 88 89 90
        if(!login.getRole().equals(RoleEnum.MANAGER.getKey())){//非管理员只能创建本部门普通账户
            resource.setRole(login.getRole());
            resource.setRoleType(RoleTypeEnum.COMMON.getKey());
        }
manxiaoqiang committed
91 92 93 94 95
        resource.setCreateTime(one.getCreateTime());
        resource.setStatus(one.getStatus());
        resource.setDelFlag(one.getDelFlag());
        resource.setCreateAccount(one.getCreateAccount());
        resource.setPassword(one.getPassword());
manxiaoqiang committed
96 97 98 99 100
        resource.setModifyTime(new Date());
        resource.setModifyAccount(login.getId());
        User save = userRepository.save(resource);

        //auth
manxiaoqiang committed
101 102 103
        Auth auth = authRepository.findByUser(one.getId());
        auth.setModifyTime(new Date());
        auth.setModifyAccount(login.getId());
manxiaoqiang committed
104 105
        auth.setAuth(resource.getAuth());
        auth.setUser(save.getId());
manxiaoqiang committed
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
        Auth authSave = authRepository.save(auth);

        if(save.getRoleType().equals(RoleTypeEnum.COMMON.getKey())){
            JSONArray rootArr = JSONArray.fromObject(authSave.getAuth());
            List<String> authList = new ArrayList<>();
            if(ValidateUtil.isValid(rootArr)){
                for (int i = 0; i < rootArr.size(); i++) {
                    JSONObject obj = rootArr.getJSONObject(i);
                    authList.add(obj.getString("id"));
                }
            }
            List<User> userList = findSonsAlive(save.getId());
            if(ValidateUtil.isValid(userList)){
                List<Long> ids = new ArrayList<>();
                for(User u : userList){
                    ids.add(u.getId());
                }
                List<Auth> list = authRepository.findAllByUsers(ids);
                if(ValidateUtil.isValid(list)){
                    List<Auth> authListSave = new ArrayList<>();
                    for(Auth a : list){
                        String authStr = a.getAuth();
                        JSONArray arrSave = new JSONArray();
                        JSONArray arr = JSONArray.fromObject(authStr);
                        if(ValidateUtil.isValid(arr)){
                            for (int i = 0; i < arr.size(); i++) {
                                JSONObject obj = arr.getJSONObject(i);
                                if(authList.contains(obj.getString("id"))){
                                    arrSave.add(obj);
                                }
                            }
                        }
                       a.setAuth(arrSave.toString());
                        authListSave.add(a);
                    }
                    authRepository.save(authSave);
                }
            }
        }
manxiaoqiang committed
145 146 147 148 149
        return save;
    }

    @Override
    public List<User> find(User login) {
manxiaoqiang committed
150 151 152 153 154 155 156 157 158 159 160
        List<Auth> authList = authRepository.findAll();
        Map<Long, String> map = new HashMap<>();
        if(ValidateUtil.isValid(authList)){
            for(Auth a : authList){
                map.put(a.getUser(), a.getAuth());
            }
        }
        List<User> userList = new ArrayList<>();
        List<User> result = new ArrayList<>();
        if(login.getRole().equals(RoleEnum.MANAGER.getKey())) {
            userList = userRepository.findList();
manxiaoqiang committed
161
        } else if(RoleTypeEnum.MANAGER.getKey().equals(login.getRoleType())){
manxiaoqiang committed
162
            userList = userRepository.findOneDepartment(login.getRole());
manxiaoqiang committed
163 164
        }else{
            userList = findSonsAlive(login.getId());
manxiaoqiang committed
165
        }
manxiaoqiang committed
166 167 168 169 170 171 172 173 174
        if(ValidateUtil.isValid(userList)){
            for(User u : userList){
                if(map.containsKey(u.getId())){
                    u.setAuth(map.get(u.getId()));
                }
                result.add(u);
            }
        }
        return result;
manxiaoqiang committed
175
    }
manxiaoqiang committed
176

manxiaoqiang committed
177 178 179 180 181 182 183 184 185
    @Override
    public User delete(User login, Long id) {
        User one = userRepository.findOne(id);
        one.setModifyTime(new Date());
        one.setModifyAccount(login.getId());
        one.setDelFlag(true);
        return userRepository.save(one);
    }

manxiaoqiang committed
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
    @Override
    public User enable(User login, Long id) {
        User one = userRepository.findOne(id);
        one.setModifyTime(new Date());
        one.setModifyAccount(login.getId());
        one.setStatus(true);
        return userRepository.save(one);
    }

    @Override
    public User forbiden(User login, Long id) {
        User one = userRepository.findOne(id);
        one.setModifyTime(new Date());
        one.setModifyAccount(login.getId());
        one.setStatus(false);
        return userRepository.save(one);
    }

manxiaoqiang committed
204
    @Override
manxiaoqiang committed
205 206
    public User updateName(User login, String name) {
        User one = userRepository.findOne(login.getId());
manxiaoqiang committed
207 208 209 210 211 212 213
        one.setName(name);
        one.setModifyTime(new Date());
        one.setModifyAccount(login.getId());
        return userRepository.save(one);
    }

    @Override
manxiaoqiang committed
214 215
    public User updatePwd(User login, String pwd) {
        User one = userRepository.findOne(login.getId());
manxiaoqiang committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
        one.setPassword(CipherUtil.generatePassword(pwd));
        one.setModifyTime(new Date());
        one.setModifyAccount(login.getId());
        return userRepository.save(one);
    }

    @Override
    public User updatePwd(String email, String pwd) {
        User user = userRepository.login(email);
        user.setPassword(CipherUtil.generatePassword(pwd));
        user.setModifyTime(new Date());
        user.setModifyAccount(user.getId());
        return userRepository.save(user);
    }

    @Override
    public Boolean sendCode(String email) {
manxiaoqiang committed
233 234 235 236
        User user = userRepository.login(email);
        if(null == user){
            return false;
        }
manxiaoqiang committed
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
        String code = CharacterUtils.getRandomString(4);
        List<String> list = new ArrayList<>();
        list.add(email);
        try {
            MailUtils.sendSimpleEmail("验证码", code,list);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        Code c = new Code();
        c.setCreateTime(new Date());
        c.setCode(code);
        c.setEmail(email);
        codeRepository.save(c);
        return true;
    }

    @Override
manxiaoqiang committed
255
    public Boolean validCode(String email, String code, String pwd) {
manxiaoqiang committed
256 257 258 259 260
        Calendar beforeTime = Calendar.getInstance();
        beforeTime.add(Calendar.MINUTE, -5);// 5分钟之前的时间
        Date beforeD = beforeTime.getTime();

        Code valid = codeRepository.findValid(email, beforeD);
manxiaoqiang committed
261 262 263
        if(null != valid){
            boolean b = valid.getCode().equals(code);
            if(b){
manxiaoqiang committed
264
                updatePwd(email, pwd);
manxiaoqiang committed
265
                return true;
manxiaoqiang committed
266
            }
manxiaoqiang committed
267
            return false;
manxiaoqiang committed
268
        }
manxiaoqiang committed
269
        return false;
manxiaoqiang committed
270
    }
manxiaoqiang committed
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351

    @Override
    public List<User> findbyRole(Long role) {
        List<Auth> authList = authRepository.findAll();
        Map<Long, String> map = new HashMap<>();
        if(ValidateUtil.isValid(authList)){
            for(Auth a : authList){
                map.put(a.getUser(), a.getAuth());
            }
        }

        List<User> result = new ArrayList<>();
        List<User> userList = userRepository.findAllByRole(role);
        if(ValidateUtil.isValid(userList)){
            for(User u : userList){
                if(map.containsKey(u.getId())){
                    u.setAuth(map.get(u.getId()));
                }
                result.add(u);
            }
        }
        return result;
    }

    @Override
    public List<User> findSonsAlive(Long user) {
        List<User> result = new ArrayList<>();
        User one = userRepository.findOne(user);
        if(one.getRole().equals(RoleEnum.MANAGER.getKey())){
            List<User> list = userRepository.findList();
            if(ValidateUtil.isValid(list)){
                result.addAll(list);
            }
        } else if(one.getRoleType().equals(RoleTypeEnum.MANAGER.getKey())){
            List<User> list = userRepository.findAllByRole(one.getRole());
            if(ValidateUtil.isValid(list)){
                result.addAll(list);
            }
        } else{
            List<User> list = userRepository.findAllByParent(user);
            while(ValidateUtil.isValid(list)){
                result.addAll(list);
                List<Long> ids = new ArrayList<>();
                for(User u : list){
                    ids.add(u.getId());
                }
                list = userRepository.findAllByParents(ids);
            }
        }
        return result;
    }

    @Override
    public List<User> findAllSons(Long user) {
        List<User> result = new ArrayList<>();
        User one = userRepository.findOne(user);
        if(one.getRole().equals(RoleEnum.MANAGER.getKey())){
            List<User> list = userRepository.findAll();
            if(ValidateUtil.isValid(list)){
                result.addAll(list);
            }
        } else if(one.getRoleType().equals(RoleTypeEnum.MANAGER.getKey())){
            List<User> list = userRepository.findAllUserByRole(one.getRole());
            if(ValidateUtil.isValid(list)){
                result.addAll(list);
            }
        } else{
            List<User> list = userRepository.findByParent(user);
            while(ValidateUtil.isValid(list)){
                result.addAll(list);
                List<Long> ids = new ArrayList<>();
                for(User u : list){
                    ids.add(u.getId());
                }
                list = userRepository.findByParents(ids);
            }
        }
        return result;
    }


manxiaoqiang committed
352
}