Commit 4253173a by 宋毅

渠道增加

parent 1b34e4d4
......@@ -4,247 +4,269 @@ const _ = require("lodash")
const md5 = require("MD5");
class TmqueryService {
constructor() {
this.channelApiUrl = "https://tm.plus.jdcloud.com";
this.zcApiUrl = settings.reqZcApi();
this.reqEsAddr = settings.reqEsAddr();
this.execClient = system.getObject("util.execClient");
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
* @param {*} isEmptySign params key 对应值为空是否参与签名
*/
createSign(params, app_key, isEmptySign) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
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") {
if (tKey != "token") {
if (tKey != "actionProcess") {
if (isEmptySign) {
signArr.push(tKey + "=" + params[tKey]);
} else {
if (params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
}
}
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
return system.getResultSuccess(resultTmpSign);
}
async findTrademarkNameAccurate(queryobj, req) {//通过商标名来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameAccurate";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkNameIndex(queryobj, req) {//根据商标名称模糊查询,首次查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameIndex";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkName(queryobj, req) {//根据商标名称模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkName";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkzchAccurate(queryobj, req) {//通过商标号来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzchAccurate";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkzcr(queryobj, req) {//通过注册人模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzcr";
return await this.opReqResult(url, queryobj, req);
}
async imagequery(queryobj, req) {//图像检索
var url = this.zcApiUrl + "api/trademark/tmqueryApi/imagequery";
return await this.opReqResult(url, queryobj, req);
}
async findImageSearch(queryobj, req) { //图像检索查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findImageSearch";
return await this.opReqResult(url, queryobj, req);
}
async tradeMarkDetail(queryobj, req) {//商标详情
var url = this.zcApiUrl + "api/trademark/tmqueryApi/tradeMarkDetail";
return await this.opReqResult(url, queryobj, req);
}
async sbzuixinsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/sbzuixinsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticequeryTMZCSQ(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequeryTMZCSQ";
return await this.opReqResult(url, queryobj, req);
}
async noticequery(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequery";
return await this.opReqResult(url, queryobj, req);
}
async noticezcggsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticezcggsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticesearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticesearch";
return await this.opReqResult(url, queryobj, req);
}
async getCompanyInfoNoUser(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getCompanyInfoNoUser";
return await this.opReqResult(url, queryobj, req);
}
async getNclDetail(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getNclDetail";
return await this.opReqResult(url, queryobj, req);
}
async gettwoNcl(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/gettwoNcl";
return await this.opReqResult(url, queryobj, req);
}
async nclFuwuSearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/nclFuwuSearch";
return await this.opReqResult(url, queryobj, req);
}
async opReqResult(reqUrl, queryobj, req) {
var rtn = await this.execClient.execPushDataPost(queryobj, reqUrl, req.headers["token"], req.headers["request-id"]);
var data = JSON.parse(rtn.stdout);
return data;
}
async pushJdPayOrder(queryobj, req) {
constructor() {
this.channelApiUrl = "https://tm.plus.jdcloud.com";
this.zcApiUrl = settings.reqZcApi();
this.reqEsAddr = settings.reqEsAddr();
this.execClient = system.getObject("util.execClient");
}
/**
* 请求es 拿出数据,组装
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
* @param {*} isEmptySign params key 对应值为空是否参与签名
*/
let failOrders = [];
try {
const data = await this.execClient.execPost({
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "optitle",
"query": "\"###处理京东推送的订单信息参数\""
}
}
]
}
},
"from": 0,
"size": 2000,
"sort": [
{
"created_at": "desc"
}
]
}, `${this.reqEsAddr}bigdata_zc_op_log/_search`);
let result = data.stdout;
result = JSON.parse(result);
result = result.hits.hits;
result = _.uniqBy(result.map(item => {
return JSON.parse(item._source.content.replace(/pushData参数=/g, ""))
}).filter(item => {
return item.skuId
}), "orderNumber").filter(item => {
const signResult = this.createSign(item, "F6FBD101C7571ADE231670F080653874", true);
if (signResult.status != 0 || signResult.data != item.token.toUpperCase()) {
failOrders.push({
errMsg: "签名失败",
param: item
});
return false
} else {
return true;
createSign(params, app_key, isEmptySign) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
});
var tokenInfo = await this.getToken();
if (tokenInfo.status != 0) {
return tokenInfo;
}
let buildResult = [];
for (let pushData of result) {
//自助注册产品---用updateOrderPayStatus,否则为addOrderAndDelivery
let param = {
actionProcess: pushData.actionProcess,
actionType: "",
actionBody: {
channelUserId: pushData.jdPin,
payStatus: "yfk",
channelItemCode: pushData.skuId,//------用此字段查询渠道产品是否存在
needNo: pushData.skuId + "_" + pushData.orderNumber,
needNoOrderNo: pushData.orderNumber,//---用此字段查找
buyerMoblie: pushData.mobile,
payCode: pushData.skuId,
email: pushData.email
},
isUser: "yes"
};
if (["FW_GOODS-582206-1", "FW_GOODS-582208-1", "FW_GOODS-582207-1"].indexOf(pushData.skuId) >= 0) {
param.actionType = pushData.skuId == "FW_GOODS-582206-1" ? "updateOrderPayStatusJd" : "addOrderAndDelivery";
}//商标的产品订单
else {
param.actionBody.channelItemCode = pushData.serviceCode;
param.actionType = "jdAddQifuOrder";
}//工商产品订单
let reqUrl = this.channelApiUrl + "/action/tmOrder/springBoard";
let rtn = await this.execClient.execPushDataPost(param, reqUrl, tokenInfo.data.token, req.headers["request-id"]);;
if (!rtn || !rtn.stdout) {
failOrders.push(
{
orderNumber: item.orderNumber,
errMsg: "this.execClient.execPushDataPost无返回"
}
)
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
let data = JSON.parse(rtn.stdout);
if (data.status === 0) {
buildResult.push({
...data,
param
})
} else {
failOrders.push(
{
param,
errMsg: data
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign") {
if (tKey != "token") {
if (tKey != "actionProcess") {
if (isEmptySign) {
signArr.push(tKey + "=" + params[tKey]);
} else {
if (params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
}
}
}
)
}
}
return { successOrders: buildResult, failOrders };
} catch (error) {
console.log(error)
return system.getResultFail(-200, "操作error");
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
return system.getResultSuccess(resultTmpSign);
}
async findTrademarkNameAccurate(queryobj, req) {//通过商标名来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameAccurate";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkNameIndex(queryobj, req) {//根据商标名称模糊查询,首次查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameIndex";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkName(queryobj, req) {//根据商标名称模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkName";
return await this.opReqResult(url, queryobj, req);
}
}
async getToken() {
var reqTokenUrl = this.channelApiUrl + "/auth/accessAuth/getToken";
var reqParam = {};
var rtn = await this.execClient.execPost({ appkey: "201911251551", secret: "56006077354d48858026c80c0e10bef6" }, reqTokenUrl);
if (!rtn.stdout) {
return system.getResult(null, "获取token失败");
async findTrademarkzchAccurate(queryobj, req) {//通过商标号来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzchAccurate";
return await this.opReqResult(url, queryobj, req);
}
var tokenResult = JSON.parse(rtn.stdout);
if (tokenResult.status == 0) {
tokenResult.data.secret = reqParam.secret;
async findTrademarkzcr(queryobj, req) {//通过注册人模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzcr";
return await this.opReqResult(url, queryobj, req);
}
async imagequery(queryobj, req) {//图像检索
var url = this.zcApiUrl + "api/trademark/tmqueryApi/imagequery";
return await this.opReqResult(url, queryobj, req);
}
async findImageSearch(queryobj, req) { //图像检索查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findImageSearch";
return await this.opReqResult(url, queryobj, req);
}
async tradeMarkDetail(queryobj, req) {//商标详情
var url = this.zcApiUrl + "api/trademark/tmqueryApi/tradeMarkDetail";
return await this.opReqResult(url, queryobj, req);
}
async sbzuixinsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/sbzuixinsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticequeryTMZCSQ(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequeryTMZCSQ";
return await this.opReqResult(url, queryobj, req);
}
async noticequery(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequery";
return await this.opReqResult(url, queryobj, req);
}
async noticezcggsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticezcggsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticesearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticesearch";
return await this.opReqResult(url, queryobj, req);
}
async getCompanyInfoNoUser(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getCompanyInfoNoUser";
return await this.opReqResult(url, queryobj, req);
}
async getNclDetail(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getNclDetail";
return await this.opReqResult(url, queryobj, req);
}
async gettwoNcl(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/gettwoNcl";
return await this.opReqResult(url, queryobj, req);
}
async nclFuwuSearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/nclFuwuSearch";
return await this.opReqResult(url, queryobj, req);
}
async opReqResult(reqUrl, queryobj, req) {
var rtn = await this.execClient.execPushDataPost(queryobj, reqUrl, req.headers["token"], req.headers["request-id"]);
var data = JSON.parse(rtn.stdout);
return data;
}
async pushJdPayOrder(queryobj, req) {
/**
* 请求es 拿出数据,组装
*/
let failOrders = [];
try {
const data = await this.execClient.execPostTimeOut({
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "optitle",
"query": "\"###处理京东推送的订单信息参数\""
}
}
]
}
},
"from": 0,
"size": 2000,
"sort": [
{
"created_at": "desc"
}
]
}, `${this.reqEsAddr}bigdata_zc_op_log/_search`, 20000);
let result = data.stdout;
result = JSON.parse(result);
result = result.hits.hits;
result = _.uniqBy(result.map(item => {
return JSON.parse(item._source.content.replace(/pushData参数=/g, ""))
}).filter(item => {
return item.skuId
}), "orderNumber").filter(item => {
const signResult = this.createSign(item, "F6FBD101C7571ADE231670F080653874", true);
if (signResult.status != 0 || signResult.data != item.token.toUpperCase()) {
failOrders.push({
errMsg: "签名失败",
param: item
});
return false
} else {
return true;
}
});
var tokenInfo = await this.getToken();
if (tokenInfo.status != 0) {
return tokenInfo;
}
let buildResult = [];
for (let pushData of result) {
//自助注册产品---用updateOrderPayStatus,否则为addOrderAndDelivery
let param = {
actionProcess: pushData.actionProcess,
actionType: "",
actionBody: {
channelUserId: pushData.jdPin,
payStatus: "yfk",
channelItemCode: pushData.skuId,//------用此字段查询渠道产品是否存在
needNo: pushData.skuId + "_" + pushData.orderNumber,
needNoOrderNo: pushData.orderNumber,//---用此字段查找
buyerMoblie: pushData.mobile,
payCode: pushData.skuId,
email: pushData.email
},
isUser: "yes"
};
if (["FW_GOODS-582206-1", "FW_GOODS-582208-1", "FW_GOODS-582207-1"].indexOf(pushData.skuId) >= 0) {
param.actionType = pushData.skuId == "FW_GOODS-582206-1" ? "updateOrderPayStatusJd" : "addOrderAndDelivery";
}//商标的产品订单
else {
param.actionBody.channelItemCode = pushData.serviceCode;
param.actionType = "jdAddQifuOrder";
}//工商产品订单
let reqUrl = this.channelApiUrl + "/action/tmOrder/springBoard";
let rtn = await this.execClient.execPushDataPost(param, reqUrl, tokenInfo.data.token, req.headers["request-id"]);
;
if (!rtn || !rtn.stdout) {
failOrders.push(
{
orderNumber: item.orderNumber,
errMsg: "this.execClient.execPushDataPost无返回"
}
)
}
let data = JSON.parse(rtn.stdout);
if (data.status === 0) {
buildResult.push({
...data,
param
})
} else {
failOrders.push(
{
param,
errMsg: data
}
)
}
}
return {successOrders: buildResult, failOrders};
} catch (error) {
console.log(error)
return system.getResultFail(-200, "操作error");
}
}
async getToken() {
var reqTokenUrl = this.channelApiUrl + "/auth/accessAuth/getToken";
var reqParam = {};
var rtn = await this.execClient.execPost({
appkey: "201911251551",
secret: "56006077354d48858026c80c0e10bef6"
}, reqTokenUrl);
if (!rtn.stdout) {
return system.getResult(null, "获取token失败");
}
var tokenResult = JSON.parse(rtn.stdout);
if (tokenResult.status == 0) {
tokenResult.data.secret = reqParam.secret;
}
return tokenResult;
}
return tokenResult;
}
}
module.exports = TmqueryService;
......@@ -2,6 +2,7 @@ var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const uuidv4 = require('uuid/v4');
class ExecClient {
constructor() {
this.cmdPostPattern = "curl --user admines:adminGSBes. -k -H 'Content-type: application/json' -d '{data}' {url}";
......@@ -10,30 +11,33 @@ class ExecClient {
this.cmdDataPostByTokenUserPinPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'userpin:{UPIN}' -d '{data}' {url}";
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
const {stdout, stderr} = await exec(cmd);
return {stdout, stderr};
}
async exec2(cmd) {
return exec(cmd, { encoding: "base64" });
return exec(cmd, {encoding: "base64"});
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
console.log(cmd);
console.log(cmd,"cmd......................................");
return cmd;
}
FetchPushDataPostCmd(subData, url, token, requestId) {
var requestId = requestId || this.getUUID();
var data = JSON.stringify(subData);
......@@ -42,6 +46,7 @@ class ExecClient {
console.log(cmd);
return cmd;
}
execDataPostByTokenUserPinCmd(subData, url, token, userPin) {
var data = JSON.stringify(subData);
var cmd = this.cmdDataPostByTokenUserPinPattern.replace(/\{data\}/g,
......@@ -49,21 +54,43 @@ class ExecClient {
console.log(cmd);
return cmd;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
/**
* 带超时时间的post请求
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间设置,单位秒
*/
async execPostTimeOut(params, url, timeOut = 5000) {
let cmd = this.FetchPostCmd(params, url);
let options = {
timeout: timeOut,
maxBuffer: 1024 * 1024 * 20
};
let result = await this.exec(cmd, options);
return result;
}
async execPushDataPost(subData, url, token, requestId) {
let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId);
var result = await this.exec(cmd);
return result;
}
async execDataPostByTokenUserPin(subData, url, token, userPin) {
let cmd = this.execDataPostByTokenUserPinCmd(subData, url, token, userPin);
var result = await this.exec(cmd);
return result;
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec2(cmd);
......@@ -83,6 +110,7 @@ class ExecClient {
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
......@@ -96,8 +124,8 @@ class ExecClient {
var options = {
timeout: timeOut,
};
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
const {stdout, stderr} = await exec(cmd, options);
return {stdout, stderr};
}
}
......
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