Commit 1b9b2984 by 王勇飞

Merge branch 'center-channel' of gitlab.gongsibao.com:jiangyong/zhichan into center-channel

parents e554d7dd 527d8878
......@@ -37,6 +37,9 @@ class ProductAPI extends WEBBase {
case "getProductPrice":
opResult = await this.utilsProductSve.getProductPrice(pobj,pobj.actionBody)
break;
case "getProductRecommend":
opResult = await this.utilsProductSve.getProductRecommend(pobj,pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
}
......
......@@ -99,6 +99,9 @@ class TmQueryAPI extends WEBBase {
opResult = system.getResult(null, rtn.msg);
}
break;
case "getNclByCode":
opResult = await this.toolSve.getNclByCode(pobj,req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
......
......@@ -85,6 +85,9 @@ class Need extends APIBase {
case "confirmIcpIntention":// 2020 0827 lin 新增 4.3 用户需求确认
opResult = await this.utilsNeedSve.confirmIcpIntention(pobj, pobj.actionBody);
break;
case "needBatchUpload":// 2020 0914 lin 新增 刷单一条龙服务
opResult = await this.utilsNeedSve.needBatchUpload(pobj, pobj.actionBody);
break;
case "testsymq":
opResult = await this.utilsNeedSve.testsymq(pobj);
break;
......
......@@ -54,7 +54,8 @@ class QcCenterOrderService extends AppServiceBase {
}
var self = this;
//推送方案
await this.pushIcpSolution(pushObj, needsolution.solutionNo, pobj.appInfo, self);
// 2020 0916 lin 修改 增加获取返回值
var pushIcpSolutionRes = await this.pushIcpSolution(pushObj, needsolution.solutionNo, pobj.appInfo, self);
// // 2020 0806 lin 新增推送
// var reqParams = {
......@@ -87,7 +88,8 @@ class QcCenterOrderService extends AppServiceBase {
appInfo: pobj.appInfo
}
this.utilsPushSve.aliBusiness2Delivery(reqParams, "updateChanceStatus");
return system.getResultSuccess();
//
return system.getResultSuccess(pushIcpSolutionRes);
}
return res;
}
......@@ -124,6 +126,7 @@ class QcCenterOrderService extends AppServiceBase {
var a = await self.reqCenterOrderApi(reqObj3);//保存用户确认方案url
}
}
return confirmRes;
}
}
}
......
......@@ -111,6 +111,13 @@ class ToolService extends AppServiceBase {
var plaintext = bytes.toString(cryptoJS.enc.Utf8);
return system.getResultSuccess(plaintext);
}
//智能推荐、犬类保护获取尼斯分类
async getNclByCode(pobj,req){
var reqUrl = settings.centerOrderUrl() + "action/tmOrder/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
}
module.exports = ToolService;
......@@ -110,7 +110,7 @@ class utilsDeliverSve extends AppServiceBase{
let result = await this.restPostUrl(pobj, url);
if(result.status !==0){
return system.getResult(null,'更新失败')
return system.getResult(null,result.msg)
}
//获取订单
let orderUrl = this.centerOrderUrl + "action/order/springBoard";
......
......@@ -697,7 +697,7 @@ class UtilsOrderService extends AppServiceBase {
}
async wxPayNotify(parmas, client_ip) { // 微信宝回调
async wxPayNotify(parmas, client_ip) { // 微信宝回调 ----暂时不用
try {
//日志记录
this.logCtl.info({
......@@ -797,6 +797,107 @@ class UtilsOrderService extends AppServiceBase {
}
}
async channelPayNotify(params, client_ip){//渠道订单支付通知
try{
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "渠道订单支付回调参数信息",
op: "service/impl/utilsSve/utilsOrderSve.js/channelPayNotify",
content: JSON.stringify(params),
clientIp: client_ip || ""
});
if(!params.appkey){
return system.getResult(null,'appKey can be not null')
}
if(!params.orderNo){
return system.getResult(null,'orderNo can be not null')
}
if(!params.payTotalSum){
return system.getResult(null,'payTotalSum can be not null')
}
if(!params.signature){
return system.getResult(null,'signature can be not null')
}
if(!params.payType){
return system.getResult(null,'payType can be not null')
}
if(!params.payOrderNo){
return system.getResult(null,'payOrderNo can be not null')
}
let url = this.centerAppUrl + 'payment/paymentApi/getAppInfoByAppKey';
let appInfoRt = await this.restPostUrl({appKey:params.appkey},url);
if(appInfoRt.status !=0){
appInfoRt.msg = appInfoRt.msg + ",100270";
return appInfoRt;
}
let singStr = params.appkey + params.orderNo + params.payTotalSum + appInfoRt.data.uapp_secret
let sign = md5(singStr).toUpperCase();
if(sign != params.signature){
return system.getResultFail(-1,'验证签名失败')
}
var appInfo = appInfoRt.data;
// 拿锁
var locker = await this.cacheManager["TlPayLocker"].enter(params.orderNo);
console.log("拿锁结果",locker)
if (!locker || locker != "1") {
this.logCtl.info({
appid: appInfoRt.data.uappId,
appkey: "",
op: "service/impl/utilsSve/utilsOrderSve.js/aliPayNotify",
content: "参数=" + JSON.stringify(params),
clientIp: params.client_ip || "",
optitle: "阿里回调操作频繁---太频繁了,太频繁了"
});
return system.getResultFail(-200, "阿里回调操作频繁---太频繁了,太频繁了");
}
params.appInfo = { uapp_id: appInfo.uapp_id };
params.pay_type = params.payType;
//修改并返回订单支付状态,创建收款单
// 这里修改了order_info的状态(status/paytime等)
var orderUrl = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotifyByChannel";
var opOrderResult = await this.restPostUrl(params, orderUrl);
if (opOrderResult.status != 0) {
opOrderResult.data = null;
return opOrderResult;
}
opOrderResult.data.appInfo = {
uapp_id: appInfo.uapp_id,
uapp_key: appInfo.uapp_key,
app_code: appInfo.app_code,
app_name: appInfo.app_name
};
opOrderResult.data.userInfo = {
channel_userid: opOrderResult.data.order_info.channelUserId,
channel_username: opOrderResult.data.order_info.channelUserId,
channel_nickname: opOrderResult.data.order_info.channelUserId
};
opOrderResult.data.orderNo = params.orderNo;
opOrderResult.data.order_info.pay_flow_no = params.trade_no || "";// 2020 0704 lin 新增 推送fq必填字段
opOrderResult.data.order_info.pay_channel = params.payType == 'wx' ?'微信':'支付宝';//付款方式
opOrderResult.data.order_info.pay_time = params.payTime;//付款时间
opOrderResult.data.order_info.pay_payer_bank_no = params.buyer_email || "";//付款账号
opOrderResult.data.order_contact = opOrderResult.data.delivery_content.orderContact;
var pobj = {
appInfo: opOrderResult.data.appInfo,
actionBody: opOrderResult.data
}
// 推送
this.utilsPushSve.pushBusInfo(pobj, "pushOrder", 0);
opOrderResult.data = null;
return opOrderResult;
}catch (e) {
await this.cacheManager["TlPayLocker"].release(params.orderNo);
this.logCtl.error({
optitle: "回调处理订单---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilstlbankSve.js/opBackNotify",
content: "参数=" + JSON.stringify(params) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
async tmAccept(pobj) {// 2020 0828 lin 新增 ali商标交易 创建订单接口
try {
......
......@@ -19,6 +19,9 @@ class UtilsProductService extends AppServiceBase {
if (!actionBody.pathCode) {
return system.getResult(null, "actionBody.pathCode can not be empty,100330");
}
if(actionBody.name){
pobj.actionBody.productName = actionBody.name;
}
pobj.actionBody.pathCode = "/" + actionBody.pathCode + "/";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
......@@ -77,6 +80,43 @@ class UtilsProductService extends AppServiceBase {
let url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
}
/**
* 获取推荐产品
* @param pobj
* @param actionBody
* @returns {Promise<void>}
*/
async getProductRecommend(pobj,actionBody){
const type = actionBody.type;
if(!type){
return system.getResult(-1,'type can be not empty')
}
switch (type) {
case 1:
if(!actionBody.companyName){
return system.getResultFail(-1,'companyName can be not empty')
}
break;
case 2:
if(!actionBody.companyName){
return system.getResultFail(-1,'companyName can be not empty')
}
if(!actionBody.productCode){
return system.getResultFail(-1,'productCode can be not empty')
}
break;
case 3:
if(!actionBody.productCode){
return system.getResultFail(-1,'productCode can be not empty')
}
break;
default:
return system.getResultFail(-1,'type 参数错误');
}
let url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj,url);
}
}
module.exports = UtilsProductService;
......@@ -172,7 +172,15 @@ class System {
data: data || null,
};
}
// 2020 0916 lin 新增返回格式 成功status为1
static getResultRedisQueueSuccess(data, okmsg = "success") {
return {
status: 1,
msg: okmsg,
data: data || null,
};
}
/**
* 请求返回成功 自定义
* @param {*} data 操作成功返回的数据
......
......@@ -53,7 +53,7 @@ class aliyunClient {
reqAliclient.apiVersion = obj.apiVersion;
}
var res = await reqAliclient.request(action, reqbody, {
timeout: 3000, // default 3000 ms
timeout: 10000, // default 3000 ms 2020 0916 lin修改3000为10000,原因ConfirmIcpIntention BizIds 超过5条会超时
formatAction: true, // default true, format the action to Action
formatParams: true, // default true, format the parameter name to first letter upper case
method: 'GET', // set the http method, default is GET
......
......@@ -199,6 +199,31 @@ module.exports = function (app) {
}
});
app.use('/orderNotify/channelPayNotify', async function (req, res) {
try{
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.channelPayNotify(req.body, client_ip);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "渠道支付订单通知 api层",
op: "center-channel/orderNotify/channelPayNotify",
content: "支付回调处理结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
if (result.status != 0) {
return res.end("FAIL");
}
return res.end("success");
}catch (e) {
var client_ip = system.get_client_ip(req);
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "渠道订单支付通知处理异常",
op: "center-channel/orderNotify/channelPayNotify",
content: "回调参数:req=" + JSON.stringify(req) + "error:" + e.stack,
clientIp: client_ip || ""
});
}
});
app.all("/web/*", async function (req, res, next) {
var result = system.getResult(null, "req method must is post");
......@@ -248,7 +273,8 @@ module.exports = function (app) {
"getNeedListUser",
"manualEvaluation", "diagnosisInfo", "check", "enterpriseInfo", "diagnosisDetail",
"submitIcpIntention", "queryIntentionList", "confirmIcpIntention",
"tmAccept", "tmStatus"
"tmAccept", "tmStatus",
"needBatchUpload"
];
if (lst.indexOf(req.body.actionType) >= 0) {
var userpin = req.headers["userpin"] || "";
......
......@@ -6,14 +6,14 @@ var marked = require("marked");
module.exports = function (app) {
app.get('/doc', function (req, res) {
if (!req.query.key) {
res.send("文件不存在!!!");
return;
}
if (req.query.key != "doc12345789") {
res.send("文件不存在!!!!!!");
return;
}
// if (!req.query.key) {
// res.send("文件不存在!!!");
// return;
// }
// if (req.query.key != "doc12345789") {
// res.send("文件不存在!!!!!!");
// return;
// }
var path = process.cwd() + "/app/front/entry/public/apidoc/README.md";
fs.readFile(path, function (err, data) {
if (err) {
......@@ -43,16 +43,16 @@ module.exports = function (app) {
});
app.get('/doc/api/:forder/:fileName', function (req, res) {
if (req.url != "/doc/api/platform/fgbusinesschance.md") {
if (!req.query.key) {
res.send("文件不存在!!!");
return;
}
if (req.query.key != "doc12345789") {
res.send("文件不存在!!!!!!");
return;
}
}
// if (req.url != "/doc/api/platform/fgbusinesschance.md") {
// if (!req.query.key) {
// res.send("文件不存在!!!");
// return;
// }
// if (req.query.key != "doc12345789") {
// res.send("文件不存在!!!!!!");
// return;
// }
// }
var forder = req.params["forder"];
var fileName = req.params["fileName"] || "README.md";
var path = process.cwd() + "/app/front/entry/public/apidoc";
......
......@@ -380,7 +380,10 @@
"appkey":"202001170336",// Y appkey
"orderNo":"TM26202002271337mkgN",// Y 订单号
"payTotalSum":300.00,// Y 订单金额
"signature":"DC18F27EFC1A251AFC5F2FCF36ABE6FA"
"signature":"DC18F27EFC1A251AFC5F2FCF36ABE6FA",
"payType":"", //支付方式 wx alipay
"payTime":"",// 支付时间
"payOrderNo":""// 支付订单流水号
}
```
......
......@@ -3,6 +3,7 @@
1. [产品列表-根据产品大类获取](#getProductListByOneCode)
1. [产品列表-根据产品二类获取](#getProductListByTwoCode)
1. [产品详情](#getProductDetail)
1. [产品推荐](#getProductRecommend)
## **<a name="getProductListByOneCode"> 产品列表-根据产品大类编码获取</a>**
......@@ -15,7 +16,8 @@
``` javascript
{
"pathCode":"sbfu" //查询的路径:大类code
"pathCode":"sbfu", //查询的路径:大类code
"productName":"工商" // N 产品名称
}
```
......@@ -178,4 +180,173 @@
"requestId": "5913fc3ae97a402e93330c2d488f1f7e"
}
```
## **<a name="getProductRecommend"> 产品推荐</a>**
[返回到目录](#menu)
##### URL
[/action/product/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getProductRecommend
``` javascript
{
"companyName":"科技部测试",// N 公司名称
"productCode":"gszc",// N 产品code
"type":2 //Y 1只查公司的推荐(company_name Y),2公司+产品(product_code Y company_name Y),3只查询产品(product_code Y)
}
```
#### 返回结果 0为成功,否则为失败
```javascript
{
"status": 0,
"msg": "success",
"data": [
{
"uapp_id": 26,//平台id--显示不用
"path_code": "/sbfu/sbzc/",//产品路径编码--显示不用
"path_name": "/商标服务/商标注册/",//产品路径名称--显示不用
"item_code": "zzsbzc",//产品code
"item_name": "商标注册【自助申请】",//产品名称
"channel_item_code": "zzsbzc",//渠道产品code
"channel_item_name": "商标注册【自助申请】",//渠道产品名称
"pic_url": "http://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_qft_pi15755163570461.png",//产品的图片
"product_short_desc": "适合熟知商标注册流程的企业用户", //产品的介绍
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]", //产品的描述列表
"desc_url": null,//产品介绍图片地址
"icon_url": null,//产品的icon
"productType_id": 2,//产品类型id--显示用不到
"sort": 1,//排序
"pay_code": "zzsbzc-1", //支付价格code
"service_charge": 30,//服务费
"public_expense": 270,//官费
"price": 300,//价格
"price_type": "mj",//定价类型:mj:每件,mc:每次,mt:每天,my:每月,mn:每年,qj:区间
"price_type_name": "每件",//定价类型名称
"price_desc": "每件(10小项)",//定价描述
"min_qty": null,//区间最小值
"max_qty": null//区间最大值
},
{
"product_id": 85,
"uapp_id": 38,
"path_code": "/sbfu/sbzc/",
"path_name": "/商标服务/商标注册/",
"item_code": "zzsbzc",
"item_name": "商标自助注册",
"channel_item_code": "zzsbzc",
"channel_item_name": "商标自助注册",
"pic_url": "",
"product_short_desc": "适合熟知商标注册流程的企业用户",
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]",
"desc_url": null,
"icon_url": null,
"productType_id": 63,
"sort": 1,
"pay_code": "zzsbzc-1",
"service_charge": 30,
"public_expense": 270,
"price": 300,
"price_type": "mj",
"price_type_name": "件",
"price_desc": "每件(10小项)",
"additions_desc": null,
"min_qty": null,
"max_qty": null,
"pc_pic_url": "https://mall-image.gongsibao.com/images/202007/thumb_img/2737_thumb_P_1593555482849.jpg",
"pc_desc_url": ""
},
{
"product_id": 86,
"uapp_id": 38,
"path_code": "/sbfu/sbzc/",
"path_name": "/商标服务/商标注册/",
"item_code": "fzsbzc",
"item_name": "商标辅助注册",
"channel_item_code": "fzsbzc",
"channel_item_name": "商标辅助注册",
"pic_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_3644155747559516320191016635163223322.png",
"product_short_desc": null,
"product_desc": "[\"由专业代理人帮您检索分析,成功率高\",\"为您优化注册方案,全方位保护\",\"代理人全流程服务,24小时拿到官方申请号\"]",
"desc_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_8071566301043178201920193723178zc_11341557742471246201913181431246代理人.jpg",
"icon_url": null,
"productType_id": 63,
"sort": 3,
"pay_code": "fzsbzc-1",
"service_charge": 429,
"public_expense": 270,
"price": 699,
"price_type": "mj",
"price_type_name": "件",
"price_desc": "每件(10小项)",
"additions_desc": null,
"min_qty": null,
"max_qty": null,
"pc_pic_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_3644155747559516320191016635163223322.png",
"pc_desc_url": "[{\"descUrl\":\"https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_8071566301043178201920193723178zc_11341557742471246201913181431246%E4%BB%A3%E7%90%86%E4%BA%BA.jpg\",\"sort\":1}]"
},
{
"product_id": 87,
"uapp_id": 38,
"path_code": "/sbfu/sbzc/",
"path_name": "/商标服务/商标注册/",
"item_code": "dbsbzc",
"item_name": "商标担保注册",
"channel_item_code": "dbsbzc",
"channel_item_name": "商标担保注册",
"pic_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_108415573041498072019816299807WX20190508-162857@2x.png",
"product_short_desc": null,
"product_desc": "[\"专业代理人精准评估,风险共担\",\"注册不成功,全额退款\",\"24小时拿到官方申请号\"]",
"desc_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_2594155775291371220191321833712%E9%8E%B7%E5%91%AC%E7%B9%9A%E9%8D%9F%E5%97%98%E7%88%A3%E5%A8%89%E3%84%A5%E5%94%BD.jpg",
"icon_url": null,
"productType_id": 63,
"sort": 5,
"pay_code": "dbsbzc-1",
"service_charge": 1029,
"public_expense": 270,
"price": 1299,
"price_type": "mj",
"price_type_name": "件",
"price_desc": "每件(10小项)",
"additions_desc": null,
"min_qty": null,
"max_qty": null,
"pc_pic_url": "https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_108415573041498072019816299807WX20190508-162857@2x.png",
"pc_desc_url": "[{\"descUrl\":\"https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_2594155775291371220191321833712%E9%8E%B7%E5%91%AC%E7%B9%9A%E9%8D%9F%E5%97%98%E7%88%A3%E5%A8%89%E3%84%A5%E5%94%BD.jpg\",\"sort\":1}]"
},
{
"product_id": 116,
"uapp_id": 38,
"path_code": "/gsfu/zcxg/",
"path_name": "/工商服务/注册相关/",
"item_code": "gsdb",
"item_name": "登报",
"channel_item_code": "gsdb",
"channel_item_name": "登报",
"pic_url": "",
"product_short_desc": "公司宝 登报申明 公司注销声明/公司减资声明/原件丢失声明等",
"product_desc": "",
"desc_url": null,
"icon_url": null,
"productType_id": 60,
"sort": 0,
"pay_code": "bjgsdb-1",
"service_charge": 0,
"public_expense": 0,
"price": 200,
"price_type": "mj",
"price_type_name": "件",
"price_desc": "北京",
"additions_desc": null,
"min_qty": null,
"max_qty": null,
"pc_pic_url": "https://mall-image.gongsibao.com/images/202001/thumb_img/0_thumb_P_1579138397162.jpg",
"pc_desc_url": "[{\"descUrl\":\"https://mall-image.gongsibao.com/uploads/image/2019/08/19/783aebc5718a573eff1e267b88fc1f8a.jpg\",\"sort\":1}]"
}
],
"requestId": "c39ee8a924074904b1694dd3bf2d6c4b"
}
```
\ No newline at end of file
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