xiejun
2023-07-11 2d2375543df4879e738e2bafe9f1f478c9b1ab44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
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;
    }
}