package common.service.impl; import common.model.Auth; import common.model.Code; import common.model.User; import common.repository.AuthRepository; import common.repository.CodeRepository; import common.repository.UserRepository; import common.service.UserService; import dic.RoleEnum; import dic.RoleTypeEnum; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import office.service.BussinussManService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import tkio.service.SalesManService; import userio.service.IOSalesManService; import util.CharacterUtils; import util.CipherUtil; import util.MailUtils; import util.ValidateUtil; import java.util.*; import java.util.stream.Collectors; /** * Created by mxq on 2017/12/21. */ @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Autowired private AuthRepository authRepository; @Autowired private CodeRepository codeRepository; @Autowired BussinussManService bussinussManService; @Autowired private SalesManService salesManService; @Autowired private IOSalesManService ioSalesManService; @Override public Boolean validEmail(String email) { User user = userRepository.login(email); if(null == user){ return true; } return false; } @Override public User create(User login, User resource) { if(!login.getRole().equals(RoleEnum.MANAGER.getKey())){//非管理员只能创建本部门普通账户 resource.setRole(login.getRole()); resource.setRoleType(RoleTypeEnum.COMMON.getKey()); } resource.setPassword(CipherUtil.generatePassword(resource.getPassword())); resource.setCreateTime(new Date()); resource.setCreateAccount(login.getId()); resource.setStatus(true); User save = userRepository.save(resource); // if(resource.getRole().equals(RoleEnum.SOUTH_BUSSINUSS.getKey())){ // bussinussManService.create(login.getEmail(), save.getEmail(), save.getName(),"华北"); // salesManService.create(login.getEmail(), save.getEmail(), save.getName()); // ioSalesManService.create(login.getEmail(), save.getEmail(), save.getName()); // } else if(resource.getRole().equals(RoleEnum.NORTH_BUSSINUSS.getKey())){ // bussinussManService.create(login.getEmail(), save.getEmail(), save.getName(),"华南"); // salesManService.create(login.getEmail(), save.getEmail(), save.getName()); // ioSalesManService.create(login.getEmail(), save.getEmail(), save.getName()); // } //auth Auth auth = new Auth(); auth.setCreateTime(new Date()); auth.setCreateAccount(login.getId()); auth.setAuth(resource.getAuth()); auth.setAuthExtend(resource.getAuthExtend()); auth.setUser(save.getId()); authRepository.save(auth); return save; } @Override public User update(User login, User resource) { User one = userRepository.findOne(resource.getId()); if(!login.getRole().equals(RoleEnum.MANAGER.getKey())){//非管理员只能创建本部门普通账户 resource.setRole(login.getRole()); resource.setRoleType(RoleTypeEnum.COMMON.getKey()); } resource.setCreateTime(one.getCreateTime()); resource.setStatus(one.getStatus()); resource.setDelFlag(one.getDelFlag()); resource.setCreateAccount(one.getCreateAccount()); resource.setPassword(one.getPassword()); resource.setModifyTime(new Date()); resource.setModifyAccount(login.getId()); User save = userRepository.save(resource); //auth Auth auth = authRepository.findByUser(one.getId()); auth.setModifyTime(new Date()); auth.setModifyAccount(login.getId()); auth.setAuth(resource.getAuth()); auth.setAuthExtend(resource.getAuthExtend()); auth.setUser(save.getId()); Auth authSave = authRepository.save(auth); // if(null != save.getRoleType() && 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); // } // } // } return save; } @Override public List<User> find(User login) { List<Auth> authList = authRepository.findAll(); Map<Long, Auth> userIdauthMap = authList.stream().collect(Collectors.toMap(Auth::getUser, p -> p)); List<User> userList = new ArrayList<>(); if (login.getRole().equals(RoleEnum.MANAGER.getKey())) { userList = userRepository.findList(); } else if (login.getRole().equals(RoleEnum.FINANCE.getKey())) { Auth auth = authRepository.findByUser(login.getId()); Map data = (Map) JSONArray.fromObject(auth.getAuth()).stream().collect(Collectors.toMap(p -> ((Map) p).get("id"), p -> p)); if (data.get(new Integer(31)) != null) { userList = userRepository.findListByRole(RoleEnum.FINANCE.getKey()); } } if(userIdauthMap!=null){ userList.forEach(v -> { Auth auth = userIdauthMap.get(v.getId()); if(auth!=null){ v.setAuthExtend(auth.getAuthExtend()); v.setAuth(auth.getAuth()); } }); } return userList; // 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(); // } else if(RoleTypeEnum.MANAGER.getKey().equals(login.getRoleType())){ // userList = userRepository.findOneDepartment(login.getRole()); // }else{ // userList = findSonsAlive(login.getId()); // } // 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 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); } @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); } @Override public User updateName(User login, String name) { User one = userRepository.findOne(login.getId()); one.setName(name); one.setModifyTime(new Date()); one.setModifyAccount(login.getId()); return userRepository.save(one); } @Override public User updatePwd(User login, String pwd) { User one = userRepository.findOne(login.getId()); 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) { User user = userRepository.login(email); if(null == user){ return false; } 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 public Boolean validCode(String email, String code, String pwd) { Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.MINUTE, -5);// 5分钟之前的时间 Date beforeD = beforeTime.getTime(); Code valid = codeRepository.findValid(email, beforeD); if(null != valid){ boolean b = valid.getCode().equals(code); if(b){ updatePwd(email, pwd); return true; } return false; } return false; } @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; } public static void main(String[] args) { System.out.println(CipherUtil.generatePassword("111111")); } }