package com.vci.ubcs.code.applyjtcodeservice.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.CodeClassify;
|
import com.vci.ubcs.code.feign.ICodeClassifyClient;
|
import com.vci.ubcs.code.applyjtcodeservice.entity.*;
|
import com.vci.ubcs.code.applyjtcodeservice.mapper.DockingPreAttrMappingMapper;
|
import com.vci.ubcs.code.applyjtcodeservice.service.*;
|
import com.vci.ubcs.code.applyjtcodeservice.vo.DokingAttributeSerchVO;
|
import com.vci.ubcs.code.applyjtcodeservice.wrapper.DockingPreAttrMappingWrapper;
|
import com.vci.ubcs.code.applyjtcodeservice.wrapper.DockingPreAttrRangeWrapper;
|
import com.vci.ubcs.starter.exception.VciBaseException;
|
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
|
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrMappingVO;
|
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrRangeVO;
|
import org.springblade.core.tool.api.R;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
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;
|
|
/***
|
*集团属性映射服务
|
* @author xiejun
|
* @date 2023-05-22
|
*/
|
@Service
|
public class DockingPreAttrMappingServiceImpl extends ServiceImpl<DockingPreAttrMappingMapper, DockingPreAttrMapping> implements IDockingPreAttrMappingService {
|
|
/***
|
* 集团分类属性属性映射配置服务
|
*/
|
@Autowired(required = false)
|
private DockingPreAttrMappingMapper dockingPreAttrMappingMapper;
|
/***
|
* 主数据分类服务
|
*/
|
@Autowired(required = true)
|
private ICodeClassifyClient codeClassifyClient;
|
|
/***
|
* 业务数据属性服务
|
*/
|
//@Autowired(required = false)
|
//private MdmEngineService mdmEngineService;
|
|
/***
|
* 集团属性服务
|
*/
|
@Autowired(required = false)
|
private IDockingPreMetaAttrService dockingPreMetaAttrService;
|
/***
|
* 属性取值范围服务
|
*/
|
@Autowired(required = false)
|
private IDockingPreAttrRangeService dockingPreAttrRangeService;
|
|
|
/***
|
* 集团分类视图模型服务
|
*/
|
@Autowired(required = false)
|
|
private IDockingPreViewModelService dockingPreViewModelService;
|
|
/***
|
* 集团属性服务
|
*/
|
@Autowired(required = false)
|
@Lazy
|
private IDockingPreClassifyService dockingPreClassifyService;
|
|
/***
|
* 根据主数据分类主键获取分类信息配置
|
* @param codeClassifyId
|
* @return
|
*/
|
@Override
|
public List<DockingPreAttrMappingVO> getDockingAttrMappingsByCodeClassifyId(String codeClassifyId,String sourceClassifyId) {
|
VciBaseUtil.alertNotNull(codeClassifyId,"主数据分类主键");
|
VciBaseUtil.alertNotNull(sourceClassifyId,"集团分类主键");
|
//首先获取分类模板属性,然后与属性配置坐比较,以防被有增删属性的可能
|
DockingPreClassify dockingPreClassify=dockingPreClassifyService.getById(sourceClassifyId);
|
List<DockingPreMetaAttr> dockingPreMetaAttrList= dockingPreMetaAttrService.selectByWrapper(Wrappers.<DockingPreMetaAttr>query().lambda().eq(DockingPreMetaAttr::getSourceClassifyId,sourceClassifyId));
|
List<DockingPreAttrMapping> dockingPreAttrMappings=this.selectByWrapper(Wrappers.<DockingPreAttrMapping>query().lambda().eq(DockingPreAttrMapping::getSourceClassifyId, sourceClassifyId).eq(DockingPreAttrMapping::getTargetClassifyId, codeClassifyId));
|
Map<String/**属性主键**/, DockingPreAttrMapping> dockingPreAttrMappingMap = dockingPreAttrMappings.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getMetaListId(), t -> t));
|
List<DockingPreViewModel> dockingPreViewModelList= dockingPreViewModelService.list(Wrappers.<DockingPreViewModel>query().lambda().eq(DockingPreViewModel::getSourceClassifyId,sourceClassifyId));
|
Map<String,DockingPreViewModel> dockingPreViewModelMap=dockingPreViewModelList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
|
CodeClassify codeClassify= codeClassifyClient.getById(codeClassifyId);
|
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);
|
DefaultAttrAssimtUtil.updateDefaultAttrAssimt(dockingPreAttrMapping);
|
}else{
|
DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingPreAttrMapping, MdmBtmTypeConstant.DOCKING_PRE_JAPPLYFORM);
|
dockingPreAttrMapping.setMetaListId(dockingPreMetaAttr.getOid());//属性主键
|
dockingPreAttrMapping.setSourceAttrKey(dockingPreMetaAttr.getEnglishName());//英文名称
|
dockingPreAttrMapping.setSourceAttrName(dockingPreMetaAttr.getChineseName());//中文名称
|
dockingPreAttrMapping.setSourceClassifyId(dockingPreMetaAttr.getSourceClassifyId());//集团分类oid
|
DockingPreViewModel dockingPreViewModel=new DockingPreViewModel();
|
if(dockingPreViewModelMap.containsKey(dockingPreMetaAttr.getViewModelId())){
|
dockingPreViewModel=dockingPreViewModelMap.get(dockingPreMetaAttr.getViewModelId());
|
}
|
dockingPreAttrMapping.setSourceClassifyName(dockingPreClassify.getClassName());//分类名称
|
dockingPreAttrMapping.setViewModeId(dockingPreMetaAttr.getViewModelId());//模型视图id
|
dockingPreAttrMapping.setViewModelName(dockingPreViewModel.getName());//分类模型名称
|
dockingPreAttrMapping.setViewName(dockingPreViewModel.getViewName());//分类模型名称
|
dockingPreAttrMapping.setTargetClassifyId(codeClassifyId);
|
dockingPreAttrMapping.setTargetClassifyName(codeClassify.getName());
|
}
|
newDockingPreAttrMappingList.add(dockingPreAttrMapping);
|
});
|
return dockingPreAttrMappingDO2VOS(newDockingPreAttrMappingList,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;
|
}
|
|
/***
|
* 根据主数据oid检测是否属性映射配置
|
* @param targetClassifyId
|
* @param sourceClassifyId
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public boolean checkHasConfigByTragetCodeclassifyId(String targetClassifyId,String sourceClassifyId){
|
Long count =0L;
|
try {
|
count = dockingPreAttrMappingMapper.selectCount(Wrappers.<DockingPreAttrMapping>query().lambda().eq(DockingPreAttrMapping::getTargetClassifyId, targetClassifyId).eq(DockingPreAttrMapping::getSourceClassifyId,sourceClassifyId));
|
}catch (Throwable e){
|
e.printStackTrace();
|
} finally {
|
return count>0?true:false;
|
}
|
}
|
|
@Override
|
public R search(DokingAttributeSerchVO dokingAttributeSerchVO) {
|
return null;
|
}
|
|
|
/***
|
* 对象转换
|
* @param dockingPreAttrMappings
|
* @return
|
*/
|
@Override
|
public 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;
|
}
|
|
}
|