292 lines
8.0 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-07-05 09:34:03 +08:00
import { sendGreen } from '../../pages/judgeSDK/utils/judgeCommon';
2025-01-07 15:50:48 +08:00
import { GlobalConfig } from '../../config/index'
2024-08-14 14:46:33 +08:00
import FileUtil from '../../common/utils/File';
import { dateFormat } from '../utils/tools'
2024-01-05 11:11:15 +08:00
const config = {
2025-01-07 15:50:48 +08:00
host: GlobalConfig.host,
2024-01-05 11:11:15 +08:00
}
/**
* @author: Renjun Su
* @date: 2023/2/20
* @desc
* @param {method}
* @param {xml} xml请求的数据 xml是字符串
* @param {data} post请求的数据
* @param {params} get请求的数据
*
*/
2024-12-31 17:51:25 +08:00
// let httpRequest = http.createHttp();
2024-01-05 11:11:15 +08:00
2025-01-07 15:50:48 +08:00
export default async function request<T>(req: any): Promise<T> {
return new Promise((reslove, reject) => {
2024-12-31 11:31:11 +08:00
let httpRequest = http.createHttp();
2025-01-07 15:50:48 +08:00
const {url,params = {},data = {},xml,method = 'get',host,isNewCenter = false} = req;
try {
const options = {
2024-01-05 11:11:15 +08:00
method: http.RequestMethod[method.toUpperCase()],
header: {
2025-01-07 15:50:48 +08:00
'Content-Type': xml ? 'text/xml' : 'application/json'
2024-01-05 11:11:15 +08:00
},
2024-12-29 21:43:12 +08:00
extraData: xml ? data : JSON.stringify(data),
2025-01-07 15:50:48 +08:00
}
let paramsStr = Reflect.ownKeys(params).reduce((p: string, n: string) => (`${p}${n}=${params[n]}&`), '?') || '';
paramsStr = paramsStr.toString();
paramsStr = paramsStr.substring(0, paramsStr.length - 1)
let baseUrl = host ? host : globalThis.host
// let baseUrl=host?config.csptHost:config.host'
console.log('响应头地址1' + baseUrl, url, options.extraData.length)
// const {result,responseCode} = await
httpRequest.request(`${baseUrl}${url}${paramsStr}`, {
...options
})
.then(async(data) => {
const result = data.result
2024-08-05 09:47:44 +08:00
console.log('响应头地址' + JSON.stringify(result))
2025-01-07 15:50:48 +08:00
let res: any = xml ? xmlToJson(result, url) : result;
2024-01-05 11:11:15 +08:00
console.log('响应头地址' + JSON.stringify(res))
2024-08-14 14:46:33 +08:00
2024-01-05 11:11:15 +08:00
let resObj = null;
2025-01-07 15:50:48 +08:00
if (typeof res === "string") {
res = JSON.parse(res)
2024-01-05 11:11:15 +08:00
}
//处理中心服务code
2025-01-07 15:50:48 +08:00
if (res.Envelope) {
const msgXml = res.Envelope.Body.writeObjectOutResponse.return;
//Envelope.Body.writeObjectOutResponse.return
const dd = handleCenterCode(msgXml, isNewCenter);
httpRequest.destroy();
// @ts-ignore
reslove(dd)
// return dd
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
if (!xml) {
if (res.head.resultCode === '0') {
// return res
2024-12-31 17:51:25 +08:00
httpRequest.destroy();
2025-01-07 15:50:48 +08:00
reslove(res)
} else {
const resultMessage = res?.body?.resultMessage || res?.head?.resultMessage
2024-01-05 11:11:15 +08:00
prompt.showToast({
2025-01-07 15:50:48 +08:00
message: decodeURIComponent(resultMessage),
duration: 3000
2024-01-05 11:11:15 +08:00
});
2024-12-31 17:51:25 +08:00
httpRequest.destroy();
2025-01-07 15:50:48 +08:00
reject(false)
}
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
for (let i in res) {
resObj = res[i].head
2024-07-03 16:21:56 +08:00
}
2025-01-07 15:50:48 +08:00
console.info('jiangsong:res in request' + url + JSON.stringify(resObj))
if (resObj.resultCode === '0') {
httpRequest.destroy();
reslove(res)
} else {
prompt.showToast({
message: decodeURIComponent(resObj.resultMessage),
duration: 3000
});
httpRequest.destroy();
reject(res)
2024-01-31 14:35:16 +08:00
}
2025-01-07 15:50:48 +08:00
}).catch(Error=>{
console.info('test-error0' + url + ' error:resp: ' + JSON.stringify(Error))
reject(Error)
})
// fileUtil.editFile(`${folderPath}/request.txt`, JSON.stringify(arrList))
// writeLog({
// time:dateFormat(new Date()),
// url,
// result:JSON.stringify(result),
// extraData: JSON.stringify(data),
// state:'end'
// })
} catch (e) {
console.info('test-error' + url + ' error:resp: ' + JSON.stringify(e))
if (!e || !(e?.message)) {
httpRequest.destroy();
reject({
code: -1
})
// httpRequest.destroy();
// return {code:-1}
}
const code = e?.code;
prompt.showToast({
message: e?.message,
duration: 5000
});
// httpRequest.destroy();
switch (code) {
//断网
case 2300007:
return {
code: 2300007
}
// 超时
case 2300028:
return {
code: 2300028
}
default:
}
// return {code:e.code}
httpRequest.destroy();
reject({
code: e.code
})
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
})
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
async function writeLog(param) {
const fileUtil = new FileUtil(globalThis.context)
const folderPath = await fileUtil.initFolder(`/errorMsg/`);
fileUtil.editFile(`${folderPath}/request.txt`, JSON.stringify(param) + `\n`)
2024-01-05 11:11:15 +08:00
2024-08-14 14:46:33 +08:00
}
2024-12-31 17:51:25 +08:00
2024-01-05 11:11:15 +08:00
//xml格式转JSON
2025-01-07 15:50:48 +08:00
function xmlToJson(result, url) {
console.log("xmlToJson begin", url);
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
}
2024-01-05 11:11:15 +08:00
2025-01-07 15:50:48 +08:00
let strXml = result.toString();
let conv = new convertxml.ConvertXML();
2024-07-31 13:47:40 +08:00
2025-01-07 15:50:48 +08:00
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", url);
return res
}
2024-08-28 16:39:18 +08:00
2025-01-07 15:50:48 +08:00
//处理中心服务code
function handleCenterCode(msgXml, isNewCenter) {
//新监管
if (isNewCenter) {
const msg = JSON.parse(msgXml);
const result = msg?.data[0]?.result;
if (result) {
const {code,message,retval} = result
if (code != '1') {
const rMessage = decodeURIComponent(message as string)
// globalThis.title=rMessage
2024-08-26 15:09:13 +08:00
// globalThis.type='1'
// globalThis.errorDialog.open()
2025-01-07 15:50:48 +08:00
prompt.showToast({
message: rMessage,
duration: 3000
});
return { code, message }
} else {
return { code, keystr: retval }
}
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
}
//正则匹配code message字段
const [code, message, keystr] = [/<code>(.*)<\/code>/i, /<message>(.*)<\/message>/i, /<keystr>(.*)<\/keystr>/i].map(pattern => {
const patternArr = pattern.exec(msgXml);
return patternArr && patternArr[1]
});
if (code != '1') {
prompt.showToast({
message: decodeURIComponent(message as string),
duration: 3000
});
// globalThis.type='1'
// globalThis.title=decodeURIComponent(message as string)
// globalThis.errorDialog.open()
return { code, message: decodeURIComponent(message) }
} else {
return { code, keystr, message }
}
2024-01-05 11:11:15 +08:00
}
//JSON转xml格式
2025-01-07 15:50:48 +08:00
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)
2024-01-05 11:11:15 +08:00
}
2025-01-07 15:50:48 +08:00
}
2024-01-05 11:11:15 +08:00
2025-01-07 15:50:48 +08:00
//通用处理重复标签
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
2024-01-05 11:11:15 +08:00
};
function isEmpty(param) {
2025-01-07 15:50:48 +08:00
return !Object.keys(param).length;
2024-01-05 11:11:15 +08:00
}