SysJobFuncServiceImpl.java 16.4 KB
package com.zteits.sys.biz;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import com.clouds.common.log.LogSelf;
import com.clouds.common.utils.BeanValidatorsUtils;
import com.clouds.common.utils.ListCopyUtil;
import com.clouds.common.utils.LogSelfFactory;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
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.SysJobfuncDTO;
import com.zteits.clouds.api.dto.sys.SysJobfuncWithOpAndRoleDTO;
import com.zteits.clouds.api.dto.sys.SysResJobFuncRelationDTO;
import com.zteits.clouds.api.dto.sys.SysResJobfuncDTO;
import com.zteits.clouds.api.dto.sys.SysRoleDTO;
import com.zteits.clouds.api.dto.sys.param.QueryRolesByJobIdRequest;
import com.zteits.clouds.api.dto.sys.param.RoleJobFunByJobFunIdSaveRequest;
import com.zteits.clouds.api.dto.sys.param.RoleJobFunByRoleIdSaveRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFunSaveOrUpdateRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncByIdQueryRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncByIdsDeleteRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncPageQueryRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncQueryByRoleIdRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncSaveRequest;
import com.zteits.clouds.api.dto.sys.param.SysJobFuncUpdateRequest;
import com.zteits.clouds.api.dto.sys.param.SysResJobFuncByIdQueryRequest;
import com.zteits.clouds.api.dto.sys.param.SysResJobFuncSaveRequest;
import com.zteits.clouds.api.service.sys.SysJobFuncService;
import com.zteits.sys.dao.SysJobFuncDao;
import com.zteits.sys.dao.SysOpDao;
import com.zteits.sys.dao.SysResJobFuncDao;
import com.zteits.sys.dao.SysRoleJobFunDao;
import com.zteits.sys.domain.SysJobfunc;
import com.zteits.sys.domain.SysOp;
import com.zteits.sys.domain.SysResJobfunc;
import com.zteits.sys.domain.SysRole;
import com.zteits.sys.pagepaper.PageBeanUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

@Component
public class SysJobFuncServiceImpl implements SysJobFuncService {

    private static final LogSelf log = LogSelfFactory.getLogSelf(SysJobFuncServiceImpl.class);

    @Autowired
    private SysJobFuncDao sysJobFuncDao;
    @Autowired
    private SysResJobFuncDao sysResJobFuncDao;
    @Autowired
    private SysRoleJobFunDao sysRoleJobFunDao;
    @Autowired
    private SysOpDao sysOpDao;
//    @Autowired
//    private SysRoleDao sysRoleDao;

    @Transactional
    @Override
    public BizResult<Boolean> saveAllSysResJobFunc(SysResJobFuncSaveRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        if (CollectionUtils.isEmpty(request.getResJobFuncs())) {
            throw new BizException(ErrorType.PARAMM_NULL, "resJobFuncs");
        }
        for (SysResJobFuncRelationDTO resJobFuncRelationDTO : request.getResJobFuncs()) {
            //1. 根据职能ID删除对应的菜单
            sysResJobFuncDao.deleteAllSysResJobFuncByJobFuncId(resJobFuncRelationDTO.getJobfuncId(),
                request.getSysCode());
            //2. 保存新的职能菜单关系
            sysResJobFuncDao.saveSysResJobFunc(resJobFuncRelationDTO, request.getSysCode());
        }
        return new BizResult<Boolean>(true);
    }

    @Transactional
    @Override
    public BizResult<Boolean> deleteSysJobFuncByIds(SysJobFuncByIdsDeleteRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        return new BizResult<Boolean>(sysJobFuncDao.deleteSysJobFuncByIds(request.getIds()));
    }

    @Transactional
    @Override
    public BizResult<Boolean> saveSysJobFunc(SysJobFuncSaveRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        SysJobfunc sysJobfunc = new SysJobfunc();
        BeanUtils.copyProperties(request, sysJobfunc);
        sysJobfunc.setCreateDate(new Date());
        sysJobfunc.setCreateEmpid(request.getEmpid());
        sysJobfunc.setModfiyEmpid(request.getEmpid());
        sysJobfunc.setModfiyDate(new Date());
        sysJobfunc.setOrgId(request.getOrgId());
        return new BizResult<Boolean>(sysJobFuncDao.saveSysJobFunc(sysJobfunc));
    }

