package com.app.mvc.acl.service; import com.app.mvc.acl.convert.BaseConvert; import com.app.mvc.acl.convert.UserConvert; import com.app.mvc.acl.dao.SysUserDao; import com.app.mvc.acl.domain.SysUser; import com.app.mvc.acl.util.RequestHolder; import com.app.mvc.acl.vo.UserPara; import com.app.mvc.beans.Mail; import com.app.mvc.beans.PageQuery; import com.app.mvc.beans.PageResult; import com.app.mvc.exception.ParaException; import com.app.mvc.util.MD5Util; import com.app.mvc.util.MailUtil; import com.app.mvc.util.PasswordUtil; import com.google.common.base.Preconditions; import com.google.common.collect.Sets; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * Created by jimin on 16/1/18. */ @Service public class SysUserService implements SysService { @Resource private SysUserDao sysUserDao; @Resource private SysLogService sysLogService; /** * 新增管理员 */ public void save(UserPara para) { BaseConvert.checkPara(para); para.setSupplierId(RequestHolder.getCurrentUser().getSupplierId()); SysUser user = UserConvert.of(para); if (checkMailExist(para.getMail(), null)) { throw new ParaException("邮箱已被占用"); } if (checkTelephoneExist(para.getTelephone(), null)) { throw new ParaException("电话已被占用"); } String password = PasswordUtil.randomPassword(); user.setPassword(MD5Util.encrypt(password)); sysUserDao.save(user); String message = "您的账户已经开通, 请妥善保管好您的个人密码" + password; String subject = "用户添加成功通知"; sendEmailToUser(user, subject, message); sysLogService.saveUserLog(null, user); } /** * 更新用户 */ public void update(UserPara para) { BaseConvert.checkPara(para); para.setSupplierId(RequestHolder.getCurrentUser().getSupplierId()); SysUser before = sysUserDao.findById(para.getId()); Preconditions.checkNotNull(before, "待更新用户不存在"); if (checkMailExist(para.getMail(), para.getId())) { throw new ParaException("邮箱已被占用"); } if (checkTelephoneExist(para.getTelephone(), para.getId())) { throw new ParaException("电话已被占用"); } SysUser after = UserConvert.of(para); sysUserDao.update(after); sysLogService.saveUserLog(before, after); } /** * 根据用户名或邮箱获取用户信息, 用于登录时校验使用 */ public SysUser findByUsernameOrEmail(String keyword) { if (StringUtils.isBlank(keyword)) { return null; } return sysUserDao.findByUsernameOrEmail(keyword); } /** * 分页获取部门下用户信息 */ public PageResult<SysUser> getPageByDeptId(int deptId, PageQuery page) { BaseConvert.checkPara(page); int count = sysUserDao.countByDeptId(deptId); if (count > 0) { List<SysUser> list = sysUserDao.getPageByDeptId(deptId, page); return PageResult.<SysUser>builder().total(count).data(list).build(); } return PageResult.<SysUser>builder().build(); } public SysUser findById(int id) { return sysUserDao.findById(id); } @Override public void recover(int targetId, Object o) { SysUser user = (SysUser) o; Preconditions.checkNotNull(user, "还原前的用户为空,无法还原"); SysUser before = sysUserDao.findById(targetId); Preconditions.checkNotNull(before, "待还原的用户不存在"); sysUserDao.update(user); sysLogService.saveUserLog(before, user); } private boolean checkMailExist(String mail, Integer id) { return sysUserDao.countByMail(mail, id) > 0; } private boolean checkTelephoneExist(String telephone, Integer id) { return sysUserDao.countByTelephone(telephone, id) > 0; } public void updatePassword(String mail, String originalPassword) { String encryptedPassword = MD5Util.encrypt(originalPassword); sysUserDao.updatePassword(mail, encryptedPassword); } private void sendEmailToUser(SysUser user, String subject, String message) { Mail mail = Mail.builder().message(message).receivers(Sets.newHashSet(user.getMail())).subject(subject).build(); MailUtil.send(mail); } public List<SysUser> getUserList() { int supplierId = RequestHolder.getCurrentUser().getSupplierId(); return sysUserDao.getBySupplierId(supplierId); } }