package com.vci.ubcs.code.service.impl;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.vci.ubcs.code.constant.MdmDuckingConstant;
|
import com.vci.ubcs.code.mapper.CodeClassifyMapper;
|
import com.vci.ubcs.code.mapper.DockingDataMapper;
|
import com.vci.ubcs.code.mapper.DockingLogeMapper;
|
import com.vci.ubcs.code.mapper.DockingTaskMapper;
|
import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO;
|
import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO;
|
import com.vci.ubcs.code.dto.datapush.classify.NodeDataDTO;
|
import com.vci.ubcs.code.dto.datapush.classify.NodeLibraryDTO;
|
import com.vci.ubcs.code.dto.datapush.data.NodeJosnDTO;
|
import com.vci.ubcs.code.dto.datapush.data.NodeObjectDTO;
|
import com.vci.ubcs.code.dto.datapush.data.NodeProDTO;
|
import com.vci.ubcs.code.dto.datapush.data.NodedataDTO;
|
import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO;
|
import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO;
|
import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
|
import com.vci.ubcs.code.service.CodeDuckingSyncServiceI;
|
import com.vci.ubcs.code.service.MdmEngineServiceI;
|
import com.vci.ubcs.code.service.SysIntInfoServiceI;
|
import com.vci.ubcs.code.utils.HttpUtils;
|
import com.vci.ubcs.code.utils.WsErpClientUtil;
|
import com.thoughtworks.xstream.XStream;
|
import com.thoughtworks.xstream.io.xml.DomDriver;
|
import com.vci.starter.web.constant.QueryOptionConstant;
|
import com.vci.starter.web.enumpck.UserSecretEnum;
|
import com.vci.starter.web.pagemodel.BaseResult;
|
import com.vci.starter.web.pagemodel.SessionInfo;
|
import com.vci.starter.web.util.VciBaseUtil;
|
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
|
import com.vci.ubcs.code.entity.*;
|
import com.vci.web.pageModel.BatchCBO;
|
import com.vci.web.redis.RedisService;
|
import com.vci.web.service.WebBoServiceI;
|
import com.vci.web.util.PlatformClientUtil;
|
import com.vci.web.util.WebUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
|
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
|
import com.vci.ubcs.code.vo.pagemodel.SysIntInfoVO;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* 主题库集成服务
|
* @author wangyi
|
* @date 2022-03-20
|
*/
|
@Service
|
public class CodeDuckingSyncServiceImpl implements CodeDuckingSyncServiceI {
|
|
/**
|
* 日志
|
*/
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
/**
|
* 集成推送任务数据操作层
|
*/
|
@Resource
|
private DockingTaskMapper dockingTaskDaoI;
|
|
/**
|
* 集成推送任务数据操作层
|
*/
|
@Resource
|
private DockingDataMapper dockingDataDaoI;
|
|
/**
|
* 集成日志数据操作层
|
*/
|
@Resource
|
private DockingLogeMapper dockingLogeDaoI;
|
|
/**
|
* 模板属性数据操作层
|
*/
|
@Resource
|
private CodeClassifyMapper codeClassifyDaoI;
|
|
/**
|
* 业务类型操作的服务
|
*/
|
@Autowired
|
private WebBoServiceI boService;
|
|
/**
|
* 缓存服务
|
*/
|
@Autowired
|
private RedisService redisService;
|
|
/**
|
* 数据服务
|
*/
|
@Autowired(required = false)
|
@Lazy
|
private MdmEngineServiceI mdmEngineServiceI;
|
|
|
/**
|
* 要推送系统的服务
|
*/
|
@Autowired
|
private SysIntInfoServiceI sysIntInfoServiceI;
|
|
@Value("${dataSyncPush.dataParamName:xmlData}")
|
public String DATA_PARAM_NAME;
|
|
/**
|
* 定时任务推送
|
*/
|
@Override
|
public void DockingDataSyncScheduing(){
|
// insertCache2();
|
initPushDataTaks(1);
|
sendpushDataForService();
|
}
|
|
/**
|
* 分类定时任务推送
|
*/
|
@Override
|
public void DockingClassSyncScheduing(){
|
initPushDataTaks(2);//分类推送
|
sendpushClsfForService();
|
}
|
|
/**
|
* 手动推送为完成的数据
|
* @param oids
|
* @return
|
*/
|
@Override
|
public BaseResult sendData(String oids) {
|
VciBaseUtil.alertNotNull(oids,"系统集成基础信息数据对象",oids,"系统集成基础信息的主键");
|
List<String> dockingTaskOidList=new ArrayList<>();
|
dockingTaskOidList= VciBaseUtil.str2List(oids);
|
List<DockingTaskDO> newDockingTaskDOs= this.dockingTaskDaoI.selectByPrimaryKeyCollection(dockingTaskOidList);
|
Map<String,List<DockingTaskDO>> typeDockingTaskDOMap=new HashMap<>();
|
newDockingTaskDOs.stream().forEach(newDockingTaskDO->{
|
String btmId=newDockingTaskDO.getBtmid();
|
if(btmId.equalsIgnoreCase(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
|
List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
|
if(CollectionUtils.isEmpty(dockingTaskDOList)){
|
dockingTaskDOList=new ArrayList<>();
|
}
|
dockingTaskDOList.add(newDockingTaskDO);
|
typeDockingTaskDOMap.put(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskDOList);
|
}else{
|
List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get("data");
|
if(CollectionUtils.isEmpty(dockingTaskDOList)){
|
dockingTaskDOList=new ArrayList<>();
|
}
|
dockingTaskDOList.add(newDockingTaskDO);
|
typeDockingTaskDOMap.put("data",dockingTaskDOList);
|
}
|
});
|
typeDockingTaskDOMap.keySet().forEach(type->{
|
List<DockingTaskDO> DockingTaskDO=typeDockingTaskDOMap.get(type);
|
if(!CollectionUtils.isEmpty(DockingTaskDO)){
|
if(type.equalsIgnoreCase(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
|
this.sendpushClsfForService(DockingTaskDO);
|
}else{
|
this.sendpushDataForService(DockingTaskDO);
|
}
|
}
|
});
|
return BaseResult.successMsg("手动推送完成,请核对是否推送成功");
|
}
|
/***
|
* 查询redis中数据,对比后插入dockingtask
|
* @param type
|
*/
|
private void initPushDataTaks(int type){
|
initSysadmin();
|
//sysintinfo查询要推送的主题库和相关系统信息
|
Map<String, String> conditionMap = new HashMap<>();
|
conditionMap.put("usedflag","true");
|
conditionMap.put("pushType",type==2?"2":"1") ;//2是代表分类推送,1是代表数据推送
|
|
List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
|
if(CollectionUtils.isEmpty(sysIntInfoVOList)){
|
String title=type==2?"分类推送":"数据推送";
|
logger.info("info->所有集成系统,未查询到相关的【"+title+"】的接口配置信息,配置");
|
return;
|
}
|
Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
|
for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
|
List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
|
if(SysIntInfoVOListi==null){
|
SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
|
}
|
SysIntInfoVOListi.add(sysIntInfoVOi);
|
sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
|
}
|
//根据类型去查询需要集成的分类或者数据
|
VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
|
queryWrapperForDO.addQueryMap("sendflag","false");
|
if(type==2){
|
queryWrapperForDO.addQueryMap("btmTypeId", MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
|
}else {
|
queryWrapperForDO.addQueryMap("btmTypeId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT)) + ")");
|
}
|
List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
|
|
for (DockingDataDO mapi:dataList){
|
WebUtil.setPersistence(false);
|
BatchCBO batchCBO = new BatchCBO();
|
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<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
|
//根据当前数据的id,查询获取哪些系统需要做集成
|
List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(curentClassOid);
|
if(CollectionUtils.isEmpty(parentLeveDO)){
|
continue;//说明这个分类被删掉了,不做处理
|
}
|
Map<String, CodeClassifyDO> 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<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
|
effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
|
}
|
});
|
//如果校验的系统接口信息不存在,则数据不不往信息里推送
|
if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
|
continue;
|
}
|
List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
|
for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
|
DockingTaskDO dockingTaskDO = new DockingTaskDO();
|
dockingTaskDO.setOid(redisService.getUUIDEveryDay());
|
dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_FALSE);
|
dockingTaskDO.setId(id);//编码
|
dockingTaskDO.setUniquecode(uniquecode);
|
dockingTaskDO.setBtmoid(btmoid);//数据oid
|
dockingTaskDO.setBtmid(btmid);//数据业务类型id
|
dockingTaskDO.setClassifyid(classifyid);//数据在分类id
|
dockingTaskDO.setClassifyoid(classifyoid);//数据所在分类oid
|
dockingTaskDO.setClassifyname(classifyname);//数据所在分类名称
|
dockingTaskDO.setSendtype(sendtype);//数据推送类型
|
dockingTaskDO.setDataoid(dataoid);
|
|
//intinfo
|
dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo的oid
|
dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//系统oid
|
dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//系统编码
|
dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//系统name
|
dockingTaskDO_insert.add(dockingTaskDO);
|
}
|
|
BatchCBO bi = null;
|
if(dockingTaskDO_insert.size()!=0) {
|
bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
|
batchCBO.copyFromOther(bi);
|
}
|
WebUtil.setPersistence(true);
|
boService.persistenceBatch(batchCBO);
|
//dockingTaskDaoI.updateByPrimaryKey方法报错了,所以手写了这个
|
boolean u = updateDockingDatasSendFlag(dataoid, MdmDuckingConstant.SEND_FLAG_TRUE);
|
if(!u){
|
logger.error("集成data分解任务失败!dataoid:"+dataoid);
|
continue;
|
}
|
|
}
|
}
|
private void sendpushDataForService (){
|
initSysadmin();
|
//查询哪些任务还没有执行完成
|
VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
|
queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
|
queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
|
List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
|
sendpushDataForService(dockingTaskDOS);
|
}
|
/***
|
* 发送编码主数据
|
*/
|
private void sendpushDataForService (List<DockingTaskDO> dockingTaskDOS){
|
|
//每个task依次执行推送
|
for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
|
//每个task一个事务,开启
|
WebUtil.setPersistence(false);
|
BatchCBO batchCBO = new BatchCBO();
|
String paramString="";
|
String sendString="";
|
String backString="";
|
try {
|
//查询系统接口信息,ip method,dataType
|
String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 的oid
|
String classifyoid = dockingTaskDO.getClassifyoid();
|
//查询要推送的数据
|
String btmoid = dockingTaskDO.getBtmoid();//数据btmid
|
//表示是主数据
|
CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
|
BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
|
List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
|
Map<String/**英文名称**/, String/**中文名称**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
|
Map<String, String> data = new HashMap<>();
|
if (baseResult == null) {
|
JSONObject josni = redisService.getCacheObject(MdmDuckingConstant.DOCKING_CACHE2_DELETE + btmoid);
|
data = (Map) josni;
|
} else {
|
data = baseResult.getObj();
|
}
|
List<NodeProDTO> nodeProDTOS = new ArrayList<>();
|
Map<String, String> finalData = data;
|
attrIdNameMap.keySet().forEach(field -> {
|
String outName = attrIdNameMap.get(field);
|
if (finalData.containsKey(field)) {
|
String Value = finalData.get(field);
|
NodeProDTO nodeProDTO = new NodeProDTO();
|
nodeProDTO.setFiledName(field);
|
nodeProDTO.setOutname(outName);
|
nodeProDTO.setFiledValue(Value);
|
nodeProDTOS.add(nodeProDTO);
|
}
|
});
|
|
String[] classCodeLeves = dockingTaskDO.getClassifyid().split(",");
|
NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
|
NodedataDTO nodeDataDTO = new NodedataDTO();
|
NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
|
nodeObjectDTO.setCode(dockingTaskDO.getId());//设置编码
|
nodeObjectDTO.setClassCode(classCodeLeves[0]);
|
nodeObjectDTO.setStatus(data.get("lcstatus"));
|
nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
|
nodeObjectDTO.setPro(nodeProDTOS);
|
List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
|
nodeObjectDTOS.add(nodeObjectDTO);
|
nodeDataDTO.setObject(nodeObjectDTOS);
|
nodeJosnDTO.setData(nodeDataDTO);
|
//查询推送接口参数
|
SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
|
String paramType = sysIntInfoVO.getParamtype();//xml/json
|
if (paramType.equals(MdmDuckingConstant.DATATYPE_JSON)) {
|
Object object = JSONObject.toJSON(nodeJosnDTO);
|
sendString = object.toString();
|
} else {
|
//组织返回接口信息
|
XStream xStream = new XStream(new DomDriver());
|
xStream.processAnnotations(NodedataDTO.class);
|
xStream.autodetectAnnotations(true);
|
sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
|
}
|
//调用接口
|
callInterface(sendString,sysIntInfoVO, dockingTaskDO, batchCBO);
|
}catch (Throwable e){
|
e.printStackTrace();
|
}finally {
|
//每一个task一个事物
|
WebUtil.setPersistence(true);
|
boService.persistenceBatch(batchCBO);
|
}
|
}
|
}
|
public void sendpushClsfForService(){
|
initSysadmin();
|
//查询哪些任务还没有执行完成
|
VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
|
queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
|
queryWrapper.addQueryMap("btmId", MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
|
List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
|
sendpushClsfForService(dockingTaskDOS);
|
}
|
/***
|
* 发送分类数据
|
*/
|
private void sendpushClsfForService(List<DockingTaskDO> dockingTaskDOS){
|
//每个task依次执行推送
|
for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
|
//每个task一个事务,开启
|
WebUtil.setPersistence(false);
|
BatchCBO batchCBO = new BatchCBO();
|
String paramString="";
|
String sendString="";
|
String backString="";
|
//查询系统接口信息,ip method,dataType
|
String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 的oid
|
try {
|
//查询要推送的数据
|
String btmoid = dockingTaskDO.getBtmoid();//数据btmid
|
JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
|
CodeClassifyDO codeClassifyDO=codeClassifyDaoI.selectByPrimaryKey(btmoid);
|
List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
|
NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
|
nodeClassifyDTO.setClassCode(codeClassifyDO.getId());//分类代号
|
nodeClassifyDTO.setDescription(codeClassifyDO.getDescription());//分类描述
|
nodeClassifyDTO.setFullPathName(codeClassifyDO.getPath());//全路径
|
nodeClassifyDTO.setLcStatus(codeClassifyDO.getLcStatus());//状态
|
// CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
|
nodeClassifyDTO.setPid(codeClassifyDO.getId());//父id节点
|
nodeClassifyDTO.setId(codeClassifyDO.getOid());//分类oid
|
nodeClassifyDTO.setName(codeClassifyDO.getName());//分类名称
|
nodeClassifyDTOList.add(nodeClassifyDTO);
|
NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
|
nodeLibraryDTO.setClassify(nodeClassifyDTOList);
|
CodeClassifyDO rootClassify=codeClassifyDaoI.getRootClassify(btmoid);
|
nodeLibraryDTO.setId(rootClassify.getOid());
|
nodeLibraryDTO.setName(rootClassify.getName());
|
NodeDataDTO nodeDataDTO=new NodeDataDTO();
|
nodeDataDTO.setLibrary(nodeLibraryDTO);
|
jsonRootDataDTO.setData(nodeDataDTO);
|
|
//查询推送接口参数
|
SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
|
String paramType = sysIntInfoVO.getParamtype();//xml/json
|
if(paramType.equals(MdmDuckingConstant.DATATYPE_JSON)){
|
Object object = JSONObject.toJSON(jsonRootDataDTO);
|
sendString = object.toString();
|
}else{
|
//组织返回接口信息
|
XStream xStream = new XStream(new DomDriver());
|
xStream.processAnnotations(NodeDataDTO.class);
|
xStream.autodetectAnnotations(true);
|
sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
|
}
|
//调用接口
|
callInterface(sendString,sysIntInfoVO,dockingTaskDO,batchCBO);
|
}catch (Throwable e){
|
e.printStackTrace();
|
}finally {
|
//每一个task一个事物
|
WebUtil.setPersistence(true);
|
boService.persistenceBatch(batchCBO);
|
}
|
}
|
}
|
|
/***
|
* 调用接口
|
* @param sysIntInfoVO
|
* @throws Throwable
|
*/
|
private void callInterface(String sendString , SysIntInfoVO sysIntInfoVO,DockingTaskDO dockingTaskDO,BatchCBO batchCBO) throws Throwable{
|
String paramString = "";
|
|
String backString = "";
|
String msg="";
|
String url = sysIntInfoVO.getRequesturl();//url
|
List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
|
try {
|
|
String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
|
String paramType = sysIntInfoVO.getParamtype();//xml/json
|
String returnType = sysIntInfoVO.getReturntype();//xml/json
|
String requestmethod= sysIntInfoVO.getRequestmethod();
|
String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//主要是webservice的方法名
|
String namespace = sysIntInfoVO.getNamespace();//namespace
|
String soapaction = sysIntInfoVO.getSoapaction();//soapaction
|
String targName = sysIntInfoVO.getTargName();//targName
|
String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice是cxf/axis
|
//查询param
|
List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(sysIntInfoVO.getOid());
|
//查询header
|
List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(sysIntInfoVO.getOid());
|
if(type.equals(MdmDuckingConstant.URLTYPE_HTTP)) {
|
if (requestmethod.equals(MdmDuckingConstant.URLTYPE_GET)) {//GET请求
|
String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
|
//拼接param
|
for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
|
sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
|
}
|
paramString = sendurl;
|
backString = HttpUtils.get(sendurl);
|
} else if (requestmethod.equals(MdmDuckingConstant.URLTYPE_POST)) {//POST请求
|
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
|
params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
|
}
|
params.add(DATA_PARAM_NAME,sendString);
|
paramString = params.toString();
|
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
|
headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
|
}
|
backString = HttpUtils.post(url, params, headers);
|
}
|
if(backString.startsWith("\"")){
|
backString=backString.substring(backString.indexOf("\"")+1);
|
}
|
if(backString.endsWith("\"")){
|
backString=backString.substring(0,backString.lastIndexOf("\""));
|
}
|
if(backString.contains("\n")){
|
String res="\n";
|
backString= backString.replaceAll(res,"");
|
}
|
if(backString.contains("\\")){
|
String res="\\\\\"";
|
backString= backString.replaceAll(res,"\"").trim();
|
}
|
}else if (type.equals(MdmDuckingConstant.URLTYPE_WEBSERVICE)) {//webserver请求
|
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
|
params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
|
}
|
paramString = sendString;
|
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
|
headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
|
}
|
backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
|
|
} else {//corba接口
|
//paramString=sendString;
|
// backString = jacorbClient.getBOFactoryService().sendCode(sendString);
|
}
|
|
ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
|
if(returnType.equals(MdmDuckingConstant.DATATYPE_JSON)){
|
resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
|
}else {
|
//组织返回接口信息
|
XStream xStream = new XStream(new DomDriver());
|
xStream.processAnnotations(ResultNodeDataDTO.class);
|
xStream.autodetectAnnotations(true);
|
ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
|
resultJsonDTO.setData(resultNodeDataDTO);
|
}
|
ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
|
resultNodeObjectDTOS=resultNodeDataDTO.getObject();
|
|
}catch (Throwable e){
|
msg="调用接口失败:"+e;
|
e.printStackTrace();
|
// throw new Throwable("调用接口失败:"+e);
|
ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO();
|
resultNodeObjectDTO.setErroid("1");
|
resultNodeObjectDTO.setMsg(msg);
|
resultNodeObjectDTO.setCode(sysIntInfoVO.getPushType().equalsIgnoreCase("2")?dockingTaskDO.getClassifyid():dockingTaskDO.getId());
|
resultNodeObjectDTO.setOid(dockingTaskDO.getBtmoid());
|
resultNodeObjectDTOS.add(resultNodeObjectDTO);
|
}finally {
|
boolean isSend = false;
|
for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
|
String erroid = resultNodeObjectDTO.getErroid();
|
msg = resultNodeObjectDTO.getMsg();
|
if("0".equals(erroid)){
|
isSend = true;
|
}else if("1".equals(erroid)){
|
isSend=false;
|
}else{
|
isSend=false;
|
}
|
DockingLogeDO dockingLogeDO = new DockingLogeDO();
|
String oid=redisService.getUUIDEveryDay();
|
dockingLogeDO.setOid(oid);
|
dockingLogeDO.setSystemcode(dockingTaskDO.getSystemcode());
|
dockingLogeDO.setSystemname(dockingTaskDO.getSystemname());
|
dockingLogeDO.setSystemoid(dockingTaskDO.getSystemoid());
|
dockingLogeDO.setClassifyoid(dockingTaskDO.getClassifyoid());
|
dockingLogeDO.setClassifyid(dockingTaskDO.getClassifyid());
|
dockingLogeDO.setClassifyname(dockingTaskDO.getClassifyname());
|
dockingLogeDO.setId(dockingTaskDO.getId());
|
dockingLogeDO.setUniquecode(dockingTaskDO.getUniquecode());
|
dockingLogeDO.setParamstring(paramString);
|
dockingLogeDO.setReturnstring(backString);
|
dockingLogeDO.setInterfacestatus(isSend?"true":"false");
|
dockingLogeDO.setType(MdmDuckingConstant.DATA_LOGE_OUT);
|
dockingLogeDO.setMsg(msg);
|
logger.error("集成推送数据,systemcode:"+dockingTaskDO.getSystemcode()+",systemname:"+dockingTaskDO.getSystemname()+",url:"+url+",param:"+paramString+",e:"+msg);
|
BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
|
batchCBO.copyFromOther(dockingLogeDOBo);
|
}
|
//全都接收成功的情况下,修改dockingtask sendflag为已发送
|
if(isSend) {
|
dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
|
BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
|
batchCBO.copyFromOther(updateTask);
|
}
|
}
|
}
|
public void initSysadmin(){
|
SessionInfo sessionInfo = new SessionInfo();
|
sessionInfo.setUserId("sysAdmin");
|
sessionInfo.setUserName("系统管理员");
|
sessionInfo.setIp(WebUtil.getLocalIp());
|
sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
|
sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
|
WebUtil.setSessionInfo(sessionInfo);
|
}
|
|
@Autowired
|
private PlatformClientUtil platformClientUtil;
|
/**
|
* dockingdata根据oid修改sendflag
|
* @param oid
|
* @param sendflag
|
* @return
|
*/
|
public boolean updateDockingDatasSendFlag(String oid,String sendflag){
|
boolean u=false;
|
String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
|
try {
|
u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
|
}catch (Exception e){
|
|
}
|
return u;
|
}
|
}
|