package com.huaheng.pc.system.user.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.company.domain.Company; import com.huaheng.pc.config.company.mapper.CompanyMapper; import com.huaheng.pc.config.company.service.CompanyService; import com.huaheng.pc.config.warehouse.domain.Warehouse; import com.huaheng.pc.config.warehouse.service.WarehouseService; import com.huaheng.pc.system.user.domain.*; import com.huaheng.pc.system.user.mapper.SysUserWarehouseMapper; import com.huaheng.pc.system.user.mapper.UserCompanyMapper; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.huaheng.common.constant.UserConstants; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.shiro.service.PasswordService; import com.huaheng.pc.system.role.domain.Role; import com.huaheng.pc.system.role.mapper.RoleMapper; import com.huaheng.pc.system.user.mapper.UserMapper; import com.huaheng.pc.system.user.mapper.UserRoleMapper; import javax.annotation.Resource; /** * 用户 业务层处理 * * @author huaheng */ @Service("UserServiceImpl") public class UserServiceImpl implements IUserService { @Resource private UserMapper userMapper; @Resource private RoleMapper roleMapper; @Resource private CompanyMapper companyMapper; @Resource private UserCompanyMapper userCompanyMapper; @Resource private UserRoleMapper userRoleMapper; @Autowired private PasswordService passwordService; @Autowired private CompanyService companyService; @Resource private WarehouseService warehouseService; @Resource private SysUserWarehouseMapper sysUserWarehouseMapper; /** * 登陆验证 * @param username 用户名 * @param password 密 码 // * @param warehouseId 仓库id * @param warehouseCode 仓库编码 * @return */ @Override public AjaxResult login(String username, String password, String warehouseCode, Boolean rememberMe) { if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { return AjaxResult.error("用户名和密码不能为空"); } if (StringUtils.isEmpty(warehouseCode)) { return AjaxResult.error("请选择仓库"); } UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); } catch (AuthenticationException e) { String msg = "用户或密码错误"; if (StringUtils.isNotEmpty(e.getMessage())) { msg = e.getMessage(); } return AjaxResult.error(msg); } User user = ShiroUtils.getUser(); user.setWarehouseCode(warehouseCode); ShiroUtils.setUser(user); List<Company> Companys = companyService.selectCompanyByCurrentUserId(); user.setCompanyIdList(Companys.stream().map(X -> X.getId()).collect(Collectors.toList())); user.setCompanyCodeList(Companys.stream().map(X -> X.getCode()).collect(Collectors.toList())); user.getCompanyCodeList().add(""); ShiroUtils.setUser(user); return AjaxResult.success("登陆成功"); } @Override public AjaxResult adminLogin(String username, String password,Boolean rememberMe) { if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { return AjaxResult.error("用户名和密码不能为空"); } UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); } catch (AuthenticationException e) { String msg = "用户或密码错误"; if (StringUtils.isNotEmpty(e.getMessage())) { msg = e.getMessage(); } return AjaxResult.error(msg); } User user = ShiroUtils.getUser(); // user.setWarehouseId(warehouseId); // user.setWarehouseCode(warehouseCode); // ShiroUtils.setUser(user); // List<Company> Companys = companyService.selectCompanyByCurrentUserId(); // user.setCompanyIdList(Companys.stream().map(X -> X.getId()).collect(Collectors.toList())); // user.setCompanyCodeList(Companys.stream().map(X -> X.getCode()).collect(Collectors.toList())); // user.getCompanyCodeList().add(""); ShiroUtils.setUser(user); return AjaxResult.success("登陆成功"); } /** * 根据条件分页查询用户对象 * * @param user 用户信息 * * @return 用户信息集合信息 */ @Override public List<User> selectUserList(User user) { return userMapper.selectUserList(user); } /** * 通过用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ @Override public User selectUserByLoginName(String userName) { return userMapper.selectUserByLoginName(userName); } /** * 通过手机号码查询用户 * * @param phoneNumber 手机号 * @return 用户对象信息 */ @Override public User selectUserByPhoneNumber(String phoneNumber) { return userMapper.selectUserByPhoneNumber(phoneNumber); } /** * 通过邮箱查询用户 * * @param email 邮箱 * @return 用户对象信息 */ @Override public User selectUserByEmail(String email) { return userMapper.selectUserByEmail(email); } /** * 通过用户ID查询用户 * * @param userId 用户ID * @return 用户对象信息 */ @Override public User selectUserById(Integer userId) { return userMapper.selectUserById(userId); } /** * 通过用户ID删除用户 * * @param userId 用户ID * @return 结果 */ @Override public int deleteUserById(Integer userId) { // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 删除用户与岗位表 userCompanyMapper.deleteUserCompanyByUserId(userId); return userMapper.deleteUserById(userId); } /** * 批量删除用户信息 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteUserByIds(String ids) throws Exception { Integer[] userIds = Convert.toIntArray(ids); for (Integer userId : userIds) { if (User.isAdmin(userId)) { throw new Exception("不允许删除超级管理员用户"); } } return userMapper.deleteUserByIds(userIds); } /** * 新增保存用户信息 * * @param user 用户信息 * @return 结果 */ @Override public int insertUser(User user) { user.randomSalt(); user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); user.setCreateBy(ShiroUtils.getLoginName()); // 新增用户信息 int rows = userMapper.insertUser(user); // 新增用户货主关联 insertUserCompany(user); // 新增用户与角色管理 insertUserRole(user); // 新增用户与仓库管理 insertUserWarehouse(user); return rows; } /** * 修改保存用户信息 * * @param user 用户信息 * @return 结果 */ @Override public int updateUser(User user) { Integer userId = user.getId(); user.setUpdateBy(ShiroUtils.getLoginName()); // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 新增用户与角色管理 insertUserRole(user); // 删除用户与货主关联 userCompanyMapper.deleteUserCompanyByUserId(userId); // 新增用户与货主管理 insertUserCompany(user); // 删除用户与仓库关联 sysUserWarehouseMapper.deleteUserWarehouseByUserId(userId); // 新增用户与仓库管理 insertUserWarehouse(user); return userMapper.updateUser(user); } /** * 修改用户个人详细信息 * * @param user 用户信息 * @return 结果 */ @Override public int updateUserInfo(User user) { return userMapper.updateUser(user); } /** * 修改用户密码 * * @param user 用户信息 * @return 结果 */ @Override public int resetUserPwd(User user) { user.randomSalt(); user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); return updateUserInfo(user); } /** * 新增用户角色信息 * * @param user 用户对象 */ public void insertUserRole(User user) { // 新增用户与角色管理 List<UserRole> list = new ArrayList<UserRole>(); if (user.getRoleIds() != null) { for (Integer roleId : user.getRoleIds()) { UserRole ur = new UserRole(); ur.setUserId(user.getId()); ur.setRoleId(roleId); list.add(ur); } if (list.size() > 0) { userRoleMapper.batchUserRole(list); } } } /** * 新增用户仓库信息 * * @param user 用户对象 */ public void insertUserWarehouse(User user) { // 新增用户与仓库管理 List<SysUserWarehouse> list = new ArrayList<SysUserWarehouse>(); if (user.getWarehouseCodeList() != null) { for (String warehouseCode : user.getWarehouseCodeList()) { SysUserWarehouse warehouse = new SysUserWarehouse(); warehouse.setUserId(user.getId()); warehouse.setWarehouseCode(warehouseCode); list.add(warehouse); } if (list.size() > 0) { sysUserWarehouseMapper.batchUserWarehouse(list); } } } /** * 新增用户货主信息 * * @param user 用户对象 */ public void insertUserCompany(User user) { // 新增用户与货主管理 List<UserCompany> list = new ArrayList<UserCompany>(); if (user.getCompanyIdList() != null) { for (Integer companyId : user.getCompanyIdList()) { UserCompany up = new UserCompany(); up.setUserId(user.getId()); up.setCompanyId(companyId); list.add(up); } if (list.size() > 0) { userCompanyMapper.batchUserCompany(list); } } } /** * 校验用户名称是否唯一 * * @param loginName 用户名 * @return */ @Override public String checkLoginNameUnique(String loginName) { int count = userMapper.checkLoginNameUnique(loginName); if (count > 0) { return UserConstants.USER_NAME_NOT_UNIQUE; } return UserConstants.USER_NAME_UNIQUE; } /** * 校验用户名称是否唯一 * * @param user 用户名 * @return */ @Override public String checkPhoneUnique(User user) { Integer userId = StringUtils.isNull(user.getId()) ? -1 : user.getId(); User info = userMapper.checkPhoneUnique(user.getPhoneNumber()); if (StringUtils.isNotNull(info) && info.getId() != userId) { return UserConstants.USER_PHONE_NOT_UNIQUE; } return UserConstants.USER_PHONE_UNIQUE; } /** * 校验email是否唯一 * * @param user 用户信息 * @return */ @Override public String checkEmailUnique(User user) { Integer userId = StringUtils.isNull(user.getId()) ? -1 : user.getId(); User info = userMapper.checkEmailUnique(user.getEmail()); if (StringUtils.isNotNull(info) && info.getId() != userId) { return UserConstants.USER_EMAIL_NOT_UNIQUE; } return UserConstants.USER_EMAIL_UNIQUE; } /** * 查询用户所属角色组 * * @param userId 用户ID * @return 结果 */ @Override public String selectUserRoleGroup(Integer userId) { List<Role> list = roleMapper.selectRolesByUserId(userId, ShiroUtils.getWarehouseCode()); StringBuffer idsStr = new StringBuffer(); for (Role role : list) { idsStr.append(role.getRoleName()).append(","); } if (StringUtils.isNotEmpty(idsStr.toString())) { return idsStr.substring(0, idsStr.length() - 1); } return idsStr.toString(); } /** * 查询用户所属货主组 * * @param userId 用户ID * @return 结果 */ @Override public String selectUserCompanyGroup(Integer userId) { List<Company> list = companyMapper.selectCompanyByUserId(userId, ShiroUtils.getWarehouseCode()); StringBuffer idsStr = new StringBuffer(); for (Company company : list) { idsStr.append(company.getName()).append(","); } if (StringUtils.isNotEmpty(idsStr.toString())) { return idsStr.substring(0, idsStr.length() - 1); } return idsStr.toString(); } @Override public List<Map<String, Object>> getWarehouseByUserId(Integer userId){ return userMapper.getWarehouseByUserId(userId); } @Override public List<Map<String, Object>> getWarehouseByUserCode(String loginName){ List<Map<String, Object>> list = null; if (User.isAdmin(loginName)) { QueryWrapper<Warehouse> queryWrapper = new QueryWrapper<>(); queryWrapper.select("id","code","name"); list = warehouseService.listMaps(queryWrapper); } else { list = userMapper.getWarehouseByUserName(loginName); if (list.size()==1) list=userMapper.getWarehouseByUserCode(loginName); } return list; } @Override public List<Map<String, Object>> getModules(Integer warehouseId, String warehouseCode, ClientType clientType) { // List<String> permList= new ArrayList(); // List<String> moduleColumnList = new ArrayList(); // moduleColumnList.add("id"); // moduleColumnList.add("type"); // moduleColumnList.add("parentId"); // moduleColumnList.add("url"); // moduleColumnList.add("moduleName"); // moduleColumnList.add("modulePhto"); // SysModules moduleCondition = new SysModules(); // if (clientType == ClientType.PC) // moduleCondition.setIsMobile(false); // else if (clientType == ClientType.Mobile) // moduleCondition.setIsMobile(true); List<Map<String, Object>> returnList = new ArrayList(); // List<Map<String, Object>> moduleList = sysModulesService.selectListMapByEqual(moduleColumnList, moduleCondition); // // //从session取出用户信息 // UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal(); // if (userInfo.getCode().equals("superAdmin")) // { // List<String> columnList = new ArrayList<>(); // columnList.add("id"); // SysPerm condition = new SysPerm(); // condition.setEnable(true); // condition.setDeleted(false); // List<Map<String, Object>> permListMap = sysPermService.selectListMapByEqual(columnList, condition); // for (Map<String, Object> map : permListMap) { // permList.add(map.get("id").toString()); // } // returnList = moduleList; // } // else { // //不是超级管理员的话,需要验证对应的仓库权限 // List<Map<String, Object>> permListMap = userInfoMapper.getPermByUserId(userInfo.getId(), warehouseId); // for (Map<String, Object> permMap : permListMap) { // permList.add(permMap.get("id").toString()); // } // // 如果模块类型为2,且id等于权限的模块id,那么就添加到返回的模块列表 // for (Map<String, Object> moduleMap : moduleList) { // if(moduleMap.get("type").equals("2")) { // for (Map<String, Object> permMap : permListMap) { // if (moduleMap.get("id").equals(permMap.get("moduleId"))) { // returnList.add(moduleMap); // break; // } // } // } // } // // 将模块列表和返回模块列表进行对比,把父模块也放进去 // for (Map<String, Object> moduleMap : moduleList) // for (Map<String, Object> returnMap : returnList) // if (moduleMap.get("id").equals(returnMap.get("parentId"))) { // returnList.add(moduleMap); // break; // } // } // userInfo.setWarehouseId(warehouseId); // userInfo.setWarehouseCode(warehouseCode); // userInfo.setPerms(new HashSet(permList)); return returnList; } @Override public int insertupdateTime(Date date, String cPersonCode) { return userMapper.insertupdateTime(date,cPersonCode); } @Override public User selectmen(String loginName) { User user=userMapper.selectmen(loginName); return user; } @Override public int batchUserWarehouse(List<SysUserWarehouse> userWarehouseList) { return sysUserWarehouseMapper.batchUserWarehouse(userWarehouseList); } }