SysOpServiceImpl.java 15.3 KB
package com.zteits.sys.biz;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;

import com.clouds.common.threadlocal.SysData;
import com.clouds.common.utils.*;
import com.github.pagehelper.PageInfo;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.bean.PageBean;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.sys.SysOpDTO;
import com.zteits.clouds.api.dto.sys.SysResDTO;
import com.zteits.clouds.api.dto.sys.param.QuerySysOpByorgIdsReq;
import com.zteits.clouds.api.dto.sys.param.SysOpDeleteRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpForPageRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpOrgSaveOrModifyRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpQueryMenuRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpQueryRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpRoleSaveOrModfiyRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpSaveOrModfiyRequest;
import com.zteits.clouds.api.dto.sys.param.SysOpUpdatePasswordRequest;
import com.zteits.clouds.api.dto.sys.param.UpdateSysOpOrgIdRequest;
import com.zteits.clouds.api.service.sys.SysOpService;
import com.zteits.sys.dao.SysOpDao;
import com.zteits.sys.dao.SysOpOrgDao;
import com.zteits.sys.dao.SysOpRoleDao;
import com.zteits.sys.dao.SysOrgDao;
import com.zteits.sys.domain.SysOp;
import com.zteits.sys.domain.SysRes;
import com.zteits.sys.pagepaper.PageBeanUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 系统用户-dubbo服务实现类.<br/>
 *
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: SysOpServiceImpl.java
 * @Description:
 * @version: v1.0.0
 * @author: wangfs
 * @date: 2017年4月25日   上午9:12:47
 * Modification History:
 * Date             Author          Version            Description
 * ---------------------------------------------------------*
 * 2017年4月25日      wangfs           v1.0.0               创建
 */
@Service("com.zteits.sys.biz.SysOpServiceImpl")
public class SysOpServiceImpl implements SysOpService {

    private static final Logger logger = LoggerFactory.getLogger(SysOpServiceImpl.class);

    @Autowired
    private SysOpDao sysOpDao;
    @Autowired
    private SysOpOrgDao sysOpOrgDao;
    @Autowired
    private SysOpRoleDao sysOpRoleDao;
    @Autowired
    private SysOrgDao sysOrgDao;

    @Override
    public BizResult<SysOpDTO> querySysOp(SysOpQueryRequest sysOpQueryRequest) throws Exception {
        logger.info("[{}]开始查询操作员对象,入参={}", ThreadLocalUtil.get(SysData.class).getRequestId(),
            JSONObject.toJSON(sysOpQueryRequest));
        SysOpDTO sysOpDTO = new SysOpDTO();
        if (sysOpQueryRequest != null) {
            SysOp sysOp = sysOpDao.querySysOp(sysOpQueryRequest);
            if (sysOp != null) {
                BeanUtils.copyProperties(sysOp, sysOpDTO);
            } else {
                throw new BizException(ErrorType.OBJECT_NOT_EXISTS, "用户");
            }
        } else {
            throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
        }

        return new BizResult<SysOpDTO>(sysOpDTO);
    }

    @Override
    public BizResult<PageBean<SysOpDTO>> queryUserForPage(SysOpForPageRequest sysOpForPageRequest) throws Exception {
        PageBean<SysOpDTO> pageBean = new PageBean<SysOpDTO>();
        if (sysOpForPageRequest != null && StringUtils.isNotEmpty(sysOpForPageRequest.getSysCode())) {
        	SysOp sysOp=new SysOp();
        	BeanUtils.copyProperties(sysOpForPageRequest, sysOp);
        	sysOp.setSysCode(sysOpForPageRequest.getSysCode());
        	logger.info("分页查询用户dubbo入参 sysOp={}"+JSONObject.toJSONString(sysOp));
        	PageInfo<SysOp> pageInfo = sysOpDao.queryUserForPage(sysOp,sysOpForPageRequest.getBaseRequest().getPageSize(),
        			sysOpForPageRequest.getBaseRequest().getPageNum());
            if (pageInfo != null) {
                PageBeanUtil.copyProperties(pageInfo, pageBean, SysOpDTO.class);
            }
        } else {
            throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
        }
        return new BizResult<PageBean<SysOpDTO>>(pageBean);
    }

