196 lines
5.8 KiB
TypeScript
Raw Normal View History

2024-01-05 11:11:15 +08:00
import http from '@ohos.net.http';
import convertxml from '@ohos.convertxml';
import prompt from '@ohos.prompt'
2024-01-31 14:35:16 +08:00
import { sendGreen } from '../../pages/judgeSDK/utils/judge-common';
2024-01-05 11:11:15 +08:00
const config = {
2024-01-31 14:42:14 +08:00
host: 'http://112.80.35.83:11052',
// host: 'http://192.168.36.2:8083',
2024-01-05 11:11:15 +08:00
}
let httpRequest = http.createHttp();
/**
* @author: Renjun Su
* @date: 2023/2/20
* @desc
* @param {method}
* @param {xml} xml请求的数据 xml是字符串
* @param {data} post请求的数据
* @param {params} get请求的数据
*
*/
export default async function request(req: any) {
const {url,params = {},data = {},xml,method = 'get',host} = req;
const options = {
method: http.RequestMethod[method.toUpperCase()],
header: {
'Content-Type': xml ? 'text/xml' : 'application/json'
},
extraData: xml?data:JSON.stringify(data)
}
//params转url拼接参数
let paramsStr = Reflect.ownKeys(params).reduce((p: string, n: string) => (`${p}${n}=${params[n]}&`), '?') || '';
paramsStr = paramsStr.toString();
paramsStr = paramsStr.substring(0, paramsStr.length-1)
try {
let baseUrl=host?host:config.host
2024-01-31 14:35:16 +08:00
// let baseUrl=host?config.csptHost:config.host'
console.info('surenjun',baseUrl)
2024-01-05 11:11:15 +08:00
const {result,responseCode} = await httpRequest.request(`${baseUrl}${url}${paramsStr}`, options);
let res:any = xml ? xmlToJson(result) : result;
console.log('响应头地址' + JSON.stringify(res))
let resObj = null;
if(typeof res === "string"){
res=JSON.parse(res)
}
//处理中心服务code
if(res.Envelope){
const msgXml = res.Envelope.Body.writeObjectOutResponse.return;
return handleCenterCode(msgXml);
}
if(!xml){
if(res.head.resultCode === '0'){
return res
}else{
const resultMessage = res?.body?.resultMessage || res?.head?.resultMessage
prompt.showToast({
message: decodeURIComponent(resultMessage),
duration: 3000
});
return
}
}
for( let i in res ) {
resObj = res[i].head
}
console.info('jiangsong:res in request' + url + JSON.stringify(res))
if(resObj.resultCode === '0') {
return res
}else {
prompt.showToast({
message: decodeURIComponent(resObj.resultMessage),
duration: 3000
});
}
} catch (e) {
2024-01-31 14:35:16 +08:00
const code = e.code;
prompt.showToast({
message: e?.message,
duration: 5000
});
switch (code){
//断网
case 2300007: return 2300007
default:
}
2024-01-05 11:11:15 +08:00
return false
console.info('test-error' + url + ' error:resp: '+ JSON.stringify(e))
httpRequest.destroy();
}
}
//xml格式转JSON
function xmlToJson(result) {
console.log("xmlToJson begin");
let xmlOptions = {trim : false, declarationKey:"_declaration",
instructionKey : "_instruction", attributesKey : "_attributes",
textKey : "_text", cdataKey:"_cdata", doctypeKey : "_doctype",
commentKey : "_comment", parentKey : "_parent", typeKey : "_type",
nameKey : "_name", elementsKey : "_elements", "skipPreprocess" : true}
let strXml = result.toString();
let conv = new convertxml.ConvertXML();
console.log("xmlToJson result.length = " + result.length);
console.log("xmlToJson result content = " + result);
// @ts-ignore
let {_elements:xmlArr} = conv.convertToJSObject(strXml, xmlOptions);
console.log("xmlToJson deeml begin");
let res = deeml(xmlArr);
console.log("xmlToJson end");
return res
}
//处理中心服务code
function handleCenterCode(msgXml){
//正则匹配code message字段
const [code,message] = [/<code>(.*)<\/code>/i,/<message>(.*)<\/message>/i].map(pattern=>{
const patternArr = pattern.exec(msgXml);
return patternArr[1]
});
if(code === ''){
prompt.showToast({
message: decodeURIComponent(message),
duration: 3000
});
return
}else{
return code
}
}
//JSON转xml格式
const deeml = (elements,_name?)=>{
const json = {}
elements.map(ele =>{
const _elements = ele._elements
if(ele._type === 'element'){
if(_elements==undefined){
return
}
const thisJson = json[ele._name]
if(_elements && _elements.length === 1 && _elements[0]._type === 'text'){
// 如果值存在了
if(thisJson){
handleCommonArr(_elements[0]._text)
}else{
json[ele._name] = _elements[0]._text
}
}else{
if(thisJson){
handleCommonArr( deeml(ele._elements,ele._name) )
}else{
json[ele._name] = deeml(ele._elements,ele._name)
}
}
//通用处理重复标签
function handleCommonArr(obj){
if(thisJson){
if(Array.isArray(thisJson)){
json[ele._name].push(obj)
}else{
json[ele._name] = [json[ele._name],obj]
}
}else{
json[ele._name] = obj
}
}0
}else{
//标签上有属性
if(ele._attributes){
json[_name] = {
value: ele._text,
attributes:ele.__attributes
}
}
}
});
return json
};
function isEmpty(param) {
return!Object.keys(param).length;
}