package com.vci.frameworkcore.compatibility.impl;
|
|
import com.vci.corba.common.PLException;
|
import com.vci.corba.omd.data.BusinessObject;
|
import com.vci.frameworkcore.compatibility.SmPwdStrategyQueryServiceI;
|
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
|
import com.vci.frameworkcore.model.SmPasswordStrategyDO;
|
import com.vci.frameworkcore.pagemodel.SmPasswordStrategyVO;
|
import com.vci.omd.utils.ObjectTool;
|
import com.vci.starter.web.exception.VciBaseException;
|
import com.vci.starter.web.util.BeanUtil;
|
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
|
import com.vci.web.service.WebBoServiceI;
|
import com.vci.web.util.Func;
|
import com.vci.web.util.WebUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
|
|
/**
|
* 密码策略查询服务
|
* @author ludc
|
* @date 2024/6/24 16:33
|
*/
|
@Service
|
public class SmPwdStrategyQueryServiceImpl implements SmPwdStrategyQueryServiceI {
|
|
/**
|
* 业务数据服务
|
*/
|
@Autowired
|
private WebBoServiceI boService;
|
|
/**
|
* 用户查询服务
|
*/
|
@Autowired
|
private SmUserQueryServiceI smUserQueryService;
|
|
/**
|
* 获取默认密码策略
|
* @return
|
*/
|
public SmPasswordStrategyVO getPasswordStrategyVOByDefault(){
|
//获取默认的
|
VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
|
queryWrapperForDO.eq("plisdefault","1");
|
List<BusinessObject> cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
|
queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
|
(StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
|
if(!CollectionUtils.isEmpty(cboList)){
|
SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
|
WebUtil.copyValueToObjectFromCbos(cboList.get(0),passwordStrategyDO);
|
return pwdStrategyDO2VO(passwordStrategyDO);
|
}
|
return null;
|
}
|
|
/**
|
* 根据主键查询密码策略map对象
|
* @param oidList
|
* @return key为密码策略主键 value为密码策略
|
*/
|
@Override
|
public Map<String, SmPasswordStrategyVO> mapPasswordStrategyVOMapByOid(Collection<String> oidList) {
|
VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
|
queryWrapperForDO.in("oid",oidList.stream().collect(Collectors.joining(",")));
|
List<BusinessObject> cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
|
queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
|
(StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
|
Map<String,SmPasswordStrategyVO> smPasswordStrategyVOMap = new HashMap<>();
|
if(Func.isEmpty(cboList)){
|
return new HashMap<>();
|
}
|
cboList.stream().forEach(item->{
|
SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
|
WebUtil.copyValueToObjectFromCbos(item,passwordStrategyDO);
|
SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
|
BeanUtil.convert(passwordStrategyDO,passwordStrategyVO);
|
smPasswordStrategyVOMap.put(passwordStrategyVO.getOid(),passwordStrategyVO);
|
});
|
return smPasswordStrategyVOMap;
|
}
|
|
/**
|
* 使用主键获取密码策略
|
* @param oid 主键
|
* @return 密码策略显示对象
|
*/
|
public SmPasswordStrategyVO getPasswordStrategyVOByOid(String oid){
|
VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
|
queryWrapperForDO.eq("oid",oid.trim());
|
List<BusinessObject> cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
|
queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
|
(StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
|
if(!CollectionUtils.isEmpty(cboList)){
|
SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
|
WebUtil.copyValueToObjectFromCbos(cboList.get(0),passwordStrategyDO);
|
SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
|
BeanUtil.convert(passwordStrategyDO,passwordStrategyVO);
|
return passwordStrategyVO;
|
}else{
|
//获取默认的
|
queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
|
queryWrapperForDO.eq("plisdefault","1");
|
cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
|
queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
|
(StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
|
if(!CollectionUtils.isEmpty(cboList)){
|
SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
|
WebUtil.copyValueToObjectFromCbos(cboList.get(0),passwordStrategyDO);
|
return pwdStrategyDO2VO(passwordStrategyDO);
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 多条密码策略do对象转vo对象
|
* @param smPasswordStrategyDOList
|
* @return
|
*/
|
private List<SmPasswordStrategyVO> pwdStrategyDO2VOS(List<SmPasswordStrategyDO> smPasswordStrategyDOList){
|
List<SmPasswordStrategyVO> smPasswordStrategyVOList = new ArrayList<>();
|
if(Func.isEmpty(smPasswordStrategyDOList)) {
|
return smPasswordStrategyVOList;
|
}
|
smPasswordStrategyDOList.stream().forEach(item->{
|
smPasswordStrategyVOList.add(pwdStrategyDO2VO(item));
|
});
|
return smPasswordStrategyVOList;
|
}
|
|
/**
|
* 密码策略do对象转vo对象
|
* @param smPasswordStrategyDO
|
* @return
|
*/
|
private SmPasswordStrategyVO pwdStrategyDO2VO(SmPasswordStrategyDO smPasswordStrategyDO){
|
SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
|
BeanUtil.convert(smPasswordStrategyDO,passwordStrategyVO);
|
return passwordStrategyVO;
|
}
|
|
/**
|
* 根据用户的主键,获取用户的密码安全策略
|
* @param userOid 用户的主键
|
* @return 密码安全策略的显示对象,如果不存在则会返回Null
|
* @throws VciBaseException 参数为空或者数据库查询出错的时候会抛出异常
|
*/
|
@Override
|
public SmPasswordStrategyVO getPasswordStrategyVOByUserOid(String userOid) throws PLException {
|
WebUtil.alertNotNull(userOid,"用户的主键");
|
if(!smUserQueryService.checkUserExist(null,userOid)){
|
throw new VciBaseException(DATA_OID_NOT_EXIST);
|
}
|
String sql = "select plpasswordstrategyuid,pluseruid from pluserpasswordstrategy where pluseruid = '"+ userOid +"'";
|
List<BusinessObject> cbos = boService.queryBySql(sql, null);
|
if(Func.isNotEmpty(cbos)){
|
return getPasswordStrategyVOByOid(ObjectTool.getNewBOAttributeValue(cbos.get(0), "plpasswordstrategyuid"));
|
}
|
return null;
|
}
|
|
/**
|
* 根据多条用户主键,获取用户的密码安全策略
|
* @param userOids
|
* @return
|
* @throws PLException
|
*/
|
@Override
|
public List<SmPasswordStrategyVO> listSmPasswordStrategyVOByUserOids(Collection<String> userOids) {
|
WebUtil.alertNotNull(userOids,"用户的主键");
|
//先查关联表
|
List<String> userPwdStrategyList = new ArrayList<>();
|
WebUtil.switchCollectionForOracleIn(userOids).stream().forEach(userOidSplit->{
|
//查关联表sql
|
String sql = "select plpasswordstrategyuid,pluseruid from pluserpasswordstrategy where pluseruid in (" + WebUtil.toInSql(userOidSplit.toArray(new String[0])) + ")";
|
List<BusinessObject> cbos = boService.queryBySql(sql, null);
|
cbos.stream().forEach(cbo->{
|
userPwdStrategyList.add(ObjectTool.getNewBOAttributeValue(cbo,"plpasswordstrategyuid"));
|
});
|
});
|
return listSmPasswordStrategyVOByOids(userPwdStrategyList);
|
}
|
|
/**
|
* 根据用户主键查询密码策略关联表中的密码策略主键
|
* @param userOids
|
* @return key为用户oid:value为密码策略oid
|
*/
|
private Map<String,String> mapUserPwdStrategy(Collection<String> userOids){
|
Map<String,String> userPwdStrategyMap = new HashMap<>();
|
WebUtil.switchCollectionForOracleIn(userOids).stream().forEach(userOidSplit->{
|
//查关联表sql
|
String sql = "select plpasswordstrategyuid,pluseruid from pluserpasswordstrategy where pluseruid in (" + WebUtil.toInSql(userOidSplit.toArray(new String[0])) + ")";
|
List<BusinessObject> cbos = boService.queryBySql(sql, null);
|
cbos.stream().forEach(cbo->{
|
String pluseruid = ObjectTool.getNewBOAttributeValue(cbo, "pluseruid");
|
String plpasswordstrategyuid = ObjectTool.getNewBOAttributeValue(cbo, "plpasswordstrategyuid");
|
userPwdStrategyMap.put(pluseruid,plpasswordstrategyuid);
|
});
|
});
|
return userPwdStrategyMap;
|
}
|
|
/**
|
* 根据主键,批量获取密码安全策略主键
|
* @param oids
|
* @return
|
* @throws PLException
|
*/
|
@Override
|
public List<SmPasswordStrategyVO> listSmPasswordStrategyVOByOids(Collection<String> oids) {
|
VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null, SmPasswordStrategyDO.class);
|
queryWrapperForDO.in("oid",oids.stream().collect(Collectors.joining(",")));
|
List<BusinessObject> cboList = boService.queryBySql(queryWrapperForDO.getSelectFieldSql() + " from plpasswordstrategy " +
|
queryWrapperForDO.getTableNick() + queryWrapperForDO.getLinkTableSql() +
|
(StringUtils.isBlank(queryWrapperForDO.getWhereSql()) ? "" : (" where " + queryWrapperForDO.getWhereSql())), null);
|
List<SmPasswordStrategyVO> smPasswordStrategyVOList = new ArrayList<>();
|
if(Func.isEmpty(cboList)){
|
return smPasswordStrategyVOList;
|
}
|
cboList.stream().forEach(item->{
|
SmPasswordStrategyDO passwordStrategyDO = new SmPasswordStrategyDO();
|
WebUtil.copyValueToObjectFromCbos(item,passwordStrategyDO);
|
SmPasswordStrategyVO passwordStrategyVO = new SmPasswordStrategyVO();
|
BeanUtil.convert(passwordStrategyDO,passwordStrategyVO);
|
smPasswordStrategyVOList.add(passwordStrategyVO);
|
});
|
return smPasswordStrategyVOList;
|
}
|
|
/**
|
* 批量根据用户的主键来获取密码策略
|
* @param userOidCollection 用户主键集合
|
* @return 密码策略的显示对象,key是用户主键,value是这个用户关联的密码策略
|
*/
|
@Override
|
public Map<String, SmPasswordStrategyVO> batchSmPwdStrategyByUserOids(Collection<String> userOidCollection) {
|
if(CollectionUtils.isEmpty(userOidCollection)){
|
return new HashMap<>();
|
}
|
Map<String,SmPasswordStrategyVO> smPasswordStrategyVOMap = new HashMap<>();
|
Map<String,String> userPasswordStrategyVOMap = new HashMap<>();
|
|
Map<String/*用户id*/, SmPasswordStrategyVO/*密码策略*/> returnMap = new HashMap<>();
|
WebUtil.switchCollectionForOracleIn(userOidCollection).stream().forEach(userOids->{
|
//查询密码策略关联信息,key为用户oid:value为密码策略oid
|
Map<String, String> userPwdStrategyMap = mapUserPwdStrategy(userOids);
|
userPasswordStrategyVOMap.putAll(userPwdStrategyMap);
|
//查询密码策略,key为密码策略主键:value为密码策略
|
smPasswordStrategyVOMap.putAll(mapPasswordStrategyVOMapByOid(userPwdStrategyMap.values()));
|
});
|
//查询默认的密码策略
|
SmPasswordStrategyVO passwordStrategyVOByDefault = getPasswordStrategyVOByDefault();
|
//循环用户id,查询是否有符合条件的oid
|
userOidCollection.stream().forEach(oid->{
|
SmPasswordStrategyVO smPasswordStrategyVO;
|
//通过用户oid没获取到密码策略oid,说明没有给当前用户设置策略,直接返默认的密码策略
|
String pwdStrategyId = userPasswordStrategyVOMap.get(oid);
|
if(Func.isNotBlank(pwdStrategyId)){
|
//通过密码策略oid去map中取密码策略
|
smPasswordStrategyVO = smPasswordStrategyVOMap.get(pwdStrategyId);
|
}else {
|
smPasswordStrategyVO = passwordStrategyVOByDefault;
|
}
|
returnMap.put(oid,smPasswordStrategyVO);
|
});
|
return returnMap;
|
}
|
|
}
|