Commit aa51c37a by 宋毅

增加订单推送状态修改

parent c0cc7f46
...@@ -6,517 +6,558 @@ const uuidv4 = require('uuid/v4'); ...@@ -6,517 +6,558 @@ const uuidv4 = require('uuid/v4');
const cryptoJS = require('crypto-js'); const cryptoJS = require('crypto-js');
class AppServiceBase { class AppServiceBase {
constructor() { constructor() {
this.restClient = system.getObject("util.restClient"); this.dingClient = system.getObject("util.dingClient");
this.execClientNew = system.getObject("util.execClientNew"); this.restClient = system.getObject("util.restClient");
this.execClient = system.getObject('util.execClient'); this.execClientNew = system.getObject("util.execClientNew");
this.cacheManager = system.getObject("db.common.cacheManager"); this.execClient = system.getObject('util.execClient');
this.pushlogSve = system.getObject("service.common.pushlogSve"); this.cacheManager = system.getObject("db.common.cacheManager");
this.pushlogFailType = { OLDRPC: 1, NEWRPC: 2, FAILLOG: 3, FQ: 4 }; this.pushlogSve = system.getObject("service.common.pushlogSve");
this.logCtl = system.getObject("service.common.oplogSve"); this.pushlogFailType = {OLDRPC: 1, NEWRPC: 2, FAILLOG: 3, FQ: 4};
} this.logCtl = system.getObject("service.common.oplogSve");
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
} }
if (!params.sign) {
return system.getResult(null, "请求参数sign为空"); /**
} * 验证签名
var signArr = []; * @param {*} params 要验证的参数
var keys = Object.keys(params).sort(); * @param {*} app_key 应用的校验key
if (keys.length == 0) { */
return system.getResult(null, "请求参数信息为空"); async verifySign(params, app_key) {
} if (!params) {
for (let k = 0; k < keys.length; k++) { return system.getResult(null, "请求参数为空");
const tKey = keys[k]; }
if (tKey != "sign" && params[tKey] && !(typeof (params[tKey]) === "object")) { if (!params.sign) {
signArr.push(tKey + "=" + params[tKey]); return system.getResult(null, "请求参数sign为空");
} }
} var signArr = [];
if (signArr.length == 0) { var keys = Object.keys(params).sort();
return system.getResult(null, "请求参数组装签名参数信息为空"); if (keys.length == 0) {
} return system.getResult(null, "请求参数信息为空");
var resultSignStr = signArr.join("&") + "&key=" + app_key; }
var resultTmpSign = md5(resultSignStr).toUpperCase(); for (let k = 0; k < keys.length; k++) {
if (params.sign != resultTmpSign) { const tKey = keys[k];
return system.getResult(null, "返回值签名验证失败"); if (tKey != "sign" && params[tKey] && !(typeof (params[tKey]) === "object")) {
} signArr.push(tKey + "=" + params[tKey]);
return system.getResultSuccess(); }
} }
async restPostUrl(pobj, url) { if (signArr.length == 0) {
try { return system.getResult(null, "请求参数组装签名参数信息为空");
var rtn = await this.restClient.execPost(pobj, url); }
if (!rtn || !rtn.stdout) { var resultSignStr = signArr.join("&") + "&key=" + app_key;
return system.getResult(null, "restPost data is empty"); var resultTmpSign = md5(resultSignStr).toUpperCase();
} if (params.sign != resultTmpSign) {
var result = JSON.parse(rtn.stdout); return system.getResult(null, "返回值签名验证失败");
return result; }
} catch (e) { return system.getResultSuccess();
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostUrl",
});
return system.getResult(null, errorMsg);
}
}
async restPostWithHValueUrl(pobj, url, hValue) {//curl请求带请求头信息
try {
if (!hValue) {
hValue = "YLc6GsgLtuRGaVA5Om848x18NxLtHlyA";
}
var rtn = await this.restClient.execPostWithHValue(pobj, url, hValue);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPostWithHValue data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostWithHValueUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostWithHValueUrl",
});
return system.getResult(null, errorMsg);
}
}
async restPostWithHAuthorizationUrl(pobj, userToken, url) {//curl请求带请求头信息
try {
var rtn = await this.restClient.restPostWithHAuthorizationUrl(userToken, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPostWithHAuthorizationUrl data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostWithHAuthorizationUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostWithHAuthorizationUrl",
});
return system.getResult(null, errorMsg);
}
}
async execPostUrl(pobj, url) {
try {
var rtn = await this.execClient.execPost(pobj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/execPostUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "基类操作异常->execPostUrl",
});
return system.getResult(null, errorMsg);
} }
}
async opAliyunRpcVerifyParam(pobj) {//参数信息验证 async restPostUrl(pobj, url) {
var verify = system.getResultSuccess(); try {
if (!pobj.interface_params) { var rtn = await this.restClient.execPost(pobj, url);
verify = system.getResult(null, "interface_params can not be empty,100440"); if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPost data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostUrl",
});
return system.getResult(null, errorMsg);
}
} }
var interface_params_info = JSON.parse(pobj.interface_params);
if (!interface_params_info || !interface_params_info.action) { async restPostWithHValueUrl(pobj, url, hValue) {//curl请求带请求头信息
verify = system.getResult(null, "interface_params.action can not be empty,100443"); try {
if (!hValue) {
hValue = "YLc6GsgLtuRGaVA5Om848x18NxLtHlyA";
}
var rtn = await this.restClient.execPostWithHValue(pobj, url, hValue);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPostWithHValue data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostWithHValueUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostWithHValueUrl",
});
return system.getResult(null, errorMsg);
}
} }
verify.data = interface_params_info;
return verify; async restPostWithHAuthorizationUrl(pobj, userToken, url) {//curl请求带请求头信息
} try {
/** var rtn = await this.restClient.restPostWithHAuthorizationUrl(userToken, url);
* 阿里RPC调用 if (!rtn || !rtn.stdout) {
* @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam} return system.getResult(null, "restPostWithHAuthorizationUrl data is empty");
* @param {*} params {为阿里的接口参数} }
*/ var result = JSON.parse(rtn.stdout);
async opAliyunRpcReq(pobj, params) { return result;
try { } catch (e) {
// var action = obj.action; var errorMsg = "error:" + e.stack;
// var reqbody = obj.reqbody; //日志记录
// var rpcParam = obj.rpcParam; this.logCtl.error({
var aliyunClient = system.getObject("util.aliyunClient"); appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
var rtn = await aliyunClient.reqCustomByGet(params); appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
return rtn; requestId: pobj.requestId || "",
} catch (e) { op: "service/app.base.js/restPostWithHAuthorizationUrl",
var errorMsg = "error:" + e.stack; content: errorMsg,
//日志记录 // clientIp: pobj.clientIp,
this.logCtl.error({ optitle: pobj.opType + "推送操作异常->restPostWithHAuthorizationUrl",
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "", });
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "", return system.getResult(null, errorMsg);
requestId: pobj.requestId || "", }
op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReq",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->opAliyunRpcReq",
});
return system.getResult(null, errorMsg);
} }
}
// /** async execPostUrl(pobj, url) {
// * 阿里RPC调用-post请求 try {
// * @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam} var rtn = await this.execClient.execPost(pobj, url);
// * @param {*} params {为阿里的接口参数} if (!rtn || !rtn.stdout) {
// */ return system.getResult(null, "execPost data is empty");
// async opAliyunRpcReqByPost(pobj, params) { }
// try { var result = JSON.parse(rtn.stdout);
// // var action = obj.action; return result;
// // var reqbody = obj.reqbody; } catch (e) {
// // var rpcParam = obj.rpcParam; var errorMsg = "error:" + e.stack;
// var aliyunClient = system.getObject("util.aliyunClient"); //日志记录
// var rtn = await aliyunClient.reqCustomByPost(params); this.logCtl.error({
// return rtn; appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
// } catch (e) { appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
// var errorMsg = "error:" + e.stack; requestId: pobj.requestId || "",
// //日志记录 op: "service/app.base.js/execPostUrl",
// this.logCtl.error({ content: errorMsg,
// appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "", // clientIp: pobj.clientIp,
// appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "", optitle: pobj.opType + "基类操作异常->execPostUrl",
// requestId: pobj.requestId || "", });
// op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReqByPost", return system.getResult(null, errorMsg);
// content: errorMsg, }
// // clientIp: pobj.clientIp,
// optitle: pobj.opType + "推送操作异常->opAliyunRpcReqByPost",
// });
// return system.getResult(null, errorMsg);
// }
// }
/**
* 处理成功后的信息
* @param {*} pobj
* @param {*} result
* @param {*} opTitleDesc
* @param {*} failType this.pushlogFailType
*/
async disposePushResult(pobj, result, opTitleDesc, failType) {//处理结果信息--内部使用
var opType = pobj.opType || "";
if (result.status != 0) {
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(pobj),//推送的参数信息
resultInfo: JSON.stringify(result),
clientIp: pobj.clientIp || "",
failType: failType || 3,
opTitle: opType + "推送操作失败->" + opTitleDesc,
pushNumber: pobj.pushNumber || 1
});
result.data = null;
return result;
} }
this.pushlogSve.createDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "", async opAliyunRpcVerifyParam(pobj) {//参数信息验证
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "", var verify = system.getResultSuccess();
requestId: pobj.requestId || "", if (!pobj.interface_params) {
op: "推送业务类型:" + opType, verify = system.getResult(null, "interface_params can not be empty,100440");
content: JSON.stringify(pobj),//推送的参数信息 }
resultInfo: JSON.stringify(result), var interface_params_info = JSON.parse(pobj.interface_params);
returnType: '1', if (!interface_params_info || !interface_params_info.action) {
opTitle: opType + "数据推送成功->" + opTitleDesc verify = system.getResult(null, "interface_params.action can not be empty,100443");
}); }
// TODO 更改需求推送状态 verify.data = interface_params_info;
if (opType.indexOf('Need') >=0 && opType.indexOf('Business')>=0){ return verify;
pobj.actionType = 'updateNeedPushStatus';
let url = settings.centerOrderUrl() + 'action/opNeed/springBoard';
let result = await this.execPostByTimeOut(null,pobj,url,null,null,60);
} }
// result.data = null;
return result; /**
} * 阿里RPC调用
/** * @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam}
* 处理失败的结果信息--内部使用 * @param {*} params {为阿里的接口参数}
* @param {*} pobj */
* @param {*} result async opAliyunRpcReq(pobj, params) {
* @param {*} opTitleDesc try {
* @param {*} failType this.pushlogFailType // var action = obj.action;
*/ // var reqbody = obj.reqbody;
async disposePushResultFail(pobj, result, opTitleDesc, failType) {//处理失败的结果信息--内部使用 // var rpcParam = obj.rpcParam;
var opType = pobj.opType || ""; var aliyunClient = system.getObject("util.aliyunClient");
this.pushlogSve.createFailLogDb({ var rtn = await aliyunClient.reqCustomByGet(params);
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "", return rtn;
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "", } catch (e) {
requestId: pobj.requestId || "", var errorMsg = "error:" + e.stack;
content: JSON.stringify(pobj),//推送的参数信息 //日志记录
resultInfo: JSON.stringify(result), this.logCtl.error({
clientIp: pobj.clientIp || "", appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
failType: failType || 3, appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
opTitle: opType + "推送操作失败->" + opTitleDesc, requestId: pobj.requestId || "",
pushNumber: pobj.pushNumber || 1 op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReq",
}); content: errorMsg,
result.data = null; // clientIp: pobj.clientIp,
return result; optitle: pobj.opType + "推送操作异常->opAliyunRpcReq",
} });
async getAliossjavaFileUrl(pobj, params) {//上传ali oss 文件调用 return system.getResult(null, errorMsg);
var opType = pobj.opType || ""; }
try {
var aliOssFileInfo = await this.execPostUrl(params, settings.aliossjavaUrl());
if (aliOssFileInfo == true) {
var fileUrl = params.filedir + "/" + params.objectName;
return system.getResultSuccess(fileUrl);
}
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(params),//推送的参数信息
resultInfo: JSON.stringify(aliOssFileInfo),
clientIp: pobj.clientIp || "",
failType: 3,
opTitle: opType + "aliossjava-upload阿里上传文件操作失败->getAliossjavaFileUrl",
pushNumber: 1
});
return system.getResult(null, "java ali oss upload fail");
} catch (e) {
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/getAliossjavaFileUrl",
content: "error:" + e.stack,
// clientIp: pobj.clientIp,
optitle: pobj.opType || "" + "aliossjava-upload阿里上传文件操作异常->getAliossjavaFileUrl",
});
return system.getResult(-200, "java ali oss upload error");
} }
}
async opDownFileInfo(docUrl, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件 // /**
/*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */ // * 阿里RPC调用-post请求
try { // * @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam}
var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?")); // * @param {*} params {为阿里的接口参数}
var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght); // */
var fileType = tmpFileName.substr(tmpFileName.lastIndexOf(".") + 1, tmpFileName.lenght); // async opAliyunRpcReqByPost(pobj, params) {
//解码后的文件全名:xxx.pdf // try {
var fileAllName = decodeURIComponent(fileName);//为xxx.pdf // // var action = obj.action;
var saveFilePath = '/tmp/' + fileAllName; // // var reqbody = obj.reqbody;
// 下载文件到指定的路径 // // var rpcParam = obj.rpcParam;
var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath); // var aliyunClient = system.getObject("util.aliyunClient");
//上传 saveFilePath的文件 到ossClient // var rtn = await aliyunClient.reqCustomByPost(params);
var uuid = uuidv4(); // return rtn;
var u = uuid.replace(/\-/g, ""); // } catch (e) {
var upFileName = "alifile_" + u + "." + fileType; // var errorMsg = "error:" + e.stack;
var rtn = await this.ossClient.upfile(upFileName, saveFilePath); // //日志记录
result.data = rtn; // this.logCtl.error({
//删除本地文件 // appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
fs.unlink(saveFilePath, function (err) { }); // appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
} catch (e) { // requestId: pobj.requestId || "",
result.code = -200; // op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReqByPost",
result.message = "通过flowId获取到的文件url下载操作异常异常error"; // content: errorMsg,
console.log(e.stack); // // clientIp: pobj.clientIp,
//日志记录 // optitle: pobj.opType + "推送操作异常->opAliyunRpcReqByPost",
logCtl.error({ // });
optitle: "e签宝通过flowId获取到的文件url下载操作异常异常error", // return system.getResult(null, errorMsg);
op: "base/service/impl/utilesignbaoSve/opDownFileInfo", // }
content: "请求参数:docUrl=" + docUrl + ",异常信息error:" + e.stack, // }
clientIp: "" /**
}); * 处理成功后的信息
* @param {*} pobj
* @param {*} result
* @param {*} opTitleDesc
* @param {*} failType this.pushlogFailType
*/
async disposePushResult(pobj, result, opTitleDesc, failType) {//处理结果信息--内部使用
let opType = pobj.opType || "";
let content = JSON.stringify(pobj);
if (result.status != 0) {
return this.disposePushResultFail(pobj, result, opTitleDesc, failType);
}
this.pushlogSve.createDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "推送业务类型:" + opType,
content: content,//推送的参数信息
resultInfo: JSON.stringify(result),
returnType: '1',
opTitle: opType + "数据推送成功->" + opTitleDesc
});
// 更改需求推送状态
if (opType.indexOf('Need') >= 0 && opType.indexOf('Business') >= 0) {
pobj.actionType = 'updateNeedPushStatus';
let url = settings.centerOrderUrl() + 'action/opNeed/springBoard';
this.execPostByTimeOut(null, pobj, url, null, null, 60);
}
if (["pushOrder", "pushOrderBusiness", "pushOrderICPBusiness"].includes(opType) && pobj.actionBody && pobj.actionBody.orderNo) {
pobj.actionBody.pushNumber = pobj.pushNumber || 1;
pobj.actionBody.pushStatus = 3;//推送状态0待推送2推送失败3已成功推送
this.disposeOrderPush(pobj);
}
return result;
} }
return result;
}
async getOpInterfaceByProductId(appInfo, product_id) {//获取产品调用接口 /**
var getProductInterfaceUrl = settings.centerAppUrl() + "action/opProduct/springBoard"; * 处理失败的结果信息--内部使用
var getProductInterfaceObj = { * @param {*} pobj
"actionType": "getProductInterface", * @param {*} result
"appInfo": appInfo, * @param {*} opTitleDesc
"actionBody": { "product_id": product_id } * @param {*} failType this.pushlogFailType
}; */
var productItemInterfaceResult = await this.restPostUrl(getProductInterfaceObj, getProductInterfaceUrl); async disposePushResultFail(pobj, result, opTitleDesc, failType) {//处理失败的结果信息--内部使用
return productItemInterfaceResult; var opType = pobj.opType || "";
} let pushNumber = pobj.pushNumber || 1;
let resultInfo = JSON.stringify(result);
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(pobj),//推送的参数信息
resultInfo: resultInfo,
clientIp: pobj.clientIp || "",
failType: failType || 3,
opTitle: opType + "推送操作失败->" + opTitleDesc,
pushNumber: pushNumber
});
result.data = null;
if (pushNumber == 10 && resultInfo.indexOf("订单产品查询出来产品与传递得产品数量不一致,请重新选择") >= 0) {
pobj.actionBody.pushNumber = pushNumber;
pobj.actionBody.pushStatus = 2;//推送状态0待推送2推送失败3已成功推送
this.disposeOrderPushFailSendDing(pobj);
this.disposeOrderPush(pobj);
}
return result;
}
async getConvertSemiangleStr(str) {//去除空格及全角转半角 async disposeOrderPushFailSendDing(pobj) {
var result = ""; let params = {
str = str.replace(/\s+/g, ""); orderNo: pobj.actionBody.orderNo,
var len = str.length; city: pobj.actionBody.city,
for (var i = 0; i < len; i++) { area: pobj.actionBody.area,
var cCode = str.charCodeAt(i); companyCategory: pobj.actionBody.companyCategory,
//全角与半角相差(除空格外):65248(十进制) appName: pobj.actionBody.appName,
cCode = (cCode >= 0xFF01 && cCode <= 0xFF5E) ? (cCode - 65248) : cCode; sku: pobj.actionBody.sku,
//处理空格 error: "订单产品查询出来产品与传递得产品数量不一致,请重新选择!"
cCode = (cCode == 0x03000) ? 0x0020 : cCode; }
result += String.fromCharCode(cCode); this.dingClient.businessPushFqByChannel(params);
} }
return result;
} async disposeOrderPush(pobj) {
/* pobj.actionType = 'updateOrderPushStatus';
返回20位业务订单号 let url = settings.centerOrderUrl() + 'action/order/springBoard';
prefix:业务前缀 this.execPostByTimeOut(null, pobj, url, null, null, 60);
*/
async getBusUid(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
} }
var prefixlength = prefix.length;
var subLen = 8 - prefixlength; async getAliossjavaFileUrl(pobj, params) {//上传ali oss 文件调用
var uidStr = ""; var opType = pobj.opType || "";
if (subLen > 0) { try {
uidStr = await this.getUidInfo(subLen, 60); var aliOssFileInfo = await this.execPostUrl(params, settings.aliossjavaUrl());
if (aliOssFileInfo == true) {
var fileUrl = params.filedir + "/" + params.objectName;
return system.getResultSuccess(fileUrl);
}
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(params),//推送的参数信息
resultInfo: JSON.stringify(aliOssFileInfo),
clientIp: pobj.clientIp || "",
failType: 3,
opTitle: opType + "aliossjava-upload阿里上传文件操作失败->getAliossjavaFileUrl",
pushNumber: 1
});
return system.getResult(null, "java ali oss upload fail");
} catch (e) {
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/getAliossjavaFileUrl",
content: "error:" + e.stack,
// clientIp: pobj.clientIp,
optitle: pobj.opType || "" + "aliossjava-upload阿里上传文件操作异常->getAliossjavaFileUrl",
});
return system.getResult(-200, "java ali oss upload error");
}
} }
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr; async opDownFileInfo(docUrl, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件
} /*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */
/* try {
len:返回长度 var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?"));
radix:参与计算的长度,最大为62 var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght);
*/ var fileType = tmpFileName.substr(tmpFileName.lastIndexOf(".") + 1, tmpFileName.lenght);
async getUidInfo(len, radix) { //解码后的文件全名:xxx.pdf
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36 var fileAllName = decodeURIComponent(fileName);//为xxx.pdf
var uuid = [], i; var saveFilePath = '/tmp/' + fileAllName;
radix = radix || chars.length; // 下载文件到指定的路径
if (len) { var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath);
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; //上传 saveFilePath的文件 到ossClient
} else { var uuid = uuidv4();
var r; var u = uuid.replace(/\-/g, "");
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; var upFileName = "alifile_" + u + "." + fileType;
uuid[14] = '4'; var rtn = await this.ossClient.upfile(upFileName, saveFilePath);
for (i = 0; i < 36; i++) { result.data = rtn;
if (!uuid[i]) { //删除本地文件
r = 0 | Math.random() * 16; fs.unlink(saveFilePath, function (err) {
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; });
} } catch (e) {
} result.code = -200;
result.message = "通过flowId获取到的文件url下载操作异常异常error";
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "e签宝通过flowId获取到的文件url下载操作异常异常error",
op: "base/service/impl/utilesignbaoSve/opDownFileInfo",
content: "请求参数:docUrl=" + docUrl + ",异常信息error:" + e.stack,
clientIp: ""
});
}
return result;
} }
return uuid.join('');
} async getOpInterfaceByProductId(appInfo, product_id) {//获取产品调用接口
getUUID() { var getProductInterfaceUrl = settings.centerAppUrl() + "action/opProduct/springBoard";
var uuid = uuidv4(); var getProductInterfaceObj = {
var u = uuid.replace(/\-/g, ""); "actionType": "getProductInterface",
return u; "appInfo": appInfo,
} "actionBody": {"product_id": product_id}
/** };
* 加密信息 var productItemInterfaceResult = await this.restPostUrl(getProductInterfaceObj, getProductInterfaceUrl);
* @param {*} encrypt_key return productItemInterfaceResult;
* @param {*} encrypt_secret
* @param {*} opStr
*/
async encryptStr(encrypt_key, encrypt_secret, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
} }
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key);
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8)); async getConvertSemiangleStr(str) {//去除空格及全角转半角
var cipherStr = cryptoJS.TripleDES.encrypt(opStr, keyHex, { iv: ivHex }).toString(); var result = "";
return cipherStr; str = str.replace(/\s+/g, "");
} var len = str.length;
/** for (var i = 0; i < len; i++) {
* 解密信息 var cCode = str.charCodeAt(i);
* @param {*} encrypt_key //全角与半角相差(除空格外):65248(十进制)
* @param {*} encrypt_secret cCode = (cCode >= 0xFF01 && cCode <= 0xFF5E) ? (cCode - 65248) : cCode;
* @param {*} opStr //处理空格
*/ cCode = (cCode == 0x03000) ? 0x0020 : cCode;
async decryptStr(encrypt_key, encrypt_secret, opStr) { result += String.fromCharCode(cCode);
if (!opStr) { }
return system.getResult(null, "opStr is empty"); return result;
} }
try {
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key); /*
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8)); 返回20位业务订单号
var bytes = cryptoJS.TripleDES.decrypt(opStr, keyHex, { prefix:业务前缀
iv: ivHex */
}); async getBusUid(prefix) {
var plaintext = bytes.toString(cryptoJS.enc.Utf8); prefix = (prefix || "");
if (!plaintext) { if (prefix) {
return system.getResult(null, "解密失败" + opStr); prefix = prefix.toUpperCase();
} }
return system.getResultSuccess(plaintext); var prefixlength = prefix.length;
} catch (error) { var subLen = 8 - prefixlength;
return system.getResultFail(-200, "解密异常:" + opStr); var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
} }
}
/** /*
* 带超时时间的post请求 len:返回长度
* @param {*} req 请求信息 radix:参与计算的长度,最大为62
* @param {*} params 请求数据-json格式 */
* @param {*} url 请求地址 async getUidInfo(len, radix) {
* @param {*} ContentType 请求头类型,默认application/json var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"} var uuid = [], i;
* @param {*} timeOut 超时时间 radix = radix || chars.length;
*/ if (len) {
async execPostByTimeOut(req, params, url, ContentType, headData, timeOut = 60) { for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
const result = await this.execClientNew.execPostTimeOutByBusiness('sve.base', params, url, ContentType, headData, timeOut, req); } else {
return result; var r;
} uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
/** uuid[14] = '4';
* 验证签名 for (i = 0; i < 36; i++) {
* @param {*} params 要验证的参数 if (!uuid[i]) {
* @param {*} app_secret 应用的校验key r = 0 | Math.random() * 16;
*/ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
async verifySign(params, app_secret) { }
if (!params) { }
return system.getResult(null, "请求参数为空"); }
return uuid.join('');
} }
if (!params.sign) {
return system.getResult(null, "请求参数sign为空"); getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
} }
var signArr = [];
var keys = Object.keys(params).sort(); /**
if (keys.length == 0) { * 加密信息
return system.getResult(null, "请求参数信息为空"); * @param {*} encrypt_key
* @param {*} encrypt_secret
* @param {*} opStr
*/
async encryptStr(encrypt_key, encrypt_secret, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key);
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8));
var cipherStr = cryptoJS.TripleDES.encrypt(opStr, keyHex, {iv: ivHex}).toString();
return cipherStr;
} }
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k]; /**
if (tKey != "sign" && params[tKey]) { * 解密信息
let tmpKeyValue = params[tKey]; * @param {*} encrypt_key
if (tmpKeyValue instanceof Array || tmpKeyValue instanceof Object) { * @param {*} encrypt_secret
tmpKeyValue = JSON.stringify(tmpKeyValue); * @param {*} opStr
} */
signArr.push(tKey + "=" + tmpKeyValue); async decryptStr(encrypt_key, encrypt_secret, opStr) {
} if (!opStr) {
return system.getResult(null, "opStr is empty");
}
try {
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key);
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8));
var bytes = cryptoJS.TripleDES.decrypt(opStr, keyHex, {
iv: ivHex
});
var plaintext = bytes.toString(cryptoJS.enc.Utf8);
if (!plaintext) {
return system.getResult(null, "解密失败" + opStr);
}
return system.getResultSuccess(plaintext);
} catch (error) {
return system.getResultFail(-200, "解密异常:" + opStr);
}
} }
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空"); /**
* 带超时时间的post请求
* @param {*} req 请求信息
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间
*/
async execPostByTimeOut(req, params, url, ContentType, headData, timeOut = 60) {
const result = await this.execClientNew.execPostTimeOutByBusiness('sve.base', params, url, ContentType, headData, timeOut, req);
return result;
} }
var resultSignStr = signArr.join("&") + "&key=" + app_secret;
var resultTmpSign = md5(resultSignStr).toUpperCase(); /**
if (params.sign != resultTmpSign) { * 验证签名
return system.getResult(null, "返回值签名验证失败"); * @param {*} params 要验证的参数
* @param {*} app_secret 应用的校验key
*/
async verifySign(params, app_secret) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey]) {
let tmpKeyValue = params[tKey];
if (tmpKeyValue instanceof Array || tmpKeyValue instanceof Object) {
tmpKeyValue = JSON.stringify(tmpKeyValue);
}
signArr.push(tKey + "=" + tmpKeyValue);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_secret;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "返回值签名验证失败");
}
return system.getResultSuccess();
} }
return system.getResultSuccess();
} async getFQbossSign(pobj) {
async getFQbossSign(pobj){ var signArr = [];
var signArr = []; var keys = Object.keys(pobj).sort();
var keys = Object.keys(pobj).sort(); for (let k = 0; k < keys.length; k++) {
for (let k = 0; k < keys.length; k++) { const tKey = keys[k];
const tKey = keys[k]; if (tKey != "sign" && pobj[tKey]) {
if (tKey != "sign" && pobj[tKey]) { signArr.push(tKey + "=" + pobj[tKey]);
signArr.push(tKey + "=" + pobj[tKey]); }
} }
var resultSignStr = signArr.join("&") + "&key=" + "9c83f5f5c41347fc9bb47951fef3199b";
return md5(resultSignStr).toUpperCase();
} }
var resultSignStr = signArr.join("&") + "&key=" + "9c83f5f5c41347fc9bb47951fef3199b";
return md5(resultSignStr).toUpperCase();
}
} }
module.exports = AppServiceBase; module.exports = AppServiceBase;
const system = require("../system"); const system = require("../system");
class dingClient { class dingClient {
constructor() { constructor() {
this.execClient = system.getObject('util.execClient'); this.execClient = system.getObject('util.execClient');
this.gatewayurl = "https://oapi.dingtalk.com/robot/send?access_token=2f1ada261ea84f6c621db487ac18d11eba8984202bd82adda8810770a8240572" this.gatewayurl = "https://oapi.dingtalk.com/robot/send?access_token=2f1ada261ea84f6c621db487ac18d11eba8984202bd82adda8810770a8240572"
this.businessToFqUrl = "https://oapi.dingtalk.com/robot/send?access_token=9e215f0f1d77980ee6b39e88a82a7c6e5d290775f76d9a8346e97697f8df9788" this.businessToFqUrl = "https://oapi.dingtalk.com/robot/send?access_token=9e215f0f1d77980ee6b39e88a82a7c6e5d290775f76d9a8346e97697f8df9788"
}
//推送峰擎异常提醒
async gatewayPushError(err) {
if (process.env.APP_ENV === "prod") {
let c = `注意提醒:阿里->推送峰擎异常,老板们加油,加油,加油 !!!${JSON.stringify(err)}`
let t = new Date().toLocaleString()
this.execClient.execPost({
"msgtype": "text",
"text": {"content": t + c}
}, this.gatewayurl).catch(alierr => {
console.log(alierr)
});
} }
}
//渠道钉钉提醒 //推送峰擎异常提醒
async gatewayPushByChannel(orderNo,appInfo){ async gatewayPushError(err) {
let gatewayUrl = setttings.dingRobotUrl(appInfo.uapp_id); if (process.env.APP_ENV === "prod") {
if (settings.env != "dev" && gatewayUrl) { let c = `注意提醒:阿里->推送峰擎异常,老板们加油,加油,加油 !!!${JSON.stringify(err)}`
let c = `注意提醒:${appInfo.app_name}->有订单待处理,订单号${orderNo},老板们加油,加油,加油 !!!` let t = new Date().toLocaleString()
let t = new Date().toLocaleString() this.execClient.execPost({
this.execClient.execPost({ "msgtype": "text",
"msgtype": "text", "text": {"content": t + c}
"text": {"content": t + c} }, this.gatewayurl).catch(alierr => {
}, gatewayUrl).catch(err => { console.log(alierr)
console.log(err) });
}); }
} }
}
//渠道订单到峰擎--sku没有查询到 //渠道钉钉提醒
async businessPushFqByChannel(params){ async gatewayPushByChannel(orderNo, appInfo) {
if (process.env.APP_ENV != "dev") { let gatewayUrl = setttings.dingRobotUrl(appInfo.uapp_id);
let c = `注意提醒:${appInfo.app_name}->有订单待处理,sku为空,参数:${JSON.stringify(params)},老板们加油,加油,加油 !!!` if (settings.env != "dev" && gatewayUrl) {
let t = new Date().toLocaleString() let c = `注意提醒:${appInfo.app_name}->有订单待处理,订单号${orderNo},老板们加油,加油,加油 !!!`
this.execClient.execPost({ let t = new Date().toLocaleString()
"msgtype": "text", this.execClient.execPost({
"text": {"content": t + c}, "msgtype": "text",
at: { "text": {"content": t + c}
atMobiles: ["13051727697","13453222948","18201231253"]//孟令强、王斌、郭峰 }, gatewayUrl).catch(err => {
}, console.log(err)
}, this.businessToFqUrl).catch(err => { });
console.log(err) }
}); }
//渠道订单到峰擎--sku没有查询到
async businessPushFqByChannel(params) {
if (process.env.APP_ENV != "dev") {
let c = `注意提醒:${appInfo.app_name}->有订单待处理,渠道下sku查询不到,参数:${JSON.stringify(params)},老板们加油,加油,加油 !!!`
let t = new Date().toLocaleString()
this.execClient.execPost({
"msgtype": "text",
"text": {"content": t + c},
at: {
atMobiles: ["13051727697", "13453222948", "18201231253"]//孟令强、王斌、郭峰
},
}, this.businessToFqUrl).catch(err => {
console.log(err)
});
}
} }
}
} }
module.exports = dingClient; module.exports = dingClient;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment