| | |
| | | |
| | | import com.alibaba.cloud.commons.lang.StringUtils; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.thoughtworks.xstream.XStream; |
| | |
| | | import com.vci.ubcs.starter.web.util.BeanUtilForVCI; |
| | | import com.vci.ubcs.starter.web.util.VciBaseUtil; |
| | | import com.vci.ubcs.starter.web.util.WebUtil; |
| | | import com.xkcoding.http.support.Http; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.map.CaseInsensitiveMap; |
| | | import org.springblade.core.redis.cache.BladeRedis; |
| | |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.mock.web.MockHttpServletRequest; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.jws.WebMethod; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.xml.ws.WebServiceContext; |
| | | import javax.xml.ws.handler.MessageContext; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicReference; |
| | |
| | | |
| | | @Value("${erp.item.btmName:XHDH}") |
| | | public String btmName; |
| | | |
| | | @Value("${erp.item.bearer:bearer: Bearer 7fc32939-0a59-da71-a6e6-6b0d37b53e8a}") |
| | | private String ERPXHDHAUTH; |
| | | |
| | | @Value("${erp.item.url:http://127.0.0.1/api/pp/pp/ext/extend/v1.0}") |
| | | private String ERPXHDHURL; |
| | | |
| | | @Value("${erp.item.tenant:10000}") |
| | | private String ERPXHDHTENANT; |
| | | |
| | | |
| | | /** |
| | | * 业务类型的服务 |
| | | */ |
| | | @Autowired |
| | | private IBtmTypeClient btmTypeClient; |
| | | |
| | | /** |
| | | * 通用查询 |
| | | */ |
| | | @Resource |
| | | private CommonsMapper commonsMapper; |
| | | |
| | | @Resource |
| | | private MdmEngineService mdmEngineServiceI; |
| | | |
| | | /** |
| | | * 批量处理的服务 |
| | | */ |
| | | @Resource |
| | | private MdmIOService mdmIOService; |
| | | |
| | | @Resource |
| | | private IPasswordFreeLoginService passwordFreeLoginService; |
| | | |
| | | @Resource |
| | | private IDockingLogeService dockingLogeService; |
| | | |
| | | @Resource |
| | | private IDockingDataService dockingDataService; |
| | | |
| | | @Resource |
| | | private IDockingTaskService dockingTaskService; |
| | | |
| | | @Resource |
| | | private IDockingSystemConfigService dockingSystemConfigService; |
| | | |
| | | @Resource |
| | | private ICodeClassifyService codeClassifyService; |
| | | |
| | |
| | | * 同步型号代号 |
| | | */ |
| | | @Override |
| | | public void saveItemDataSyncScheduing(String endDate) { |
| | | public void saveItemDataSyncScheduing(String endDate) throws ServiceException { |
| | | String paramString=""; |
| | | String backString="成功"; |
| | | String msg="成功"; |
| | |
| | | Map<String,String>searchDataMap= VciBaseUtil.objectToMapString(searchItemParam); |
| | | try { |
| | | paramString=JSONObject.toJSON(searchItemParam).toString(); |
| | | String res= mdmSearchItemCodeProvider.getppModelByElem(searchItemParam); |
| | | SearchItemVO searchItemVO = JSONObject.toJavaObject(JSONObject.parseObject(res), SearchItemVO.class); |
| | | /**SearchItemVO searchItemVO=new SearchItemVO(); |
| | | List<SearchItemDataVO> data=new ArrayList<>(); |
| | | SearchItemDataVO searchItemDataVO1=initData("1","","pro-00001"); |
| | | SearchItemDataVO searchItemDataVO2=initData("0","item-00001",""); |
| | | data.add(searchItemDataVO1); |
| | | data.add(searchItemDataVO2); |
| | | //searchItemVO.setData(data); |
| | | searchItemVO.setCode("200");**/ |
| | | //searchItemVO.setMsg(""); |
| | | // TODO: 改为使用HttpUtils方式进行申请,因为现在申请用之前的方式会报错 |
| | | LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); |
| | | headers.add("Authorization",ERPXHDHAUTH); |
| | | headers.add("X-ECC-Current-Tenant",ERPXHDHTENANT); |
| | | headers.add("Accept-Language","zh-CHS"); |
| | | headers.add("Content-Type",MediaType.APPLICATION_JSON.toString()); |
| | | String res = HttpUtils.request(ERPXHDHURL+"/getppModelByElemNew",paramString,headers, HttpMethod.POST,MediaType.APPLICATION_JSON); |
| | | // String res= mdmSearchItemCodeProvider.getppModelByElem(searchItemParam); |
| | | SearchItemVO searchItemVO = JSONObject.toJavaObject(JSONObject.parseObject(res), SearchItemVO.class); |
| | | if (searchItemVO != null) { |
| | | BladeUser finalUser; |
| | | paramString = JSONObject.toJSON(searchItemVO).toString(); |
| | |
| | | } |
| | | } catch (Throwable e) { |
| | | e.printStackTrace(); |
| | | ; |
| | | log.error("查询失败--->" + e); |
| | | success = false; |
| | | backString = "查询失败--->" + e; |
| | |
| | | } |
| | | } |
| | | }else{ |
| | | throw new Throwable("接口未返回信息"); |
| | | throw new Throwable("接口未返回信息"); |
| | | } |
| | | }catch (Throwable e1){ |
| | | e1.printStackTrace(); |
| | |
| | | } catch (Throwable e) { |
| | | e.printStackTrace(); |
| | | log.error(e.getMessage()); |
| | | throw new VciBaseException(e.getMessage()); |
| | | throw new ServiceException(e.getMessage()); |
| | | } |
| | | throw new ServiceException(e1.getMessage()); |
| | | } |
| | | } |
| | | |
| | |
| | | DockingSystemConfig dockingSystemConfig = dockingSystemConfigService.getById(systeminfooid); |
| | | String paramType = dockingSystemConfig.getParamType();//xml/json |
| | | if(paramType.equals(DATATYPE_JSON)){ |
| | | // Object object = JSONObject.toJSON(jsonRootDataDTO); |
| | | // sendString = object.toString(); |
| | | sendString = jsonRootDataDTO; |
| | | Object object = JSONObject.toJSON(jsonRootDataDTO); |
| | | sendString = object; |
| | | }else{ |
| | | //组织返回接口信息 |
| | | XStream xStream = new XStream(new DomDriver()); |
| | |
| | | for (DockingTask dockingTask:dockingTaskS){ |
| | | //每个task一个事务,开启 |
| | | String paramString=""; |
| | | String sendObject=""; |
| | | Object sendString=""; |
| | | String backString=""; |
| | | try { |
| | | //查询系统接口信息,ip method,dataType |
| | |
| | | String paramType = dockingSystemConfig.getParamType();//xml/json |
| | | if (paramType.equals(DATATYPE_JSON)) { |
| | | Object object = JSONObject.toJSON(nodeJosnDTO); |
| | | sendObject = object.toString(); |
| | | //sendString = object.toString(); |
| | | sendString = object; |
| | | } else { |
| | | //组织返回接口信息 |
| | | XStream xStream = new XStream(new DomDriver()); |
| | | xStream.processAnnotations(NodedataDTO.class); |
| | | xStream.autodetectAnnotations(true); |
| | | sendObject = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO); |
| | | sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO); |
| | | } |
| | | //调用接口 |
| | | callInterface(sendObject,dockingSystemConfig, dockingTask,"pushData"); |
| | | callInterface(sendString,dockingSystemConfig, dockingTask,"pushData"); |
| | | }catch (Throwable e){ |
| | | e.printStackTrace(); |
| | | }finally { |
| | |
| | | private void callInterface(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation) throws Throwable{ |
| | | String paramString = ""; |
| | | String backString = ""; |
| | | String sendString = dockingSystemConfig.getContentType().equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString(); |
| | | String sendString = sendObject.toString(); |
| | | String msg= "" ; |
| | | String url = dockingSystemConfig.getRequestUrl();//url |
| | | List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>(); |
| | |
| | | for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) { |
| | | headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue()); |
| | | } |
| | | backString = HttpUtils.postByMediaType(url, params, headers,new MediaType(dockingSystemConfig.getContentType())); |
| | | } |
| | | 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(URLTYPE_WEBSERVICE)) {//webserver请求 |
| | | MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); |
| | | for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) { |
| | | params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue()); |
| | | } |
| | | |
| | | paramString = sendString; |
| | | MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); |
| | | for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) { |
| | | headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue()); |
| | | } |
| | | 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(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.getMessage(); |
| | | e.printStackTrace(); |
| | | log.error("调用接口失败:"+e); |
| | | // throw new Throwable("调用接口失败:"+e); |
| | | ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO(); |
| | | resultNodeObjectDTO.setErroid("1"); |
| | | resultNodeObjectDTO.setMsg(msg); |
| | | resultNodeObjectDTO.setCode(dockingSystemConfig.getPushType().equalsIgnoreCase("2")?dockingTask.getClassifyId():dockingTask.getId()); |
| | | resultNodeObjectDTO.setItemid(dockingTask.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; |
| | | } |
| | | DockingLog dockingLogeDO = new DockingLog(); |
| | | String oid=VciBaseUtil.getPk(); |
| | | dockingLogeDO.setOid(oid); |
| | | dockingLogeDO.setSystemCode(dockingTask.getSystemCode()); |
| | | dockingLogeDO.setSystemName(dockingTask.getSystemName()); |
| | | dockingLogeDO.setSystemOid(dockingTask.getSystemOid()); |
| | | dockingLogeDO.setClassifyOid(dockingTask.getClassifyOid()); |
| | | dockingLogeDO.setClassifyId(dockingTask.getClassifyId()); |
| | | dockingLogeDO.setClassifyName(dockingTask.getClassifyName()); |
| | | dockingLogeDO.setCreateTime(new Date()); |
| | | dockingLogeDO.setId(dockingTask.getId()); |
| | | dockingLogeDO.setUniqueCode(dockingTask.getUniqueCode()); |
| | | dockingLogeDO.setParamString(paramString); |
| | | dockingLogeDO.setReturnString(backString); |
| | | dockingLogeDO.setInterfaceStatus(isSend?"true":"false"); |
| | | dockingLogeDO.setType(operation); |
| | | dockingLogeDO.setMsg(msg); |
| | | log.error("集成推送数据,systemcode:"+dockingTask.getSystemCode()+",systemname:"+dockingTask.getSystemName()+",url:"+url+",param:"+paramString+",e:"+msg); |
| | | dockingLogeService.save(dockingLogeDO); |
| | | } |
| | | //全都接收成功的情况下,修改dockingtask sendflag为已发送 |
| | | if(isSend) { |
| | | dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_TRUE); |
| | | dockingTask.setLastModifyTime(new Date()); |
| | | dockingTaskService.updateById(dockingTask); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 调用接口,传参为JSON时传object类型 |
| | | * @param sendObject |
| | | * @param dockingSystemConfig |
| | | * @param dockingTask |
| | | * @param operation |
| | | * @throws Throwable |
| | | */ |
| | | private void callInterfaceByContentType(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation,String sendType) throws Throwable{ |
| | | String paramString = ""; |
| | | String sendString = sendType.equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString(); |
| | | String backString = ""; |
| | | String msg=""; |
| | | String url = dockingSystemConfig.getRequestUrl();//url |
| | | List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>(); |
| | | try { |
| | | boolean usedFlag= dockingSystemConfig.getUsedFlag().equals("true")?true:false; |
| | | if(!usedFlag){ |
| | | throw new Throwable("接口已经停用!"); |
| | | } |
| | | String type = dockingSystemConfig.getInterfaceType().toLowerCase(Locale.ROOT);//get/post/webserver/corba |
| | | String paramType = dockingSystemConfig.getParamType();//xml/json |
| | | String returnType = dockingSystemConfig.getReturnType();//xml/json |
| | | String requestmethod= dockingSystemConfig.getRequestMethod(); |
| | | String interfaceFunction = dockingSystemConfig.getInterfaceFunction();//主要是webservice的方法名 |
| | | String namespace = dockingSystemConfig.getNamespace();//namespace |
| | | String soapaction = dockingSystemConfig.getSoapAction();//soapaction |
| | | String targName = dockingSystemConfig.getTargetName();//targName |
| | | String cxfaxis = dockingSystemConfig.getCxfAxis();//webservice是cxf/axis |
| | | //查询param |
| | | List<DockingSysIntParam> dockingSysIntParamList = dockingSysIntParamService.list(Wrappers.<DockingSysIntParam>query().lambda().eq(DockingSysIntParam::getInfoOid,dockingSystemConfig.getOid())); |
| | | //查询header |
| | | List<DockingSysIntHeader> dockingSysIntHeaderList = dockingSysIntHeaderService.list(Wrappers.<DockingSysIntHeader>query().lambda().eq(DockingSysIntHeader::getInfoOid,dockingSystemConfig.getOid())); |
| | | if(type.equals(URLTYPE_HTTP)) { |
| | | if (requestmethod.equals(URLTYPE_GET)) {//GET请求 |
| | | String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString; |
| | | //拼接param |
| | | for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) { |
| | | sendurl = sendurl + "&" + dockingSysIntParam.getParamKey() + "=" + dockingSysIntParam.getParamValue(); |
| | | } |
| | | paramString = sendurl; |
| | | backString = HttpUtils.get(sendurl); |
| | | } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求 |
| | | MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); |
| | | for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) { |
| | | params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue()); |
| | | } |
| | | params.add(DATA_PARAM_NAME,sendObject); |
| | | paramString = params.toString(); |
| | | MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); |
| | | for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) { |
| | | headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue()); |
| | | } |
| | | // TODO: 2024-02-25改,为了满足HR以及其他情况下根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转 |
| | | backString = HttpUtils.postByMediaType(url, params, headers, MediaType.APPLICATION_FORM_URLENCODED); |
| | | backString = HttpUtils.postByMediaType( |
| | | url, |
| | | params, |
| | | headers, |
| | | Func.isNotBlank(dockingSystemConfig.getContentType()) ? MediaType.valueOf(dockingSystemConfig.getContentType()):MediaType.APPLICATION_FORM_URLENCODED |
| | | ); |
| | | } |
| | | if(backString.startsWith("\"")){ |
| | | backString=backString.substring(backString.indexOf("\"")+1); |