    @Transactional
    @Override
    public BizResult<Boolean> updateSysJobFunc(SysJobFuncUpdateRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        SysJobfunc sysJobfunc = new SysJobfunc();
        BeanUtils.copyProperties(request, sysJobfunc);
        sysJobfunc.setModfiyEmpid(request.getEmpid());
        sysJobfunc.setModfiyDate(new Date());
        return new BizResult<Boolean>(sysJobFuncDao.updateSysJobFuncById(sysJobfunc));
    }

    @Override
    public BizResult<PageBean<SysJobfuncDTO>> pageQuerySysJobfunc(SysJobFuncPageQueryRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        PageBean<SysJobfuncDTO> pageBean = new PageBean<SysJobfuncDTO>();
        PageInfo<SysJobfunc> pageInfo = sysJobFuncDao.pageQuerySysJobfunc(request);
        PageBeanUtil.copyProperties(pageInfo, pageBean, SysJobfuncDTO.class);
        return new BizResult<PageBean<SysJobfuncDTO>>(pageBean);
    }

    @Override
    public BizResult<PageBean<SysJobfuncWithOpAndRoleDTO>> pageQuerySysJobfuncWithOpAndRole(
        SysJobFuncPageQueryRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        PageBean<SysJobfuncWithOpAndRoleDTO> pageBean = new PageBean<SysJobfuncWithOpAndRoleDTO>();
        //1、根据条件 分页查询职能集合信息
        PageInfo<SysJobfunc> pageInfo = sysJobFuncDao.pageQuerySysJobfunc(request);
        PageBeanUtil.copyProperties(pageInfo, pageBean, SysJobfuncWithOpAndRoleDTO.class);

        if (CollectionUtils.isEmpty(pageInfo.getList())) {
            //1.1如果查询出的职能集合为空,直接返回
            return new BizResult<PageBean<SysJobfuncWithOpAndRoleDTO>>(pageBean);
        }

        //2、根据职能集合 获取职能ID 集合
        List<Long> jobFuncIds = new ArrayList<>();
        //获取创建人  及 修改人id集合
        Set<Long> opIds = new HashSet<>();
        if(pageInfo != null && !CollectionUtils.isEmpty(pageInfo.getList())){
        	for (SysJobfunc sysJobfunc : pageInfo.getList()) {
        		if(sysJobfunc != null){
        			jobFuncIds.add(sysJobfunc.getId());
                    opIds.add(sysJobfunc.getCreateEmpid() !=null ? Long.parseLong(sysJobfunc.getCreateEmpid()):null);
                    opIds.add(sysJobfunc.getModfiyEmpid() != null ? Long.parseLong(sysJobfunc.getModfiyEmpid()):null);
        		}
                
            }
        }
        
        //4、 填充操作人信息
        try {
            fillOpInfo(pageBean.getDataList(), opIds, request.getSysCode());
        } catch (Exception e) {
            e.printStackTrace();

        }

        return new BizResult<>(pageBean);
    }

    

    //填充创建人 及 修改人信息
    private void fillOpInfo(List<SysJobfuncWithOpAndRoleDTO> dtos, Set<Long> opIds, String sysCode) throws Exception {
        if (CollectionUtils.isEmpty(dtos) || CollectionUtils.isEmpty(opIds)) {
            return;
        }

        List<Long> opIdList = new ArrayList<>(opIds);

        List<SysOp> ops = sysOpDao.querySysOpByIds(opIdList, DataStatusEnum.DATA_STATUS_VALID.value(), sysCode);

        Map<Long, String> opMap = new HashMap<>();
        if(!CollectionUtils.isEmpty(ops)){
        	 for (SysOp sysOp : ops) {
        		 if(sysOp != null){
        			 opMap.put(sysOp.getId(), sysOp.getOpName());
        		 }
                
             }	
        }
        
       if(!CollectionUtils.isEmpty(dtos)){
    	   for (SysJobfuncWithOpAndRoleDTO dto : dtos) {
    		   if(dto != null){
    			   if (StringUtils.isNotEmpty(dto.getCreateEmpid())) {
                       dto.setCreateOpName(opMap.get(Long.parseLong(dto.getCreateEmpid())));
                   }
                   if (StringUtils.isNotEmpty(dto.getModfiyEmpid())) {
                       dto.setModfiyOpName(opMap.get(Long.parseLong(dto.getModfiyEmpid())));
                   }  
    		   }
               

           }
       }
        

    }

