Commit 4253173a by 宋毅

渠道增加

parent 1b34e4d4
...@@ -4,247 +4,269 @@ const _ = require("lodash") ...@@ -4,247 +4,269 @@ const _ = require("lodash")
const md5 = require("MD5"); const md5 = require("MD5");
class TmqueryService { class TmqueryService {
constructor() { constructor() {
this.channelApiUrl = "https://tm.plus.jdcloud.com"; this.channelApiUrl = "https://tm.plus.jdcloud.com";
this.zcApiUrl = settings.reqZcApi(); this.zcApiUrl = settings.reqZcApi();
this.reqEsAddr = settings.reqEsAddr(); this.reqEsAddr = settings.reqEsAddr();
this.execClient = system.getObject("util.execClient"); 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) {
/** /**
* 请求es 拿出数据,组装 * 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
* @param {*} isEmptySign params key 对应值为空是否参与签名
*/ */
let failOrders = []; createSign(params, app_key, isEmptySign) {
try { if (!params) {
const data = await this.execClient.execPost({ return system.getResult(null, "请求参数为空");
"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;
} }
}); var signArr = [];
var tokenInfo = await this.getToken(); var keys = Object.keys(params).sort();
if (tokenInfo.status != 0) { if (keys.length == 0) {
return tokenInfo; return system.getResult(null, "请求参数信息为空");
}
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); for (let k = 0; k < keys.length; k++) {
if (data.status === 0) { const tKey = keys[k];
buildResult.push({ if (tKey != "sign") {
...data, if (tKey != "token") {
param if (tKey != "actionProcess") {
}) if (isEmptySign) {
} else { signArr.push(tKey + "=" + params[tKey]);
failOrders.push( } else {
{ if (params[tKey]) {
param, signArr.push(tKey + "=" + params[tKey]);
errMsg: data }
}
}
}
} }
)
} }
} if (signArr.length == 0) {
return { successOrders: buildResult, failOrders }; return system.getResult(null, "请求参数组装签名参数信息为空");
} catch (error) { }
console.log(error) var resultSignStr = signArr.join("&") + "&key=" + app_key;
return system.getResultFail(-200, "操作error"); 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() { async findTrademarkzchAccurate(queryobj, req) {//通过商标号来进行精准查询
var reqTokenUrl = this.channelApiUrl + "/auth/accessAuth/getToken"; var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzchAccurate";
var reqParam = {}; return await this.opReqResult(url, queryobj, req);
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) { async findTrademarkzcr(queryobj, req) {//通过注册人模糊查询
tokenResult.data.secret = reqParam.secret; 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; module.exports = TmqueryService;
...@@ -2,6 +2,7 @@ var childproc = require('child_process'); ...@@ -2,6 +2,7 @@ var childproc = require('child_process');
const util = require('util'); const util = require('util');
const exec = util.promisify(require('child_process').exec); const exec = util.promisify(require('child_process').exec);
const uuidv4 = require('uuid/v4'); const uuidv4 = require('uuid/v4');
class ExecClient { class ExecClient {
constructor() { constructor() {
this.cmdPostPattern = "curl --user admines:adminGSBes. -k -H 'Content-type: application/json' -d '{data}' {url}"; this.cmdPostPattern = "curl --user admines:adminGSBes. -k -H 'Content-type: application/json' -d '{data}' {url}";
...@@ -10,30 +11,33 @@ class ExecClient { ...@@ -10,30 +11,33 @@ class ExecClient {
this.cmdDataPostByTokenUserPinPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'userpin:{UPIN}' -d '{data}' {url}"; this.cmdDataPostByTokenUserPinPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'userpin:{UPIN}' -d '{data}' {url}";
} }
getUUID() { getUUID() {
var uuid = uuidv4(); var uuid = uuidv4();
var u = uuid.replace(/\-/g, ""); var u = uuid.replace(/\-/g, "");
return u; return u;
} }
async exec(cmd) { async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值 //await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获 //异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd); const {stdout, stderr} = await exec(cmd);
return { stdout, stderr }; return {stdout, stderr};
} }
async exec2(cmd) { async exec2(cmd) {
return exec(cmd, { encoding: "base64" }); return exec(cmd, {encoding: "base64"});
} }
FetchPostCmd(subData, url) { FetchPostCmd(subData, url) {
var data = JSON.stringify(subData); var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g, var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url); data).replace(/\{url\}/g, url);
console.log(cmd); console.log(cmd,"cmd......................................");
return cmd; return cmd;
} }
FetchPushDataPostCmd(subData, url, token, requestId) { FetchPushDataPostCmd(subData, url, token, requestId) {
var requestId = requestId || this.getUUID(); var requestId = requestId || this.getUUID();
var data = JSON.stringify(subData); var data = JSON.stringify(subData);
...@@ -42,6 +46,7 @@ class ExecClient { ...@@ -42,6 +46,7 @@ class ExecClient {
console.log(cmd); console.log(cmd);
return cmd; return cmd;
} }
execDataPostByTokenUserPinCmd(subData, url, token, userPin) { execDataPostByTokenUserPinCmd(subData, url, token, userPin) {
var data = JSON.stringify(subData); var data = JSON.stringify(subData);
var cmd = this.cmdDataPostByTokenUserPinPattern.replace(/\{data\}/g, var cmd = this.cmdDataPostByTokenUserPinPattern.replace(/\{data\}/g,
...@@ -49,21 +54,43 @@ class ExecClient { ...@@ -49,21 +54,43 @@ class ExecClient {
console.log(cmd); console.log(cmd);
return cmd; return cmd;
} }
async execPost(subData, url) { async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url); let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd); var result = await this.exec(cmd);
return result; 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) { async execPushDataPost(subData, url, token, requestId) {
let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId); let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId);
var result = await this.exec(cmd); var result = await this.exec(cmd);
return result; return result;
} }
async execDataPostByTokenUserPin(subData, url, token, userPin) { async execDataPostByTokenUserPin(subData, url, token, userPin) {
let cmd = this.execDataPostByTokenUserPinCmd(subData, url, token, userPin); let cmd = this.execDataPostByTokenUserPinCmd(subData, url, token, userPin);
var result = await this.exec(cmd); var result = await this.exec(cmd);
return result; return result;
} }
async execPost2(subData, url) { async execPost2(subData, url) {
let cmd = this.FetchPostCmd(subData, url); let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec2(cmd); var result = await this.exec2(cmd);
...@@ -83,6 +110,7 @@ class ExecClient { ...@@ -83,6 +110,7 @@ class ExecClient {
var result = await this.exec(cmd); var result = await this.exec(cmd);
return result; return result;
} }
async execGet2(subData, url) { async execGet2(subData, url) {
let cmd = this.FetchGetCmd(subData, url); let cmd = this.FetchGetCmd(subData, url);
console.log(cmd); console.log(cmd);
...@@ -96,8 +124,8 @@ class ExecClient { ...@@ -96,8 +124,8 @@ class ExecClient {
var options = { var options = {
timeout: timeOut, timeout: timeOut,
}; };
const { stdout, stderr } = await exec(cmd, options); const {stdout, stderr} = await exec(cmd, options);
return { stdout, stderr }; 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