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服务实现类.
*
* 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 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);
}
@Override
public BizResult> queryUserForPage(SysOpForPageRequest sysOpForPageRequest) throws Exception {
PageBean pageBean = new PageBean();
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 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);
}
@Transactional
@Override
public BizResult deleteSysOp(SysOpDeleteRequest sysOpDeleteRequest) throws Exception {
if (sysOpDeleteRequest == null || StringUtils.isEmpty(sysOpDeleteRequest.getSysCode())) {
throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
}
Boolean result=true;
List 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(result);
}
@Transactional
@Override
public BizResult 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(result);
}
@Override
public BizResult> queryOrgIdsByOpIds(SysOpQueryRequest sysOpQueryRequest) {
if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
}
List list=sysOpOrgDao.queryOrgIdsByOpIds(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
return new BizResult>(list);
}
@Transactional
@Override
public BizResult 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(result);
}
@Override
public BizResult> queryRoleIdsByOpIds(SysOpQueryRequest sysOpQueryRequest) {
if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
}
List list=sysOpRoleDao.queryRoleIdsByOpId(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
return new BizResult>(list);
}
/**
* 保存/修改用户与角色关系.
* 保存修改处理逻辑:
* 1.先删除掉用户角色关系主键不为空的关系.
* 2.然后全量保存.
*
* @param
* @return
*/
@Transactional
@Override
public BizResult saveOrModfiySysOpAndSysRoleRelation(
SysOpRoleSaveOrModfiyRequest sysOpRoleSaveOrModfiyRequest) throws Exception {
Boolean ste = sysOpDao.saveOrModfiySysOpAndSysRoleRelation(sysOpRoleSaveOrModfiyRequest);
return new BizResult(ste);
}
@Override
public BizResult> 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 list=sysOpOrgDao.queryOrgIdsByOpIds(sysOpQueryRequest.getIds(), sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
System.out.println(list);
return new BizResult>(list);
}
@Override
public BizResult> queryRoleIdsByOpId(SysOpQueryRequest sysOpQueryRequest) {
if(sysOpQueryRequest == null || StringUtils.isEmpty(sysOpQueryRequest.getSysCode())){
throw new BizException(ErrorType.BIZ_ERROR,"入参不能为空");
}
List opIds=new ArrayList();
opIds.add(sysOpQueryRequest.getId());
List list=sysOpRoleDao.queryRoleIdsByOpId(opIds, sysOpQueryRequest.getDataState(), sysOpQueryRequest.getSysCode());
System.out.println(list);
return new BizResult>(list);
}
/**
* 通过操作员Id+查询菜单.
*
* @param sysOpQueryMenuRequest
* @return
* @throws Exception
*/
@Override
public BizResult> queryMenuBySysOpId(SysOpQueryMenuRequest sysOpQueryMenuRequest) throws Exception {
List sysResList = new ArrayList();
List sysResDTOList = new ArrayList();
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>(sysResDTOList);
}
@Transactional
@Override
public BizResult insertSysOpAndSysRoleRelation(
SysOpRoleSaveOrModfiyRequest sysOpRoleSaveOrModfiyRequest) throws Exception {
Boolean ste = sysOpDao.insertSysOpAndSysRoleRelation(sysOpRoleSaveOrModfiyRequest);
return new BizResult(ste);
}
@Transactional
@Override
public BizResult 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(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(false);
}
@Override
public BizResult 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);
}
/**
* 保存/修改用户与组织关系 wangfs Edit.
* 保存修改处理逻辑:
* 1.先删除掉用户组织关系主键不为空的关系.
* 2.然后全量保存.
* @param SysOpOrgSaveOrModifyRequest
* @return
*/
@Override
public BizResult 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(insertFlg);
}
@Override
public BizResult updateSysOpOrgIdByOpId(UpdateSysOpOrgIdRequest updateSysOpOrgIdRequest) {
Boolean updateFlg = false;
if(updateSysOpOrgIdRequest !=null){
updateFlg = sysOpDao.updateSysOpOrgIdByOpId(updateSysOpOrgIdRequest);
}else{
throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
}
return new BizResult(updateFlg);
}
/**
* 通过组织ids查询用户信息
* @param request
* @return
* 2018年4月9日 wangfs.
*/
@Override
public BizResult> querySysOpByorgIds(QuerySysOpByorgIdsReq request) {
List list = new ArrayList<>();
if(request ==null || CollectionUtils.isEmpty(request.getOrgIds())){
throw new BizException(ErrorType.BIZ_ERROR, "入参不能为空");
}
List sysOpList = sysOpDao.querySysOpByorgIds(request.getOrgIds());
ListCopyUtil.listCopyProperties(sysOpList, list, SysOpDTO.class);
return new BizResult>(list);
}
}