| | |
| | | package com.vci.ubcs.code.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | 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.code.entity.DockingPreAttrMapping; |
| | | import com.vci.ubcs.code.entity.DockingPreAttrRange; |
| | | import com.vci.ubcs.code.entity.DockingPreMetaAttr; |
| | | import com.vci.ubcs.code.mapper.DockingPreAttrMappingMapper; |
| | | import com.vci.ubcs.code.service.IDockingPreAttrMappingService; |
| | | import com.vci.ubcs.code.service.IDockingPreAttrRangeService; |
| | | import com.vci.ubcs.code.service.IDockingPreMetaAttrService; |
| | | import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrMappingVO; |
| | | import com.vci.ubcs.code.vo.pagemodel.DockingPreAttrRangeVO; |
| | | import com.vci.ubcs.code.wrapper.DockingPreAttrMappingWrapper; |
| | | import com.vci.ubcs.code.wrapper.DockingPreAttrRangeWrapper; |
| | | import com.vci.ubcs.starter.exception.VciBaseException; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /*** |
| | | *集团属性映射服务 |
| | |
| | | */ |
| | | @Service |
| | | public class DockingPreAttrMappingServiceImpl extends ServiceImpl<DockingPreAttrMappingMapper, DockingPreAttrMapping> implements IDockingPreAttrMappingService { |
| | | /*** |
| | | * 集团分类属性属性映射配置服务 |
| | | */ |
| | | @Autowired(required = false) |
| | | DockingPreAttrMappingMapper dockingPreAttrMappingMapper; |
| | | /*** |
| | | * 集团属性服务 |
| | | */ |
| | | @Autowired(required = false) |
| | | IDockingPreMetaAttrService dockingPreMetaAttrService; |
| | | /*** |
| | | * 属性取值范围服务 |
| | | */ |
| | | @Autowired(required = false) |
| | | IDockingPreAttrRangeService dockingPreAttrRangeService; |
| | | /*** |
| | | * 根据主数据分类主键获取分类信息配置 |
| | | * @param codeClassifyId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<DockingPreAttrMappingVO> getdockingAttrMappingsByCodeclassId(String codeClassifyId) { |
| | | //首先获取分类模板属性,然后与属性配置坐比较,以防被有增删属性的可能 |
| | | List<DockingPreMetaAttr> dockingPreMetaAttrList= dockingPreMetaAttrService.selectByWrapper(Wrappers.<DockingPreMetaAttr>query().lambda().eq(DockingPreMetaAttr::getSourceClassifyId,codeClassifyId)); |
| | | List<DockingPreAttrMapping> dockingPreAttrMappings=this.selectByWrapper(Wrappers.<DockingPreAttrMapping>query().lambda().eq(DockingPreAttrMapping::getSourceClassifyId, codeClassifyId)); |
| | | Map<String/**属性主键**/, DockingPreAttrMapping> dockingPreAttrMappingMap = dockingPreAttrMappings.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getMetaListId(), t -> t)); |
| | | |
| | | List<DockingPreAttrMapping> newDockingPreAttrMappingList=new ArrayList<>(); |
| | | dockingPreMetaAttrList.stream().forEach(dockingPreMetaAttr -> { |
| | | String attrOid=dockingPreMetaAttr.getOid(); |
| | | DockingPreAttrMapping dockingPreAttrMapping=new DockingPreAttrMapping(); |
| | | if(dockingPreAttrMappingMap.containsKey(attrOid)){ |
| | | dockingPreAttrMapping= dockingPreAttrMappingMap.get(attrOid); |
| | | }else{ |
| | | dockingPreAttrMapping.setMetaListId(dockingPreMetaAttr.getOid());//属性主键 |
| | | dockingPreAttrMapping.setSourceAttrKey(dockingPreMetaAttr.getEnglishName());//英文名称 |
| | | dockingPreAttrMapping.setSourceAttrName(dockingPreMetaAttr.getChineseName());//中文名称 |
| | | dockingPreAttrMapping.setSourceClassifyId(dockingPreMetaAttr.getSourceClassifyId());//集团分类oid |
| | | dockingPreAttrMapping.setSourceClassifyName("");//分类名称 |
| | | dockingPreAttrMapping.setViewModeId(dockingPreMetaAttr.getViewModelId());//模型视图id |
| | | dockingPreAttrMapping.setViewModelName("");//分类模型名称 |
| | | dockingPreAttrMapping.setViewName("");//分类模型名称 |
| | | |
| | | } |
| | | newDockingPreAttrMappingList.add(dockingPreAttrMapping); |
| | | }); |
| | | return dockingPreAttrMappingDO2VOS(dockingPreAttrMappings,false); |
| | | } |
| | | |
| | | /*** |
| | | * 构造器查询方式 |
| | | * @param wrapper 查询封装器 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<DockingPreAttrMapping> selectByWrapper(Wrapper wrapper) { |
| | | return dockingPreAttrMappingMapper.selectList(wrapper); |
| | | } |
| | | |
| | | /**** |
| | | * 集团属性映射配置保存 |
| | | * @param dockingPreAttrMappingVOList |
| | | * @return |
| | | * @throws VciBaseException |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public List<DockingPreAttrMappingVO> batchAddSave(List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList) throws Exception { |
| | | if(org.springframework.util.CollectionUtils.isEmpty(dockingPreAttrMappingVOList)){ |
| | | return new ArrayList<>(); |
| | | } |
| | | /** |
| | | * 1.传递过来的有可能主数据模板新增属性,这样的需要添加,也有可能删除的属性,这样的映射需要删除 |
| | | * 也有更新的这样则更新 |
| | | */ |
| | | List<DockingPreAttrMapping> newDockingPreAttrMapping=new ArrayList<>(); |
| | | List<String>appingConfigOidList=new ArrayList<>(); |
| | | List<String>attrIdList=new ArrayList<>(); |
| | | List<String> attributeOidList=new ArrayList<>(); |
| | | List<DockingPreAttrRange> newDockingPreAttrRangeList=new ArrayList<>(); |
| | | List<DockingPreAttrRangeVO> newDockingPreAttrRangeVOList=new ArrayList<>(); |
| | | dockingPreAttrMappingVOList.stream().forEach(dockingPreAttrMappingVO -> { |
| | | List<DockingPreAttrRangeVO>dockingPreAttrRangeVOList=dockingPreAttrMappingVO.getDockingPreAttrRangeVoList(); |
| | | appingConfigOidList.add(dockingPreAttrMappingVO.getOid()); |
| | | if(!CollectionUtils.isEmpty(dockingPreAttrRangeVOList)) { |
| | | attrIdList.add(dockingPreAttrMappingVO.getMetaListId()); |
| | | newDockingPreAttrRangeVOList.addAll(dockingPreAttrRangeVOList); |
| | | } |
| | | }); |
| | | //将属性取值范围转成数据持久层对象 |
| | | newDockingPreAttrRangeList=DockingPreAttrRangeWrapper.build().voentitys(newDockingPreAttrRangeVOList); |
| | | //将属性映射配置信息转换为需要数据持久层保存的对象 |
| | | newDockingPreAttrMapping=DockingPreAttrMappingWrapper.build().voentitys(dockingPreAttrMappingVOList); |
| | | |
| | | List<DockingPreAttrRange> oldDockingPreAttrRangeList=new ArrayList<>(); |
| | | if(!org.springframework.util.CollectionUtils.isEmpty(attrIdList)) { |
| | | //获取存在的属性取值范围. |
| | | oldDockingPreAttrRangeList = dockingPreAttrRangeService.selectByWrapper(Wrappers.<DockingPreAttrRange>query().lambda().in(DockingPreAttrRange::getMetaListId,attrIdList)); |
| | | } |
| | | //获取存在的属性映射. |
| | | List<DockingPreAttrMapping> oldDataAttrMapping = dockingPreAttrMappingMapper.selectList(Wrappers.<DockingPreAttrMapping>query().lambda().in(DockingPreAttrMapping::getOid,appingConfigOidList)); |
| | | |
| | | Map<String/**oid**/,DockingPreAttrMapping/**属性对象**/> allSaveAttrMappingMap = newDockingPreAttrMapping.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2)); |
| | | Map<String/**oid**/,DockingPreAttrMapping/**对象**/> oldAttrMappingMap =oldDataAttrMapping.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2)); |
| | | //需要删除的属性映射 |
| | | List<String> deleteIdList=new ArrayList<>(); |
| | | oldDataAttrMapping.stream().forEach(cbo -> { |
| | | String oid =cbo.getOid(); |
| | | if(!allSaveAttrMappingMap.containsKey(oid)){ |
| | | deleteIdList.add(oid); |
| | | } |
| | | }); |
| | | this.removeBatchByIds(deleteIdList);//删除已经丢掉的 |
| | | this.saveOrUpdateBatch(newDockingPreAttrMapping);//添加更新新的配置信息 |
| | | |
| | | //取值范围处理 |
| | | if(!CollectionUtils.isEmpty(newDockingPreAttrRangeList)) { |
| | | Map<String/**oid**/, DockingPreAttrRange/**属性对象**/> allSaveAttrAttrRangeDOMap =newDockingPreAttrRangeList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t, (o1, o2) -> o2)); |
| | | Map<String/**oid**/, DockingPreAttrRange/**对象**/> oldSaveAttrAttrRangeDOMap = oldDockingPreAttrRangeList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t, (o1, o2) -> o2)); |
| | | |
| | | //需要删除的属性取值范围 |
| | | List<String> deleteRangeIdList = new ArrayList<>(); |
| | | oldDockingPreAttrRangeList.stream().forEach(cbo -> { |
| | | String oid = cbo.getOid(); |
| | | if (!allSaveAttrAttrRangeDOMap.containsKey(oid)) { |
| | | deleteRangeIdList.add(oid); |
| | | } |
| | | }); |
| | | dockingPreAttrRangeService.removeBatchByIds(deleteIdList);//删除已经丢掉的 |
| | | dockingPreAttrRangeService.saveOrUpdateBatch(newDockingPreAttrRangeList);//添加更新新的配置信息 |
| | | } |
| | | return dockingPreAttrMappingVOList; |
| | | } |
| | | |
| | | /*** |
| | | * 对象转换 |
| | | * @param dockingPreAttrMappings |
| | | * @return |
| | | */ |
| | | private List<DockingPreAttrMappingVO> dockingPreAttrMappingDO2VOS(Collection<DockingPreAttrMapping> dockingPreAttrMappings,boolean contain) { |
| | | List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList=new ArrayList<>(); |
| | | dockingPreAttrMappingVOList=DockingPreAttrMappingWrapper.build().entityVOs(dockingPreAttrMappings); |
| | | if(CollectionUtils.isEmpty(dockingPreAttrMappingVOList)){ |
| | | dockingPreAttrMappingVOList.stream().distinct().forEach(dockingPreAttrMappingVO -> { |
| | | if(contain) { |
| | | List<DockingPreAttrRangeVO> dockingPreAttrRangeVOList= dockingPreAttrRangeService.getDockingPreAttrRangesByMetaId(dockingPreAttrMappingVO.getMetaListId()); |
| | | dockingPreAttrMappingVO.setDockingPreAttrRangeVoList(dockingPreAttrRangeVOList); |
| | | } |
| | | }); |
| | | } |
| | | return dockingPreAttrMappingVOList; |
| | | } |
| | | } |