package com.vci.ubcs.omd.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.wrapper.BtmTypeAttributeWrapper; import com.vci.ubcs.starter.exception.VciBaseException; 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); } }