package com.vci.ubcs.omd.service.impl;
|
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
|
import com.vci.ubcs.omd.entity.LinkType;
|
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
|
import com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper;
|
import com.vci.ubcs.omd.service.IAttributeService;
|
import com.vci.ubcs.omd.service.ILinkTypeAttributeService;
|
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
|
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
|
import com.vci.ubcs.omd.vo.LinkTypeVO;
|
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
|
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
import org.checkerframework.checker.units.qual.A;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* Description: 链接类型包含属性的服务
|
*
|
* @author LiHang
|
* @date 2023/5/24
|
*/
|
@Service
|
public class LinkTypeAttributeServiceImpl extends ServiceImpl<LinkTypeAttributeMapper, LinkTypeAttribute> implements ILinkTypeAttributeService {
|
|
/**
|
* 属性服务
|
*/
|
@Autowired
|
private IAttributeService attributeService;
|
/**
|
* 批量删除
|
*
|
* @param oids 主键集合
|
*/
|
@Override
|
public void batchDeleteByOids(List<String> oids) {
|
baseMapper.delete(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getOid,oids));
|
}
|
|
@Override
|
public void checkAttribute(LinkTypeAttributeVO attributeVO) {
|
VciBaseUtil.alertNotNull(attributeVO.getId(),"属性的英文名称",attributeVO.getName(),"属性的中文名称",
|
attributeVO.getAttrDataType(),"属性的数据类型");
|
attributeService.checkAttributePass(attributeVO.getId(),attributeVO.getAttrDataType(),attributeVO.getAttributeLength(),attributeVO.getDefaultValue());
|
}
|
|
/**
|
* 主键查询
|
*
|
* @param oid 主键
|
* @return 查询结果
|
*/
|
@Override
|
public LinkTypeAttribute selectByPrimaryKey(String oid) {
|
VciBaseUtil.alertNotNull(oid);
|
return baseMapper.selectOne(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getOid,oid));
|
}
|
|
/**
|
* 根据链接类型获取默认字段
|
*
|
* @param linkTypeVO 链接类型
|
* @return 执行结果
|
*/
|
@Override
|
public List<LinkTypeAttributeVO> getDefaultAttributes(LinkTypeVO linkTypeVO) {
|
Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
|
List<LinkTypeAttributeVO> list = new ArrayList<>();
|
// 业务类型的基本字段
|
BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.forEach((id, name) -> {
|
LinkTypeAttributeVO vo = new LinkTypeAttributeVO();
|
vo.setId(id);
|
vo.setName(name);
|
vo.setPkLinkType(linkTypeVO.getOid());
|
if (StringUtils.equals(id,"oid")){
|
vo.setNullableFlag(false);
|
}else {
|
vo.setNullableFlag(true);
|
}
|
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);
|
});
|
return list;
|
}
|
|
/**
|
* 根据链接类型获取所有的字段
|
*
|
* @param linkTypeVO 链接类型
|
* @return 执行结果
|
*/
|
@Override
|
public List<LinkTypeAttributeVO> getAllAttributes(LinkTypeVO linkTypeVO) {
|
Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
|
List<LinkTypeAttributeVO> attributes = getAttributesNoDefault(linkTypeVO);
|
attributes.addAll(getDefaultAttributes(linkTypeVO));
|
return attributes;
|
}
|
|
/**
|
* 获取非默认字段的链接类型属性
|
*
|
* @param linkTypeVO 链接类型
|
* @return
|
*/
|
@Override
|
public List<LinkTypeAttributeVO> getAttributesNoDefault(LinkTypeVO linkTypeVO) {
|
Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
|
return LinkTypeAttributeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getPkLinkType, linkTypeVO.getOid())));
|
}
|
|
/**
|
* 批量获取非默认字段的链接类型属性
|
*
|
* @param linkTypeDOList 链接类型
|
* @return 执行结果
|
*/
|
@Override
|
public Map<String, List<LinkTypeAttributeVO>> batchGetAttributesNoDefault(List<LinkType> linkTypeDOList) {
|
VciBaseUtil.alertNotNull(linkTypeDOList,"链接类型集合");
|
Set<String> oidSet = linkTypeDOList.stream().map(LinkType::getOid).collect(Collectors.toSet());
|
if (CollectionUtils.isEmpty(oidSet)){
|
return new HashMap<>();
|
}
|
List<LinkTypeAttribute> attributes = baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType, oidSet));
|
return LinkTypeAttributeWrapper.build().listEntityVO(Optional.ofNullable(attributes).orElseGet(ArrayList::new)).stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
|
}
|
}
|