package com.vci.ubcs.code.service.impl;
|
|
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.vci.ubcs.code.entity.*;
|
import com.vci.ubcs.code.service.*;
|
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO;
|
import com.vci.ubcs.starter.web.util.WebUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.core.tool.api.R;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
import static com.vci.ubcs.code.constant.MdmDuckingConstant.*;
|
|
|
/*
|
* 主题库集成服务
|
* @author xiejun
|
* @date 2023-06-19
|
**/
|
|
@Service
|
@Slf4j
|
public class CodeDuckingSyncServiceImpl implements ICodeDuckingSyncService {
|
|
@Resource
|
private IDockingSystemService dockingSystemService;
|
|
@Resource
|
private IDockingDataService dockingDataService;
|
@Resource
|
private IDockingTaskService dockingTaskService;
|
@Resource
|
private IDockingSystemConfigService dockingSystemConfigService;
|
@Resource
|
private ICodeClassifyService codeClassifyService;
|
@Override
|
public void DockingDataSyncScheduing() {
|
|
// insertCache2();
|
initPushDataTaks(1);
|
//sendpushDataForService();
|
|
}
|
|
@Override
|
public void DockingClassSyncScheduing() {
|
|
}
|
|
@Override
|
public R sendData(String oids) {
|
|
|
|
return null;
|
}
|
|
|
/***
|
* 查询redis中数据,对比后插入dockingtask
|
* @param type
|
*/
|
private void initPushDataTaks(int type){
|
//initSysadmin();
|
|
List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigService.list(
|
Wrappers.<DockingSystemConfig>query().lambda().eq(DockingSystemConfig::getUsedFlag,"true")
|
.eq(DockingSystemConfig::getPushType,type==2?"2":"1"));//2是代表分类推送,1是代表数据推送
|
|
if(CollectionUtils.isEmpty(dockingSystemConfigList)){
|
String title=type==2?"分类推送":"数据推送";
|
log.info("info->所有集成系统,未查询到相关的【"+title+"】的接口配置信息,配置");
|
return;
|
}
|
Map<String ,List<DockingSystemConfig>> sysIntInfoDOMap = new HashMap<>();//key=classifyoid,value=list<map>
|
for (DockingSystemConfig dockingSystemConfig:dockingSystemConfigList){
|
List<DockingSystemConfig> dockingSystemList = sysIntInfoDOMap.get(dockingSystemConfig.getClassifyOid());
|
if(dockingSystemList==null){
|
dockingSystemList = new ArrayList<>();
|
}
|
dockingSystemList.add(dockingSystemConfig);
|
sysIntInfoDOMap.put(dockingSystemConfig.getClassifyOid(),dockingSystemList);
|
}
|
//根据类型去查询需要集成的分类或者数据
|
LambdaQueryWrapper<DockingData> queryWrapper = Wrappers.<DockingData>lambdaQuery();
|
queryWrapper.eq(DockingData::getSendFlag,"false");
|
if(type==2){
|
queryWrapper.eq(DockingData::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
|
}else {
|
queryWrapper.notIn(DockingData::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
|
}
|
List<DockingData> dataList = dockingDataService.list(queryWrapper);
|
|
for (DockingData mapi:dataList){
|
WebUtil.setPersistence(false);
|
String dataoid = mapi.getOid();//data对象的oid
|
String classifyoid = mapi.getClassifyOid();
|
String id = mapi.getId();
|
String uniquecode = mapi.getUniqueCode();
|
String btmid = mapi.getBtmId();
|
String btmoid = mapi.getBtmOid();
|
String sendtype = mapi.getSendType();
|
String classifyid = mapi.getClassifyId();
|
String classifyname = mapi.getClassifyName();
|
String curentClassOid=null;
|
if(type==2){
|
curentClassOid=btmoid;
|
}else{
|
curentClassOid=classifyoid;
|
}
|
List<DockingSystemConfig> effectiveSysIntInfoVOs=new ArrayList<>();
|
//根据当前数据的id,查询获取哪些系统需要做集成
|
List<CodeClassify> parentLeveDO= codeClassifyService.selectAllLevelParentByOid(curentClassOid);
|
if(CollectionUtils.isEmpty(parentLeveDO)){
|
continue;//说明这个分类被删掉了,不做处理
|
}
|
Map<String, CodeClassify> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
|
|
oidCodeclassifyDOMap.keySet().forEach(oid->{
|
if(sysIntInfoDOMap.containsKey(oid)){
|
List<DockingSystemConfig> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
|
effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
|
}
|
});
|
//如果校验的系统接口信息不存在,则数据不不往信息里推送
|
if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
|
continue;
|
}
|
List<DockingTask> dockingTask_insert = new ArrayList<>();
|
for (DockingSystemConfig sysIntInfoVOi:effectiveSysIntInfoVOs){
|
DockingTask dockingTask = new DockingTask();
|
dockingTask.setOid(VciBaseUtil.getPk());
|
dockingTask.setSendFlag(SEND_FLAG_FALSE);
|
dockingTask.setId(id);//编码
|
dockingTask.setUniqueCode(uniquecode);
|
dockingTask.setBtmOid(btmoid);//数据oid
|
dockingTask.setBtmId(btmid);//数据业务类型id
|
dockingTask.setClassifyId(classifyid);//数据在分类id
|
dockingTask.setClassifyOid(classifyoid);//数据所在分类oid
|
dockingTask.setClassifyName(classifyname);//数据所在分类名称
|
dockingTask.setSendType(sendtype);//数据推送类型
|
dockingTask.setDataOid(dataoid);
|
|
//intinfo
|
dockingTask.setSysInfoOid(sysIntInfoVOi.getOid());//intinfo的oid
|
dockingTask.setSystemOid(sysIntInfoVOi.getSysBaseOid());//系统oid
|
dockingTask.setSystemCode(sysIntInfoVOi.getSysBaseId());//系统编码
|
dockingTask.setSystemName(sysIntInfoVOi.getSysBaseName());//系统name
|
dockingTask_insert.add(dockingTask);
|
}
|
|
if(dockingTask_insert.size()!=0) {
|
dockingTaskService.saveBatch(dockingTask_insert);
|
}
|
//dockingTaskDaoI.updateByPrimaryKey方法报错了,所以手写了这个
|
boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
|
if(!u){
|
log.error("集成data分解任务失败!dataoid:"+dataoid);
|
continue;
|
}
|
}
|
}
|
|
/**
|
* dockingdata根据oid修改sendflag
|
* @param oid
|
* @param sendflag
|
* @return
|
*/
|
public boolean updateDockingDatasSendFlag(String oid,String sendflag){
|
boolean u=false;
|
DockingData dockingData=dockingDataService.getById(oid);
|
if(dockingData!=null){
|
dockingData.setSendFlag(sendflag);
|
u= dockingDataService.updateById(dockingData);
|
}
|
return u;
|
}
|
}
|