    @Transactional
    @Override
    public BizResult<Boolean> deleteSysOp(SysOpDeleteRequest sysOpDeleteRequest) throws Exception {
        if (sysOpDeleteRequest == null || StringUtils.isEmpty(sysOpDeleteRequest.getSysCode())) {
            throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
        }
        Boolean result=true;
        List<Long> ids=null;
		ids=sysOpDeleteRequest.getIds();
		if(CollectionUtils.isNotEmpty(ids)){
			for (Long id : ids) {
				SysOp sysOp = new SysOp();
				BeanUtils.copyProperties(sysOpDeleteRequest, sysOp);
				sysOp.setId(id);
				Date date=new Date();
				sysOp.setModfiyDate(date);
				sysOp.setDataState(DataStatusEnum.DATA_STATUS_NO_VALID.value());
				sysOp.setSysCode(sysOpDeleteRequest.getSysCode());
				result=sysOpDao.deleteSysOp(sysOp);
			}

		}else{
			SysOp sysOp = new SysOp();
			BeanUtils.copyProperties(sysOpDeleteRequest, sysOp);
			Date date=new Date();
			sysOp.setModfiyDate(date);
			sysOp.setDataState(DataStatusEnum.DATA_STATUS_NO_VALID.value());
			sysOp.setSysCode(sysOpDeleteRequest.getSysCode());
			result=sysOpDao.deleteSysOp(sysOp);
		}

        return new BizResult<Boolean>(result);
    }

    @Transactional
    @Override
    public BizResult<Boolean> saveSysOp(SysOpSaveOrModfiyRequest sysOpSaveOrModfiyRequest) throws Exception {
    	BeanValidatorsUtils.validateWithException(sysOpSaveOrModfiyRequest);
		//校验该用户是否存在
    	SysOpQueryRequest sysOpQueryRequest = new SysOpQueryRequest();
    	sysOpQueryRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value());
    	sysOpQueryRequest.setLoginCode(sysOpSaveOrModfiyRequest.getLoginCode());
    	SysOp sysOpQuery = sysOpDao.querySysOp(sysOpQueryRequest);
    	if(sysOpQuery != null){
    		return new BizResult<>(ErrorType.BIZ_ERROR, "该用户账号已经存在!");
    	}
		//1、添加新用户
		SysOp sysOp=new SysOp();
		BeanUtils.copyProperties(sysOpSaveOrModfiyRequest, sysOp);
		String pwd="Qwe!@2341";
		sysOp.setLoginPassword(MD5Utils.enMD5(pwd));
		sysOp.setDataState(DataStatusEnum.DATA_STATUS_VALID.value());

