package com.matrix.system.common.service.impl; import cn.hutool.crypto.SecureUtil; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.constance.SystemErrorCode; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.ModelUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.authority.AppAuthorityManager; import com.matrix.system.common.authority.DefaultAuthorityManager; import com.matrix.system.common.bean.SysUserLoginRecord; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.constance.AppMessageCode; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.common.init.LocalCache; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.common.tools.PasswordUtil; import com.matrix.system.common.tools.ServiceUtil; import com.matrix.system.hive.bean.AppVersion; import com.matrix.system.hive.bean.SysBeauticianState; import com.matrix.system.hive.bean.SysProjServices; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.dao.SysShopInfoDao; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.util.Date; import java.util.List; import java.util.Map; /** * 用户管理service * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年12月5日 */ @Service public class SysUsersServiceImpl implements SysUsersService { private static final String SU_ID = "su_id"; private static final String SU_ACCOUNT = "su_account"; @Autowired private SysUsersDao sysUsersDao; @Autowired private ServiceUtil serviceUtil; @Autowired private SysShopInfoDao shopInfoDao; private final String tableName = "sys_users"; @Override public int addCompanySuper(SysUsers admin) { admin.setSuUserType(AppConstance.USER_TYPE_ADMIN); SysShopInfo zbShop= shopInfoDao.selectZbShop(admin.getCompanyId()); admin.setShopId(zbShop.getId()); return add(admin); } @Override public int addAdmin(SysUsers sysUsers) { sysUsers.setSuUserType(AppConstance.USER_TYPE_EMPLOYEE); return add(sysUsers); } /** * 添加普通管理员 * @param sysUsers * @return */ @Override public int add(SysUsers sysUsers) { // 判断账号是否重复 if (serviceUtil.addCheckRepeat(tableName, SU_ACCOUNT, sysUsers.getSuAccount())) { throw new GlobleException(AppMessageCode.User.ACCOUNT_EXIST, sysUsers.getSuAccount()); } // 设置一些基本信息 SysUsers loginUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if (loginUser != null) { sysUsers.setCreateBy(loginUser.getSuAccount()); sysUsers.setUpdateBy(loginUser.getSuAccount()); } else { sysUsers.setCreateBy(AppConstance.SYSTEM_USER); sysUsers.setUpdateBy(AppConstance.SYSTEM_USER); } sysUsers.setSuAccountStatus(AppConstance.ACCOUNT_STATUS_ACTIVATE); sysUsers.setSuValid(AppConstance.RECORD_VALID); if (sysUsers.getCompanyId() == null) { sysUsers.setCompanyId(loginUser.getCompanyId()); } try { sysUsers.setSuRegisterTime(new Date()); sysUsers.setSuPassword(PasswordUtil.getEncrypUserPwd(sysUsers)); } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) { LogUtil.error("用户密码加密失败", e); throw new GlobleException(SystemErrorCode.DATA_ADD_FAIL, sysUsers.getSuAccount()); } return sysUsersDao.insert(sysUsers); } @Override public int modifyByMap(SysUsers oldSysUsers, SysUsers newSysUsers) { // 判断账号是否重复 if (serviceUtil.updateCheckRepeat(tableName, SU_ACCOUNT, newSysUsers.getSuAccount(), SU_ID, newSysUsers.getSuId())) { throw new GlobleException(AppMessageCode.User.ACCOUNT_EXIST, newSysUsers.getSuAccount()); } SysUsers loginUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); newSysUsers.setUpdateBy(loginUser.getSuName()); Map modifyMap = null; try { if (!ModelUtils.isModified(oldSysUsers, newSysUsers)) { return MatrixConstance.DML_SUCCESSS; } modifyMap = ModelUtils.comparePojo2Map(oldSysUsers, newSysUsers); } catch (Exception e) { throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL, e, newSysUsers.getSuAccount()); } if (modifyMap.size() > 0) { modifyMap.put("suId", oldSysUsers.getSuId()); sysUsersDao.updateByMap(modifyMap); } //删除用户权限缓存 String redisKey=DefaultAuthorityManager.USER_POWER_REDISKEY+ SecureUtil.md5(oldSysUsers.getSuId()+""); String redisKeyPc=DefaultAuthorityManager.USER_POWER_REDISKEY_PC+ SecureUtil.md5(oldSysUsers.getSuId()+""); String appRedisKey = AppAuthorityManager.USER_POWER_REDISKEY_APP + SecureUtil.md5(oldSysUsers.getSuId()+""); LocalCache.remove(redisKey); LocalCache.remove(redisKeyPc); LocalCache.remove(appRedisKey); return MatrixConstance.DML_SUCCESSS; } @Override public int modifyByModel(SysUsers sysUsers) { return sysUsersDao.updateByModel(sysUsers); } @Override public int remove(List list) { return sysUsersDao.deleteByIds(list); } @Override public int removeById(String suId) { return sysUsersDao.deleteById(Long.valueOf(suId)); } @Override public int removeByModel(SysUsers sysUsers) { return sysUsersDao.deleteByModel(sysUsers); } @Override public List findInPage(SysUsers sysUsers, PaginationVO pageVo) { return sysUsersDao.selectInPage(sysUsers, pageVo); } @Override public List findByModel(SysUsers sysUsers) { return sysUsersDao.selectByModel(sysUsers); } @Override public int findTotal(SysUsers sysUsers) { return sysUsersDao.selectTotalRecord(sysUsers); } @Override public SysUsers findById(Long suId) { return sysUsersDao.selectById(suId); } @Override public void lockUser(String suAccount) { sysUsersDao.changeUserStatus(suAccount, AppConstance.ACCOUNT_STATUS_LOCKED); } @Override public void unlockUser(String suAccount) { // 修改登录错误的日志 cleanUserTodayErrorLoginTime(suAccount); sysUsersDao.changeUserStatus(suAccount, AppConstance.ACCOUNT_STATUS_ACTIVATE); } @Override public int countUserTodayErrorLoginTimes(String suAccount) { return sysUsersDao.countUserTodayErrorLoginTimes(suAccount); } @Override public void addUserLoginRecord(SysUserLoginRecord loginRecord) { sysUsersDao.insertLoginRecord(loginRecord); } @Override public void cleanUserTodayErrorLoginTime(String suAccount) { sysUsersDao.cleanUserTodayErrorLoginTime(suAccount); } @Override public int updateUserPassword(Long suId, String suPassword) { return sysUsersDao.updateUserPassword(suId, suPassword); } @Override public List findByRoleName(Boolean limitShopId, String roleName) { SysUsers shopstaffInfo = new SysUsers(); SysUsers loginUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); shopstaffInfo.setCompanyId(loginUser.getCompanyId()); if (limitShopId) { shopstaffInfo.setShopId(loginUser.getShopId()); } if (StringUtils.isNotBlank(roleName)) { shopstaffInfo.setRoleName(roleName); } List dataList = sysUsersDao.selectByRoleName(shopstaffInfo); return dataList; } @Override public List findByCodeBeaStateShop(Long shopId, SysBeauticianState sysBeauticianState, String panBanCodes) { return sysUsersDao.findByCodeBeaStateShop(shopId, sysBeauticianState, panBanCodes); } @Override public int findByCodeBeaStateShopCount(Long shopId, SysProjServices sysProjServices, List panBanCodes) { sysProjServices.setStartTime(sysProjServices.getStartTime()); sysProjServices .setEndTime(DateUtil.getNextNMinute(sysProjServices.getStartTime(), sysProjServices.getTotalTime())); return sysUsersDao.findByCodeBeaStateShopCount(shopId, sysProjServices, panBanCodes); } @Override public List findAppVersion() { return sysUsersDao.selectAppVersion(); } @Override public SysUsers findByOpenId(String openId, Long companyId) { return sysUsersDao.selectUserByOpenId(openId, companyId); } @Override public int modifyUserOpenId(String openId, Long suId) { return sysUsersDao.updateUserOpenId(openId, suId); } }