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 implements IBtmTypeAttributeService { @Autowired private IAttributeService attributeService; @Override public boolean deleteLogic(@NotEmpty List ids) { return false; } @Override public boolean changeStatus(@NotEmpty List ids, Integer status) { return false; } /** * 检查属性存在并添加 * * @param attributesDTOList 页面传输对象集合 * @return 受影响的行数 */ @Override public List checkAndInsert(String btmTypeOid, List attributesDTOList, String creator, Date now) { List attributeIdList = new ArrayList<>(); List 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 records) { if (CollectionUtils.isEmpty(records)){ return 0; } return baseMapper.batchDelete(records); } /** * 检查属性存在并添加 * * @param btmTypeOid 业务类型主键 * @param attributesDTOList 页面传输对象集合 * @param creator 创建人 * @param now ts时间戳 * @return 受影响的行数 */ @Override public List checkAndUpdate(String btmTypeOid, List attributesDTOList, String creator, Date now) { List attributeIdList = new ArrayList<>(); List 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 getAttributeByBtmTypeOid(String btmTypeOid){ Func.requireNotNull(btmTypeOid,"业务类型主键"); return BtmTypeAttributeWrapper.build().listEntityVO( Optional.ofNullable( baseMapper.selectList(Wrappers.query().lambda().eq(BtmTypeAttribute::getPkBtmType, btmTypeOid)) ).orElseGet(ArrayList::new) ); } /** * 根据业务类型主键获取关联的所有属性对象 * * @param oidCollection 业务类型主键集合 * @return 所有的属性对象,包括系统内置属性,key是业务类型主键,value是包含的属性 * @throws VciBaseException 业务类型不存在,参数为空或者查询出错时会抛出异常 */ @Override public List batchListHasAttributesByBtmTypeOidCollection(Collection oidCollection) throws VciBaseException { VciBaseUtil.alertNotNull(oidCollection,"业务类型主键"); List doList = baseMapper.selectList(Wrappers.query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection)); return BtmTypeAttributeWrapper.build().listEntityVO(doList); } /** * 获取业务类型中的指定属性 * * @param id 业务类型的主键 * @param attributeIdCollection 属性的id,若为空则获取全部 * @return 属性的数据对象 */ @Override public List selectByBtmTypeIdAndAttributeIds(String id, Collection attributeIdCollection) { return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection); } /** * 通过业务类型的英文名称获取关联的属性 * * @param idList 业务类型的英文名称集合 * @return 包含的属性 */ @Override public List selectByBtmTypeIds(List idList) { return baseMapper.selectByBtmTypeIds(idList); } /** * 获取默认字段 * 默认字段均不可为空 * @param btmType 业务类型 * @return 执行结果 */ @Override public List getDefaultAttribute(BtmTypeVO btmType) { List 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 getAllAttribute(BtmTypeVO btmType) { List list = getAttributeByBtmTypeOid(btmType.getOid()); list.addAll(getDefaultAttribute(btmType)); return list; } }