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 implements ILinkTypeAttributeService { /** * 属性服务 */ @Autowired private IAttributeService attributeService; /** * 批量删除 * * @param oids 主键集合 */ @Override public void batchDeleteByOids(List oids) { baseMapper.delete(Wrappers.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.query().lambda().eq(LinkTypeAttribute::getOid,oid)); } /** * 根据链接类型获取默认字段 * * @param linkTypeVO 链接类型 * @return 执行结果 */ @Override public List getDefaultAttributes(LinkTypeVO linkTypeVO) { Objects.requireNonNull(linkTypeVO,"链接类型不能为空"); List 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 getAllAttributes(LinkTypeVO linkTypeVO) { Objects.requireNonNull(linkTypeVO,"链接类型不能为空"); List attributes = getAttributesNoDefault(linkTypeVO); attributes.addAll(getDefaultAttributes(linkTypeVO)); return attributes; } /** * 获取非默认字段的链接类型属性 * * @param linkTypeVO 链接类型 * @return */ @Override public List getAttributesNoDefault(LinkTypeVO linkTypeVO) { Objects.requireNonNull(linkTypeVO,"链接类型不能为空"); return LinkTypeAttributeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.query().lambda().eq(LinkTypeAttribute::getPkLinkType, linkTypeVO.getOid()))); } /** * 批量获取非默认字段的链接类型属性 * * @param linkTypeDOList 链接类型 * @return 执行结果 */ @Override public Map> batchGetAttributesNoDefault(List linkTypeDOList) { VciBaseUtil.alertNotNull(linkTypeDOList,"链接类型集合"); Set oidSet = linkTypeDOList.stream().map(LinkType::getOid).collect(Collectors.toSet()); if (CollectionUtils.isEmpty(oidSet)){ return new HashMap<>(); } List attributes = baseMapper.selectList(Wrappers.query().lambda().in(LinkTypeAttribute::getPkLinkType, oidSet)); return LinkTypeAttributeWrapper.build().listEntityVO(Optional.ofNullable(attributes).orElseGet(ArrayList::new)).stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType)); } }