package com.vci.ubcs.omd.service.impl;
|
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vci.ubcs.omd.constant.BtmTypeConstant;
|
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
|
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
|
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
|
import com.vci.ubcs.omd.mapper.BtmTypeAttributeMapper;
|
import com.vci.ubcs.omd.service.IAttributeService;
|
import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
|
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
|
import com.vci.ubcs.omd.vo.BtmTypeVO;
|
import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
|
import com.vci.ubcs.starter.exception.VciBaseException;
|
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
import org.springblade.core.tool.utils.Func;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.validation.constraints.NotEmpty;
|
import java.util.*;
|
|
/**
|
* Description: 业务类型关联属性的服务实现类
|
*
|
* @author LiHang
|
* @date 2023/4/23
|
*/
|
@Service
|
public class BtmAttributeServiceImpl extends ServiceImpl<BtmTypeAttributeMapper, BtmTypeAttribute> implements IBtmTypeAttributeService {
|
|
@Autowired
|
private IAttributeService attributeService;
|
|
@Override
|
public boolean deleteLogic(@NotEmpty List<Long> ids) {
|
return false;
|
}
|
|
@Override
|
public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
|
return false;
|
}
|
|
/**
|
* 检查属性存在并添加
|
*
|
* @param attributesDTOList 页面传输对象集合
|
* @return 受影响的行数
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
|
List<String> attributeIdList = new ArrayList<>();
|
List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
|
if (!CollectionUtils.isEmpty(attributesDTOList)) {
|
attributesDTOList.stream().forEachOrdered(s -> {
|
attributeService.checkAttribute(s);
|
btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
|
attributeIdList.add(s.getId().toLowerCase().trim());
|
});
|
//检查属性是否都存在
|
boolean exists = attributeService.checkAttributeExists(attributeIdList);
|
if (!exists){
|
return null;
|
}
|
saveBatch(btmTypeAttributeDOList);
|
return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
|
// btmTypeAttributeDOList.stream().forEachOrdered(s -> {
|
// btmTypeAttributeDOMapper.insert(s);
|
// });
|
}
|
return null;
|
}
|
|
/**
|
* 检查属性存在并删除
|
*
|
* @param records 主键集合
|
* @return 受影响的行数
|
*/
|
@Override
|
public int checkAndRemove(List<String> records) {
|
if (CollectionUtils.isEmpty(records)){
|
return 0;
|
}
|
return baseMapper.batchDelete(records);
|
}
|
|
/**
|
* 检查属性存在并添加
|
*
|
* @param btmTypeOid 业务类型主键
|
* @param attributesDTOList 页面传输对象集合
|
* @param creator 创建人
|
* @param now ts时间戳
|
* @return 受影响的行数
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
|
List<String> attributeIdList = new ArrayList<>();
|
List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
|
if (!CollectionUtils.isEmpty(attributesDTOList)) {
|
attributesDTOList.stream().forEachOrdered(s -> {
|
attributeService.checkAttribute(s);
|
btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
|
attributeIdList.add(s.getId().toLowerCase().trim());
|
});
|
//检查属性是否都存在
|
boolean exists = attributeService.checkAttributeExists(attributeIdList);
|
if (!exists){
|
return null;
|
}
|
baseMapper.batchUpdate(btmTypeAttributeDOList);
|
return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
|
// btmTypeAttributeDOList.stream().forEachOrdered(s -> {
|
// btmTypeAttributeDOMapper.insert(s);
|
// });
|
}
|
return null;
|
}
|
|
/**
|
* 业务类型主键查属性
|
* @param btmTypeOid 业务类型主键
|
* @return 查询结果
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid){
|
Func.requireNotNull(btmTypeOid,"业务类型主键");
|
return BtmTypeAttributeWrapper.build().listEntityVO(
|
Optional.ofNullable(
|
baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().eq(BtmTypeAttribute::getPkBtmType, btmTypeOid))
|
).orElseGet(ArrayList::new)
|
);
|
}
|
|
/**
|
* 根据业务类型主键获取关联的所有属性对象
|
*
|
* @param oidCollection 业务类型主键集合
|
* @return 所有的属性对象,包括系统内置属性,key是业务类型主键,value是包含的属性
|
* @throws VciBaseException 业务类型不存在,参数为空或者查询出错时会抛出异常
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection) throws VciBaseException {
|
VciBaseUtil.alertNotNull(oidCollection,"业务类型主键");
|
List<BtmTypeAttribute> doList = baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection));
|
return BtmTypeAttributeWrapper.build().listEntityVO(doList);
|
}
|
|
/**
|
* 获取业务类型中的指定属性
|
*
|
* @param id 业务类型的主键
|
* @param attributeIdCollection 属性的id,若为空则获取全部
|
* @return 属性的数据对象
|
*/
|
@Override
|
public List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection) {
|
return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection);
|
}
|
|
/**
|
* 通过业务类型的英文名称获取关联的属性
|
*
|
* @param idList 业务类型的英文名称集合
|
* @return 包含的属性
|
*/
|
@Override
|
public List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList) {
|
return baseMapper.selectByBtmTypeIds(idList);
|
}
|
|
/**
|
* 获取默认字段
|
* 默认字段均不可为空
|
* @param btmType 业务类型
|
* @return 执行结果
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> getDefaultAttribute(BtmTypeVO btmType) {
|
List<BtmTypeAttributeVO> list = new ArrayList<>();
|
// 业务类型的基本字段
|
BtmTypeFieldConstant.BASIC_FIELD_MAP.forEach((id,name) -> {
|
id = id.toLowerCase(Locale.ROOT);
|
BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
|
vo.setId(id);
|
vo.setName(name);
|
vo.setPkBtmType(btmType.getOid());
|
if ("oid".equals(id)){
|
vo.setNullableFlag(false);
|
}
|
if (Arrays.asList("createtime","lastmodifytime","owner").contains(id)){
|
vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
|
vo.setAttributeLength(6);
|
}else {
|
vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
|
vo.setAttributeLength(150);
|
}
|
list.add(vo);
|
});
|
|
// 版本规则字段
|
if (StringUtils.isNotBlank(btmType.getRevisionRuleId())){
|
BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.forEach((id,name) -> {
|
BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
|
vo.setId(id);
|
vo.setName(name);
|
vo.setPkBtmType(btmType.getOid());
|
vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
|
// 版本规则字段不能为空
|
vo.setNullableFlag(false);
|
vo.setAttributeLength(150);
|
if (Arrays.asList("lastr","firstr","lastv","firstv","revisionseq","versionseq","revisionvalue","versionvalue").contains(id)){
|
vo.setAttributeLength(5);
|
vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
|
}
|
if (Arrays.asList("checkintime","checkouttime").contains(id)){
|
vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
|
vo.setAttributeLength(6);
|
}
|
list.add(vo);
|
});
|
}
|
|
// 生命周期字段
|
if (StringUtils.isNotBlank(btmType.getLifeCycleId())){
|
BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.forEach((id,name) -> {
|
BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
|
vo.setId(id);
|
vo.setName(name);
|
vo.setPkBtmType(btmType.getOid());
|
vo.setNullableFlag(false);
|
vo.setAttributeLength(50);
|
vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
|
list.add(vo);
|
});
|
}
|
|
// 密级字段
|
if (btmType.isSecretFlag()){
|
BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.forEach((id,name) -> {
|
BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
|
vo.setId(id);
|
vo.setName(name);
|
vo.setPkBtmType(btmType.getOid());
|
vo.setNullableFlag(false);
|
vo.setAttributeLength(5);
|
vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
|
list.add(vo);
|
});
|
}
|
|
return list;
|
}
|
|
/**
|
* 获取所有字段
|
*
|
* @param btmType 业务类型
|
* @return 执行结果
|
*/
|
@Override
|
public List<BtmTypeAttributeVO> getAllAttribute(BtmTypeVO btmType) {
|
List<BtmTypeAttributeVO> list = getAttributeByBtmTypeOid(btmType.getOid());
|
list.addAll(getDefaultAttribute(btmType));
|
return list;
|
}
|
}
|