		Date createDate=new Date();
		sysOp.setCreateDate(createDate);
		sysOp.setAcctStartDate(createDate);
		sysOp.setModfiyDate(createDate);
		sysOp.setSysCode(sysOpSaveOrModfiyRequest.getSysCode());
		sysOp.setAcctEndDate(sysOpSaveOrModfiyRequest.getAcctEndDate());
		Boolean result = sysOpDao.saveSysOp(sysOp);
        return new BizResult<Boolean>(result);
    }

	@Override
	public BizResult<List<Long>> queryOrgIdsByOpIds(SysOpQueryRequest sysOpQueryRequest) {
		if(sysOpQueryRequest == null  || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
			throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
		}
		List<Long> list=sysOpOrgDao.queryOrgIdsByOpIds(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
		return new BizResult<List<Long>>(list);
	}
	@Transactional
    @Override
    public BizResult<Boolean> modfiySysOp(SysOpSaveOrModfiyRequest sysOpSaveOrModfiyRequest) throws Exception {
    	BeanValidatorsUtils.validateWithException(sysOpSaveOrModfiyRequest);
    	if(StringUtils.isEmpty(sysOpSaveOrModfiyRequest.getSysCode()) || null==sysOpSaveOrModfiyRequest.getId()){
    		throw new BizException(ErrorType.BIZ_ERROR,"用户ID和sysCode入参不能为空");
    	}
    	SysOp sysOp=new SysOp();
    	BeanUtils.copyProperties(sysOpSaveOrModfiyRequest, sysOp);
    	sysOp.setSysCode(sysOpSaveOrModfiyRequest.getSysCode());
    	sysOp.setModfiyDate(new Date());
        Boolean result=sysOpDao.modfiySysOp(sysOp);
        return new BizResult<Boolean>(result);
    }

	@Override
	public BizResult<List<Long>> queryRoleIdsByOpIds(SysOpQueryRequest sysOpQueryRequest) {
		if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
			throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
		}
		List<Long> list=sysOpRoleDao.queryRoleIdsByOpId(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
		return new BizResult<List<Long>>(list);
	}
    /**
     * 保存/修改用户与角色关系.<br/>
     * 保存修改处理逻辑:
     * 1.先删除掉用户角色关系主键不为空的关系.
     * 2.然后全量保存.<br/>
     *
     * @param
     * @return
     */
    @Transactional
    @Override
    public BizResult<Boolean> saveOrModfiySysOpAndSysRoleRelation(
        SysOpRoleSaveOrModfiyRequest sysOpRoleSaveOrModfiyRequest) throws Exception {
        Boolean ste = sysOpDao.saveOrModfiySysOpAndSysRoleRelation(sysOpRoleSaveOrModfiyRequest);
        return new BizResult<Boolean>(ste);
    }

	@Override
	public BizResult<List<Long>> queryOrgIdsByOpId(SysOpQueryRequest sysOpQueryRequest) {
		if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
			throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
		}
		if(sysOpQueryRequest.getId() != null){
			sysOpQueryRequest.getIds().add(sysOpQueryRequest.getId());
		}

		List<Long> list=sysOpOrgDao.queryOrgIdsByOpIds(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
		System.out.println(list);
		return new BizResult<List<Long>>(list);
	}

	@Override
	public BizResult<List<Long>> queryRoleIdsByOpId(SysOpQueryRequest sysOpQueryRequest) {
		if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
			throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
		}
		List<Long> opIds=new ArrayList<Long>();
		opIds.add(sysOpQueryRequest.getId());
		List<Long> list=sysOpRoleDao.queryRoleIdsByOpId(opIds, sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
		System.out.println(list);
		return new BizResult<List<Long>>(list);
	}
    /**
     * 通过操作员Id+查询菜单.<br/>
     *
     * @param sysOpQueryMenuRequest
     * @return
     * @throws Exception
     */
    @Override
    public BizResult<List<SysResDTO>> queryMenuBySysOpId(SysOpQueryMenuRequest sysOpQueryMenuRequest) throws Exception {
        List<SysRes> sysResList = new ArrayList<SysRes>();
        List<SysResDTO> sysResDTOList = new ArrayList<SysResDTO>();
        if (sysOpQueryMenuRequest != null && sysOpQueryMenuRequest.getSysOpId() != null) {
            sysResList = sysOpDao.queryMenuBySysOpId(sysOpQueryMenuRequest);
        } else {
            throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
        }
        if (CollectionUtils.isNotEmpty(sysResList)) {
            for (SysRes sysRes : sysResList) {
                SysResDTO sysResDTO = new SysResDTO();
                BeanUtils.copyProperties(sysRes, sysResDTO);
                sysResDTOList.add(sysResDTO);
            }
        }
        return new BizResult<List<SysResDTO>>(sysResDTOList);
    }

    @Transactional
    @Override
    public BizResult<Boolean> insertSysOpAndSysRoleRelation(
        SysOpRoleSaveOrModfiyRequest sysOpRoleSaveOrModfiyRequest) throws Exception {
        Boolean ste = sysOpDao.insertSysOpAndSysRoleRelation(sysOpRoleSaveOrModfiyRequest);
        return new BizResult<Boolean>(ste);
    }


	@Transactional
    @Override
	public BizResult<Boolean> modfiyOpPassword(SysOpUpdatePasswordRequest request) {
        BeanValidatorsUtils.validateWithException(request);

        // 密码复杂度检查
        if (request != null && StringUtils.isNotEmpty(request.getLoginPassword()) && request.getId() != null) {
            try {
                // 查询当前用户信息,获取登录账号
                SysOpQueryRequest sysOpQueryRequest = new SysOpQueryRequest();
                sysOpQueryRequest.setId(request.getId());
                sysOpQueryRequest.setSysCode(request.getSysCode());
                SysOp sysOp = sysOpDao.querySysOp(sysOpQueryRequest);

                if (sysOp != null) {
                    // 检查密码复杂度
                    PasswordComplexityUtils.checkPasswordComplexity(request.getLoginPassword(), sysOp.getLoginCode());

                    // 如果密码复杂度检查通过,修改密码
                    Boolean result = sysOpDao.modfiySysOpPassword(request);
                    return new BizResult<Boolean>(result);
                } else {
                    throw new BizException(ErrorType.OBJECT_NOT_EXISTS, "用户");
                }
            } catch (Exception e) {
                // 处理查询异常
                if (e instanceof BizException) {
                    throw (BizException) e;
                } else {
                    throw new BizException(ErrorType.BIZ_ERROR, "查询用户信息失败:" + e.getMessage());
                }
            }
        }

        return new BizResult<Boolean>(false);
    }

	@Override
	public BizResult<SysOpDTO> loginCodeIsUsed(SysOpQueryRequest sysOpQueryRequest) throws Exception {
		if(StringUtils.isEmpty(sysOpQueryRequest.getLoginCode())){
			 throw new BizException(ErrorType.BIZ_ERROR, "用户名不能为空");
		}
		SysOp sysOp = sysOpDao.loginCodeIsUsed(sysOpQueryRequest.getLoginCode());
		SysOpDTO sysOpDTO=new SysOpDTO();
		if(null != sysOp){
			BeanUtils.copyProperties(sysOp, sysOpDTO);
		}
		return new BizResult<SysOpDTO>(sysOpDTO);
	}
	/**
	  * 保存/修改用户与组织关系 wangfs Edit.<br/>
	  * 保存修改处理逻辑:
	  *    1.先删除掉用户组织关系主键不为空的关系.
	  *    2.然后全量保存.<br/>
	  * @param SysOpOrgSaveOrModifyRequest
	  * @return
	  */
	@Override
	public BizResult<Boolean> saveOrModifySysOpAndSysOrgRelation(
			SysOpOrgSaveOrModifyRequest sysOpOrgSaveOrModifyRequest) throws Exception {
		Boolean insertFlg = false;
		if(sysOpOrgSaveOrModifyRequest !=null){
			insertFlg = sysOrgDao.saveOrModifySysOpAndSysOrgRelation(sysOpOrgSaveOrModifyRequest);
		}else{
			throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
		}

		return new BizResult<Boolean>(insertFlg);
	}

	@Override
	public BizResult<Boolean> updateSysOpOrgIdByOpId(UpdateSysOpOrgIdRequest updateSysOpOrgIdRequest) {
		Boolean updateFlg = false;
		if(updateSysOpOrgIdRequest !=null){
			updateFlg = sysOpDao.updateSysOpOrgIdByOpId(updateSysOpOrgIdRequest);
		}else{
			throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
		}
		return new BizResult<Boolean>(updateFlg);
	}

	/**
	 * 通过组织ids查询用户信息
	 * @param request
	 * @return
	 * 2018年4月9日  wangfs.<br/>
	 */
	@Override
	public BizResult<List<SysOpDTO>> querySysOpByorgIds(QuerySysOpByorgIdsReq request) {
		List<SysOpDTO> list = new ArrayList<>();
		if(request ==null || CollectionUtils.isEmpty(request.getOrgIds())){
			throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
		}
		List<SysOp> sysOpList = sysOpDao.querySysOpByorgIds(request.getOrgIds());
		ListCopyUtil.listCopyProperties(sysOpList, list, SysOpDTO.class);
		return new BizResult<List<SysOpDTO>>(list);
	}




}