SysUserServiceImpl.java 3.77 KB
package com.bsth.service.sys.impl;

import com.bsth.common.ResponseCode;
import com.bsth.entity.sys.SysUser;
import com.bsth.repository.sys.SysUserRepository;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.sys.SysUserService;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implements SysUserService{

	@Autowired
	SysUserRepository sysUserRepository;

	Logger logger = LoggerFactory.getLogger(this.getClass());

	@Override
	public SysUser findByUserName(String name) {
		return sysUserRepository.findByUserName(name);
	}

	@Override
	public Map<String, Object> save(SysUser t) {
		//
		if(t.getPassword() == null || t.getPassword().trim().equals("")){
			SysUser user = sysUserRepository.findOne(t.getId());
			t.setPassword(user.getPassword());
		}else{
			t.setPassword(new BCryptPasswordEncoder(4).encode(t.getPassword()));
		}
		return super.save(t);
	}

	@Override
	public int changeEnabled(int id, int enabled) {
		sysUserRepository.changeEnabled(id,enabled);
		return 0;
	}

	@Override
	public int changePWD(int id,String newPWD) {
		return sysUserRepository.changePWD(id,new BCryptPasswordEncoder(4).encode(newPWD));
	}

    @Override
    public boolean validPWDExpired(String userName) {
        SysUser sysUser = this.sysUserRepository.findByUserName(userName);
        if (sysUser == null) {
            throw new RuntimeException("用户[" + userName + "]不存在!");
        }
        if (sysUser.getPwdValidPeriod() == null || sysUser.getLastPwdDate() == null) {
            // 如果没有设定密码过期时间,判定为不过期
            return true;
        }
        DateTime now = new DateTime();
        DateTime lastPwdDate = new DateTime(sysUser.getLastPwdDate());
        Integer now_period_days = Days.daysBetween(lastPwdDate, now).getDays();
        Integer expiredTipDays = 3; // 密码过期提前提示天数
        if (now_period_days < (sysUser.getPwdValidPeriod() - expiredTipDays)) {
            return true;
        } else if (now_period_days >= (sysUser.getPwdValidPeriod() - expiredTipDays) &&
                now_period_days < sysUser.getPwdValidPeriod()) {
            // 快过期前提示
            throw new RuntimeException("当前用户密码还有[" + (sysUser.getPwdValidPeriod() - now_period_days) + "]天过期!");
        } else {
            throw new RuntimeException("当前用户密码已过期!");
        }

    }

    @Override
    public void resetPWD(int id, String newPWD, int validperiod) {
	    SysUser user = sysUserRepository.findOne(id);
	    user.setPwdValidPeriod(validperiod);
	    sysUserRepository.changePWD(id, new BCryptPasswordEncoder(4).encode(newPWD));
    }

    @Override
	public Map<String, Object> register(SysUser u) {
		Map<String, Object> rs = new HashMap();
		try{
			//检查用户名是否存在
			if(findByUserName(u.getUserName()) != null){
				rs.put("status", ResponseCode.ERROR);
				rs.put("msg", "用户名" + u.getUserName() + "已存在!");
			}
			else{
				u.setPassword(new BCryptPasswordEncoder(4).encode(u.getPassword()));
				rs = super.save(u);
			}
		}catch (Exception e){
			logger.error("", e);
			rs.put("status", ResponseCode.ERROR);
			rs.put("msg", e.getMessage());
		}
		return rs;
	}

	@Override
	public List<SysUser> findAll_distinct() {
		return sysUserRepository.findAll_distinct();
	}
}