    @Override
    public BizResult<SysJobfuncDTO> getSysJobFuncById(SysJobFuncByIdQueryRequest request) {
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        SysJobfunc sysJobfunc = sysJobFuncDao.getSysJobFuncById(request.getId());
        SysJobfuncDTO jobfuncDTO = new SysJobfuncDTO();
        if (sysJobfunc == null) {
            return new BizResult<SysJobfuncDTO>(jobfuncDTO);
        }
        BeanUtils.copyProperties(sysJobfunc, jobfuncDTO);
        return new BizResult<SysJobfuncDTO>(jobfuncDTO);
    }

    @Override
    public BizResult<List<SysResJobfuncDTO>> getResJobfunByJobfunId(SysResJobFuncByIdQueryRequest request) {
        BizResult<List<SysResJobfuncDTO>> dtoResult = new BizResult<>();
        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        List<SysResJobfuncDTO> dtos = new ArrayList<>();
        List<SysResJobfunc> result = sysResJobFuncDao.querySysResJobfuncByJobFuncId(request.getJobFunId(),
            DataStatusEnum.DATA_STATUS_VALID.value(), request.getSysCode());
        if (CollectionUtils.isEmpty(result)) {
            dtoResult.setData(dtos);
            dtoResult.setErrCode(ErrorType.BIZ_SUCCESS);
            return dtoResult;
        }

        SysResJobfuncDTO dto;
        for (SysResJobfunc sysResJobfunc : result) {
            dto = new SysResJobfuncDTO();
            BeanUtils.copyProperties(sysResJobfunc, dto);
            dtos.add(dto);
        }
        dtoResult.setData(dtos);
        dtoResult.setErrCode(ErrorType.BIZ_SUCCESS);
        return dtoResult;
    }

    @Transactional
    @Override
    public BizResult<Boolean> saveOrUpdateJobFunWithResIds(SysJobFunSaveOrUpdateRequest request) {

        if (request == null) {
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }

        Long jobFuncId = request.getJobfuncId();
        Boolean flag = false;
        //通过职能ID删除全部职能菜单关系
        flag = sysResJobFuncDao.deleteAllSysResJobFuncByJobFuncId(jobFuncId, request.getSysCode());
        if (!flag) {
            throw new BizException(ErrorType.BIZ_ERROR, "新增或更新职能与资源关系失败!");
        }
        if(request != null && !CollectionUtils.isEmpty(request.getResIds())){
        	SysResJobFuncRelationDTO dto = new SysResJobFuncRelationDTO();
            dto.setJobfuncId(jobFuncId);
            dto.setResIds(request.getResIds());
            flag = sysResJobFuncDao.saveSysResJobFunc(dto, request.getSysCode());
            if (!flag) {
                throw new BizException(ErrorType.BIZ_ERROR, "新增或更新职能与资源关系失败!");
            }
        }
        return new BizResult<>(flag);
    }

    @Override
    public BizResult<List<SysJobfuncDTO>> pageQuerySysJobfuncsByRoleId(SysJobFuncQueryByRoleIdRequest request) {
        //验证参数
        BeanValidatorsUtils.validateWithException(request);

        List<SysJobfuncDTO> jobfuncs = Lists.newArrayList();
        //1.通过角色id获取所有职能id
        List<Long> roleIds = Lists.newArrayList();
        roleIds.add(request.getRoleId());
        List<Long> jobFuncIds = sysRoleJobFunDao.queryJobFunIdsByRoleId(roleIds,
            DataStatusEnum.DATA_STATUS_VALID.value(), request.getSysCode());
        if (CollectionUtils.isEmpty(jobFuncIds)) {
            return new BizResult<List<SysJobfuncDTO>>(jobfuncs);
        }
        //2.通过ID获取职能
        for (Long jobFuncId : jobFuncIds) {
            SysJobfuncDTO sysJobFuncDto = new SysJobfuncDTO();
            SysJobfunc sysJobFunc = sysJobFuncDao.getSysJobFuncById(jobFuncId);
            if (ObjectUtils.isEmpty(sysJobFunc)) {
                continue;
            }
            BeanUtils.copyProperties(sysJobFunc, sysJobFuncDto);
            jobfuncs.add(sysJobFuncDto);
        }
        return new BizResult<List<SysJobfuncDTO>>(jobfuncs);
    }

	@Override
	public BizResult<List<SysRoleDTO>> queryRolesByJobId(QueryRolesByJobIdRequest queryRolesByJobIdRequest)
			throws Exception {
		List<SysRoleDTO> list = new ArrayList<SysRoleDTO>();
		List<SysRole>  sysRoleList = sysJobFuncDao.queryRolesByJobId(queryRolesByJobIdRequest);
		ListCopyUtil.listCopyProperties(sysRoleList, list, SysRoleDTO.class);
		return new BizResult<List<SysRoleDTO>>(list);
	}

	@Override
	public BizResult<Boolean> batchSaveRoleJobFunByJobFunId(
			RoleJobFunByJobFunIdSaveRequest roleJobFunByJobFunIdSaveRequest) {
		int insertCount = 0;
		
		if(roleJobFunByJobFunIdSaveRequest != null){
			int deleteCount = sysRoleJobFunDao.deleteRoleJobFunByJobfunIdId(roleJobFunByJobFunIdSaveRequest.getJobFunId());
			log.info("通过职能id删除角色职能关系表,成功删除={} 条。",deleteCount);
			if(deleteCount >= 0 && !CollectionUtils.isEmpty(roleJobFunByJobFunIdSaveRequest.getRoleIds()) ){
				insertCount = sysRoleJobFunDao.saveBatchRoleJobFunByJobFunId(roleJobFunByJobFunIdSaveRequest.getJobFunId(),
						roleJobFunByJobFunIdSaveRequest.getRoleIds(),
						roleJobFunByJobFunIdSaveRequest.getDataState(),
						roleJobFunByJobFunIdSaveRequest.getCurrentOpId(), 
						roleJobFunByJobFunIdSaveRequest.getSysCode());
				log.info("批量插入角色职能关系表,成功插入={} 条。",insertCount);
			}
			
		}else{
	        throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
		}
		
		return new BizResult<Boolean>(insertCount >= 0 ? true : false);
	}

	@Override
	public BizResult<Boolean> updateJobFunOrgIdByRoleOrgIg(RoleJobFunByJobFunIdSaveRequest request) {
		if(request == null || StringUtils.isBlank(request.getOrgId()+"") ||  StringUtils.isBlank(request.getJobFunId()+"")){
			throw new BizException(ErrorType.PARAMM_NULL, "请求参数为空");
		}
		return new BizResult<Boolean>(sysJobFuncDao.updateJobFunOrgIdByRoleOrgIg(request));
	}
	
	@Override
    public BizResult<Boolean> batchSaveRoleJobFunByRoleId(
            RoleJobFunByRoleIdSaveRequest roleJobFunByRoleIdSaveRequest) {
        int insertCount = 0;
        
        if(roleJobFunByRoleIdSaveRequest != null){
            int deleteCount = sysRoleJobFunDao.deleteRoleJobFunByRoleId(roleJobFunByRoleIdSaveRequest.getRoleId());
            log.info("通过角色id删除角色职能关系表,成功删除={} 条。",deleteCount);
            if(deleteCount >= 0 && !CollectionUtils.isEmpty(roleJobFunByRoleIdSaveRequest.getJobFunIds()) ){
                insertCount = sysRoleJobFunDao.saveBatchRoleJobFunByRoleId(roleJobFunByRoleIdSaveRequest.getRoleId(),
                        roleJobFunByRoleIdSaveRequest.getJobFunIds(),
                        roleJobFunByRoleIdSaveRequest.getDataState(),
                        roleJobFunByRoleIdSaveRequest.getCurrentOpId(), 
                        roleJobFunByRoleIdSaveRequest.getSysCode());
                log.info("批量插入角色职能关系表,成功插入={} 条。",insertCount);
            }
            
        }else{
            throw new BizException(ErrorType.PARAMM_NULL, "请求对象");
        }
        
        return new BizResult<Boolean>(insertCount >= 0 ? true : false);
    }

    @Override
    public BizResult<Boolean> updateJobFunOrgIdByRoleOrgIgs(
            RoleJobFunByRoleIdSaveRequest request) {
        if(request == null || StringUtils.isBlank(request.getOrgId()+"") ||  StringUtils.isBlank(request.getJobFunIds()+"")){
            throw new BizException(ErrorType.PARAMM_NULL, "请求参数为空");
        }
        return new BizResult<Boolean>(sysJobFuncDao.updateJobFunOrgIdByRoleOrgIgs(request));
    }

}