Commit 209fd1cf by 宋毅

tj

parent 17c17e5d
...@@ -6,9 +6,7 @@ const md5 = require("MD5"); ...@@ -6,9 +6,7 @@ const md5 = require("MD5");
class APIBase { class APIBase {
constructor() { constructor() {
this.cacheManager = system.getObject("db.common.cacheManager"); this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("web.common.oplogCtl"); this.logCtl = system.getObject("service.common.oplogSve");
this.oplogSve = system.getObject("service.common.oplogSve");
this.toolSve = system.getObject("service.trademark.toolSve");
this.exTime = 2 * 3600;//缓存过期时间,2小时 this.exTime = 2 * 3600;//缓存过期时间,2小时
} }
getUUID() { getUUID() {
...@@ -60,11 +58,10 @@ class APIBase { ...@@ -60,11 +58,10 @@ class APIBase {
async isCheckWhiteList(gname, methodname) { async isCheckWhiteList(gname, methodname) {
var fullname = gname + "." + methodname; var fullname = gname + "." + methodname;
var lst = [ var lst = [
"test.test",
"action.info",
"action.error",
"auth.getToken", "auth.getToken",
"auth.getJdSign" "auth.userLogin",
"auth.getToken",
"auth.getToken",
]; ];
var x = lst.indexOf(fullname); var x = lst.indexOf(fullname);
return x >= 0; return x >= 0;
...@@ -119,42 +116,19 @@ class APIBase { ...@@ -119,42 +116,19 @@ class APIBase {
return system.getResultSuccess(); return system.getResultSuccess();
} }
async doexec(gname, methodname, pobj, query, req) { async doexec(gname, methodname, pobj, query, req) {
var requestid = req.headers["request-id"] || this.getUUID(); req.requestId = this.getUUID();
if (!req.headers["request-id"]) {
req.headers["request-id"] = requestid;
}
try { try {
if (pobj.actionType == "createChannelUser") { // //验证accesskey或验签
if (!pobj.isUser) { // var isPassResult = await this.checkAcck(gname, methodname, pobj, query, req);
system.getResult(null, "isUser is empty"); // if (isPassResult.status != 0) {
} // isPassResult.requestId = "";
if (pobj.isUser != "yes") { // return isPassResult;
system.getResult(null, "isUser value must yes"); // }
}
}
//验证accesskey或验签
var isPassResult = await this.checkAcck(gname, methodname, pobj, query, req);
if (isPassResult.status != 0) {
isPassResult.requestId = "";
return isPassResult;
}
if (pobj.actionType == "createChannelUser") {
var encryptResult = await this.toolSve.encryptStr(req.app, req.user.channelUserId);
if (encryptResult.status != 0) {
system.getResult(null, "encrypt channelUserId is error");
}
req.user.encryptChannelUserId = encryptResult.data;
return system.getResultSuccess(req.user);
}//创建用户
req.requestId = requestid;
var rtn = await this[methodname](pobj, query, req); var rtn = await this[methodname](pobj, query, req);
if (rtn && !rtn.requestId) { this.logCtl.createDb({
rtn.requestId = requestid;
}
this.oplogSve.createDb({
appid: req.app.id, appid: req.app.id,
appkey: req.app.uappKey, appkey: req.app.uappKey,
requestId: requestid, requestId: req.requestId,
op: req.classname + "/" + methodname, op: req.classname + "/" + methodname,
content: JSON.stringify(pobj), content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn), resultInfo: JSON.stringify(rtn),
...@@ -162,13 +136,14 @@ class APIBase { ...@@ -162,13 +136,14 @@ class APIBase {
agent: req.uagent, agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey, opTitle: "api服务提供方appKey:" + settings.appKey,
}); });
rtn.requestId = req.requestId
return rtn; return rtn;
} catch (e) { } catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........") console.log(e.stack, "api调用出现异常,请联系管理员..........")
this.oplogSve.createDb({ this.logCtl.createDb({
appid: req.app.id, appid: req.app.id,
appkey: req.app.uappKey, appkey: req.app.uappKey,
requestId: requestid, requestId: req.requestId,
op: req.classname + "/" + methodname, op: req.classname + "/" + methodname,
content: JSON.stringify(pobj), content: JSON.stringify(pobj),
resultInfo: JSON.stringify(e.stack), resultInfo: JSON.stringify(e.stack),
...@@ -179,7 +154,7 @@ class APIBase { ...@@ -179,7 +154,7 @@ class APIBase {
this.logCtl.error({ this.logCtl.error({
appid: req.app.id, appid: req.app.id,
appkey: req.app.uappKey, appkey: req.app.uappKey,
requestId: requestid, requestId: req.requestId,
op: pobj.classname + "/" + methodname, op: pobj.classname + "/" + methodname,
content: e.stack, content: e.stack,
clientIp: pobj.clientIp, clientIp: pobj.clientIp,
...@@ -187,7 +162,7 @@ class APIBase { ...@@ -187,7 +162,7 @@ class APIBase {
optitle: "api调用出现异常,请联系管理员", optitle: "api调用出现异常,请联系管理员",
}); });
var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack); var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack);
rtnerror.requestId = requestid; rtnerror.requestId = req.requestId;
return rtnerror; return rtnerror;
} }
} }
......
...@@ -7,8 +7,7 @@ class APIBase extends DocBase { ...@@ -7,8 +7,7 @@ class APIBase extends DocBase {
constructor() { constructor() {
super(); super();
this.cacheManager = system.getObject("db.common.cacheManager"); this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("web.common.oplogCtl"); this.logCtl = system.getObject("service.common.oplogSve");
this.oplogSve = system.getObject("service.common.oplogSve");
} }
getUUID() { getUUID() {
var uuid = uuidv4(); var uuid = uuidv4();
...@@ -97,7 +96,7 @@ class APIBase extends DocBase { ...@@ -97,7 +96,7 @@ class APIBase extends DocBase {
var rtn = await this[methodname](pobj, query, req); var rtn = await this[methodname](pobj, query, req);
rtn.requestid = requestid; rtn.requestid = requestid;
this.oplogSve.createDb({ this.logCtl.createDb({
appid: req.headers["app_id"] || "", appid: req.headers["app_id"] || "",
appkey: req.headers["accesskey"] || "", appkey: req.headers["accesskey"] || "",
requestId: requestid, requestId: requestid,
......
var APIBase = require("../../api.base");
var system = require("../../../system");
class NeedOrderAPI extends APIBase {
constructor() {
super();
this.needinfoSve = system.getObject("service.dbneed.needinfoSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
pobj.actionBody["user"] = req.user;
pobj.actionBody["app"] = req.app;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody);
break;
case "1688"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "subNeed"://提交需求
opResult = await this.needinfoSve.subNeed(action_body);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = NeedOrderAPI;
\ No newline at end of file
var APIBase = require("../../api.base"); var APIBase = require("../../api.base");
var system = require("../../../system"); var system = require("../../../system");
const logCtl = system.getObject("web.common.oplogCtl"); const logCtl = system.getObject("service.common.oplogSve");
class opLog extends APIBase { class opLog extends APIBase {
constructor() { constructor() {
......
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
/**
* 接收远程推送的商标数据api
*/
class ReceiveDataAPI extends APIBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
this.ordertmproductSve = system.getObject("service.dborder.ordertmproductSve");
this.customerinfoSve = system.getObject("service.dborder.customerinfoSve");
this.customercontactsSve = system.getObject("service.dborder.customercontactsSve");
this.trademarkSve = system.getObject("service.dbtrademark.trademarkSve");
this.zcApiUrl = settings.reqZcApi();
this.pushFqbossDataUrl = settings.pushFqbossDataUrl();
this.pushlogSve = system.getObject("service.common.pushlogSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
case "1688"://1688
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
case "gsbhome"://gsb_homepage
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body, pobj, req) {
// action_body.app = req.app;
// action_body.user = req.user;
// action_body.app = { id: 1, appPayType: "00", appDataOpType: "00" };
// action_body.user = { id: 1, app_id: 1, nickname: "测试用户",channelUserId:"channelUserIdtest01" };
var logParam = {
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "/igirl-channel/zhichan/igirl-channel/app/base/api/impl/action/receiveData.js/opActionProcess",
content: "参数信息:" + JSON.stringify(action_body),
clientIp: pobj.clientIp,
optitle: "接收推送过来的数据处理=>action_type=" + action_type,
};
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "receiveTmOfficialData"://接收回执文件
opResult = await this.trademarkSve.receiveTmOfficialData(action_body);
break;
case "updateAssistTmStatus"://接收商标状态信息
opResult = await this.trademarkSve.updateAssistTmStatus(action_body);
break;
case "assistRegTmData"://接收辅助注册商标数据
opResult = await this.ordertmproductSve.addAssistTm(action_body);
break;
case "assistEditTmData"://接收辅助注册修改商标数据
// opResult = system.getResultSuccess(null, "测试成功");
opResult = await this.ordertmproductSve.editAssistTm(action_body);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
logParam.resultInfo = JSON.stringify(opResult);
this.logCtl.info(logParam);
return opResult;
}
}
module.exports = ReceiveDataAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class TmOrderAPI extends APIBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
this.orderSve = system.getObject("service.dborder.orderSve");
this.ordertmproductSve = system.getObject("service.dborder.ordertmproductSve");
this.customerinfoSve = system.getObject("service.dborder.customerinfoSve");
this.customercontactsSve = system.getObject("service.dborder.customercontactsSve");
this.trademarkSve = system.getObject("service.dbtrademark.trademarkSve");
this.zcApiUrl = settings.reqZcApi();
this.pushFqbossDataUrl = settings.pushFqbossDataUrl();
this.pushlogSve = system.getObject("service.common.pushlogSve");
this.toolSve = system.getObject("service.trademark.toolSve");
this.appProductSve = system.getObject("service.dbapp.appproductSve");
this.orderinfoSve = system.getObject("service.dbcorder.orderinfoSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
case "1688"://1688
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
case "gsbhome"://gsb_homepage
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, pobj, req);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body, pobj, req) {
action_body.app = req.app;
action_body.user = req.user;
// action_body.app = { id: 2,uAppId:18};
// action_body.user = { id: 6, app_id: 2, nickname: "测试用户",channelUserId:"testUserId01" };
var opResult = null;
if (["subTmOrder", "getTmOrderList", "getTmOrderInfo", "getTmApplyInfo", "getTmNclList", "getNeedInfo",
"tmConfirm", "updateTmInfo", "updateNclInfo", "updateContacts",
"updateCustomerInfo", "addOrderAndDelivery", "updateOrderPayStatus"].indexOf(action_type) >= 0) {
if (!action_body.channelUserId) {
return system.getResult(null, "verify channelUserId is empty");
}
}
switch (action_type) {
// sy
case "againPushFqBusiness"://再次推送商机
opResult = await this.orderSve.againPushFqBusiness(pobj, req);
break;
case "updateOrderStatus"://更新订单状态
opResult = await this.orderSve.updateOrderStatus(action_body, pobj, req);
break;
case "updateOrderPayStatus"://更新订单付款状态
opResult = await this.orderSve.updateOrderPayStatus(action_body, pobj, req);
if (opResult.status == 0) {
pobj.actionBody["deliveryOrderNo"] = opResult.data.deliveryOrderNo;
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelPayStatus";
this.pushData2(opResult, req, pobj, url);
}
break;
case "addOrderAndDelivery"://创建订单和交付单
opResult = await this.orderSve.addOrderAndDelivery(action_body, pobj, req);
break;
case "clearAllCache":
await this.cacheManager["MagCache"].clearAll();
opResult = system.getResultSuccess(null, "清理缓存成功");
break;
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "getOrderList"://获取订单列表(分页)
opResult = await this.orderinfoSve.findAndCountAll(action_body, req);
break;
case "getOrderDetailByOrderNo"://获取订单详情
opResult = await this.orderinfoSve.getOrderDetailByOrderNo(action_body, req);
break;
case "decryptStr"://
opResult = await this.toolSve.decryptStr(req.app, action_body.opStr);
break;
case "op1688ChannelPushOrder"://处理渠道订单信息
opResult = await this.orderSve.op1688ChannelPushOrder(action_body, pobj, req);
if (opResult.status == 0) {
opResult.data = null;
var encryptResult = await this.toolSve.encryptStr(req.app, action_body.channelUserId);
if (encryptResult.status == 0 && encryptResult.data && encryptResult.data != "undefined") {
opResult.data = encryptResult.data;
}
}
break;
case "get1688ChannelOrderInfo"://获取渠道订单信息
opResult = await this.ordertmproductSve.get1688ChannelOrder(action_body);
break;
case "subTmOrder"://商标提报
opResult = await this.ordertmproductSve.addTmOrder(action_body, pobj, req);
if (opResult && opResult.status == 0 && opResult.data) {
var returnTms = opResult.data.tm;
for (var i = 0; i < pobj.actionBody.nclones.length; i++) {
var nclone = pobj.actionBody.nclones[i];
for (var j = 0; j < returnTms.length; j++) {
var returnTm = returnTms[j];
if (returnTm.nclOne && nclone.code && returnTm.nclOne == nclone.code) {
pobj.actionBody.nclones[i]["tbCode"] = returnTm.tbCode;
}
}
}
pobj.actionBody["deliveryOrderNo"] = opResult.data.deliveryOrderNo;
pobj.actionBody["itemCode"] = opResult.data.channelItemCode;
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/createChannelOrder"
this.pushData2(opResult, req, pobj, url);
}
break;
case "subExistTmOrder"://提交存在商标提报
opResult = await this.ordertmproductSve.addExistTmOrder(action_body);
if (opResult && opResult.status == 0 && opResult.data) {
var returnTms = opResult.data.tm;
for (var i = 0; i < pobj.actionBody.nclones.length; i++) {
var nclone = pobj.actionBody.nclones[i];
for (var j = 0; j < returnTms.length; j++) {
var returnTm = returnTms[j];
if (returnTm.nclOne && nclone.code && returnTm.nclOne == nclone.code) {
pobj.actionBody.nclones[i]["tbCode"] = returnTm.tbCode;
}
}
}
pobj.actionBody["deliveryOrderNo"] = opResult.data.deliveryOrderNo;
pobj.actionBody["itemCode"] = opResult.data.channelItemCode;
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/createChannelOrder"
this.pushData2(opResult, req, pobj, url);
}
break;
case "getTmOrderList"://商标交付列表
opResult = await this.ordertmproductSve.getTmOrderList(action_body, pobj, req);
break;
case "getOrderDetails"://
opResult = await this.ordertmproductSve.getOrderDetails(action_body, pobj, req);
break;
case "getTmOrderListAdmin"://商标交付列表
action_body.getListType = "getTmOrderListAdmin";
opResult = await this.ordertmproductSve.getTmOrderList(action_body, pobj, req);
break;
case "getTmOrderInfo"://商标交付信息
opResult = await this.ordertmproductSve.getTmOrder(action_body);
break;
case "getTmApplyInfo"://商标订单-申请信息
opResult = await this.ordertmproductSve.getTmApply(action_body);
break;
case "getTmNclList"://商标订单-商标尼斯信息
opResult = await this.ordertmproductSve.getTmNclList(action_body);
break;
case "updateTmInfo"://修改商标订单-商标信息修改
opResult = await this.trademarkSve.updateTmInfo(action_body);
if (opResult && opResult.status == 0) {
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelTmInfo"
this.pushData2(opResult, req, pobj, url);
}
break;
case "updateNclInfo"://修改商标订单-商标尼斯信息修改
opResult = await this.trademarkSve.updateNclInfo(action_body);
if (opResult && opResult.status == 0) {
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelNclInfo"
this.pushData2(opResult, req, pobj, url);
}
break;
case "updateContacts"://修改商标订单-修改商标交付单联系人
opResult = await this.customercontactsSve.updateContacts(action_body);
if (opResult && opResult.status == 0) {
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelContacts"
this.pushData2(opResult, req, pobj, url);
}
break;
case "updateCustomerInfo"://修改商标订单-修改申请人信息
opResult = await this.customerinfoSve.updateCustomerInfo(action_body);
if (opResult && opResult.status == 0) {
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelCustomerInfo"
this.pushData2(opResult, req, pobj, url);
}
break;
case "updateOfficial"://修改商标订单-修改交官文件
opResult = await this.customerinfoSve.updateOfficial(action_body);
if (opResult && opResult.status == 0) {
// await this.pushData(opResult, req, pobj);
var url = this.pushFqbossDataUrl + "api/channelaccessApi/updateChannelOfficial"
this.pushData2(opResult, req, pobj, url);
}
break;
case "tmConfirm"://商标方案确认
opResult = await this.ordertmproductSve.tmConfirm(action_body);
if (opResult && opResult.status == 0) {
var url = this.pushFqbossDataUrl + "api/channelaccessApi/channelTmConfirm"
this.pushData2(opResult, req, pobj, url);
}
break;
case "pushFqBusiness"://推送商机到峰擎
opResult = await this.orderSve.push1688FqBusiness(action_body, pobj, req);
break;
case "getProductDetail"://根据渠道产品码获取产品详情
opResult = await this.appProductSve.findByChannelItemCode(action_body);
break;
case "getProductListByTypeOneCode"://获取产品列表(根据产品一类编码获取)
opResult = await this.appProductSve.findByProductOneTypeCode(action_body);
break;
case "getProductListByTypeCode"://获取产品列表(根据父类产品编码获取)
opResult = await this.appProductSve.findByProductTypeCode(action_body);
break;
case "subGsbOrderInfo"://提交公司宝订单信息
opResult = await this.orderSve.gsbOrderInfo(pobj, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
//数据推送
async pushData(opResult, req, pobj) {
var url = this.zcApiUrl + "action/tmOrder/springBoard";
var rc = system.getObject("util.execClient");
var rtn = null;
var requestId = opResult.requestId || req.requestId;
if (requestId) {
rtn = await rc.execPushDataPost(pobj, url, req.headers["token"], req.headers["request-id"]);
} else {
rtn = await rc.execPost(pobj, url);
}
var returnType = "0";
if (rtn && rtn.code == 1) {
returnType = "1";
}
this.pushlogSve.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: opResult.requestId || req.requestId,
op: url,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
returnType: returnType,
agent: req.uagent,
opTitle: "数据推送",
});
}
//数据推送fqboss
async pushData2(opResult, req, pobj, url) {
var rc = system.getObject("util.execClient");
var obj = pobj.actionBody;
var user = obj.user;
if (obj.app) {
obj.app = null;
}
obj["channelUserId"] = obj.channelUserId;
obj["channelCode"] = pobj.actionProcess;
obj["appid"] = "2e787bbaacda4c6488b9fae58fff30ba";
var rtn = null;
try {
var requestId = opResult.requestId || req.requestId;
if (requestId) {
rtn = await rc.execPushDataPost(obj, url, req.headers["token"], req.headers["request-id"]);
} else {
rtn = await rc.execPost(obj, url);
}
var returnType = "0";
if (rtn.stdout) {
var j = JSON.parse(rtn.stdout);
if (j && j.code == 1) {
returnType = "1";
}
}
this.pushlogSve.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: opResult.requestId || req.requestId,
op: url,
content: JSON.stringify(obj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
returnType: returnType,
agent: req.uagent,
opTitle: "数据推送",
});
} catch (e) {
this.pushlogSve.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: opResult.requestId || req.requestId,
op: url,
content: JSON.stringify(obj),
resultInfo: JSON.stringify(e.stack),
clientIp: req.clientIp,
returnType: '0',
agent: req.uagent,
opTitle: "数据推送",
});
}
}
}
module.exports = TmOrderAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
class TmQueryAPI extends APIBase {
constructor() {
super();
// this.tmqueryApi = system.getObject("api.trademark.tmqueryApi");
this.tmquerySve = system.getObject("service.trademark.tmquerySve");
// this.toolApi = system.getObject("api.tool.toolApi");
this.toolSve = system.getObject("service.trademark.toolSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
case "1688":
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
case "gsbhome":
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "findTrademarkNameAccurate"://商标精确检索(相同商标检索)
opResult = await this.tmquerySve.findTrademarkNameAccurate(action_body, req);
break;
case "findTrademarkName"://近似商标检索
opResult = await this.tmquerySve.findTrademarkName(action_body, req);
break;
case "findTrademarkzchAccurate"://商标申请号检索
opResult = await this.tmquerySve.findTrademarkzchAccurate(action_body, req);
break;
case "findTrademarkzcr"://申请人查询
opResult = await this.tmquerySve.findTrademarkzcr(action_body, req);
break;
case "getCropperPic"://获取检索图片url
opResult = await this.toolSve.getCropperPic(action_body, req);
break;
case "imagequery"://图形检索
opResult = await this.tmquerySve.imagequery(action_body, req);
break;
case "findImageSearch"://图形检索查询
opResult = await this.tmquerySve.findImageSearch(action_body, req);
break;
case "tradeMarkDetail"://商标详情查询
opResult = await this.tmquerySve.tradeMarkDetail(action_body, req);
break;
case "sbzuixinsearch"://最新商标查询
opResult = await this.tmquerySve.sbzuixinsearch(action_body, req);
break;
case "noticequeryTMZCSQ"://近12期初审公告查询接口
opResult = await this.tmquerySve.noticequeryTMZCSQ(action_body, req);
break;
case "noticequery"://公告列表检索接口
opResult = await this.tmquerySve.noticequery(action_body, req);
break;
case "noticezcggsearch"://注册公告详情查询
opResult = await this.tmquerySve.noticezcggsearch(action_body, req);
break;
case "noticesearch"://初审公告详情查询
opResult = await this.tmquerySve.noticesearch(action_body, req);
break;
case "getCompanyInfoNoUser"://企业查询
opResult = await this.tmquerySve.getCompanyInfoNoUser(action_body, req);
break;
case "getNclDetail"://尼斯详情
opResult = await this.tmquerySve.getNclDetail(action_body, req);
break;
case "gettwoNcl"://获取尼斯群组
opResult = await this.tmquerySve.gettwoNcl(action_body, req);
break;
case "nclFuwuSearch"://尼斯分类检索
opResult = await this.tmquerySve.nclFuwuSearch(action_body, req);
break;
case "bycznfx"://商标智能分析 -----
opResult = await this.toolSve.bycznfx(action_body, req);
break;
case "tmConfirm"://商标方案确认
// opResult = await this.toolApi.bycznfx(action_body);
opResult = system.getResultSuccess(null, "商标方案确认成功");
break;
case "icheming"://商标智能分析 -----
opResult = await this.toolSve.icheming(action_body, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmQueryAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
class TmToolsAPI extends APIBase {
constructor() {
super();
this.toolSve = system.getObject("service.trademark.toolSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
case "1688":
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
case "gsbhome":
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "encryptStr"://
opResult = await this.toolSve.encryptStr(req.app, action_body.opStr);
break;
case "decryptStr"://
opResult = await this.toolSve.decryptStr(req.app, action_body.opStr);
break;
case "getOssConfig"://
opResult = await this.toolSve.getOssConfig();
break;
case "getNcl"://尼斯查询(一)
opResult = await this.toolSve.getNcl(action_body, req);
break;
case "getNclByLikeNameAndNcl"://尼斯查询(二)
opResult = await this.toolSve.getNclByLikeNameAndNcl(action_body, req);
break;
case "word2pic"://文字转图片
opResult = await this.toolSve.word2pic(action_body, req);
break;
case "uploadStandardTm"://商标样式转换
opResult = await this.toolSve.uploadStandardTm(action_body, req);
break;
case "pic2pdf"://图片转pdf
opResult = await this.toolSve.pic2pdf(action_body, req);
break;
case "getCompanyInfoByLikeName"://企业近似查询
opResult = await this.toolSve.getCompanyInfoByLikeName(action_body, req);
break;
case "getEntregistryByCompanyName"://企业精确查询
opResult = await this.toolSve.getEntregistryByCompanyName(action_body, req);
break;
case "adjustWTSSize"://调整委托书
opResult = await this.toolSve.adjustWTSSize(action_body, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmToolsAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
class TmTransactionAPI extends APIBase {
constructor() {
super();
this.orderinfoSve = system.getObject("service.dbcorder.orderinfoSve");
}
/**
* 接口跳转-POST请求
* actionProcess 执行的流程
* actionType 执行的类型
* actionBody 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.action_type) {
return system.getResult(null, "actionType参数不能为空");
}
var result = null;
switch (pobj.actionProcess) {
case "jd"://京东
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody);
break;
case "1688":
result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody);
break;
default:
result = system.getResult(null, "actionProcess参数错误");
break;
}
return result;
}
async opActionProcess(action_process, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "addOrder"://添加订单
opResult = await this.orderinfoSve.createOrder(action_body, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmTransactionAPI;
\ No newline at end of file
const system = require("../../../system");
var APIBase = require("../../api.base");
var settings = require("../../../../config/settings");
var moment = require('moment')
class TradetransferAPI extends APIBase {
constructor() {
super();
this.aliclient = system.getObject("util.aliyunClient");
this.execlient = system.getObject("util.execClient");
this.transferurl = settings.reqTransferurl();
this.corderSve = system.getObject("service.dbcorder.orderinfoSve");
}
//订单创建
async createtransfer(p, obj, req) {
console.log(p.actionBody, "actionBody...............................");
var orderinfo = await this.corderSve.createOrder(p.actionBody, req);
console.log(orderinfo, "orderinfo............................");
if (orderinfo) {
if (orderinfo.status == "0") {
var result = {
"errorCode": "OK",
"errorMsg": "成功",
"module": { "orderId": orderinfo.data.orderNo },
"requestId": req.requestId,
"success": true
}
return result;
} else if (orderinfo.status == "2") {
var result = {
"errorCode": "OK",
"errorMsg": "订单已存在",
"module": { "orderId": orderinfo.data },
"requestId": req.requestId,
"success": true
}
return result;
} else {
var result = {
"errorCode": "error",
"errorMsg": orderinfo.msg,
"module": { "orderId": "" },
"requestId": req.requestId,
"success": false
}
return result;
}
} else {
var result = {
"errorCode": "error",
"errorMsg": "",
"module": { "orderId": "" },
"requestId": req.requestId,
"success": false
}
return result;
}
}
//订单查询
async ordersel(p, obj) {
var url = this.transferurl + "api/transfer/tradeApi/queryOrderState";
var transferinfo = await this.execlient.execPost(p.actionBody, url);
var a = JSON.parse(transferinfo.stdout)
return a;
}
//订单关闭
async orderclose(p,obj) {
var url = this.transferurl + "api/transfer/tradeApi/closeOrder";
var transferinfo = await this.execlient.execPost(p.actionBody, url);
var a = JSON.parse(transferinfo.stdout)
return a;
}
//业务员分配
async fenpeiowner(obj) {
if (!obj.BizId) {
return {
"errorCode": "error",
"errorMsg": "订单号不能为空",
"requestId": obj.requestId,
"success": false
}
}
var transferinfo = await this.findOne({ ali_bizid: obj.BizId });
}
//阿里网关
async aliclienttransfer(p, obj) {
console.log("----------------sssssssssssssssssss-------------------------------------------")
console.log(p.actionBody)
if (p.actionBody) {
console.log(p.actionBody)
var rtn = await this.aliclient.reqbyget(p.actionBody)
return rtn;
}
}
}
module.exports = TradetransferAPI;
...@@ -5,23 +5,20 @@ class AccessAuthAPI extends APIBase { ...@@ -5,23 +5,20 @@ class AccessAuthAPI extends APIBase {
super(); super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils"); this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
} }
async getToken(pobj, qobj, req) { async getTokenByHosts(pobj, qobj, req) {
var appkey = pobj.appkey; var app_hosts = pobj.app_hosts || "";
var secret = pobj.secret; if (!app_hosts) {
if (!appkey) { return system.getResult(null, "app_hosts can not be empty !");
return system.getResult(null, "appkey参数不能为空");
} }
if (!secret) { var result = await this.opPlatformUtils.getReqTokenByHosts(app_hosts);
return system.getResult(null, "secret参数不能为空"); return result;
} }
var result = await this.opPlatformUtils.getReqApiAccessKey(appkey, secret); async loginUserByChannelUserId(pobj, qobj, req) {
if (result && result.status && result.status != 0) { if (!pobj.channelUserId) {
return result; return system.getResult(null, "pobj.channelUserId can not be empty !");
} }
var resultData = { var result = await this.opPlatformUtils.getReqUserPinByChannelUserId(pobj);
token: result && result.data ? result.data.accessKey : "" return result;
};
return system.getResultSuccess(resultData);
} }
/** /**
* 开放平台回调处理 * 开放平台回调处理
......
var APIBase = require("../../api.base");
var system = require("../../../system");
class jdAuthAPI extends APIBase {
constructor() {
super();
}
async getUser(pobj, qobj, req) {
console.log("pobj......getUser..........:\n", pobj);
console.log("qobj......getUser..........:\n", qobj);
return { getUser: "ok" };
}
async payOrderInfo(pobj, qobj, req) {
console.log("pobj......payOrderInfo..........:\n", pobj);
console.log("qobj......payOrderInfo..........:\n", qobj);
return { payOrderInfo: "ok" };
}
}
module.exports = jdAuthAPI;
\ No newline at end of file
const system = require("../system");
const settings = require("../../config/settings");
class CtlBase {
constructor(gname, sname) {
this.serviceName = sname;
this.service = system.getObject("service." + gname + "." + sname);
this.cacheManager = system.getObject("db.common.cacheManager");
this.md5 = require("MD5");
}
encryptPasswd(passwd) {
if (!passwd) {
throw new Error("请输入密码");
}
var md5 = this.md5(passwd + "_" + settings.salt);
return md5.toString().toLowerCase();
}
notify(req, msg) {
if (req.session) {
req.session.bizmsg = msg;
}
}
async findOne(queryobj, qobj) {
var rd = await this.service.findOne(qobj);
return system.getResult(rd, null);
}
async findAndCountAll(queryobj, obj, req) {
obj.codepath = req.codepath;
if (req.session.user) {
obj.uid = req.session.user.id;
obj.appid = req.session.user.app_id;
obj.onlyCode = req.session.user.unionId;
obj.account_id = req.session.user.account_id;
obj.ukstr = req.session.user.app_id + "¥" + req.session.user.id + "¥" + req.session.user.nickName + "¥" + req.session.user.headUrl;
}
var apps = await this.service.findAndCountAll(obj);
return system.getResult(apps, null);
}
async refQuery(queryobj, qobj) {
var rd = await this.service.refQuery(qobj);
return system.getResult(rd, null);
}
async bulkDelete(queryobj, ids) {
var rd = await this.service.bulkDelete(ids);
return system.getResult(rd, null);
}
async delete(queryobj, qobj) {
var rd = await this.service.delete(qobj);
return system.getResult(rd, null);
}
async create(queryobj, qobj, req) {
if (req && req.session && req.session.app) {
qobj.app_id = req.session.app.id;
qobj.onlyCode = req.session.user.unionId;
if (req.codepath) {
qobj.codepath = req.codepath;
}
}
var rd = await this.service.create(qobj);
return system.getResult(rd, null);
}
async createLog(queryobj, qobj, req) {
if (req && req.session && req.session.app) {
qobj.app_id = req.session.app.id;
qobj.onlyCode = req.session.user.unionId;
if (req.codepath) {
qobj.codepath = req.codepath;
}
}
var tmpParam = qobj || queryobj;
var rd = await this.service.create(tmpParam);
return system.getResult(rd, null);
}
async update(queryobj, qobj, req) {
if (req && req.session && req.session.user) {
qobj.onlyCode = req.session.user.unionId;
}
if (req.codepath) {
qobj.codepath = req.codepath;
}
var rd = await this.service.update(qobj);
return system.getResult(rd, null);
}
static getServiceName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Ctl")).toLowerCase() + "Sve";
}
async initNewInstance(queryobj, req) {
return system.getResult({}, null);
}
async findById(oid) {
var rd = await this.service.findById(oid);
return system.getResult(rd, null);
}
async timestampConvertDate(time) {
if (time == null) {
return "";
}
var date = new Date(Number(time * 1000));
var y = 1900 + date.getYear();
var m = "0" + (date.getMonth() + 1);
var d = "0" + date.getDate();
return y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length);
}
async universalTimeConvertLongDate(time) {
if (time == null) {
return "";
}
var d = new Date(time);
return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
}
async universalTimeConvertShortDate(time) {
if (time == null) {
return "";
}
var d = new Date(time);
return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
}
async doexec(methodname, pobj, query, req) {
try {
var rtn = await this[methodname](pobj, query, req);
return rtn;
} catch (e) {
console.log(e.stack);
// this.logCtl.error({
// optitle: "Ctl调用出错",
// op: pobj.classname + "/" + methodname,
// content: e.stack,
// clientIp: pobj.clientIp
// });
return system.getResultFail(-200, "Ctl出现异常,请联系管理员");
}
}
}
module.exports = CtlBase;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
var cacheBaseComp = null;
class UserCtl extends CtlBase {
constructor() {
super("auth", CtlBase.getServiceName(UserCtl));
}
/**
* 开放平台回调处理
* @param {*} req
*/
async authByCode(req) {
var opencode = req.query.code;
var user = await this.service.authByCode(opencode);
if (user) {
req.session.user = user;
} else {
req.session.user = null;
}
//缓存opencode,方便本应用跳转到其它应用
// /auth?code=xxxxx,缓存没有意义,如果需要跳转到其它应用,需要调用
//平台开放的登录方法,返回 <待跳转的目标地址>/auth?code=xxxxx
//this.cacheManager["OpenCodeCache"].cacheOpenCode(user.id,opencode);
return user;
}
async navSysSetting(pobj, qobj, req) {
//开始远程登录,返回code
var jumpobj = await this.service.navSysSetting(req.session.user);
if (jumpobj) {
return system.getResultSuccess(jumpobj);
}
return system.getResultFail();
}
async loginUser(qobj, pobj, req) {
return super.findById(req.session.user.id);
}
async initNewInstance(queryobj, req) {
var rtn = {};
rtn.roles = [];
if (rtn) {
return system.getResultSuccess(rtn);
}
return system.getResultFail();
}
async checkLogin(gobj, qobj, req) {
//当前如果缓存中存在user,还是要检查当前user所在的域名,如果不和来访一致,则退出重新登录
if (req.session.user) {
var x = null;
if (req.session.user.Roles) {
x = req.session.user.Roles.map(r => { return r.code });
}
var tmp = {
id: req.session.user.id,
userName: req.session.user.userName,
nickName: req.session.user.nickName,
mobile: req.session.user.mobile,
isAdmin: req.session.user.isAdmin,
created_at: req.session.user.created_at,
email: req.session.user.email,
headUrl: req.session.user.headUrl,
roles: x ? x.join(",") : ""
}
return system.getResult(tmp, "用户登录", req);
} else {
req.session.user = null;
//req.session.destroy();
return system.getResult(null, "用户未登录", req);
}
}
async exit(pobj, qobj, req) {
req.session.user = null;
req.session.destroy();
return system.getResultSuccess({ "env": settings.env });
}
}
module.exports = UserCtl;
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
class OplogCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(OplogCtl));
//this.appS=system.getObject("service.appSve");
}
async initNewInstance(qobj) {
var u = uuidv4();
var aid = u.replace(/\-/g, "");
var rd = { name: "", appid: aid }
return system.getResultSuccess(rd, null);
}
async debug(obj) {
obj.logLevel = "debug";
return this.createLog(obj);
}
async info(obj) {
obj.logLevel = "info";
return this.createLog(obj);
}
async warn(obj) {
obj.logLevel = "warn";
return this.createLog(obj);
}
async error(obj) {
obj.logLevel = "error";
return this.createLog(obj);
}
async fatal(obj) {
obj.logLevel = "fatal";
return this.createLog(obj);
}
/*
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid_Ctl(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
}
var prefixlength = prefix.length;
var subLen = 8 - prefixlength;
var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo_Ctl(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/*
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo_Ctl(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
}
module.exports = OplogCtl;
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
class PushlogCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(PushlogCtl));
//this.appS=system.getObject("service.appSve");
}
async initNewInstance(qobj) {
var u = uuidv4();
var aid = u.replace(/\-/g, "");
var rd = { name: "", appid: aid }
return system.getResultSuccess(rd, null);
}
async debug(obj) {
obj.logLevel = "debug";
return this.create(obj);
}
async info(obj) {
obj.logLevel = "info";
return this.create(obj);
}
async warn(obj) {
obj.logLevel = "warn";
return this.create(obj);
}
async error(obj) {
obj.logLevel = "error";
return this.create(obj);
}
async fatal(obj) {
obj.logLevel = "fatal";
return this.create(obj);
}
/*
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid_Ctl(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
}
var prefixlength = prefix.length;
var subLen = 8 - prefixlength;
var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo_Ctl(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/*
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo_Ctl(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
}
module.exports = PushlogCtl;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class AppTokenByHostsCache extends CacheBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
this.restS = system.getObject("util.restClient");
this.appDao = system.getObject("db.dbapp.appDao");
}
desc() {
return "应用中缓存访问token";
}
prefix() {
return settings.cacheprefix + "_accesskey:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var app_hosts = inputkey;
if (!app_hosts) {
return system.getResult(null, "app_hosts can not be empty !");
}
var item = await this.appDao.getItemByHosts(app_hosts);
if (!item) {
return system.getResult(null, "app_hosts to data is empty !");
}
if (!item.uapp_key || !item.uapp_secret) {
return system.getResult(null, "uapp_key or uapp_secret can not be empty !");
}
if (item.is_enabled != 1) {
return system.getResult(null, "app_hosts to item is Disable !");
}
var result = await this.opPlatformUtils.getReqApiAccessKey(item.uapp_key, item.uapp_secret);
if (!result) {
return system.getResult(null, "platform to data is empty !");
}
if (result.status != 0) {
return result;
}
item.token = result.data.accessKey;
return system.getResultSuccess(item);
}
}
module.exports = AppTokenByHostsCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class AppUserPinByChannelUserIdCache extends CacheBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
this.restClient = system.getObject("util.restClient");
this.appuserDao = system.getObject("db.dbapp.appuserDao");
}
desc() {
return "应用中缓存访问token";
}
prefix() {
return settings.cacheprefix + "_userPin:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var actionBody = val;
var uUserName = actionBody.channelUserId + "$" + actionBody.appInfo.uapp_key;//uUserName
var createUserPwd = inputkey;//(格式:actionBody.appInfo.uapp_key+”_“+actionBody.channelUserId)
var channelUserMoblie = actionBody.channelUserMoblie || "15010888888";
var userInfo = await this.appuserDao.getItemByChannelUserId(actionBody.channelUserId, actionBody.appInfo.uapp_id);
if (userInfo) {
if (userInfo.is_enabled != 1) {
return system.getResult(null, "user to item is Disable !");
}
return system.getResultSuccess(userInfo);
}
var uUserInfo = await this.opPlatformUtils.createUserInfo(actionBody.channelUserId, channelUserMoblie,
createUserPwd, actionBody.appInfo.uapp_key, actionBody.appInfo.uapp_secret);
if (uUserInfo.status != 2000 && uUserInfo.status != 0) {
return uUserInfo;
}//已经存在此用户 或 注册失败
if (uUserInfo.status == 0) {
var params = {
uapp_id: actionBody.appInfo.uapp_id,
channel_userid: actionBody.channelUserId,
channel_username: actionBody.channelUserName || actionBody.channelUserId,
channel_nickname: actionBody.nickName || "",
mobile: channelUserMoblie,
org_name: actionBody.orgName || "",
org_path: actionBody.orgPath || "",
is_enabled: 1,
email: actionBody.email || "",
last_login_time: new Date()
};
userInfo = await this.appuserDao.create(params);
}
else {
return uUserInfo;
}
return system.getResultSuccess(userInfo);
var app_hosts = val;
if (!app_hosts) {
return system.getResult(null, "app_hosts can not be empty");
}
var acckapp = await this.restClient.execPost(val, settings.centerAppUrl() + "auth/accessAuth/loginUserByChannelUserId");
var result = acckapp.stdout;
console.log(acckapp.stdout, "AppTokenByHostsCache............. acckapp.stdout..........");
if (result) {
var tmp = JSON.parse(result);
return tmp;
}
return system.getResult(null, "data is empty");
}
}
module.exports = AppUserPinByChannelUserIdCache;
...@@ -4,22 +4,23 @@ class AppDao extends Dao { ...@@ -4,22 +4,23 @@ class AppDao extends Dao {
constructor() { constructor() {
super(Dao.getModelName(AppDao)); super(Dao.getModelName(AppDao));
} }
async getItemByAppKey(appKey) { async getItemByHosts(app_hosts) {
return this.model.findOne({ return this.model.findOne({
where: { where: {
uappKey: appKey app_hosts: app_hosts
}, },
attributes: ["id", attributes: ["id",
"app_code", //渠道码 "app_hosts",
"app_name", "app_code",
"uapp_id", //平台appid "app_name",
"uapp_key", //平台appkey,用于进行签名请求接口 "uapp_id",
"uapp_secret",//平台appkey密钥信息 "uapp_key",
"contact_name", //联系人 "uapp_secret",
"contact_mobile", //联系电话 "contact_name",
"contact_email", //联系人邮箱 "contact_mobile",
"is_enabled" //状态 0禁用 1启用 "contact_email",
], "is_enabled",
"is_sign"],
raw: true raw: true
}); });
} }
......
const system = require("../../../system");
const Dao = require("../../dao.base");
class AppuserDao extends Dao {
constructor() {
super(Dao.getModelName(AppuserDao));
}
async getItemByChannelUserId(channel_userid, uapp_id) {
return this.model.findOne({
where: {
channel_userid: channel_userid,
uapp_id: uapp_id
},
attributes: ["id",
"uapp_id",
"channel_userid",
"channel_username",
"channel_nickname",
"open_id",
"head_url",
"mobile",
"org_name",
"org_path",
"email",
"is_admin",
"is_super"],
raw: true
});
}
}
module.exports = AppuserDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class UserDao extends Dao {
constructor() {
super(Dao.getModelName(UserDao));
}
}
module.exports = UserDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class FlowLogDao extends Dao {
constructor() {
super(Dao.getModelName(FlowLogDao));
}
}
module.exports = FlowLogDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderContactsDao extends Dao {
constructor() {
super(Dao.getModelName(OrderContactsDao));
}
}
module.exports = OrderContactsDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderInfoDao extends Dao {
constructor() {
super(Dao.getModelName(OrderInfoDao));
}
buildAttributes(){
return [
"orderNo",
"channelServiceNo",
"needNo",
"payTime",
"channelUserId",
"quantity",
"serviceQuantity",
"orderPayStatusName",
"orderPayStatus",
"totalSum",
"payTotalSum",
"refundSum",
"channelProfitSum",
"pfSettleProfit",
"notes",
"opNotes"
];
}
}
module.exports = OrderInfoDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderProductDao extends Dao {
constructor() {
super(Dao.getModelName(OrderProductDao));
}
}
module.exports = OrderProductDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class ExpenseVoucherDao extends Dao{
constructor(){
super(Dao.getModelName(ExpenseVoucherDao));
}
}
module.exports=ExpenseVoucherDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class MoneyJourneyDao extends Dao{
constructor(){
super(Dao.getModelName(MoneyJourneyDao));
}
}
module.exports=MoneyJourneyDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderReceiptVoucherDao extends Dao {
constructor() {
super(Dao.getModelName(OrderReceiptVoucherDao));
}
}
module.exports = OrderReceiptVoucherDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderRefundVoucherDao extends Dao {
constructor() {
super(Dao.getModelName(OrderRefundVoucherDao));
}
}
module.exports = OrderRefundVoucherDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class NeedInfoDao extends Dao{
constructor(){
super(Dao.getModelName(NeedInfoDao));
}
}
module.exports=NeedInfoDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class CustomerContactsDao extends Dao {
constructor() {
super(Dao.getModelName(CustomerContactsDao));
}
async findOneByMobile(mobile, customerinfoId) {
return this.model.findOne({
where: {
mobile: mobile,
customerinfo_id: customerinfoId
},
attributes: ["id",
"deliveryOrderNo",
"mobile",
"email",
"tel",
"fax",
"name",
"code",
"app_id"],
raw: true
});
}
async findOneByCustomerinfoId(customerinfoId) {
return this.model.findOne({
where: {
customerinfo_id: customerinfoId
},
attributes: ["id",
"deliveryOrderNo",
"mobile",
"email",
"tel",
"fax",
"name",
"code",
"app_id"],
raw: true
});
}
}
module.exports = CustomerContactsDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class CustomerInfoDao extends Dao {
constructor() {
super(Dao.getModelName(CustomerInfoDao));
}
async findOneByCodeAndUserId(code, userId) {
return this.model.findOne({
where: {
code: code,
createuser_id: userId
},
attributes: ["id",
"customerType",// ent:企业,person:个人
"customerTypeName",
"identityCardPic",//身份证图片
"businessLicensePic",//营业执照图片
"name",//公司名称或个人名称
"code",//公司统一社会代码
"app_id",
"deliveryOrderNo",
"applyAddr",//申请地址
"applyArea",//存储省市编码
"province",//省
"city",//市
"identityCardNo",//身份证号
"notes",//备注
"zipCode",
"identityCardPdf",
"businessLicensePdf",
"createuser_id",
"updateuser_id",
"owner_id"],
raw: true
});
}
async findOneByDeliveryOrderNo(deliveryOrderNo) {
return this.model.findOne({
where: {
deliveryOrderNo: deliveryOrderNo
},
attributes: ["id",
"customerType",// ent:企业,person:个人
"customerTypeName",
"identityCardPic",//身份证图片
"businessLicensePic",//营业执照图片
"name",//公司名称或个人名称
"code",//公司统一社会代码
"app_id",
"deliveryOrderNo",
"applyAddr",//申请地址
"applyArea",//存储省市编码
"province",//省
"city",//市
"identityCardNo",//身份证号
"notes",//备注
"zipCode",
"identityCardPdf",
"businessLicensePdf",
"createuser_id",
"updateuser_id",
"owner_id"],
raw: true
});
}
}
module.exports = CustomerInfoDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderDao extends Dao {
constructor() {
super(Dao.getModelName(OrderDao));
}
/**
* 创建订单
* @param {*} ordercode
* @param {*} orderType
* @param {*} user
* @param {*} app
* @param {*} productItem
* @param {*} channelOrder
* @param {*} channelUser
* @param {*} apply 订单联系人信息
* @param {*} orderAmount 订单金额信息
* @param {*} t
*/
async addOrder(ordercode, orderType, user, app, productItem, channelOrder, channelUser, apply, orderAmount, t) {
var sqlWhere = { channelServiceNo: channelOrder.channelServiceNo, app_id: user.app_id };
var order = await this.findOne(sqlWhere, t);
if (order) {
var salesDiliverNum = Number(order.salesNum) - Number(order.salesDiliverNum) - orderAmount.salesNum;
if (salesDiliverNum < 0) {
return system.getResult(null, "服务单交付数量有误,数量为:" + order.salesNum + ",已交付数量为:" + order.salesDiliverNum);
}
var minitermDiliverNum = Number(order.minitermNum) - Number(order.minitermDiliverNum) - orderAmount.minitermNum;
if (minitermDiliverNum < 0) {
return system.getResult(null, "服务单交付小项数量有误,小项数量为:" + order.minitermNum + ",已交付小项数量为:" + order.minitermDiliverNum);
}
order.salesDiliverNum = Number(order.salesDiliverNum || "0") + orderAmount.salesNum;
order.minitermDiliverNum = Number(order.minitermDiliverNum || "0") + orderAmount.minitermNum;
var sWhere = { where: sqlWhere };
await this.updateByWhere({ salesDiliverNum: order.salesDiliverNum, minitermDiliverNum: order.minitermDiliverNum }, sWhere, t);
return system.getResultSuccess(order);
}
var myDate = new Date();
if (app.appPayType == "00") {
channelOrder.payStatus = channelOrder.payStatus || "yfk";
channelOrder.payTime = channelOrder.payTime || myDate.toLocaleString();//myDate.toLocaleString()获取日期与时间==="2018-11-5 17:40:21"
}
var orderObj = {
app_id: user.app_id,//
orderNo: ordercode,// 订单号
channelServiceNo: channelOrder.channelServiceNo || "",// 渠道服务单号
channelOrderNo: channelOrder.channelOrderNo || "",//渠道订单号列表,多个以,隔开
payTime: channelOrder.payTime || null,
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
channelItemCode: productItem.channelItemCode,// 渠道产品编码
channelItemName: productItem.channelItemName,// 渠道产品名称
salesNum: channelOrder.quantity || 1,//项目订单数量(即服务项目的倍数,默认值为1)
salesDiliverNum: channelOrder.salesDiliverNum || 0,//项目订单交付数量(即与项目订单数量相对应)
minitermNum: channelOrder.nclCount || 10 * channelOrder.quantity,//订单小项数量
minitermDiliverNum: channelOrder.minitermDiliverNum || 0,//订单小项交付数量
orderType: orderType || "dkxd",// 订单类型,zzdd: 自主订单,dkxd: 代客下单
orderPayStatus: channelOrder.payStatus || "dfk",// 订单付款状态dfk: 待付款, zfpz: 已上传支付凭证, yfk: 已付款, ddqx: 订单取消, tkclz: 退款处理中, bfytk: 部分已退款, ytk: 已退款,zfshbtg:支付审核不通过
totalServiceCharge: orderAmount.totalServiceCharge || 0,// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense: orderAmount.totalPublicExpense || 0,// 官费总额(产品配置的官费*订单件数)
totalDiscounts: orderAmount.totalDiscounts,// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
totalTaxes: orderAmount.totalTaxes || 0,// 税费总额(订单总额-(订单总额/(1+产品费率)))
totalSum: orderAmount.totalSum || 0,// 订单总额(产品价格×优惠费率×订单件数)
refundSum: 0,// 退款金额
totalProfitSum: orderAmount.totalProfitSum,// 订单毛利润总额(订单总额-官费总额)
pfProfitSum: orderAmount.pfProfitSum,// 订单平台毛利润总额(订单毛利润总额-订单渠道分成毛利润总额)
channelProfitSum: orderAmount.channelProfitSum || 0,// 订单渠道分成毛利润总额((订单总额-官费总额)*渠道利润分成比率)
pfSettleProfit: 0,// 平台结算渠道利润,0否,1是
notes: apply.notes, //备注
appPayType: app.appPayType,// 支付类型:00第三方支付,10平台代收款
createuser_id: user.id,
owner_id: user.id,//
creator: user.nickname,
owner: user.nickname,//
ownerMoblie: user.userMoblie,//
invoiceApplyStatus: "00",// 发票状态:00: 未申请, 10: 已申请,20:已开票
channelUserId: channelUser.channelUserId,// 渠道用户id
needNo: channelOrder.needNo || null,//需求单号
picUrl: productItem.picUrl,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
serviceItemSnapshot: JSON.stringify(productItem),//产品快照
};
var order = await this.create(orderObj, t);
var tmpResult = system.getResultSuccess(order);
tmpResult.addOrder = true;
return tmpResult;
}
async putOrder(setObj, whereObj, t) {
return this.updateByWhere(setObj, whereObj, t)
}
async getItemByChannelServiceNo(channelServiceNo, appId) {//通过订单号查询订单
return this.model.findOne({
where: {
channelServiceNo: channelServiceNo,
app_id: appId
},
attributes: ["id",
"orderNo",
"channelUserId",
"channelServiceNo",
"channelOrderNo",
"needNo",
"invoiceApplyStatus",
"orderType",
"salesNum",
"salesDiliverNum",
"minitermNum",
"minitermDiliverNum",
"orderPayStatus",
"notes",
"totalServiceCharge",
"totalPublicExpense",
"totalTaxes",
"totalSum",
"appPayType",
"payTime",
"itemCode",
"itemName",
"buyerMoblie"
],
raw: true
});
}
}
module.exports = OrderDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderFlowDao extends Dao {
constructor() {
super(Dao.getModelName(OrderFlowDao));
}
async getListBySourceOrderNo(sourceOrderNo) {
return this.model.findAll({
where: {
sourceOrderNo: sourceOrderNo,
isShow: 1
},
order:[["created_at", 'desc']],
raw: true
});
}
}
module.exports = OrderFlowDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderTmProductDao extends Dao {
constructor() {
super(Dao.getModelName(OrderTmProductDao));
}
async getTmListByChannelServiceNo(channelServiceNo, appId) {
return this.model.findAll({
where: {
channelServiceNo: channelServiceNo,
app_id: appId
},
raw: true
});
}
async getTmItemByDeliveryOrderNo(deliveryOrderNo) {
return this.model.findOne({
where: {
deliveryOrderNo: deliveryOrderNo
},
raw: true
});
}
async getItemByNeedNoOrderNo(needNoOrderNo, appId, t) {
var sqlWhere = {
where: {
needNoOrderNo: needNoOrderNo,
app_id: appId
},
raw: true
};
if (t) {
sqlWhere.transaction = t;
}
sqlWhere.attributes = ["id",
"deliveryOrderNo",
"payStatus",
"needNo",
"sourceOrderNo",
"tmName",
"tmType",
"tmFormType",
"nclOneCodes",
"deliveryStatus",
"picUrl",
"colorizedPicUrl",
"sywjUrl",
"gzwtsUrl",
"nclCount",
"smwjUrl",
"updateuser_id",
"updateuser",
"notes",
"nclOneCount"
];
return this.model.findOne(sqlWhere);
}
async getItemByChannelServiceNo(channelServiceNo, appId, t) {
var sqlWhere = {
where: {
channelServiceNo: channelServiceNo,
app_id: appId
},
raw: true
};
if (t) {
sqlWhere.transaction = t;
}
sqlWhere.attributes = ["id",
"deliveryOrderNo",
"needNo",
"sourceOrderNo",
"tmName",
"tmType",
"tmFormType",
"nclOneCodes",
"deliveryStatus",
"picUrl",
"colorizedPicUrl",
"sywjUrl",
"gzwtsUrl",
"nclCount",
"smwjUrl",
"updateuser_id",
"updateuser",
"notes",
"nclOneCount"
];
return this.model.findOne(sqlWhere);
}
}
module.exports = OrderTmProductDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class ReceiptVoucherDao extends Dao {
constructor() {
super(Dao.getModelName(ReceiptVoucherDao));
}
async getItemSourceOrderNo(sourceOrderNo) {
return this.model.findAll({
where: {
sourceOrderNo: sourceOrderNo
},
raw: true
});
}
async addReceiptvoucher(orderParams, req, t) {
var param = {
app_id: orderParams.app_id,//
totalSum: orderParams.totalSum || 0,// 订单总额(产品价格×优惠费率×订单件数)
channelServiceNo: orderParams.channelServiceNo,// 渠道服务单号
auditStatus: "tg",
sourceType: "order",
sourceOrderNo: orderParams.orderNo,// 来源订单号
payDate: orderParams.payTime,//
createuser_id: orderParams.createuser_id,
creator: orderParams.creator || "",
accountType: "other",
};
return this.create(param, t);//创建订单
}
}
module.exports = ReceiptVoucherDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class TmOfficialDao extends Dao{
constructor(){
super(Dao.getModelName(TmOfficialDao));
}
async getListByTmRegistNum(tmRegistNum) {
return this.model.findAll({
where: {
tmRegistNum: tmRegistNum
},
raw: true
});
}
}
module.exports=TmOfficialDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class TradeMarkDao extends Dao {
constructor() {
super(Dao.getModelName(TradeMarkDao));
}
async getListByDeliveryOrderNo(deliveryOrderNo) {
return this.model.findAll({
where: {
deliveryOrderNo: deliveryOrderNo
},
raw: true
});
}
}
module.exports = TradeMarkDao;
...@@ -30,7 +30,7 @@ module.exports = (db, DataTypes) => { ...@@ -30,7 +30,7 @@ module.exports = (db, DataTypes) => {
updatedAt: false, updatedAt: false,
//freezeTableName: true, //freezeTableName: true,
// define the table's name // define the table's name
tableName: 'c_op_log', tableName: 'p_op_log',
validate: { validate: {
}, },
......
...@@ -40,7 +40,7 @@ module.exports = (db, DataTypes) => { ...@@ -40,7 +40,7 @@ module.exports = (db, DataTypes) => {
updatedAt: false, updatedAt: false,
//freezeTableName: true, //freezeTableName: true,
// define the table's name // define the table's name
tableName: 'c_push_log', tableName: 'p_push_log',
validate: { validate: {
}, },
......
...@@ -3,10 +3,11 @@ const settings = require("../../../../config/settings"); ...@@ -3,10 +3,11 @@ const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey); const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => { module.exports = (db, DataTypes) => {
return db.define("app", { return db.define("app", {
app_hosts: DataTypes.STRING(255),
app_code: DataTypes.STRING(64), //渠道码 app_code: DataTypes.STRING(64), //渠道码
app_name: DataTypes.STRING(100), app_name: DataTypes.STRING(100),
uapp_id: DataTypes.STRING(64), //平台appid uapp_id: DataTypes.STRING(64), //平台appid
uapp_key: DataTypes.STRING(64), //平台appkey,用于进行签名请求接口 uapp_key: DataTypes.STRING(64), //平台appkey,用于进行签名请求接口
uapp_secret: DataTypes.STRING(64), //平台appkey密钥信息 uapp_secret: DataTypes.STRING(64), //平台appkey密钥信息
contact_name: DataTypes.STRING(50), //联系人 contact_name: DataTypes.STRING(50), //联系人
contact_mobile: DataTypes.STRING(50), //联系电话 contact_mobile: DataTypes.STRING(50), //联系电话
...@@ -15,6 +16,10 @@ module.exports = (db, DataTypes) => { ...@@ -15,6 +16,10 @@ module.exports = (db, DataTypes) => {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: true, defaultValue: true,
}, },
is_sign: { //请求是否验签
type: DataTypes.BOOLEAN,
defaultValue: true,
},
}, { }, {
paranoid: false,//假的删除 paranoid: false,//假的删除
underscored: true, underscored: true,
......
...@@ -3,16 +3,17 @@ const settings = require("../../../../config/settings"); ...@@ -3,16 +3,17 @@ const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey); const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => { module.exports = (db, DataTypes) => {
return db.define("apppayparam", { return db.define("apppayparam", {
uapp_id: DataTypes.STRING(50), uapp_id: DataTypes.STRING(50),
mch_id: DataTypes.STRING(50), //支付商户id pay_appid: DataTypes.STRING(64), //支付商的appid
pay_key: DataTypes.STRING(50), mch_id: DataTypes.STRING(64), //支付商户id
pay_key: DataTypes.STRING(64),
is_enabled: { //状态 0禁用 1启用 is_enabled: { //状态 0禁用 1启用
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: true, defaultValue: true,
}, },
pay_url: DataTypes.STRING(255), //支付地址 pay_url: DataTypes.STRING(255), //支付地址
notifyUrl: DataTypes.STRING(500), //支付成功后通知的地址 notify_url: DataTypes.STRING(500), //支付成功后通知的地址
notes: DataTypes.STRING(255), notes: DataTypes.STRING(255),
}, { }, {
paranoid: false,//假的删除 paranoid: false,//假的删除
underscored: true, underscored: true,
......
...@@ -2,27 +2,30 @@ const system = require("../../../system"); ...@@ -2,27 +2,30 @@ const system = require("../../../system");
const settings = require("../../../../config/settings"); const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey); const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => { module.exports = (db, DataTypes) => {
return db.define("user", { return db.define("appuser", {
uapp_id: DataTypes.INTEGER, uapp_id: DataTypes.INTEGER,
channel_userid: DataTypes.STRING(64), //渠道用户ID channel_userid: DataTypes.STRING(64), //渠道用户ID
channel_username: DataTypes.STRING(64), //渠道用户登录名 channel_username: DataTypes.STRING(64), //渠道用户登录名
channel_nickname: DataTypes.STRING(255), channel_nickname: DataTypes.STRING(255),
open_id: DataTypes.STRING(64), //用户唯一ID(可用与微信唯一ID) open_id: DataTypes.STRING(64), //用户唯一ID(可用与微信唯一ID)
head_url: DataTypes.STRING(255), head_url: DataTypes.STRING(255),
mobile: DataTypes.STRING(255), mobile: DataTypes.STRING(255),
email: DataTypes.STRING(50), org_name: DataTypes.STRING(255),
is_admin: { org_path: DataTypes.STRING(255),
email: DataTypes.STRING(50),
is_admin: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: false, defaultValue: false,
}, },
is_super: { is_super: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: false, defaultValue: false,
}, },
is_enabled: { is_enabled: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: true, defaultValue: true,
}, },
last_login_time: DataTypes.DATE,
}, { }, {
paranoid: false,//假的删除 paranoid: false,//假的删除
underscored: true, underscored: true,
...@@ -32,7 +35,7 @@ module.exports = (db, DataTypes) => { ...@@ -32,7 +35,7 @@ module.exports = (db, DataTypes) => {
updatedAt: false, updatedAt: false,
//freezeTableName: true, //freezeTableName: true,
// define the table's name // define the table's name
tableName: 'p_user', tableName: 'p_app_user',
validate: { validate: {
}, },
......
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("flowlog", {
uapp_id: DataTypes.INTEGER, //
sourceOrderNo: DataTypes.STRING(64), // 来源单号
opContent: DataTypes.STRING(1024), // 操作描述
notes: DataTypes.STRING, // 备注
isShow: {//是否显示
type: DataTypes.BOOLEAN,
defaultValue: false,
},
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_flow_log',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("ordercontacts", {
uapp_id :DataTypes.INTEGER, //
sourceOrderNo :DataTypes.STRING(64),//来源单号
contactName :DataTypes.STRING(1000), // 联系人
mobile :DataTypes.STRING(20), //
email :DataTypes.STRING(50), //
tel :DataTypes.STRING(20), //
fax :DataTypes.STRING(50), //
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_order_contacts',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("orderinfo", {
uapp_id :DataTypes.INTEGER,//
orderNo :DataTypes.STRING(64),// 订单号
channelServiceNo :DataTypes.STRING(64),// 渠道服务单号
channelOrderNo :DataTypes.STRING(1024),// 渠道订单号列表,多个以,隔开
channelUserId :DataTypes.STRING(64), // 渠道用户ID
ownerUserId :DataTypes.STRING(20),// 拥有渠道用户ID
needNo :DataTypes.STRING(64), // 需求单号
needNoOrderNo :DataTypes.STRING(64), // 需求订单号
payTime :DataTypes.DATE,// 渠道有支付时间则用渠道的支付时间
quantity :DataTypes.INTEGER,// 订单数量(即产品的倍数,默认值为1)
serviceQuantity :DataTypes.INTEGER,// 订单服务数量(即与订单数量相对应)
orderPayStatusName :DataTypes.STRING(50),//
orderPayStatus :{
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.order_pay_status),
set: function (val) {
this.setDataValue("orderPayStatus", val);
this.setDataValue("orderPayStatusName", uiconfig.config.pdict.order_pay_status[val]);
}
},// 订单付款状态dfk: 待付款, zfpz: 已上传支付凭证, yfk: 已付款, bfyfk: 部分已付款, ddqx: 订单取消, tkclz: 退款处理中, bfytk: 部分已退款, ytk: 已退款,zfshbtg:支付审核不通过
totalSum :DataTypes.DECIMAL(12, 2),// 订单总额(产品价格×优惠费率×订单件数)
payTotalSum :DataTypes.DECIMAL(12, 2),// 订单付款总额
refundSum :DataTypes.DECIMAL(12, 2),// 退款金额
totalServiceCharge :DataTypes.DECIMAL(12, 2),// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense :DataTypes.DECIMAL(12, 2),// 官费总额(产品配置的官费*订单件数)
totalProfitSum :DataTypes.DECIMAL(12, 2),// 订单毛利润总额(订单总额-官费总额)
totalDiscounts :DataTypes.DECIMAL(12, 2),// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
pfProfitSum :DataTypes.DECIMAL(12, 2),// 订单平台毛利润总额(订单毛利润总额-订单渠道分成毛利润总额)
channelProfitSum :DataTypes.DECIMAL(12, 2),// 订单渠道分成毛利润总额((订单总额-官费总额)*渠道利润分成比率)
pfSettleProfit :DataTypes.INTEGER,// 平台结算渠道利润,0否,1是
invoiceApplyStatus :DataTypes.STRING(10),// 发票状态:00: 未申请, 10: 已申请,20:已开票
opNotes :DataTypes.STRING,// 备注
notes :DataTypes.STRING,// 备注
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_order_info',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("orderproduct", {
uapp_id: DataTypes.INTEGER,//
sourceOrderNo :DataTypes.STRING(64),//来源单号
productType_id :DataTypes.INTEGER,//产品类型Id
productOneType_id :DataTypes.INTEGER,//产品大类Id
itemCode :DataTypes.STRING(64),//产品编码
itemName :DataTypes.STRING(100),//产品名称
channelItemCode :DataTypes.STRING(100),// 渠道产品编码
channelItemName :DataTypes.STRING(100),// 渠道产品名称
serviceItemCode :DataTypes.STRING(100),// 服务商产品编码
picUrl :DataTypes.STRING(500),// 产品图片地址
proPrice :DataTypes.DOUBLE, // 产品价格
quantity :DataTypes.INTEGER,// 订单数量(即产品的倍数,默认值为1)
opPayType :DataTypes.STRING(10),// 操作付款类型:00: 创建订单, 10: 补单
serviceItemSnapshot :DataTypes.TEXT('long'), //产品快照
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_order_product',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {//费用单:
return db.define("expensevoucher", {
uapp_id: DataTypes.INTEGER, //
sourceOrderNo: DataTypes.STRING(64), // 来源单号
expenseTypeName: DataTypes.STRING,
expenseType: {//收款类型,gf: 官费, tax: 税金, channelSettleProfit: 订单渠道分润结算
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.expense_type),
set: function (val) {
this.setDataValue("expenseType", val);
this.setDataValue("expenseTypeName", uiconfig.config.pdict.expense_type[val]);
}
},
totalSum: DataTypes.DECIMAL(12, 3),//总额
notes: DataTypes.STRING,//备注
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_expensevoucher',
validate: {
}
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("moneyjourney", {
uapp_id: DataTypes.INTEGER, //
sourceOrderNo: DataTypes.STRING(64), // 来源单号
channelUserId: DataTypes.STRING(64), // 渠道用户ID
ownerUserId: DataTypes.STRING(20),// 拥有渠道用户ID
accountType: {
//帐户类型( 支付类型):"cash": "现金", "bank": "银行" ,"wx":"微信","alipay":"支付宝","other":"其它"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.pay_account_type),
set: function (val) {
this.setDataValue("accountType", val);
this.setDataValue("accountTypeName", uiconfig.config.pdict.pay_account_type[val]);
}
},
accountTypeName: {//帐户类型名称
type: DataTypes.STRING,
},
directionTypeName: DataTypes.STRING,
directionType: {//凭单类型,"sr": "收","zc": "支"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.direction_type),
set: function (val) {
this.setDataValue("directionType", val);
this.setDataValue("directionTypeName", uiconfig.config.pdict.direction_type[val]);
}
},
voucherDate: DataTypes.DATE,//凭单时间
recvAmount: DataTypes.DECIMAL(12, 3),//收总额
payAmount: DataTypes.DECIMAL(12, 3),//支总额
sourceTypeName: DataTypes.STRING,
sourceType: {//来源类型 "orderinfo": "订单","expensevoucher": "费用单"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.source_type),
set: function (val) {
this.setDataValue("sourceType", val);
this.setDataValue("sourceTypeName", uiconfig.config.pdict.source_type[val]);
}
},
auditStatusName: {
type: DataTypes.STRING(50),
defaultValue: "待审核",
},
auditStatus: {//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.audit_status),
set: function (val) {
this.setDataValue("auditStatus", val);
this.setDataValue("auditStatusName", uiconfig.config.pdict.audit_status[val]);
},
defaultValue: "dsh",
},
notes: DataTypes.STRING,//备注
opNotes: DataTypes.STRING,//操作备注
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_moneyjourney',
validate: {
}
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("orderreceiptvoucher", {//收款单:
uapp_id: DataTypes.INTEGER, //
sourceOrderNo: DataTypes.STRING(64), // 来源单号
accountType: {
//帐户类型( 支付类型):"cash": "现金", "bank": "银行" ,"wx":"微信","alipay":"支付宝","other":"其它"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.pay_account_type),
set: function (val) {
this.setDataValue("accountType", val);
this.setDataValue("accountTypeName", uiconfig.config.pdict.pay_account_type[val]);
}
},
accountTypeName: {//帐户类型名称
type: DataTypes.STRING,
},
payDate: DataTypes.DATE,//支付时间
totalSum: DataTypes.DECIMAL(12, 3),//订单总额
payOrderNo: DataTypes.STRING, //支付凭证流水单号,如:微信支付凭证单号
buyerOpenId: DataTypes.STRING,//用户在支付商户appid下的唯一标识或买家在支付宝的用户id
passTradeNo: DataTypes.STRING,//通道的统一订单号
buyerAliLogonId: DataTypes.STRING,//买家支付宝账号
certifyFileUrl: DataTypes.STRING(500), //支付证明文件Url
wxPayOrderCode: DataTypes.STRING(64),//业务微信支付订单号
aliPayOrderCode: DataTypes.STRING(50),//业务支付宝支付订单号
busPayOrderCode: DataTypes.STRING(50),//业务支付订单号
auditStatusName: {
type: DataTypes.STRING(50),
defaultValue: "待审核",
},
auditStatus: {//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.audit_status),
set: function (val) {
this.setDataValue("auditStatus", val);
this.setDataValue("auditStatusName", uiconfig.config.pdict.audit_status[val]);
},
defaultValue: "dsh",
},
notes: DataTypes.STRING,//备注
opNotes: DataTypes.STRING,//操作备注
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_order_receiptvoucher',
validate: {
}
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("orderrefundvoucher", {//退款单:
uapp_id: DataTypes.INTEGER, //
sourceOrderNo: DataTypes.STRING(64), // 来源单号
busPayOrderCode: DataTypes.STRING(100),//业务支付订单号
accountType: {
//帐户类型( 支付类型):"cash": "现金", "bank": "银行" ,"wx":"微信","alipay":"支付宝","other":"其它"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.pay_account_type),
set: function (val) {
this.setDataValue("accountType", val);
this.setDataValue("accountTypeName", uiconfig.config.pdict.pay_account_type[val]);
}
},
accountTypeName: {//帐户类型名称
type: DataTypes.STRING,
},
payDate: DataTypes.DATE,//支付时间
totalSum: DataTypes.DECIMAL(12, 3),//总额
certifyFileUrl: DataTypes.STRING(500), //证明文件Url
payOrderNo: DataTypes.STRING, //支付凭证流水单号,如:微信支付凭证单号
buyerOpenId: DataTypes.STRING,//用户在支付商户appid下的唯一标识或买家在支付宝的用户id
passTradeNo: DataTypes.STRING,//通道的统一订单号
buyerAliLogonId: DataTypes.STRING,//买家支付宝账号
auditStatusName: {
type: DataTypes.STRING(50),
defaultValue: "待审核",
},
auditStatus: {//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.audit_status),
set: function (val) {
this.setDataValue("auditStatus", val);
this.setDataValue("auditStatusName", uiconfig.config.pdict.audit_status[val]);
},
defaultValue: "dsh",
},
notes: DataTypes.STRING,//备注
opNotes: DataTypes.STRING,//操作备注
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_order_refundvoucher',
validate: {
}
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("needinfo", {
app_id :DataTypes.INTEGER, //
needNo :DataTypes.STRING(64), //需求单号
needDesc :DataTypes.STRING(255), //
needUserMoblie :DataTypes.STRING(20), //
notes :DataTypes.STRING(255), //
opNotes :DataTypes.STRING(500), //
channelUserName :DataTypes.STRING(50), // 渠道用户登录名
auditStatus :DataTypes.STRING(10), //确认状态:00待确认,10确认通过,20确认不通过
createuser_id :DataTypes.INTEGER, //
updateuser_id :DataTypes.INTEGER, //
owner_id :DataTypes.INTEGER, //
creator :DataTypes.STRING(50), //
updator :DataTypes.STRING(50), //
owner :DataTypes.STRING(50), //
ownerMoblie :DataTypes.STRING(20), //
itemCode :DataTypes.STRING(80), //产品码
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_needinfo',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("customercontacts", {
app_id :DataTypes.INTEGER, //
customerinfo_id :DataTypes.INTEGER, //
deliveryOrderNo :DataTypes.STRING(64), // 交付订单号
mobile :DataTypes.STRING(20), //
email :DataTypes.STRING(50), //
tel :DataTypes.STRING(20), //
fax :DataTypes.STRING(50), //
name :DataTypes.STRING(1000), // 联系人
code :DataTypes.STRING(100), // 暂时没有用
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_customercontacts',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("customerinfo", {
customerTypeName :DataTypes.STRING(50), //
customerType : {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.customer_type),
set: function (val) {
this.setDataValue("customerType", val);
this.setDataValue("customerTypeName", uiconfig.config.pdict.customer_type[val]);
},
defaultValue: "0",
}, //申请企业类型: ent:企业,person:个人
identityCardPic :DataTypes.STRING(500), // 身份证图片
identityCardPdf :DataTypes.STRING(500), // 身份证pdf
businessLicensePic :DataTypes.STRING(500), // 营业执照图片
businessLicensePdf :DataTypes.STRING(500), // 营业执照pdf
name :DataTypes.STRING(1000), // 公司名称或个人名称
code :DataTypes.STRING(100), // 公司统一社会代码
app_id :DataTypes.INTEGER, //
deliveryOrderNo :DataTypes.STRING(64), // 交付订单号
applyAddr :DataTypes.STRING, // 申请地址
applyArea :DataTypes.STRING(50), // 存储省市编码
province :DataTypes.STRING(50), // 省
city :DataTypes.STRING(50), // 市
identityCardNo :DataTypes.STRING(50), // 身份证号
notes :DataTypes.STRING, // 备注
createuser_id :DataTypes.INTEGER, //
updateuser_id :DataTypes.INTEGER, //
owner_id :DataTypes.INTEGER, // 拥有者
zipCode :DataTypes.STRING(20), //
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_customerinfo',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("order", {
app_id :DataTypes.INTEGER,//
orderNo :DataTypes.STRING(64),// 订单号
channelServiceNo :DataTypes.STRING(64),// 渠道服务单号
channelOrderNo :DataTypes.STRING(1024),// 渠道订单号列表,多个以,隔开
itemCode :DataTypes.STRING(64),//
itemName :DataTypes.STRING(100),//
channelItemCode :DataTypes.STRING(64),// 渠道产品编码
channelItemName :DataTypes.STRING,// 渠道产品名称
payTime :DataTypes.DATE,// 渠道有支付时间则用渠道的支付时间
salesNum :DataTypes.INTEGER,// 项目订单数量(即服务项目的倍数,默认值为1)
salesDiliverNum :DataTypes.INTEGER,// 项目订单交付数量(即与项目订单数量相对应)
minitermNum :DataTypes.INTEGER,// 订单小项数量
minitermDiliverNum :DataTypes.INTEGER,// 订单小项交付数量
orderType :{
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.order_type),
},// 订单类型,zzdd: 自主订单,dkxd: 代客下单
orderPayStatusName: DataTypes.STRING(50),//
orderPayStatus :{
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.order_pay_status),
set: function (val) {
this.setDataValue("orderPayStatus", val);
this.setDataValue("orderPayStatusName", uiconfig.config.pdict.order_pay_status[val]);
}
},// 订单付款状态dfk: 待付款, zfpz: 已上传支付凭证, yfk: 已付款, ddqx: 订单取消, tkclz: 退款处理中, bfytk: 部分已退款, ytk: 已退款,zfshbtg:支付审核不通过
totalServiceCharge :DataTypes.DECIMAL(12, 2),// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense :DataTypes.DECIMAL(12, 2),// 官费总额(产品配置的官费*订单件数)
totalDiscounts :DataTypes.DECIMAL(12, 2),// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
totalTaxes :DataTypes.DECIMAL(12, 2),// 税费总额(订单总额-(订单总额/(1+产品费率)))
totalSum :DataTypes.DECIMAL(12, 2),// 订单总额(产品价格×优惠费率×订单件数)
refundSum :DataTypes.DECIMAL(12, 2),// 退款金额
totalProfitSum :DataTypes.DECIMAL(12, 2),// 订单毛利润总额(订单总额-官费总额)
pfProfitSum :DataTypes.DECIMAL(12, 2),// 订单平台毛利润总额(订单毛利润总额-订单渠道分成毛利润总额)
channelProfitSum :DataTypes.DECIMAL(12, 2),// 订单渠道分成毛利润总额((订单总额-官费总额)*渠道利润分成比率)
pfSettleProfit :DataTypes.DECIMAL(12, 2),// 平台结算渠道利润,0否,1是
opNotes :DataTypes.STRING,// 备注
notes :DataTypes.STRING,// 备注
appPayType :{
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.app_pay_type),
},// 支付类型:00第三方支付,10平台代收款
createuser_id :DataTypes.INTEGER,//
updateuser_id :DataTypes.INTEGER,//
owner_id :DataTypes.INTEGER,//
creator :DataTypes.STRING(100),//
updator :DataTypes.STRING(100),//
owner :DataTypes.STRING(100),//
ownerMoblie :DataTypes.STRING(20),//
invoiceApplyStatus :DataTypes.STRING(10),// 发票状态:00: 未申请, 10: 已申请,20:已开票
channelUserId :DataTypes.STRING(64), // 渠道用户ID
needNo :DataTypes.STRING(64), // 需求单号
needNoOrderNo :DataTypes.STRING(64), // 需求订单号
sourceType: DataTypes.STRING(10),//来源类型:00订单,10需求需要用户确认方案
picUrl :DataTypes.STRING(500),// 产品图片地址
productType_id :DataTypes.INTEGER, //产品类型Id
productOneType_id :DataTypes.INTEGER, //产品大类Id
serviceItemSnapshot :DataTypes.TEXT, //产品快照
buyerMoblie :DataTypes.STRING(64), // 买家手机号
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_order',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("orderflow", {
sourceOrderNo: DataTypes.STRING(64), // 来源单号
opContent: DataTypes.STRING(1024), // 操作描述
app_id: DataTypes.INTEGER, //
notes: DataTypes.STRING, // 备注
createuser_id: DataTypes.INTEGER, //
isShow: {//是否显示
type: DataTypes.BOOLEAN,
defaultValue: false,
},
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_orderflow',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("ordertmproduct", {
app_id: DataTypes.INTEGER,//
productType_id: DataTypes.INTEGER,//产品类型Id
productOneType_id: DataTypes.INTEGER,//产品大类Id
itemCode: DataTypes.STRING(64),//产品编码
itemName: DataTypes.STRING(100),//产品名称
tmName: DataTypes.STRING(1000),//商标名称
tmType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.tm_type),
},//p:普通商标,j:集体商标,z:证明商标,t:特殊商标
tmFormTypeName: DataTypes.STRING(50),//
tmFormType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.tm_form_type),
set: function (val) {
this.setDataValue("tmFormType", val);
this.setDataValue("tmFormTypeName", uiconfig.config.pdict.tm_form_type[val]);
}
},//商标类型形式:1:立体,3:字,4:图,5:字图,6:颜色,7:彩色
nclOneCodes: DataTypes.STRING,//尼斯大类列表:格式以,隔开
payStatusName: DataTypes.STRING(50),//
payStatus: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.order_service_pay_status),
set: function (val) {
this.setDataValue("payStatus", val);
this.setDataValue("payStatusName", uiconfig.config.pdict.order_service_pay_status[val]);
}
},//支付状态:dfk:待付款,yzf:已支付
deliveryStatusName: DataTypes.STRING(50),//
deliveryStatus: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.delivery_status),
set: function (val) {
this.setDataValue("deliveryStatus", val);
this.setDataValue("deliveryStatusName", uiconfig.config.pdict.delivery_status[val]);
}
},//商标交付状态:dsccl:待上传材料,dsh:待审核,ddj:待递交, ydj: 已递交,ywc:已完成
appDataOpType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.app_data_op_type),
},//应用数据操作类型:00独立,10全委托,20部分委托
sourceOrderNo: DataTypes.STRING(64),//来源单号
deliveryOrderNo: DataTypes.STRING(64),//交付订单号
channelServiceNo: DataTypes.STRING(64),//渠道服务单号
channelOrderNo: DataTypes.STRING(1024),//渠道订单号列表,多个以,隔开
needNo: DataTypes.STRING(64),//需求单号
needNoOrderNo :DataTypes.STRING(64), // 需求订单号
sourceType: DataTypes.STRING(10),//来源类型:00订单,10需求需要用户确认方案
picUrl: DataTypes.STRING(500), //商标图样
colorizedPicUrl: DataTypes.STRING(500),//商标彩色图样
gzwtsUrl: DataTypes.STRING(500), //盖章委托书
sywjUrl: DataTypes.STRING(500), //声音文件
smwjUrl: DataTypes.STRING(500), //说明文件
channelUserId: DataTypes.STRING(64),//渠道用户ID
notes: DataTypes.STRING(255),//备注
createuser_id: DataTypes.INTEGER,//
updateuser_id: DataTypes.INTEGER,//
auditor_id: DataTypes.INTEGER,//
createuser: DataTypes.STRING(100),//
updateuser: DataTypes.STRING(100),//
auditor: DataTypes.STRING(100),//
nclOneCount: DataTypes.INTEGER, // 尼斯大类数量
nclCount: DataTypes.INTEGER, // 尼斯数量
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_order_tm_product',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
var base = require("../../basemodel/voucherbase")(db, DataTypes);
return db.define("receiptvoucher", Object.assign({//收款单:
//基类 code: 收款单号(自动生成)
//基类 creator: 创建者
//基类 updator:/更新者
//基类 auditor: 审核者
//基类 opNotes: 操作备注
//基类 auditStatusName: //审核状态名称
//基类 auditStatus: //审核状态:ENUM=audit_status,"dsh": "待审核", "btg": "不通过", "tg": "通过"
//基类 sourceTypeName: //来源类型名称
//基类 sourceType: //来源类型:ENUM=source_type,"order": "订单","expensevoucher": "费用单","receiptvoucher": "收款单","refundvoucher": "退款单", "trademark": "商标单"
//基类 sourceOrderNo: DataTypes.STRING,//来源单号(如:订单号等)
//基类 channelServiceNo //渠道服务单号
createapp_id: DataTypes.INTEGER,//
payuser_id: DataTypes.INTEGER,//
busPayOrderCode: DataTypes.STRING(100),//业务支付订单号
payOrderNo: DataTypes.STRING, //支付凭证流水单号,如:微信支付凭证单号
receiptTypeName: DataTypes.STRING,
receiptType: {//收款类型,"sk": "收款","csrz": "初始入账" ,"ptdsk": "平台代收款"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.receipt_type),
set: function (val) {
this.setDataValue("receiptType", val);
this.setDataValue("receiptTypeName", uiconfig.config.pdict.receipt_type[val]);
}
},
accountType: {
//帐户类型( 支付类型):"cash": "现金", "bank": "银行" ,"wx":"微信","alipay":"支付宝","other":"其它"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.pay_account_type),
set: function (val) {
this.setDataValue("accountType", val);
this.setDataValue("accountTypeName", uiconfig.config.pdict.pay_account_type[val]);
},
defaultValue: "other",
},
accountTypeName: {//帐户类型名称
type: DataTypes.STRING,
defaultValue: "其它",
},
payDate: DataTypes.DATE,//支付时间
totalSum: DataTypes.DECIMAL(12, 3),//订单总额(平台费用+服务费+官费+发票税费+个人利润+平台利润)
certifyFileUrl: DataTypes.STRING(500), //证明文件Url
notes: DataTypes.STRING,//备注
itemCode: DataTypes.STRING(100),//项目操作码
itemName: DataTypes.STRING(100),//项目名称
buyerOpenId: DataTypes.STRING,//用户在商户appid下的唯一标识或买家在支付宝的用户id
passTradeNo: DataTypes.STRING,//通道的统一订单号
buyerAliLogonId: DataTypes.STRING,//买家支付宝账号
}, base), {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'b_receiptvoucher',
validate: {
}
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("tmofficial", {
tmRegistNum :DataTypes.STRING(50), //注册号
officialTypeName :DataTypes.STRING(50), //
officialType : {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.official_type),
set: function (val) {
this.setDataValue("officialType", val);
this.setDataValue("officialTypeName", uiconfig.config.pdict.official_type[val]);
}
}, //商标官文类型:1: 商标注册申请书, 2: 商标注册申请补正通知书, 3: 商标注册申请受理通知书, 4: 商标注册申请不予受理通知书,
//5: 商标注册同日申请补送使用证据通知书,6: 商标注册同日申请协商通知书商标注册同日申请抽签通知书,
//7: 商标驳回通知书, 8: 商标部分驳回通知书, 9: 商标注册申请初步审定公告通知书,
//10: 商标异议答辩通知书, 11: 异议裁定书, 12: 纸质版商标注册证, 13: 电子版商标注册证
officialFileName :DataTypes.STRING(200), // 官文文件名称
officialFileUrl :DataTypes.STRING(255), // 官文文件地址
notes :DataTypes.STRING , //
name :DataTypes.STRING(1000), //暂时没有用
code :DataTypes.STRING(64), //官文单号(自动生成)
app_id :DataTypes.INTEGER, //
createuser_id :DataTypes.INTEGER, //
updateuser_id :DataTypes.INTEGER, //
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_tmofficial',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("trademark", {
tbCode :DataTypes.STRING(50), //提报号(自动生成)
nclOneCodes :DataTypes.STRING(10), //尼斯大类
nclSmallCodes :DataTypes.TEXT('long'), //尼斯小类
submitTime :DataTypes.DATE, //提报时间
tmRegistNum :DataTypes.STRING(50), //注册号
officialTypeName :DataTypes.STRING(50), //
officialType : {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.official_type),
set: function (val) {
this.setDataValue("officialType", val);
this.setDataValue("officialTypeName", uiconfig.config.pdict.official_type[val]);
}
}, //商标官文类型:1: 商标注册申请书, 2: 商标注册申请补正通知书, 3: 商标注册申请受理通知书, 4: 商标注册申请不予受理通知书,
//5: 商标注册同日申请补送使用证据通知书,6: 商标注册同日申请协商通知书商标注册同日申请抽签通知书,
//7: 商标驳回通知书, 8: 商标部分驳回通知书, 9: 商标注册申请初步审定公告通知书,
//10: 商标异议答辩通知书, 11: 异议裁定书, 12: 纸质版商标注册证, 13: 电子版商标注册证
// "dsccl": "待上传材料", "dsh": "待审核", "shbtg": "审核不通过", "ddj": "待递交", "ydj": "已递交", "djyc": "递交异常" //
tbKey :DataTypes.STRING(50), //
tbErrorCount :DataTypes.INTEGER, //
deliveryOrderNo :DataTypes.STRING(64), //交付订单号
bizNo :DataTypes.STRING(64), //业务单号,用于对接第三方业务单号
app_id :DataTypes.INTEGER, //
createuser_id :DataTypes.INTEGER, //
updateuser_id :DataTypes.INTEGER, //
owner_id :DataTypes.INTEGER, //
creator :DataTypes.STRING(50), //
updator :DataTypes.STRING(50), //
owner :DataTypes.STRING(50), //
ownerMoblie :DataTypes.STRING(20), //
opNotes :DataTypes.STRING(500), //
subErrorMsg :DataTypes.STRING(4000), // 提报错误信息
payPublicExpense :DataTypes.INTEGER, // 支付官费,0否,1是
nclCount :DataTypes.INTEGER, // 尼斯数量
nclPublicExpense :DataTypes.DECIMAL(12, 2), // 尼斯官费总额
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_trademark',
validate: {
},
indexes: [
]
});
}
const system=require("../system") const system=require("../system")
const logCtl=system.getObject("web.common.oplogCtl"); const logCtl=system.getObject("service.common.oplogSve");
class TaskBase{ class TaskBase{
constructor(className){ constructor(className){
this.redisClient=system.getObject("util.redisClient"); this.redisClient=system.getObject("util.redisClient");
......
...@@ -8,10 +8,15 @@ class OplogService extends ServiceBase { ...@@ -8,10 +8,15 @@ class OplogService extends ServiceBase {
this.opLogUrl = settings.apiconfig.opLogUrl(); this.opLogUrl = settings.apiconfig.opLogUrl();
this.opLogEsIsAdd = settings.apiconfig.opLogEsIsAdd(); this.opLogEsIsAdd = settings.apiconfig.opLogEsIsAdd();
} }
async error(qobj) {
this.create(qobj);
}
async info(qobj) {
this.create(qobj);
}
async create(qobj) { async create(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 || if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 || qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 || qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 || qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) { qobj.op.indexOf("getRsConfig") >= 0) {
...@@ -49,7 +54,6 @@ class OplogService extends ServiceBase { ...@@ -49,7 +54,6 @@ class OplogService extends ServiceBase {
async createDb(qobj) { async createDb(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 || if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 || qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 || qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 || qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) { qobj.op.indexOf("getRsConfig") >= 0) {
......
...@@ -11,7 +11,6 @@ class PushlogService extends ServiceBase { ...@@ -11,7 +11,6 @@ class PushlogService extends ServiceBase {
async create(qobj) { async create(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 || if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 || qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 || qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 || qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) { qobj.op.indexOf("getRsConfig") >= 0) {
...@@ -49,7 +48,6 @@ class PushlogService extends ServiceBase { ...@@ -49,7 +48,6 @@ class PushlogService extends ServiceBase {
async createDb(qobj) { async createDb(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 || if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 || qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 || qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 || qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) { qobj.op.indexOf("getRsConfig") >= 0) {
......
...@@ -6,8 +6,25 @@ class AppService extends ServiceBase { ...@@ -6,8 +6,25 @@ class AppService extends ServiceBase {
constructor() { constructor() {
super("dbapp", ServiceBase.getDaoName(AppService)); super("dbapp", ServiceBase.getDaoName(AppService));
} }
async getItemByAppKey(appKey) { async getAppTokenByHosts(app_hosts) {
return this.dao.getItemByAppKey(appKey); if (!app_hosts) {
return system.getResult(null, "app_hosts can not be empty !");
}
var item = await this.dao.getItemByHosts(app_hosts);
if (!item) {
return system.getResult(null, "app_hosts to data is empty !");
}
var acckapp = await this.restS.execPost({ appkey: appkey, secret: secret }, settings.paasUrl() + "api/auth/accessAuth/getAccessKey");
var s = acckapp.stdout;
console.log(acckapp.stdout, "ApiAccessKeyCache............. acckapp.stdout..........")
if (s) {
var tmp = JSON.parse(s);
return tmp;
// if (tmp.status == 0) {
// return JSON.stringify(tmp.data);
// }
}
return system.getResult(null, "返回数据为空!");
} }
} }
module.exports = AppService; module.exports = AppService;
...@@ -2,10 +2,10 @@ const system = require("../../../system"); ...@@ -2,10 +2,10 @@ const system = require("../../../system");
const ServiceBase = require("../../sve.base"); const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings"); const settings = require("../../../../config/settings");
class UserService extends ServiceBase { class AppUserService extends ServiceBase {
constructor() { constructor() {
super("dbapp", ServiceBase.getDaoName(UserService)); super("dbapp", ServiceBase.getDaoName(AppUserService));
} }
} }
module.exports = UserService; module.exports = AppUserService;
const system = require("../../../system");
const Dao = require("../../dao.base");
class FlowLogService extends ServiceBase {
constructor() {
super("dbcorder", ServiceBase.getDaoName(FlowLogService));
}
}
module.exports = FlowLogService;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderContactsService extends ServiceBase {
constructor() {
super("dbcorder", ServiceBase.getDaoName(OrderContactsService));
}
}
module.exports = OrderContactsService;
const system = require("../../../system");
// const Dao = require("../../dao.base");
const ServiceBase = require("../../sve.base");
const uuidv4 = require('uuid/v4');
class OrderInfoService extends ServiceBase {
constructor() {
super("dbcorder", ServiceBase.getDaoName(OrderInfoService));
this.appproductDao = system.getObject("db.dbapp.appproductDao");
this.orderProductDao = system.getObject("db.dbcorder.orderproductDao");
this.orderReceiptVoucherDao = system.getObject("db.dbcpay.orderreceiptvoucherDao");
this.orderRefundVoucherDao = system.getObject("db.dbcpay.orderrefundvoucherDao");
this.moneyJourneyDao = system.getObject("db.dbcpay.moneyjourneyDao");
this.pushlogSve = system.getObject("service.common.pushlogSve");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
/*
* 订单验证
*/
async isOrderVerify(serviceitem,buyProductCount,buyPrice) {
var sveItemRateConfig = serviceitem.rateConfig ? Number(serviceitem.rateConfig) : 0;//产品费率
var fwf = serviceitem.serviceCharge ? Number(serviceitem.serviceCharge) : 0;//服务费
var yhfl = serviceitem.discountsRateConfig ? Number(serviceitem.discountsRateConfig) : 0;//最大优惠费率
var gf = serviceitem.publicExpense ? Number(serviceitem.publicExpense) : 0;//产品官费
var productCount = 1;//产品数量
var gfze = 0;//官费总额
var qdfcbl = serviceitem.channelProfitRate?Number(serviceitem.channelProfitRate) : 0;//渠道利润分成比率
productCount = Number(buyProductCount);//购买产品数量
buyPrice = Number(buyPrice);//购买价格
gfze = gf * Number(productCount);
var fwfze = Number(fwf) * Number(productCount);//服务费总额
var sfze = Number(buyPrice) / (sveItemRateConfig + 100) * sveItemRateConfig; //totalTaxes 税费总额
sfze = sfze.toFixed(2);
sfze = Number(sfze);
var zdyhe = (gfze + fwfze) * yhfl / 100;//最大优惠额
zdyhe = zdyhe.toFixed(2);
zdyhe = Number(zdyhe);
//毛利总额=应付总额-官费总额
var mlze = Number(buyPrice) - gfze;//totalProfitSum 毛利总额
mlze = mlze.toFixed(2);
mlze = Number(mlze);
//优惠金额=服务费+官费总额-应付总额(服务费、官费之和小于等于应付总额时,优惠金额为零)
var yhje = fwfze + gfze - Number(buyPrice);
if (yhje < 0) {
yhje = 0;
}
yhje = yhje.toFixed(2);
yhje = Number(yhje);
if (yhje > zdyhe) {
return { code: -205, msg: "优惠总额有误" };
}
var fcmlze_channel = mlze*qdfcbl ;//订单渠道分成毛利润总额
var fcmlze_platform = mlze-fcmlze_channel ;//订单平台毛利润总额
return {code:1,data:{
totalServiceCharge :fwfze,// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense :gfze,// 官费总额(产品配置的官费*订单件数)
totalTaxes :sfze,// 税费总额(订单总额-(订单总额/(1+产品费率)))
totalSum :buyPrice,// 订单总额(产品价格×优惠费率×订单件数)
totalProfitSum :mlze,// 订单毛利润总额(订单总额-官费总额)
totalDiscounts :yhje,// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
pfProfitSum :fcmlze_platform,// 订单平台毛利润总额(订单毛利润总额-订单渠道分成毛利润总额)
channelProfitSum :fcmlze_channel,// 订单渠道分成毛利润总额((订单总额-官费总额)*渠道利润分成比率)
}};
}
/**
* 创建订单
*/
async createOrder(obj,req){
var self = this;
var app = req.app;
var user = req.user;
if(!app || !app.uAppId){
return system.getResult(null, "渠道信息有误");
}
if(!user){
return system.getResult(null, "用户信息有误");
}
var channelItemCode = obj.itemCode;
if(!channelItemCode){
return system.getResult(null, "未知的产品码");
}
var productItem = await this.appproductDao.findOneByChannelItemCode(channelItemCode, app.id);//通过ChannelItemCode获取产品
// if (!productItem) {
// return system.getResult(null, "未知的产品");
// }
var verifyResult=null;
if (productItem) {
if(productItem.status != 1){
return system.getResult(null, "产品已禁用");
}
}
var channelUser = obj.channelUser;
if(!channelUser || !channelUser.channelUserId){
return system.getResult(null, "渠道用户信息有误");
}
var channelOrder = obj.channelOrder;
if(!channelOrder || !channelOrder.channelServiceNo){
return system.getResult(null, "渠道订单信息有误");
}
if(!channelOrder.quantity){
return system.getResult(null, "渠道订单产品数量不能为空");
}
if(!channelOrder.totalSum){
return system.getResult(null, "渠道订单支付金额不能为空");
}
if (productItem) {
verifyResult = await self.isOrderVerify(productItem,channelOrder.quantity,channelOrder.totalSum);
if (verifyResult && verifyResult.code!=1) {
return system.getResult(null, verifyResult.msg);
}
}
var beforeOrder = await this.dao.model.findOne({
where:{channelServiceNo:channelOrder.channelServiceNo,uapp_id:app.uAppId},
raw:true
});
if(beforeOrder){//订单已存在
return system.getResultFail(2, "订单已存在",beforeOrder.orderNo);
}
return await self.db.transaction(async function (t) {
var orderNo = await self.getBusUid("o");
//创建订单
var orderObj={
uapp_id:app.uAppId,orderNo:orderNo,channelServiceNo:channelOrder.channelServiceNo,
channelUserId:channelUser.channelUserId,channelOrderNo:channelOrder.channelOrderNo,
ownerUserId:channelUser.channelUserId,
quantity:channelOrder.quantity,
needNo:channelOrder.needNo,payTime:channelOrder.payTime,orderPayStatus:channelOrder.payStatus,
totalSum:channelOrder.totalSum,
payTotalSum:channelOrder.payTotalSum,
totalServiceCharge :0,// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense :0,// 官费总额(产品配置的官费*订单件数)
totalTaxes :0,// 税费总额(订单总额-(订单总额/(1+产品费率)))
totalProfitSum :0,// 订单毛利润总额(订单总额-官费总额)
totalDiscounts :0,// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
pfProfitSum :0,// 订单平台毛利润总额(订单毛利润总额-订单渠道分成毛利润总额)
channelProfitSum :0,// 订单渠道分成毛利润总额((订单总额-官费总额)*渠道利润分成比率)
// pfSettleProfit :DataTypes.INTEGER,// 平台结算渠道利润,0否,1是
invoiceApplyStatus :"00",// 发票状态:00: 未申请, 10: 已申请,20:已开票
};
if(verifyResult && verifyResult.code==1 && verifyResult.data){
var orderCostObj=verifyResult.data;
orderObj.totalServiceCharge=orderCostObj.totalServiceCharge || 0;
orderObj.totalPublicExpense=orderCostObj.totalPublicExpense || 0;
orderObj.totalTaxes=orderCostObj.totalTaxes || 0;
orderObj.totalProfitSum=orderCostObj.totalProfitSum || 0;
orderObj.totalDiscounts=orderCostObj.totalDiscounts || 0;
orderObj.pfProfitSum=orderCostObj.pfProfitSum || 0;
orderObj.channelProfitSum=orderCostObj.channelProfitSum || 0;
}
var order = await self.dao.create(orderObj,t);//创建订单
//var orderProductNo = await self.getBusUid("op");
if(productItem){
var orderProductObj = {
uapp_id:app.uAppId,
sourceOrderNo:order.orderNo, // 来源单号
productType_id :productItem.productType_id,//产品类型Id
productOneType_id :productItem.productOneType_id,//产品大类Id
itemCode :productItem.itemCode,//产品编码
itemName :productItem.itemName,//产品名称
channelItemCode :productItem.channelItemCode,// 渠道产品编码
channelItemName :productItem.channelItemName,// 渠道产品名称
serviceItemCode :productItem.serviceItemCode,// 服务商产品编码
picUrl :productItem.picUrl,// 产品图片地址
proPrice :productItem.proPrice, // 产品价格
quantity :channelOrder.quantity,// 订单数量(即产品的倍数,默认值为1)
opPayType :"00",// 操作付款类型:00: 创建订单, 10: 补单
serviceItemSnapshot :JSON.stringify(productItem), //产品快照
};
var orderProduct = await self.orderProductDao.create(orderProductObj,t);//订单产品
}
if(order.totalSum>0){//支付成功
var moneyObj={
uapp_id:app.uAppId,
sourceOrderNo:order.orderNo, // 来源单号
channelUserId:channelUser.channelUserId,
ownerUserId:channelUser.channelUserId,
accountType: "other",//帐户类型( 支付类型):"cash": "现金", "bank": "银行" ,"wx":"微信","alipay":"支付宝","other":"其它"
directionType: "sr",//凭单类型,"sr": "收","zc": "支"
voucherDate: channelOrder.payTime,//凭单时间
recvAmount: channelOrder.totalSum,//收总额
sourceType: "orderinfo",//来源类型 "orderinfo": "订单","expensevoucher": "费用单"
auditStatus: "dsh",//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
};
if(channelOrder.payStatus=='yfk' || channelOrder.payStatus=='bfyfk'){
moneyObj.auditStatus="tg";
}
var moneyJourney = await self.moneyJourneyDao.create(moneyObj,t);
var orderReceiptVoucherObj={
uapp_id:app.uAppId,
sourceOrderNo:order.orderNo, // 来源单号
accountType: "other",
payDate: channelOrder.payTime,//支付时间
totalSum: channelOrder.totalSum,//订单总额
// payOrderNo: DataTypes.STRING, //支付凭证流水单号,如:微信支付凭证单号
// buyerOpenId: DataTypes.STRING,//用户在支付商户appid下的唯一标识或买家在支付宝的用户id
// passTradeNo: DataTypes.STRING,//通道的统一订单号
// buyerAliLogonId: DataTypes.STRING,//买家支付宝账号
// certifyFileUrl: order.orderNo, //支付证明文件Url
wxPayOrderCode: order.orderNo,//业务微信支付订单号
aliPayOrderCode:order.orderNo,//业务支付宝支付订单号
busPayOrderCode: order.orderNo,//业务支付订单号
auditStatus:"dsh"
};
if(channelOrder.payStatus=='yfk' || channelOrder.payStatus=='bfyfk'){
orderReceiptVoucherObj.auditStatus="tg";
}
var orderReceiptVoucher = await self.orderReceiptVoucherDao.create(orderReceiptVoucherObj,t);
}
var requestid=self.getUUID();
if(productItem && productItem.deliveryUrl){
obj["orderNo"]=order.orderNo;
self.pushData(requestid,obj,productItem.deliveryUrl,req);
}
return system.getResultSuccess({
orderNo:order.orderNo,
channelServiceNo:order.channelServiceNo,
channelParams:obj.channelParams,
requestid:requestid
});
});
}
/**
* 数据推送
*/
async pushData(requestid,params,url,req){
var rc = system.getObject("util.execClient");
var obj = params;
var rtn = null;
try {
rtn = await rc.execPushDataPost(obj, url, req.headers["token"], req.headers["request-id"]);
var returnType = "0";
if (rtn.stdout) {
var j = JSON.parse(rtn.stdout);
if (j && j.status == 0) {
returnType = "1";
}
}
this.pushlogSve.createDb({
appid: req.app.id,
requestId: requestid,
op: url,
content: JSON.stringify(obj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
returnType: returnType,
agent: req.uagent,
opTitle: "数据推送-创建订单",
});
} catch (e) {
this.pushlogSve.createDb({
appid: req.app.id,
requestId: requestid,
op: url,
content: JSON.stringify(obj),
resultInfo: JSON.stringify(e.stack),
clientIp: req.clientIp,
returnType: '0',
agent: req.uagent,
opTitle: "数据推送-创建订单",
});
}
}
async findAndCountAll(obj,req) {
var app = req.app;
if(!app || !app.uAppId){
return system.getResult(null, "渠道信息有误");
}
obj["search"]["uapp_id"]=app.uAppId;
const result = await this.dao.findAndCountAll(obj);
return system.getResultSuccess(result);
}
async getOrderDetailByOrderNo(obj,req){
var orderNo = obj.orderNo;
if(!orderNo){
return system.getResult(null, "订单编号不能为空");
}
var app = req.app;
if(!app || !app.uAppId){
return system.getResult(null, "渠道信息有误");
}
var order = await this.dao.model.findOne({
where:{orderNo:orderNo,uapp_id:app.uAppId},
attributes:["orderNo","channelServiceNo","channelOrderNo","channelUserId","ownerUserId","needNo",
"payTime","quantity","serviceQuantity","orderPayStatus","orderPayStatusName","totalSum","payTotalSum",
"refundSum","created_at","opNotes","notes"
],
raw:true
});
if(order && order.orderNo){
var orderproducts = await this.orderProductDao.model.findAll({
where:{sourceOrderNo:order.orderNo},
attributes:["sourceOrderNo","itemCode","itemName","channelItemCode","channelItemName",
"serviceItemCode","picUrl","proPrice","quantity","opPayType","serviceItemSnapshot",
"created_at"
],
raw:true
});
order["orderproducts"]=orderproducts;
var receptvouchers = await this.orderReceiptVoucherDao.model.findAll({
where:{sourceOrderNo:order.orderNo},
attributes:[
"sourceOrderNo","accountType","accountTypeName","payDate","totalSum","payOrderNo","buyerOpenId",
"passTradeNo","buyerAliLogonId","certifyFileUrl","wxPayOrderCode","aliPayOrderCode","busPayOrderCode",
"auditStatusName","auditStatus"
],
raw:true
});
order["receptvouchers"]=receptvouchers;
var refundvouchers = await this.orderRefundVoucherDao.model.findAll({
where:{sourceOrderNo:order.orderNo},
attributes:[
"busPayOrderCode",
"sourceOrderNo","accountType","accountTypeName","payDate","totalSum","payOrderNo","buyerOpenId",
"passTradeNo","certifyFileUrl","auditStatusName","auditStatus"
],
raw:true
});
order["refundvouchers"]=refundvouchers;
}
return system.getResultSuccess(order);
}
}
module.exports = OrderInfoService;
// var task = new OrderInfoService();
// var obj={
// "itemCode": "1406046",
// "channelParams": {},
// "channelUser": {
// "channelUserId": "z120315554031547444",
// "channelUserName": "testUser",
// "channelUserMoblie": "15010929368",
// "nickname": "",
// "orgName": "",
// "orgPath": ""
// },
// "channelOrder": {
// "channelServiceNo": "z1203155540315474427",
// "channelOrderNo": "z12031,z1203d12",
// "needNo": "z1203155540315474427",
// "quantity": 1,
// "totalSum":699,
// "payTotalSum":699,
// "payStatus": "yfk",
// "payTime": "2019-09-11 10:23:21"
// }
// };
// var req={
// app:{ id: 2,uAppId:123},
// user:{ id: 6, app_id: 2, nickname: "测试用户",channelUserId:"testUserId01" }
// };
// task.createOrder(obj,req).then(d=>{
// console.log("d");
// console.log(d);
// })
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderProductService extends ServiceBase {
constructor() {
super("dbcorder", ServiceBase.getDaoName(OrderProductService));
}
}
module.exports = OrderProductService;
const system = require("../../../system");
const Dao = require("../../dao.base");
class ExpenseVoucherService extends ServiceBase {
constructor() {
super("dbcpay", ServiceBase.getDaoName(ExpenseVoucherService));
}
}
module.exports = ExpenseVoucherService;
const system=require("../../../system");
const Dao=require("../../dao.base");
class MoneyJourneyService extends ServiceBase {
constructor() {
super("dbcpay", ServiceBase.getDaoName(MoneyJourneyService));
}
}
module.exports=MoneyJourneyService;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderReceiptVoucherService extends ServiceBase {
constructor() {
super("dbcpay", ServiceBase.getDaoName(OrderReceiptVoucherService));
}
}
module.exports = OrderReceiptVoucherService;
const system = require("../../../system");
const Dao = require("../../dao.base");
class OrderRefundVoucherService extends ServiceBase {
constructor() {
super("dbcpay", ServiceBase.getDaoName(OrderRefundVoucherService));
}
}
module.exports = OrderRefundVoucherService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class NeedInfoService extends ServiceBase {
constructor() {
super("dbneed", ServiceBase.getDaoName(NeedInfoService));
}
async subNeed(obj){
var user = obj.user;
var app = obj.app;
if(!user){
return system.getResultFail(-100, "未知用户");
}
if(!app){
return system.getResultFail(-101, "未知渠道");
}
var needNo=await this.getBusUid("ni");
var needObj={
app_id :app.id,
needNo :needNo,
needDesc :obj.needDesc,
needUserMoblie :obj.needUserMoblie,
notes :obj.notes,
channelUserName :user.channelUserName,
auditStatus :"00",
createuser_id :user.id,
itemCode:obj.itemCode
};
var need = await this.dao.create(needObj);
return system.getResultSuccess(need);
}
}
module.exports=NeedInfoService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class CustomerContactsService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(CustomerContactsService));
this.ordertmproductSve = system.getObject("service.dborder.ordertmproductSve");
this.orderflowDao = system.getObject("db.dborder.orderflowDao");
}
/**
* 修改商标交付单联系人(订单详情页面)
* @param {*} obj
* obj.deliveryOrderNo 交付订单号,
* obj.name 联系人,obj.mobile 联系电话,obj.email 电子邮箱,obj.tel 座机电话
* obj.user 用户数据
*/
async updateContacts(obj){
var user = obj.user;
var app = obj.app;
if(!user || !user.id){
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var deliveryOrderNo = obj.deliveryOrderNo;
if(!deliveryOrderNo){
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where:{deliveryOrderNo:deliveryOrderNo,app_id:app.id},
raw:true
});
if(!ordertmproduct || !ordertmproduct.id){
return system.getResultFail(-102, "商标交付单不存在");
}
// 2.获取交付单状态,判断是否可修改
if(ordertmproduct.deliveryStatus=='ddj' || ordertmproduct.deliveryStatus=='ywc'){
var deliveryStatusName = "待递交";
if(ordertmproduct.deliveryStatus=='ywc'){
deliveryStatusName="已完成";
}
return system.getResultFail(-103, "该商标交付单状态为"+deliveryStatusName+",不能进行修改");
}
var self = this;
return await self.db.transaction(async function (t) {
var contactsObj={deliveryOrderNo:deliveryOrderNo};
if(obj.name){
contactsObj["name"]=obj.name;
}
if(obj.mobile){
contactsObj["mobile"]=obj.mobile;
}
if(obj.email){
contactsObj["email"]=obj.email;
}
if(obj.tel){
contactsObj["tel"]=obj.tel;
}
//修改联系人信息
await self.dao.model.update(contactsObj, { where: { deliveryOrderNo:deliveryOrderNo,app_id: app.id }, transaction: t });
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "修改订单信息", app_id: app.id, isShow: 1 };
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
}
module.exports=CustomerContactsService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class CustomerInfoService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(CustomerInfoService));
this.ordertmproductSve = system.getObject("service.dborder.ordertmproductSve");
this.trademarkDao = system.getObject("db.dbtrademark.trademarkDao");
this.orderflowDao = system.getObject("db.dborder.orderflowDao");
}
/**
* 修改申请人信息(订单详情页面使用)
* @param {*} obj
* obj.deliveryOrderNo 交付订单号,
* obj.customerType 申请人类型,
* obj.name 公司名称或个人名称,
* obj.code 社会统一信用代码,
* obj.applyAddr 公司地址,
* obj.zipCode 邮编
* obj.identityCardPic 身份证图片,
* obj.businessLicensePic 营业执照图片,
* obj.identityCardPdf 身份证pdf,
* obj.businessLicensePdf 营业执照pdf,
* obj.user 用户数据
*/
async updateCustomerInfo(obj){
var user = obj.user;
var app = obj.app;
if(!user || !user.id){
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var deliveryOrderNo = obj.deliveryOrderNo;
if(!deliveryOrderNo){
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where:{deliveryOrderNo:deliveryOrderNo,app_id:app.id},
raw:true
});
if(!ordertmproduct || !ordertmproduct.id){
return system.getResultFail(-102, "商标交付单不存在");
}
// 2.获取交付单状态,判断是否可修改
if(ordertmproduct.deliveryStatus=='ddj' || ordertmproduct.deliveryStatus=='ywc'){
var deliveryStatusName = "待递交";
if(ordertmproduct.deliveryStatus=='ywc'){
deliveryStatusName="已完成";
}
return system.getResultFail(-103, "该商标交付单状态为"+deliveryStatusName+",不能进行修改");
}
var customerinfo = await this.dao.model.findOne({
where:{
deliveryOrderNo:deliveryOrderNo,app_id:app.id
},
raw:true
});
if(!customerinfo || !customerinfo.id){
return system.getResultFail(-104, "未知申请人");
}
var self = this;
return await self.db.transaction(async function (t) {
var ciObj={ id:customerinfo.id,updateuser_id:user.id };
if(obj.customerType){
ciObj["customerType"]=obj.customerType;
}
if(obj.name){
ciObj["name"]=obj.name;
}
if(obj.code){
ciObj["code"]=obj.code;
}
if(obj.identityCardNo){
ciObj["identityCardNo"]=obj.identityCardNo;
}
if(obj.applyAddr){
ciObj["applyAddr"]=obj.applyAddr;
}
if(obj.zipCode){
ciObj["zipCode"]=obj.zipCode;
}
if(obj.businessLicensePic){
ciObj["businessLicensePic"]=obj.businessLicensePic;
}
if(obj.identityCardPic){
ciObj["identityCardPic"]=obj.identityCardPic;
}
if(obj.businessLicensePdf){
ciObj["businessLicensePdf"]=obj.businessLicensePdf;
}
if(obj.identityCardPdf){
ciObj["identityCardPdf"]=obj.identityCardPdf;
}
await self.dao.update(ciObj,t);//修改申请人信息
var customerinfo2 = await self.dao.model.findOne({
where:{
id:customerinfo.id
},
raw:true
});
if(ordertmproduct.gzwtsUrl && customerinfo2.businessLicensePdf && (customerinfo2.customerType=="ent" || customerinfo2.identityCardPdf)){
// otpObj["deliveryStatus"]="dsh";
if(ordertmproduct.deliveryStatus=="dsccl"){
await self.ordertmproductSve.update({id:ordertmproduct.id,deliveryStatus:"dsh"},t);
}
await self.trademarkDao.model.update({officialType:"dsh"},{where:{deliveryOrderNo:deliveryOrderNo,app_id:app.id},transaction:t});
}
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "修改订单信息", app_id: app.id , isShow: 1};
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
/**
* 修改交官文件
* @param {*} obj
* obj.deliveryOrderNo 交付单号,
* obj.gzwtsUrl 盖章委托书,
* obj.smwjUrl 说明文件,
* obj.identityCardPic 身份证图片,
* obj.businessLicensePic 营业执照图片,
* obj.identityCardPdf 身份证pdf,
* obj.businessLicensePdf 营业执照pdf,
* obj.user 用户数据
*/
async updateOfficial(obj){
var user = obj.user;
var app = obj.app;
if(!user || !user.id){
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var deliveryOrderNo = obj.deliveryOrderNo;
if(!deliveryOrderNo){
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where:{deliveryOrderNo:deliveryOrderNo,app_id:app.id},
raw:true
});
if(!ordertmproduct || !ordertmproduct.id){
return system.getResultFail(-102, "商标交付单不存在");
}
// 2.获取交付单状态,判断是否可修改
if(ordertmproduct.deliveryStatus=='ddj' || ordertmproduct.deliveryStatus=='ywc'){
var deliveryStatusName = "待递交";
if(ordertmproduct.deliveryStatus=='ywc'){
deliveryStatusName="已完成";
}
return system.getResultFail(-103, "该商标交付单状态为"+deliveryStatusName+",不能进行修改");
}
var customerinfo = await this.dao.model.findOne({
where:{
deliveryOrderNo:deliveryOrderNo,app_id:app.id
},
raw:true
});
if(!customerinfo || !customerinfo.id){
return system.getResultFail(-104, "未知申请人");
}
var self = this;
return await self.db.transaction(async function (t) {
var ciObj={ id:customerinfo.id,updateuser_id:user.id };
if(obj.businessLicensePic){
ciObj["businessLicensePic"]=obj.businessLicensePic;
}
if(obj.identityCardPic){
ciObj["identityCardPic"]=obj.identityCardPic;
}
if(obj.businessLicensePdf){
ciObj["businessLicensePdf"]=obj.businessLicensePdf;
}
if(obj.identityCardPdf){
ciObj["identityCardPdf"]=obj.identityCardPdf;
}
await self.dao.update(ciObj,t);//申请人信息 修改营业执照、身份证文件
var customerinfo2 = await self.dao.model.findOne({
where:{
id:customerinfo.id
},
raw:true
});
var otpObj={
id:ordertmproduct.id,
updateuser_id:user.id,
updateuser:user.nickname
};
if(obj.gzwtsUrl){
otpObj["gzwtsUrl"]=obj.gzwtsUrl;
}
if(obj.smwjUrl){
otpObj["smwjUrl"]=obj.smwjUrl;
}
if((ordertmproduct.gzwtsUrl || otpObj["gzwtsUrl"]) && customerinfo2.businessLicensePdf && (customerinfo2.customerType=="ent" || customerinfo2.identityCardPdf)){
if(ordertmproduct.deliveryStatus=="dsccl"){
otpObj["deliveryStatus"]="dsh";
}
await self.trademarkDao.model.update({officialType:"dsh"},{where:{deliveryOrderNo:deliveryOrderNo},transaction:t});
}
await self.ordertmproductSve.update(otpObj,t);//商标交付单 修改盖章委托书、说明文件
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "修改订单信息", app_id: app.id, isShow: 1 };
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
}
module.exports=CustomerInfoService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class OrderService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(OrderService));
this.logCtl = system.getObject("web.common.oplogCtl");
this.orderflowDao = system.getObject("db.dborder.orderflowDao");
this.appproductDao = system.getObject("db.dbapp.appproductDao");
this.ordertmproductDao = system.getObject("db.dborder.ordertmproductDao");
this.receiptvoucherDao = system.getObject("db.dborder.receiptvoucherDao");
this.customercontactsDao = system.getObject("db.dborder.customercontactsDao");
this.execClient = system.getObject("util.execClient");
this.fqReqUrl = "https://yunfuapi.gongsibao.com";//线上域名
// this.fqReqUrl = "https://yunfuapi-dev.gongsibao.com";//dev域名
}
async addOrderAndDelivery(action_body, pobj, req) {
if (!action_body.needNo) {
return system.getResult(null, "needNo is empty");
}
if (!action_body.channelItemCode) {
return system.getResult(null, "channelItemCode is empty");
}
var productItem = await this.appproductDao.findOneByChannelItemCode(action_body.channelItemCode, req.app.id);//获取产品
if (!productItem) {
return system.getResult(null, action_body.channelItemCode + " productItem is empty");;
}
var orderCount = await this.dao.findCount({ where: { needNo: action_body.needNo } });
if (orderCount > 0) {
return system.getResultFail(system.existData, "order is exist");
}
var self = this;
return await self.db.transaction(async function (t) {
//创建订单
var ordercode = await self.getBusUid("tm");
var orderParams = {
app_id: req.app.id,//
orderNo: ordercode,// 订单号
payTime: new Date(),//
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
channelItemCode: productItem.channelItemCode,// 渠道产品编码
channelItemName: productItem.channelItemName,// 渠道产品名称
salesNum: 1,//项目订单数量(即服务项目的倍数,默认值为1)
salesDiliverNum: 0,//项目订单交付数量(即与项目订单数量相对应)
minitermNum: 10,//订单小项数量
minitermDiliverNum: 0,//订单小项交付数量
orderType: "dkxd",// 订单类型,zzdd: 自主订单,dkxd: 代客下单
orderPayStatus: "yfk",// 订单付款状态dfk: 待付款, zfpz: 已上传支付凭证, yfk: 已付款, ddqx: 订单取消, tkclz: 退款处理中, bfytk: 部分已退款, ytk: 已退款,zfshbtg:支付审核不通过
totalServiceCharge: productItem.totalServiceCharge || 0,// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense: productItem.totalPublicExpense || 0,// 官费总额(产品配置的官费*订单件数)
totalSum: productItem.proPrice || 0,// 订单总额(产品价格×优惠费率×订单件数)
refundSum: 0,// 退款金额
buyerMoblie: action_body.buyerMoblie || "",
// notes: apply.notes, //备注
appPayType: "00",// 支付类型:00第三方支付,10平台代收款
payAccountType: "other",// 帐户类型( 支付类型):cash: 现金, bank: 银行,wx:微信,alipay:支付,other:其它
createuser_id: req.user.id,
owner_id: req.user.id,//
creator: req.user.nickname || "",
owner: req.user.nickname || "",//
ownerMoblie: req.user.userMoblie || "",//
invoiceApplyStatus: "00",// 发票状态:00: 未申请, 10: 已申请,20:已开票
channelUserId: req.user.channelUserId || "",// 渠道用户id
needNo: action_body.needNo || null,//需求单号
needNoOrderNo: action_body.needNoOrderNo || null,//需求单号
picUrl: productItem.picUrl,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
serviceItemSnapshot: JSON.stringify(productItem),//产品快照
};
var orderItem = await self.dao.create(orderParams, t);//创建订单
var receiptvoucherItem = await self.receiptvoucherDao.addReceiptvoucher(orderParams, req, t);//创建订单支付信息
var pushType = "ic_";
var orderProductObj = {};
if (["fzsbzc", "dbsbzc"].indexOf(productItem.itemCode) >= 0) {
var tmDeliveryOrderNo = await self.getBusUid("jf")
orderProductObj = {
app_id: req.app.id,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
orderServicePayStatus: "yfk",//支付状态:dfk: 待付款, yfk: 已支付
deliveryStatus: "dfwsfw",
deliveryStatusName: "待服务",
appDataOpType: req.app.appDataOpType,// 应用数据操作类型:00独立,10全委托,20部分委托
sourceOrderNo: ordercode,//来源单号
deliveryOrderNo: tmDeliveryOrderNo,
needNo: action_body.needNo || null,//需求单号
needNoOrderNo: action_body.needNoOrderNo || null,//需求单号
sourceType: "00",
channelUserId: req.user.channelUserId || "",// 渠道用户id
createuser_id: req.user.id,//
createuser: req.user.nickname,//
};
var orderTm = await self.ordertmproductDao.create(orderProductObj, t);//创建订单交付流程
pushType = "tm_";
}//创建服务单
//推送商机到峰擎
if (productItem.pushServiceItemCode && orderParams.buyerMoblie) {
self.pushFqBusiness(pushType, orderParams, productItem.pushServiceItemCode, pobj, req);
} else {
self.logCtl.info({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "/igirl-channel/zhichan/igirl-channel/app/base/service/impl/dborder/orderSve/addOrderAndDelivery",
content: "pushServiceItemCode=" + productItem.pushServiceItemCode + ",buyerMoblie=" + action_body.buyerMoblie,
clientIp: pobj.clientIp,
optitle: "未能推送订单商机到FQ信息,pushServiceItemCode 或 buyerMoblie 为空",
});
}
return system.getResultSuccess({
orderNo: ordercode,
deliveryOrderNo: orderProductObj.deliveryOrderNo || ordercode,
needNo: action_body.needNo
});
});
}
//关联订单对应的需求ID和需求订单号--渠道web用
async updateOrderStatus(action_body, pobj, req) {
// var setObj = { channelServiceNo: action_body.channelServiceNo, needNo: action_body.needNo, needNoOrderNo: action_body.needNoOrderNo };
var setObj = { needNo: action_body.needNo, needNoOrderNo: action_body.needNoOrderNo };
var self = this;
return await this.db.transaction(async function (t) {
await self.dao.updateByWhere(setObj, { where: { orderNo: action_body.orderNo } }, t);
await self.ordertmproductDao.updateByWhere(setObj, { where: { sourceOrderNo: action_body.orderNo } }, t);
return system.getResultSuccess();
});
}
//更新付款状态--渠道web用
async updateOrderPayStatus(action_body, pobj, req) {
var payStatus = action_body.payStatus || "dfk";
var self = this;
var result = await self.ordertmproductDao.getItemByNeedNoOrderNo(action_body.needNoOrderNo, req.app.id);
if (!result) {
return system.getResult(null, "data is empty");
}
return await this.db.transaction(async function (t) {
await self.dao.updateByWhere({ orderPayStatus: payStatus, buyerMoblie: action_body.buyerMoblie || "" }, { where: { needNoOrderNo: action_body.needNoOrderNo, app_id: req.app.id } }, t);
await self.ordertmproductDao.updateByWhere({ payStatus: payStatus }, { where: { needNoOrderNo: action_body.needNoOrderNo, app_id: req.app.id } }, t);
var logMsg = { sourceOrderNo: result.deliveryOrderNo, opContent: "订单已成功支付", app_id: req.app.id, isShow: 1 };
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess({ deliveryOrderNo: result.deliveryOrderNo });
});
}
async op1688ChannelPushOrder(action_body, pobj, req) {
try {
//var reqUrl = "https://inte-mcp.chanjet.com/gsb/getOrder?token=" + action_body.token; //测试环境
var reqUrl = "https://mcp.chanjet.com/gsb/getOrder?token=" + action_body.token; //线上环境
var rtn = await this.execClient.execGet("", reqUrl);
var logParam = {
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "/igirl-channel/zhichan/igirl-channel/app/base/service/impl/dborder/orderSve/opChannelCallbackData",
content: "请求地址:" + reqUrl,
clientIp: pobj.clientIp,
optitle: "渠道回调信息返回结果:" + rtn.stdout,
};
this.logCtl.info(logParam);
var result = JSON.parse(rtn.stdout);
// var result = { "returnValue": [{ "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119162048000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938409910_1", "gmtServiceBegin": null, "gmtConfirm": "20191119162051000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119161008000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938409527_1", "gmtServiceBegin": null, "gmtConfirm": "20191119161011000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119130813000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938403044_1", "gmtServiceBegin": null, "gmtConfirm": "20191119130816000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119125011000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938402638_1", "gmtServiceBegin": null, "gmtConfirm": "20191119125017000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119110329000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938399256_1", "gmtServiceBegin": null, "gmtConfirm": "20191119110332000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191119104737000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111938398567_1", "gmtServiceBegin": null, "gmtConfirm": "20191119104740000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }, { "bizStatusExt": "audit_pass", "memberId": "b2b-1624961198", "productName": "【商标注册】自助注册申请", "gmtCreate": "20191118191753000+0800", "gmtServiceEnd": null, "bizStatus": "B", "paymentAmount": 0.0, "executePrice": 0, "orderItemNum": "W19111838384729_1", "gmtServiceBegin": null, "gmtConfirm": "20191118191755000+0800", "settleItemDtos": [], "payCustomerUid": "1875826463", "signCustomerUid": "1875826463" }], "successed": true, "errorMsg": null };
if (result && result.successed && result.successed == true && result.returnValue && result.returnValue.length) {
await this.addOrderNeed(action_body, req, result.returnValue);
}//操作需求
return system.getResultSuccess();
} catch (e) {
console.log(e.stack, "渠道回调信息返回结果:error......1.....");
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "/igirl-channel/zhichan/igirl-channel/app/base/service/impl/dborder/orderSve/opChannelCallbackData",
content: "error:" + e.stack,
clientIp: pobj.clientIp,
optitle: "渠道回调信息返回结果:" + rtn.stdout,
});
}
}
async op1688ChannelPushOrderTest(action_body, pobj, req) {
try {
var returnValue = [
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_01",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_02",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_03",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_04",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_05",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_06",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_07",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_08",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_09",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_10",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_11",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_12",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_13",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_14",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_15",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_16",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_17",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_18",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_19",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
},
{
"bizStatusExt": "service",
"memberId": "b2b-****02",
"productName": "商机**",
"gmtCreate": "20171231200252000+0800",
"gmtServiceEnd": "20190101000000000+0800",
"bizStatus": "S",
"paymentAmount": 420,
"executePrice": 420,
"orderItemNum": "eeeee3120025200_20",
"gmtServiceBegin": "20171231000000000+0800",
"gmtConfirm": "20171231200329000+0800",
"settleItemDtos": [],
"payCustomerUid": "12345678990000",
"signCustomerUid": "12345678990000"
}
];
await this.addOrderNeed(action_body, req, returnValue);
return system.getResultSuccess();
} catch (e) {
console.log(e.stack, "渠道回调信息返回结果:error...........");
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "/igirl-channel/zhichan/igirl-channel/app/base/service/impl/dborder/orderSve/opChannelCallbackData",
content: "请求地址:" + reqUrl + ",error:" + e.stack,
clientIp: pobj.clientIp,
optitle: "渠道回调信息返回结果:" + rtn.stdout,
});
}
}
async addOrderNeed(action_body, req, returnValue) {
var productItem = await this.appproductDao.findOneByChannelItemCode(action_body.channelItemCode, req.app.id);//获取产品
if (!productItem) {
return;
}
var self = this;
//创建订单
var ordercode = await this.getBusUid("ts");
for (let index = 0; index < returnValue.length; index++) {
const element = returnValue[index];
if (element) {
if (element.bizStatusExt == "service" || element.bizStatusExt == "audit_pass") {
var orderCount = await self.findCount({ where: { needNo: element.orderItemNum } });
if (orderCount > 0) {
continue;
}
var payTime = null;
if (element.gmtCreate && element.gmtCreate.length > 14) {
payTime = element.gmtCreate.substr(0, 4) + "-" + element.gmtCreate.substr(4, 2) +
"-" + element.gmtCreate.substr(6, 2) + " " + element.gmtCreate.substr(8, 2) + ":" +
element.gmtCreate.substr(10, 2) + ":" + element.gmtCreate.substr(12, 2);
}
await self.db.transaction(async function (t) {
//创建订单
var ordercode = await self.getBusUid("tm");
var orderParams = {
app_id: req.app.id,//
orderNo: ordercode,// 订单号
channelServiceNo: element.orderItemNum,// 渠道服务单号
payTime: payTime,//
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
channelItemCode: productItem.channelItemCode,// 渠道产品编码
channelItemName: productItem.channelItemName,// 渠道产品名称
salesNum: 1,//项目订单数量(即服务项目的倍数,默认值为1)
salesDiliverNum: 0,//项目订单交付数量(即与项目订单数量相对应)
minitermNum: 10,//订单小项数量
minitermDiliverNum: 0,//订单小项交付数量
orderType: "dkxd",// 订单类型,zzdd: 自主订单,dkxd: 代客下单
orderPayStatus: "yfk",// 订单付款状态dfk: 待付款, zfpz: 已上传支付凭证, yfk: 已付款, ddqx: 订单取消, tkclz: 退款处理中, bfytk: 部分已退款, ytk: 已退款,zfshbtg:支付审核不通过
totalServiceCharge: productItem.totalServiceCharge || 0,// 服务费总额(产品配置的服务费*订单件数)
totalPublicExpense: productItem.totalPublicExpense || 0,// 官费总额(产品配置的官费*订单件数)
totalSum: element.executePrice || 0,// 订单总额(产品价格×优惠费率×订单件数)
refundSum: 0,// 退款金额
// notes: apply.notes, //备注
appPayType: "00",// 支付类型:00第三方支付,10平台代收款
payAccountType: "other",// 帐户类型( 支付类型):cash: 现金, bank: 银行,wx:微信,alipay:支付,other:其它
createuser_id: req.user.id,
owner_id: req.user.id,//
creator: req.user.nickname || "",
owner: req.user.nickname || "",//
ownerMoblie: req.user.userMoblie || "",//
invoiceApplyStatus: "00",// 发票状态:00: 未申请, 10: 已申请,20:已开票
channelUserId: req.user.channelUserId || "",// 渠道用户id
needNo: element.orderItemNum || null,//需求单号
picUrl: productItem.picUrl,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
serviceItemSnapshot: JSON.stringify(productItem),//产品快照
};
var orderItem = await self.dao.create(orderParams, t);//创建订单
var receiptvoucherItem = await self.receiptvoucherDao.addReceiptvoucher(orderParams, req, t);//创建订单支付信息
var orderProductObj = {
app_id: req.app.id,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
payStatus: "yfk",//支付状态:dfk: 待付款, yfk: 已支付
appDataOpType: req.app.appDataOpType,// 应用数据操作类型:00独立,10全委托,20部分委托
sourceOrderNo: ordercode,//来源单号
deliveryOrderNo: await self.getBusUid("jf"),
channelServiceNo: element.orderItemNum || null,// 渠道服务单号
needNo: element.orderItemNum || null,//需求单号
sourceType: "00",
channelUserId: req.user.channelUserId || "",// 渠道用户id
createuser_id: req.user.id,//
createuser: req.user.nickname,//
};
//创建服务单
var orderTm = await self.ordertmproductDao.create(orderProductObj, t);//创建订单交付流程
});
}
}
}
}
async push1688FqBusiness(action_body, pobj, req) {
var item = await this.dao.getItemByChannelServiceNo(action_body.channelServiceNo, req.app.id);
if (!item) {
return system.getResult(null, "没有找到相关订单信息");
}
if (item.itemCode != "fzsbzc") {
return system.getResult(null, "订单类型有误,请推送商标注册-专家辅助申请的订单");
}
if (item.buyerMoblie) {
return system.getResult(null, "订单已经推送过,请勿重覆推送");
}
item.buyerMoblie = action_body.buyerMoblie;
var result = await this.pushFqBusiness("tm_", item, "5dd513db4f3b08000a6fc082", pobj, req);
if (result.status != 0) {
return result;
}
await this.updateByWhere({ buyerMoblie: action_body.buyerMoblie }, { where: { channelServiceNo: action_body.channelServiceNo } });
return result;
}
/**
*
* @param {*} pushType 推送的类型 tm_ ic_ icp_
* @param {*} item 订单信息 包含buyerMoblie
* @param {*} pushServiceItemCode 推送的产品id
* @param {*} pobj
* @param {*} req
*/
async pushFqBusiness(pushType, item, pushServiceItemCode, pobj, req) {//推送商机
var rc = system.getObject("util.aliyunClient");
var rtn = null;
var reqUrl = this.fqReqUrl + "/crm/order/submit";
try {
var body = {
idempotentId: item.needNo,// 是 业务 ID
idempotentSource: req.app.appSourceCode ? pushType + req.app.appSourceCode : "tm_1688",// 是 业务来源(ali、jd)
idempotentSourceName: req.app.name || "1688应用",// 是 阿里,京东
city: "",// 否 所属城市
phone: item.buyerMoblie,// 是 手机号
userId: item.channelUserId,// 否 用户 ID
companyName: "",// 否 公司名称
orderPrice: item.totalSum,// 是 订单金额
productId: pushServiceItemCode,// 是 产品 ID
productQuantity: item.salesNum,// 是 产品数量
};
rtn = await rc.post(reqUrl, body);
this.logCtl.info({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/pushFqBusiness",
content: "请求地址:" + reqUrl + ",参数:" + JSON.stringify(body) + ",返回结果:" + JSON.stringify(rtn),
clientIp: pobj.clientIp,
optitle: "推送订单商机到FQ信息",
});
if (rtn.code != 200 && rtn.success != true) {
return system.getResult(null, "推送失败,失败原因:" + rtn.errorMsg + ",selfrequestId=" + req.requestId + ",requestId=" + rtn.requestId);
}
return system.getResultSuccess(null, "推送成功");
} catch (e) {
//日志记录
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/pushFqBusiness",
content: "error:" + e.stack,
clientIp: pobj.clientIp,
optitle: "推送订单商机到FQ出错",
});
}
}
async againPushFqBusiness(pobj, req) {//再次推送商机
var rc = system.getObject("util.aliyunClient");
var rtn = null;
var reqUrl = this.fqReqUrl + "/crm/order/submit";
var body = pobj.actionBody;
try {
rtn = await rc.post(reqUrl, body);
this.logCtl.info({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/againPushFqBusiness",
content: "请求地址:" + reqUrl + ",参数:" + JSON.stringify(body) + ",返回结果:" + JSON.stringify(rtn),
clientIp: pobj.clientIp,
optitle: "推送订单商机到FQ信息--again",
});
if (rtn.code != 200 && rtn.success != true) {
return system.getResult(null, "推送失败,失败原因:" + rtn.errorMsg + ",selfrequestId=" + req.requestId + ",requestId=" + rtn.requestId);
}
return system.getResultSuccess(null, "推送成功");
} catch (e) {
//日志记录
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/againPushFqBusiness",
content: "error:" + e.stack,
clientIp: pobj.clientIp,
optitle: "推送订单商机到FQ出错--again",
});
}
}
async gsbOrderInfo(pobj, req) {//公司宝官网订单
var rc = system.getObject("util.aliyunClient");
var rtn = null;
var reqUrl = this.fqReqUrl + "/dsc/order/add";
var body = pobj.actionBody.order_param || "";
if (!body) {
return system.getResult(null, "order_param is empty");
}
try {
rtn = await rc.post(reqUrl, body);
this.logCtl.info({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/gsbOrderInfo",
content: "请求地址:" + reqUrl + ",参数:" + JSON.stringify(body) + ",返回结果:" + JSON.stringify(rtn),
clientIp: pobj.clientIp,
optitle: "公司宝官网订单--gsbOrderInfo",
});
if (rtn.code != 200 && rtn.success != true) {
return system.getResult(null, "公司宝官网订单失败,失败原因:" + rtn.errorMsg + ",selfrequestId=" + req.requestId + ",requestId=" + rtn.requestId);
}
return system.getResultSuccess(rtn.data, "订单下单成功");
} catch (e) {
//日志记录
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId || "",
op: "igirl-channel/app/base/service/impl/dborder/orderSve/againPushFqBusiness",
content: "error:" + e.stack,
clientIp: pobj.clientIp,
optitle: "公司宝官网订单出错--gsbOrderInfo",
});
}
}
}
module.exports = OrderService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class OrderFlowService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(OrderFlowService));
}
}
module.exports=OrderFlowService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class OrderTmProductService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(OrderTmProductService));
this.appproductDao = system.getObject("db.dbapp.appproductDao");
this.ordertmproductDao = system.getObject("db.dborder.ordertmproductDao");
this.orderDao = system.getObject("db.dborder.orderDao");
this.customerinfoDao = system.getObject("db.dborder.customerinfoDao");
this.customercontactsDao = system.getObject("db.dborder.customercontactsDao");
this.orderflowDao = system.getObject("db.dborder.orderflowDao");
this.trademarkDao = system.getObject("db.dbtrademark.trademarkDao");
this.receiptvoucherDao = system.getObject("db.dborder.receiptvoucherDao");
this.tmofficialDao = system.getObject("db.dbtrademark.tmofficialDao");
this.userDao = system.getObject("db.dbapp.appuserDao");
this.appDao = system.getObject("db.dbapp.appDao");
}
//------------------------------------------创建订单-------------------开始-------------------------
async addExistTmOrder(params) {//创建商标订单信息
var self = this;
var itemCode = params.itemCode;//产品编码
var tm = params.tm;//增加sourceType || "00";//来源类型:00订单,10需求,20服务商
var apply = params.apply;
var app = params.app;
var user = params.user;
var nclones = params.nclones || null;
var channelUser = params.channelUser || null;
var channelOrder = params.channelOrder || null;
var orderType = params.orderType || "dkxd";//订单类型,zzdd: 自主订单,dkxd: 代客下单
if (!nclones || nclones.length < 1) {
return system.getResult(null, "尼斯大类不能为空");
}
if (nclones.length > 1) {
return system.getResult(null, "尼斯大类不能大于1个大类");
}
//判断尼斯小项的数量
var selectNclThreeCount = 0;
for (let index = 0; index < nclones.length; index++) {
const element = nclones[index];
var nclList = null;
if (typeof (element) == "string") {
nclList = JSON.parse(element);
} else {
nclList = element;
}
selectNclThreeCount = selectNclThreeCount + nclList.nclThree.length;
}
if (selectNclThreeCount > 10) {
return system.getResult(null, "尼斯小项数量不能大于10个小项数量,目前选择的小项数量为" + selectNclThreeCount);
}
if (!itemCode) {
return system.getResult(null, "itemCode参数错误");
}
var productItem = await this.appproductDao.findOneByCode(itemCode, user.app_id);//通过ChannelItemCode获取产品
if (!productItem) {
return system.getResult(null, "未知的产品");
}
if (productItem.status != 1) {
return system.getResult(null, "产品已禁用");
}
var verifyResult = await self.isOrderVerify(user, 1, tm, productItem, nclones, null);
if (verifyResult) {
return verifyResult;
}
// if (productItem && productItem.verifyPrice == 1) {
// var verifyResult = await self.isOrderVerify(user, 1, tm, productItem, nclones, null);
// if (verifyResult) {
// return verifyResult;
// }
// } else {
// tm.nclOneCodes = [];
// tm.nclCount = 0;
// for (var i = 0; i < nclones.length; i++) {
// var tbcode = await self.getBusUid("tb");
// var nclone = nclones[i];
// var nclthreeobj = nclone.nclThree;
// if (nclone) {
// tm.nclOneCodes.push(nclone.code);
// tm.nclCount = tm.nclCount + nclthreeobj.length;
// }
// }
// }
if (tm.tmFormType == "4") {//图形商标
tm["name"] = "图形";
}
return await self.db.transaction(async function (t) {
var orderTm = await self.dao.getItemByChannelServiceNo(channelOrder.channelServiceNo, app.id, t);
if (!orderTm) {
return system.getResult(null, "交付单数据不存在");
}
var orderAmount = tm;
orderAmount.salesNum = tm.nclOneCodes.length;
orderAmount.minitermNum = tm.nclCount;
var orderResult = await self.orderDao.addOrder(orderTm.sourceOrderNo, orderType, user, app, productItem, channelOrder, channelUser, apply, orderAmount, t);
if (orderResult.status != 0) {
return orderResult;
}
var order = orderResult.data;
var orderProductObj = {
tmName: tm.tmName,//商标名称
tmType: "p",//"p": "普通商标", "j": "集体商标", "z": "证明商标", "t": "特殊商标"
tmFormType: tm.tmFormType,//商标类型形式:"1": "立体", "3": "字", "4": "图", "5": "字图", "6": "颜色", "7": "彩色"
nclOneCodes: tm.nclOneCodes ? tm.nclOneCodes.join(",") : null,//尼斯大类列表:格式以,隔开
deliveryStatus: "dsccl",//商标交付状态:dsccl: 待上传材料, dsh: 待审核, ddj: 待递交, ywc: 已完成
picUrl: tm.picUrl || null,//商标图样
colorizedPicUrl: tm.colorizedPicUrl || null,//商标彩色图样
sywjUrl: apply.sywjUrl || null,//声音文件
gzwtsUrl: apply.gzwtsUrl || null,//盖章委托书
smwjUrl: apply.smwjUrl || null,//说明文件
updateuser_id: user.id,//
updateuser: user.nickname,//
notes: tm.notes || "", // 备注信息
nclOneCount: tm.nclOneCodes.length,
nclCount: tm.nclCount,
deliveryOrderNo: orderTm.deliveryOrderNo
};
var flowContent = "";
if (apply.customerType == "person") {
if (!apply.businessLicensePic || !apply.identityCardPic || !apply.gzwtsUrl) {
orderProductObj["deliveryStatus"] = "dsccl";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
} else {
orderProductObj["deliveryStatus"] = "dsh";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待专家服务" : "订单已创建待付款";
}
}
if (apply.customerType == "ent") {
if (!apply.businessLicensePic || !apply.gzwtsUrl) {
orderProductObj["deliveryStatus"] = "dsccl";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
} else {
orderProductObj["deliveryStatus"] = "dsh";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待专家服务" : "订单已创建待付款";
}
}
//订单客户档案添加和修改
await self.opCustomerInfo(user, apply, orderProductObj, t);
//创建服务单
var putWhere = { where: { channelServiceNo: channelOrder.channelServiceNo } };
await self.dao.updateByWhere(orderProductObj, putWhere, t);//创建商标订单--------put
var flowObj = {
app_id: user.app_id,
createuser_id: user.id,
sourceOrderNo: orderTm.sourceOrderNo,
opContent: flowContent
};
if (channelOrder.payStatus == "yfk") {
flowObj.isShow = 1;
}
await self.orderflowDao.create(flowObj, t);//创建订单流程
flowObj.sourceOrderNo = orderProductObj.deliveryOrderNo;
await self.orderflowDao.create(flowObj, t);//创建交付流程
var returnTm = await self.opTmInfo(user, tm, apply, nclones, orderTm, JSON.stringify(productItem), t);
return system.getResultSuccess({
deliveryOrderNo: orderProductObj.deliveryOrderNo,
channelServiceNo: channelOrder.channelServiceNo,
channelItemCode: productItem.serviceItemCode,
channelParams: params.channelParams,
tm: returnTm
});
})
}
async addTmOrder(params, pobj, req) {//创建商标订单信息
var self = this;
var itemCode = params.itemCode;//产品编码
var tm = params.tm;//增加sourceType || "00";//来源类型:00订单,10需求,20服务商
var apply = params.apply;
var app = params.app;
var user = params.user;
var nclones = params.nclones || null;
var channelUser = params.channelUser || null;
var channelOrder = params.channelOrder || {};
var orderType = params.orderType || "dkxd";//订单类型,zzdd: 自主订单,dkxd: 代客下单
if (!nclones || nclones.length < 1) {
return system.getResult(null, "尼斯大类不能为空");
}
if (!itemCode) {
return system.getResult(null, "itemCode参数错误");
}
var productItem = await this.appproductDao.findOneByChannelItemCode(itemCode, user.app_id);//通过ChannelItemCode获取产品//this.appproductDao.findOneByChannelItemCode(itemCode, user.app_id);//通过ChannelItemCode获取产品
if (!productItem) {
return system.getResult(null, "未知的产品");
}
if (productItem.status != 1) {
return system.getResult(null, "产品已禁用");
}
var verifyResult = await self.isOrderVerify(user, 1, tm, productItem, nclones, null);
if (verifyResult) {
return verifyResult;
}
var orderAmount = tm;
orderAmount.salesNum = tm.nclOneCodes ? tm.nclOneCodes.length : 0;
orderAmount.minitermNum = tm.nclCount ? tm.nclCount : 0;
if (pobj.actionProcess == "jd") {
if (orderAmount.salesNum > 1 || orderAmount.minitermNum > 10) {
return system.getResult(null, "选择的尼斯数据有误,目前只支持1大类10小项");
}
}
if (tm.tmFormType == "4") {//图形商标
tm["name"] = "图形";
}
return await self.db.transaction(async function (t) {
//创建订单
var ordercode = await self.getBusUid("tm");
channelOrder.payStatus = "dfk";
var orderResult = await self.orderDao.addOrder(ordercode, orderType, user, app, productItem, channelOrder, channelUser, apply, orderAmount, t);
if (orderResult.status != 0) {
return orderResult;
}
var order = orderResult.data;
if (orderResult.addOrder && orderResult.addOrder == true) {
await self.receiptvoucherDao.addReceiptvoucher(order, null, t);//创建订单支付信息
}
var orderProductObj = {
app_id: user.app_id,//
productType_id: productItem.productType_id,//产品类型Id
productOneType_id: productItem.productOneType_id,//产品大类Id
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
tmName: tm.tmName,//商标名称
tmType: "p",//"p": "普通商标", "j": "集体商标", "z": "证明商标", "t": "特殊商标"
tmFormType: tm.tmFormType,//商标类型形式:"1": "立体", "3": "字", "4": "图", "5": "字图", "6": "颜色", "7": "彩色"
nclOneCodes: tm.nclOneCodes ? tm.nclOneCodes.join(",") : null,//尼斯大类列表:格式以,隔开
orderServicePayStatus: channelOrder.payStatus,//支付状态:dfk: 待付款, yfk: 已支付
deliveryStatus: "dsccl",//商标交付状态:dsccl: 待上传材料, dsh: 待审核, ddj: 待递交, ywc: 已完成
appDataOpType: app.appDataOpType,// 应用数据操作类型:00独立,10全委托,20部分委托
sourceOrderNo: ordercode,//来源单号
deliveryOrderNo: await self.getBusUid("jf"),
channelServiceNo: channelOrder.channelServiceNo || "",// 渠道服务单号
channelOrderNo: channelOrder.channelOrderNo || "",//渠道订单号列表,多个以,隔开
needNo: channelOrder.needNo || null,//需求单号
sourceType: tm.sourceType || "00",
picUrl: tm.picUrl || null,//商标图样
colorizedPicUrl: tm.colorizedPicUrl || null,//商标彩色图样
sywjUrl: tm.sywjUrl || null,//声音文件
gzwtsUrl: tm.gzwtsUrl || null,//盖章委托书
smwjUrl: tm.smwjUrl || null,//说明文件
channelUserId: channelUser.channelUserId,// 渠道用户id
createuser_id: user.id,//
createuser: user.nickname,//
notes: tm.notes || "", // 备注信息
nclOneCount: tm.nclOneCodes.length,
nclCount: tm.nclCount,
};
var flowContent = "";
if (apply.customerType == "person") {
if (!apply.businessLicensePic || !apply.identityCardPic || !tm.gzwtsUrl) {
orderProductObj["deliveryStatus"] = "dsccl";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
} else {
orderProductObj["deliveryStatus"] = "dsh";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款" : "订单已创建待付款";
}
}
if (apply.customerType == "ent") {
if (!apply.businessLicensePic || !tm.gzwtsUrl) {
orderProductObj["deliveryStatus"] = "dsccl";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
} else {
orderProductObj["deliveryStatus"] = "dsh";
flowContent = channelOrder.payStatus == "yfk" ? "订单已付款" : "订单已创建待付款";
}
}
//订单客户档案添加和修改
await self.opCustomerInfo(user, apply, orderProductObj, t);
//创建服务单
var orderTm = await self.dao.create(orderProductObj, t);//创建商标订单
var flowObj = {
app_id: user.app_id,
createuser_id: user.id,
sourceOrderNo: ordercode,
opContent: flowContent
};
await self.orderflowDao.create(flowObj, t);//创建订单流程
flowObj.sourceOrderNo = orderProductObj.deliveryOrderNo;
if (channelOrder.payStatus == "yfk") {
flowObj.isShow = 1;
}
await self.orderflowDao.create(flowObj, t);//创建交付流程
orderTm.needNo = channelOrder.needNo || null;//需求单号
var returnTm = await self.opTmInfo(user, tm, apply, nclones, orderTm, JSON.stringify(productItem), t);
return system.getResultSuccess({
deliveryOrderNo: orderProductObj.deliveryOrderNo,
orderNo: ordercode,
channelParams: params.channelParams,
channelItemCode: productItem.serviceItemCode,
tm: returnTm
});
})
}
async isOrderVerify(user, verifyType, tm, serviceitem, nclones, buyProductCount) { //订单验证
/*
verifyType==1为商标注册验证,2为其他订单验证
*/
var sveItemRateConfig = serviceitem.rateConfig ? Number(serviceitem.rateConfig) : 0;//产品费率
var fwf = serviceitem.serviceCharge ? Number(serviceitem.serviceCharge) : 0;//服务费
var yhfl = serviceitem.discountsRateConfig ? Number(serviceitem.discountsRateConfig) : 0;//最大优惠费率
var gf = serviceitem.publicExpense ? Number(serviceitem.publicExpense) : 0;//产品官费
var nclSmallPrice = gf / 10;//单个小类官费
nclSmallPrice = Number(nclSmallPrice.toFixed(2));
var productCount = 1;//产品数量
var gfze = 0;//官费总额--------------------------------------------------------------------------------------------
if (verifyType == 1) {
tm.nclOneCodes = [];
tm.nclCount = 0;
productCount = nclones.length;
for (var a = 0; a < nclones.length; a++) {
var nclone = nclones[a];
if (nclone.code) {
tm.nclOneCodes.push(nclone.code);
tm.nclCount = tm.nclCount + nclone.nclThree.length;
var nclthreeobj = nclone.nclThree;
gfze = gfze + gf;
if (nclthreeobj.length > 10) {
gfze = gfze + (nclthreeobj.length - 10) * nclSmallPrice;
}
}
}
}
else if (verifyType == 2) {
productCount = buyProductCount;
gfze = gf * Number(productCount);
}
var fwfze = Number(fwf) * Number(productCount);//服务费总额--------------------------------------------------------------------------------------------
var sfze = Number(tm.totalSum) / (sveItemRateConfig + 100) * sveItemRateConfig; //totalTaxes 税费总额
sfze = sfze.toFixed(2);
sfze = Number(sfze);//--------------------------------------------------------------------------------------------
var zdyhe = (gfze + fwfze) * yhfl / 100;//最大优惠额-------------------------------------------------------------------------------------------
zdyhe = zdyhe.toFixed(2);
zdyhe = Number(zdyhe);
//毛利总额=应付总额-官费总额
var mlze = Number(tm.totalSum) - gfze;//totalProfitSum 毛利总额--------------------------------------------------------------------------------------------
mlze = mlze.toFixed(2);
mlze = Number(mlze);
var ddze = Number(fwfze) + Number(gfze);//订单总额---------------------------------------------------
if (parseFloat(tm.totalSum) < Number(ddze)) {
return { code: -201, msg: "订单总额有误" };
}
tm.totalServiceCharge = fwfze;// 服务费总额(产品配置的服务费*订单件数)
tm.totalPublicExpense = gfze;// 官费总额(产品配置的官费*订单件数)
tm.totalDiscounts = zdyhe;// 优惠总额((服务费总额+官费总额)-订单总额(产品价格×优惠费率×订单件数)>0则有优惠额度)
tm.totalTaxes = sfze;// 税费总额(订单总额-(订单总额/(1+产品费率)))
return "";
// //优惠金额=服务费+官费总额-应付总额(服务费、官费之和小于等于应付总额时,优惠金额为零)
// var yhje = fwfze + gfze - Number(tm.totalSum);
// if (yhje < 0) {
// yhje = 0;
// }
// yhje = yhje.toFixed(2);
// yhje = Number(yhje);
// if (fwfze != Number(tm.totalServiceCharge)) {
// return { code: -201, msg: "服务费总额有误" };
// }
// if (gfze != Number(tm.totalPublicExpense)) {
// return { code: -202, msg: "官费总额有误" };
// }
// if (sfze != Number(tm.totalTaxes)) {
// return { code: -203, msg: "税费总额有误" };
// }
// if (mlze != Number(tm.totalProfitSum)) {
// return { code: -204, msg: "毛利总额有误" };
// }
// if (yhje != Number(tm.totalDiscounts) || yhje > zdyhe) {
// return { code: -205, msg: "优惠总额有误" };
// }
// var channelProfitSum = 0;//订单渠道分成毛利润总额
// var pfProfitSum = 0;//订单平台毛利润总额
// var totalProfitSum = Number(tm.totalProfitSum);//订单毛利润总额
// if (totalProfitSum > 0) {
// var tmpChannelProfitRate = Number(serviceitem.channelProfitRate);
// if (tmpChannelProfitRate > 0) {
// var channelProfitRate = tmpChannelProfitRate / 100;
// channelProfitSum = totalProfitSum * channelProfitRate;
// pfProfitSum = totalProfitSum - channelProfitSum;
// channelProfitSum = channelProfitSum.toFixed(2);
// pfProfitSum = pfProfitSum.toFixed(2);
// if (channelProfitSum < 0 || pfProfitSum < 0) {
// return { code: -206, msg: "利润计算有误" };
// }
// tm["channelProfitSum"] = channelProfitSum;
// tm["pfProfitSum"] = pfProfitSum;
// } else if (tmpChannelProfitRate == 0) {
// pfProfitSum = mlze;//毛利总额
// }
// }//渠道利润分成比率(只分订单中毛利润总额的分成)
// return "";
}
async opCustomerInfo(user, apply, orderObj, t) {//订单客户档案添加和修改
var customerInfoObj = {
deliveryOrderNo: orderObj.deliveryOrderNo,//交付订单号
app_id: user.app_id,
code: apply.code,
name: apply.name,
applyAddr: apply.applyAddr,//申请地址
applyArea: apply.applyArea,//申请区域
customerType: apply.customerType,//申请人类型 ent person
businessLicensePic: apply.businessLicensePic || "", //营业执照图片
businessLicensePdf: apply.businessLicensePdf || "", //营业执pdf
identityCardPic: apply.identityCardPic || "", //身份证图片
identityCardPdf: apply.identityCardPdf || "", //身份证pdf
owner_id: user.id,
createuser_id: user.id,
zipCode: apply.zipCode,//邮政编码
};
if (apply.customerType == "person") {
customerInfoObj["identityCardNo"] = apply.identityCardNo;
customerInfoObj["identityCardPic"] = apply.identityCardPic || "";
customerInfoObj["identityCardPdf"] = apply.identityCardPdf || "";
//身份证号、身份证图片
if (!apply.identityCardNo || !apply.identityCardPic) {
orderObj.deliveryStatus = "dsccl";
}
else {
if (!orderObj.deliveryStatus) {
orderObj.deliveryStatus = "dsh";
}
}
}
// var customer = await this.customerinfoDao.findOneByCodeAndUserId(apply.code, user.id);//查询客户档案
var customer = await this.customerinfoDao.model.findOne({
where: { deliveryOrderNo: orderObj.deliveryOrderNo },
raw: true
});
if (customer && customer.id) {//客户已存在 则更新
customerInfoObj["id"] = customer.id;
await this.customerinfoDao.update(customerInfoObj, t);
} else {//客户不存在 则创建
customer = await this.customerinfoDao.create(customerInfoObj, t);
}
var customerContactObj = {
deliveryOrderNo: orderObj.deliveryOrderNo,//交付订单号
app_id: user.app_id,
customerinfo_id: customer.id,
name: apply.contacts,//联系人
mobile: apply.mobile,//手机号
email: apply.email,//邮箱
tel: apply.tel,//座机
fax: apply.fax//传真
};
// var customercontacts = await this.customercontactsDao.findOneByMobile(apply.mobile, customer.id);
var customercontacts = await this.customercontactsDao.model.findOne({
where: { deliveryOrderNo: orderObj.deliveryOrderNo },
raw: true
});
if (!customercontacts) {//客户联系人不存在 则创建
customercontacts = await this.customercontactsDao.create(customerContactObj, t);//创建订单联系人
}
}
async opTmInfo(user, tm, apply, nclones, orderTm, serviceItemSnapshot, t, ) {//商标(商标注册)添加操作
//获取产品快照
var productItem = serviceItemSnapshot;
if (productItem) {
productItem = JSON.parse(productItem);
}
var gf = productItem.publicExpense ? Number(productItem.publicExpense) : 0;//产品官费
var nclSmallPrice = gf / 10;//单个小类官费
nclSmallPrice = Number(nclSmallPrice.toFixed(2));
var self = this;
var returnTm = [];
await this.trademarkDao.bulkDeleteByWhere({ where: { deliveryOrderNo: orderTm.deliveryOrderNo, nclOneCodes: { [self.db.Op.in]: tm.nclOneCodes } } }, t);
for (var i = 0; i < nclones.length; i++) {
var tbcode = await self.getBusUid("tb");
var nclone = nclones[i];
if (nclone.tbCode) {//用于辅助注册推送数据
tbcode = nclone.tbCode;
}
var nclthreeobj = nclone.nclThree;
var nclthreeobjCount = nclone.nclThree.length;
//计算尼斯小类官方总额
var nclgfze = 300;
if (nclthreeobj.length > 10) {
nclgfze = nclgfze + (nclthreeobj.length - 10) * nclSmallPrice;
}
nclthreeobj = JSON.stringify(nclthreeobj);
var trademarkobj = {
tbCode: tbcode,//提报号(自动生成)
deliveryOrderNo: orderTm.deliveryOrderNo,
needNo: orderTm.needNo,//需求单号
officialType: orderTm.deliveryStatus,//"dsccl": "待上传材料", "dsh": "待审核"
app_id: user.app_id,
createuser_id: user.id,
owner_id: user.id,
owner: user.nickname,
ownerMoblie: user.userMoblie,
creator: user.nickname,
nclOneCodes: nclone.code,//尼斯大类
nclSmallCodes: nclthreeobj,//尼斯小类
nclCount: nclthreeobjCount,//尼斯数量
nclPublicExpense: nclgfze,
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
channelUserId: user.channelUserId
};
var trademark = await self.trademarkDao.create(trademarkobj, t);//创建商标
var returnObj = {
nclOne: nclone.code, tbCode: tbcode
};
returnTm.push(returnObj);
}
return returnTm;
}
//------------------------------------------创建订单--------------------结束------------------------
async op1688ChannelPushOrder(action_body) {
return system.getResultSuccess();
}
async get1688ChannelOrder(action_body) {
var orderItem = await this.orderDao.getItemByChannelServiceNo(action_body.channelOrderNo, action_body.app.id);
if (!orderItem) {
return system.getResult(null, "暂无订单信息");
}
var salesDiliverNum = Number(orderItem.salesNum) - Number(orderItem.salesDiliverNum);
if (salesDiliverNum <= 0) {
return system.getResult(null, "服务单交付数量有误,数量为:" + orderItem.salesNum + ",已交付数量为:" + orderItem.salesDiliverNum);
}
var minitermDiliverNum = Number(orderItem.minitermNum) - Number(orderItem.minitermDiliverNum);
if (minitermDiliverNum <= 0) {
return system.getResult(null, "服务单交付小项数量有误,小项数量为:" + orderItem.minitermNum + ",已交付小项数量为:" + orderItem.minitermDiliverNum);
}
var param = {
itemCode: orderItem.itemCode,
channelParams: "",
channelUser: {
channelUserId: orderItem.channelUserId || "",
channelUserName: "",
channelUserMoblie: "",
nickname: "",
orgName: "",
orgPath: "",
},
channelOrder: {
channelServiceNo: orderItem.channelServiceNo || "",
channelOrderNo: orderItem.channelOrderNo || "",
needNo: orderItem.needNo || "",
quantity: salesDiliverNum,
nclCount: minitermDiliverNum,
payStatus: orderItem.orderPayStatus || "",
payTime: orderItem.payTime || "",
}
};
return system.getResultSuccess(param);
}
/**
* 订单详情
* @param {*} params 格式:{channelUserId:XX, needNoOrderNo:XX}
*/
async getOrderDetails(params, pobj, req) {
var item = await this.dao.getItemByNeedNoOrderNo(params.needNoOrderNo, req.app.id);
if (!item) {
return system.getResult(null, "item data is empty");
}
if (item.payStatus == "dfk") {
item.deliveryStatus = item.payStatus;
}
return system.getResultSuccess({ deliveryOrderNo: item.deliveryOrderNo, deliveryStatus: item.deliveryStatus });
}
/**
* 商标交付列表
* @param {*} params 格式:{channelServiceNo:XX, app:{ appId:XX}}
*/
async getTmOrderList(params, pobj, req) {//商标交付列表
var pageSize = Number(params.pageSize || 20);
var pageIndex = Number(params.pageIndex || 1);
var from = pageIndex == 1 ? 0 : Number((pageIndex - 1) * pageSize);
if (pageSize > 50) {
pageSize = 50;
}
var sql = "SELECT tm.`needNo`,tm.`channelServiceNo`,tm.`deliveryOrderNo`,tm.`tmName`,tm.`nclOneCount`,tm.`nclOneCodes`,tm.itemCode,tm.itemName," +
" o.`totalSum`,c.`name`,tm.`deliveryStatus`,tm.`deliveryStatusName`,tm.payStatus,tm.payStatusName,o.payTime AS CreateDate,tm.submitTime," +
" c.`customerType`,c.`businessLicensePic`,c.`identityCardPic`,tm.`gzwtsUrl`,tm.`smwjUrl`" +
" FROM `b_order_tm_product` AS tm LEFT JOIN `b_order` AS o ON tm.`sourceOrderNo`=o.`orderNo` LEFT JOIN" +
" `b_customerinfo` AS c ON tm.`deliveryOrderNo`=c.`deliveryOrderNo` where tm.deleted_at is null ";
var sqlCount = "SELECT count(1) as dataCount FROM `b_order_tm_product` AS tm LEFT JOIN `b_order` AS o ON tm.`sourceOrderNo`=o.`orderNo` LEFT JOIN" +
" `b_customerinfo` AS c ON tm.`deliveryOrderNo`=c.`deliveryOrderNo` where tm.deleted_at is null ";
var paramWhere = {};
if (["1688", "jd", "gsbhome"].indexOf(pobj.actionProcess) >= 0) {
sql += " and o.orderPayStatus=:orderPayStatus";
sqlCount += " and o.orderPayStatus=:orderPayStatus";;
paramWhere.orderPayStatus = "yfk";
}
if (req.user) {
if (params.getListType && params.getListType == "getTmOrderListAdmin") {
if (["syaify", "jd_613f2fd04340f"].indexOf(req.user.channelUserId) < 0) {
sql += " and tm.createuser_id=:createuser_id";
sqlCount += " and tm.createuser_id=:createuser_id";
paramWhere.createuser_id = req.user.id;
}
} else {
sql += " and tm.createuser_id=:createuser_id";
sqlCount += " and tm.createuser_id=:createuser_id";
paramWhere.createuser_id = req.user.id;
}
}
if (params.channelServiceNo) {
sql += " and tm.channelServiceNo like :channelServiceNo";
sqlCount += " and tm.channelServiceNo like :channelServiceNo";
paramWhere.channelServiceNo = "%" + params.channelServiceNo.trim() + "%";
}
if (params.deliveryOrderNo) {
sql += " and tm.deliveryOrderNo like :deliveryOrderNo";
sqlCount += " and tm.deliveryOrderNo like :deliveryOrderNo";
paramWhere.deliveryOrderNo = "%" + params.deliveryOrderNo.trim() + "%";
}
if (params.itemCode) {
sql += " and tm.itemCode=:itemCode";
sqlCount += " and tm.itemCode=:itemCode";
paramWhere.itemCode = params.itemCode;
}
if (params.deliveryStatus) {
sql += " and tm.deliveryStatus=:deliveryStatus";
sqlCount += " and tm.deliveryStatus=:deliveryStatus";
paramWhere.deliveryStatus = params.deliveryStatus;
}
if (params.payStatus) {
sql += " and tm.payStatus=:payStatus";
sqlCount += " and tm.payStatus=:payStatus";
paramWhere.payStatus = params.payStatus;
}
if (params.tmName) {
sql += " and tm.tmName like :tmName";
sqlCount += " and tm.tmName like :tmName";
paramWhere.tmName = +"%" + params.tmName.trim() + "%";
}
if (params.name) {
sql += " and c.name like :name";
sqlCount += " and c.name like :name";
paramWhere.name = "%" + params.name.trim() + "%";
}
if (params.startTime && params.entTime) {
var startTime = params.startTime.trim() + " 00:00:00";
var entTime = params.entTime + " 23:59:59";
sql += " and o.created_at >=:startTime and o.created_at<=:entTime";
sqlCount += " and o.created_at >=:startTime and o.created_at<=:entTime";
paramWhere.startTime = startTime;
paramWhere.entTime = entTime;
}
sql += " order by tm.id desc LIMIT " + pageSize + " OFFSET " + from + "";
var tmpResult = await this.customQuery(sql, paramWhere);
var tmpResultCount = await this.customQuery(sqlCount, paramWhere);
if (!tmpResult || tmpResult.length == 0) {
return system.getResultSuccess(null, "暂无数据");
}
var result = system.getResultSuccess(tmpResult);
result.dataCount = tmpResultCount && tmpResultCount.length > 0 ? tmpResultCount[0].dataCount : 0;
return result;
}
/**
* 商标交付信息
* @param {*} params 格式:{deliveryOrderNo:XX}
*/
async getTmOrder(params) {//商标交付信息
var deliveryOrderNo = params.deliveryOrderNo;
var item = await this.ordertmproductDao.getTmItemByDeliveryOrderNo(deliveryOrderNo);
if (!item) {
return system.getResultSuccess(null, "暂无数据");
}
if (item.payStatus == "dfk") {
item.deliveryStatus = item.payStatus;
}
var resultData = {
tm: {
itemCode: item.itemCode,
itemName: item.itemName,
tmName: item.tmName,
picUrl: item.picUrl,
colorizedPicUrl: item.colorizedPicUrl,
tmType: item.tmType,
tmFormType: item.tmFormType,
nclOneCodes: item.nclOneCodes,
gzwtsUrl: item.gzwtsUrl,
smwjUrl: item.smwjUrl,
deliveryStatus: item.deliveryStatus,
totalSum: item.totalSum,
notes: item.notes
}, orderFlow: [], receiptVoucher: []
};
var flowList = await this.orderflowDao.getListBySourceOrderNo(deliveryOrderNo);
if (flowList && flowList.length > 0) {
for (let index = 0; index < flowList.length; index++) {
const element = flowList[index];
if (element) {
resultData.orderFlow.push({
opContent: element.opContent,
createDate: element.created_at
});
}
}
}
var rItemList = await this.receiptvoucherDao.getItemSourceOrderNo(item.sourceOrderNo);
if (rItemList && rItemList.length > 0) {
for (let j = 0; j < rItemList.length; j++) {
const rItem = rItemList[j];
if (rItem) {
resultData.receiptVoucher.push({
payAccountType: rItem.payAccountType,
payDate: rItem.payDate,
wxPayOrderCode: rItem.wxPayOrderCode,
aliPayOrderCode: rItem.aliPayOrderCode,
busPayOrderCode: rItem.busPayOrderCode,
certifyFileUrl: rItem.certifyFileUrl,
totalSum: rItem.totalSum
});
}
}
}
return system.getResultSuccess(resultData);
}
/**
* 商标订单-申请信息
* @param {*} params 格式:{deliveryOrderNo:XX}
*/
async getTmApply(params) {//商标订单-申请信息
var deliveryOrderNo = params.deliveryOrderNo;
var item = await this.customerinfoDao.findOneByDeliveryOrderNo(deliveryOrderNo);
if (!item) {
return system.getResultSuccess(null, "暂无数据");
}
var resultData = {
applyAddr: item.applyAddr,
applyArea: item.applyArea,
businessLicensePic: item.businessLicensePic,
businessLicensePdf: item.businessLicensePdf,
code: item.code,
customerType: item.customerType,
identityCardNo: item.identityCardNo,
identityCardPic: item.identityCardPic,
identityCardPdf: item.identityCardPdf,
name: item.name,
zipCode: item.zipCode,
notes: item.notes
};
var contactsItem = await this.customercontactsDao.findOneByCustomerinfoId(item.id);
if (contactsItem) {
resultData.contacts = contactsItem.name;
resultData.mobile = contactsItem.mobile;
resultData.email = contactsItem.email;
resultData.fax = contactsItem.fax;
}
return system.getResultSuccess(resultData);
}
/**
* 商标订单-商标尼斯信息
* @param {*} params 格式:{deliveryOrderNo:XX}
*/
async getTmNclList(params) {//商标订单-商标尼斯信息
var deliveryOrderNo = params.deliveryOrderNo;
var self = this;
var tmList = await this.trademarkDao.getListByDeliveryOrderNo(deliveryOrderNo);
if (!tmList || tmList.length == 0) {
return system.getResultSuccess(null, "暂无数据");
}
var resultData = [];
for (let index = 0; index < tmList.length; index++) {
const item = tmList[index];
if (item) {
var tm = {
tbCode: item.tbCode,
nclOneCodes: item.nclOneCodes,
nclOneCodesName: item.nclOneCodesName,
nclSmallCodes: item.nclSmallCodes,
officialType: item.officialType,
officialTypeName: item.officialTypeName,
tmRegistNum: item.tmRegistNum,
submitTime: item.submitTime,
tmOfficials: []
};
if (item.tmRegistNum) {
var tmOfficialsList = await self.tmofficialDao.getListByTmRegistNum(item.tmRegistNum);
if (tmOfficialsList && tmOfficialsList.length > 0) {
for (let i = 0; i < tmOfficialsList.length; i++) {
const element = tmOfficialsList[i];
if (element) {
tm.push({
officialType: element.officialType,
officialTypeName: element.officialTypeName,
officialFileUrl: element.officialFileUrl,
createDate: element.created_at
});
}
}
}
}
resultData.push(tm);
}
}
return system.getResultSuccess(resultData);
}
//-------------------------接收辅助注册商标数据-------start--------------------------------------------------------
/**
* 接收辅助注册商标数据
*/
async addAssistTm(params) {
// return system.getResultSuccess(null, "接口开发中");
var self = this;
var itemCode = params.itemCode;//产品编码
var tm = params.tm;//增加sourceType || "00";//来源类型:00订单,10需求,20服务商
var apply = params.apply;
var nclones = params.nclones || null;
var channelOrder = params.channelOrder || null;
var orderType = params.orderType || "dkxd";//订单类型,zzdd: 自主订单,dkxd: 代客下单
var needNo = channelOrder.needNo;
if (!needNo) {
return system.getResult(null, "需求编号不能为空");
}
var order = await this.orderDao.model.findOne({
where: { needNo: needNo },
raw: true
});
if (!order || !order.id) {
return system.getResult(null, "未知订单");
}
//获取渠道用户数据
var user = await this.userDao.model.findOne({
where: { channelUserId: order.channelUserId, app_id: order.app_id },
raw: true
});
var app = await this.appDao.model.findOne({
where: { id: order.app_id },
raw: true
});
// channelOrder["channelServiceNo"]=order.channelServiceNo;
channelOrder["payTime"] = order.payTime;
if (!nclones || nclones.length < 1) {
return system.getResult(null, "尼斯大类不能为空");
}
if (!itemCode) {
return system.getResult(null, "itemCode参数错误");
}
// itemCode="zzsbzc";//测试
var productItem = await this.appproductDao.findOneByServiceItemCode(itemCode, user.app_id);//获取产品
if (!productItem) {
return system.getResult(null, "未知的产品");
}
if (productItem.status != 1) {
return system.getResult(null, "产品已禁用");
}
if (productItem && productItem.verifyPrice == 1) {
var verifyResult = await self.isOrderVerify(user, 1, tm, productItem, nclones, null);
if (verifyResult) {
return verifyResult;
}
} else {
tm.nclOneCodes = [];
tm.nclCount = 0;
for (var i = 0; i < nclones.length; i++) {
var nclone = nclones[i];
var nclthreeobj = nclone.nclThree;
if (nclone) {
tm.nclOneCodes.push(nclone.code);
tm.nclCount = tm.nclCount + nclthreeobj.length;
}
}
}
if (tm.tmFormType == "4") {//图形商标
tm["name"] = "图形";
}
return await self.db.transaction(async function (t) {
//创建订单
var ordercode = await self.getBusUid("tm");
if (order.orderNo) {
ordercode = order.orderNo;
}
var orderAmount = tm;
orderAmount.salesNum = tm.nclOneCodes.length;
orderAmount.minitermNum = tm.nclCount;
var jfcode = await self.getBusUid("jf");
var orderProductObj = {
app_id: user.app_id,//
productType_id: productItem.picUrl,//产品类型Id
productOneType_id: productItem.picUrl,//产品大类Id
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
tmName: tm.tmName,//商标名称
tmType: "p",//"p": "普通商标", "j": "集体商标", "z": "证明商标", "t": "特殊商标"
tmFormType: tm.tmFormType,//商标类型形式:"1": "立体", "3": "字", "4": "图", "5": "字图", "6": "颜色", "7": "彩色"
nclOneCodes: tm.nclOneCodes ? tm.nclOneCodes.join(",") : null,//尼斯大类列表:格式以,隔开
orderServicePayStatus: channelOrder.payStatus,//支付状态:dfk: 待付款, yfk: 已支付
deliveryStatus: "dqrfa",//商标交付状态:dsccl: 待上传材料, dsh: 待审核, ddj: 待递交, ywc: 已完成
appDataOpType: app.appDataOpType,// 应用数据操作类型:00独立,10全委托,20部分委托
sourceOrderNo: ordercode,//来源单号
deliveryOrderNo: channelOrder.deliveryOrderNo || jfcode,
channelServiceNo: channelOrder.channelServiceNo,// 渠道服务单号
channelOrderNo: channelOrder.channelOrderNo,//渠道订单号列表,多个以,隔开
needNo: channelOrder.needNo || null,//需求单号
sourceType: order.sourceType || "00",
picUrl: tm.picUrl || null,//商标图样
colorizedPicUrl: tm.colorizedPicUrl || null,//商标彩色图样
sywjUrl: tm.sywjUrl || null,//声音文件
gzwtsUrl: tm.gzwtsUrl || null,//盖章委托书
smwjUrl: tm.smwjUrl || null,//说明文件
channelUserId: user.channelUserId,// 渠道用户id
createuser_id: user.id,//
createuser: user.nickname,//
notes: tm.notes || "", // 备注信息
nclOneCount: tm.nclOneCodes.length,
nclCount: tm.nclCount,
};
var flowContent = "";
flowContent = "专家服务已提供服务,方案待确认";
// if (apply.customerType == "person") {
// if (!apply.businessLicensePic || !apply.identityCardPic || !tm.gzwtsUrl) {
// orderProductObj["deliveryStatus"] = "dsccl";
// flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
// } else {
// orderProductObj["deliveryStatus"] = "dsh";
// if (tm.tmStatus && tm.tmStatus == "SUBALITMOK") {
// orderProductObj["deliveryStatus"] = "dqrfa";
// }
// flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待审核" : "订单已创建待付款";
// }
// }
// if (apply.customerType == "ent") {
// if (!apply.businessLicensePic || !tm.gzwtsUrl) {
// orderProductObj["deliveryStatus"] = "dsccl";
// flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待上传材料" : "订单已创建待付款";
// } else {
// orderProductObj["deliveryStatus"] = "dsh";
// if (tm.tmStatus && tm.tmStatus == "SUBALITMOK") {
// orderProductObj["deliveryStatus"] = "dqrfa";
// }
// flowContent = channelOrder.payStatus == "yfk" ? "订单已付款待审核" : "订单已创建待付款";
// }
// }
//订单客户档案添加和修改
await self.opCustomerInfo(user, apply, orderProductObj, t);
//获取历史交付单信息
var beforeOtp = await self.ordertmproductDao.model.findOne({
// where: { deliveryOrderNo: channelOrder.deliveryOrderNo },
where: { [self.db.Op.or]: [{ deliveryOrderNo: channelOrder.deliveryOrderNo }, { sourceOrderNo: order.orderNo }] },
raw: true
});
var orderTm = null;
if (beforeOtp && beforeOtp.id) {//更新交付单
orderProductObj["id"] = beforeOtp.id;
await self.dao.update(orderProductObj, t);
// orderTm = await self.ordertmproductDao.model.findOne({
// where: { id: beforeOtp.id },
// raw: true
// });
orderTm = orderProductObj;
} else {//创建服务单
orderTm = await self.dao.create(orderProductObj, t);//创建商标订单
}
var flowObj = {
app_id: user.app_id,
createuser_id: user.id,
sourceOrderNo: ordercode,
opContent: flowContent,
isShow: 1
};
await self.orderflowDao.create(flowObj, t);//创建订单流程
flowObj.sourceOrderNo = orderProductObj.deliveryOrderNo;
await self.orderflowDao.create(flowObj, t);//创建交付流程
orderTm.needNo = channelOrder.needNo || null;//需求单号
var returnTm = await self.opAssistTmInfo(user, tm, apply, nclones, orderTm, JSON.stringify(productItem), t);
var orderObj = {
id: order.id
};
if (channelOrder.channelServiceNo) {
orderObj["channelServiceNo"] = channelOrder.channelServiceNo;
}
if (channelOrder.channelOrderNo) {
orderObj["channelOrderNo"] = channelOrder.channelOrderNo;
}
await self.orderDao.update(orderObj, t);
return system.getResultSuccess({
deliveryOrderNo: orderProductObj.deliveryOrderNo,
channelServiceNo: channelOrder.channelServiceNo,
channelParams: params.channelParams,
tm: returnTm
});
})
}
async opAssistTmInfo(user, tm, apply, nclones, orderTm, serviceItemSnapshot, t, ) {//商标(商标注册)添加操作
//获取产品快照
var productItem = serviceItemSnapshot;
if (productItem) {
productItem = JSON.parse(productItem);
}
var gf = productItem.publicExpense ? Number(productItem.publicExpense) : 0;//产品官费
var nclSmallPrice = gf / 10;//单个小类官费
nclSmallPrice = Number(nclSmallPrice.toFixed(2));
var self = this;
var returnTm = [];
await this.trademarkDao.bulkDeleteByWhere({ where: { deliveryOrderNo: orderTm.deliveryOrderNo } }, t);
for (var i = 0; i < nclones.length; i++) {
var tbcode = await self.getBusUid("tb");
var nclone = nclones[i];
if (nclone.tbCode) {//用于辅助注册推送数据
tbcode = nclone.tbCode;
}
var nclthreeobj = nclone.nclThree;
var nclthreeobjCount = nclone.nclThree.length;
//计算尼斯小类官方总额
var nclgfze = 300;
if (nclthreeobj.length > 10) {
nclgfze = nclgfze + (nclthreeobj.length - 10) * nclSmallPrice;
}
nclthreeobj = JSON.stringify(nclthreeobj);
var trademarkobj = {
tbCode: tbcode,//提报号(自动生成)
deliveryOrderNo: orderTm.deliveryOrderNo,
needNo: orderTm.needNo,//需求单号
officialType: orderTm.deliveryStatus,//"dsccl": "待上传材料", "dsh": "待审核"
app_id: user.app_id,
createuser_id: user.id,
owner_id: user.id,
owner: user.nickname,
ownerMoblie: user.userMoblie,
creator: user.nickname,
nclOneCodes: nclone.code,//尼斯大类
nclSmallCodes: nclthreeobj,//尼斯小类
nclCount: nclthreeobjCount,//尼斯数量
nclPublicExpense: nclgfze,
itemCode: productItem.itemCode,//
itemName: productItem.itemName,//
channelUserId: user.channelUserId
};
var trademark = await self.trademarkDao.create(trademarkobj, t);//创建商标
var returnObj = {
nclOne: nclone.code, tbCode: tbcode
};
returnTm.push(returnObj);
}
return returnTm;
}
/**
* 接收辅助注册商标修改数据
*/
async editAssistTm(obj) {
// return system.getResultSuccess(null, "接口开发中");
var self = this;
var needNo = obj.needId;
if (!needNo) {
return system.getResultFail(-101, "needNo参数错误");
}
//获取交付单信息
var ordertmproduct = await this.ordertmproductDao.model.findOne({
where: { needNo: needNo },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-102, "商标交付单不存在");
}
var deliveryOrderNo = ordertmproduct.deliveryOrderNo;
//获取交付单状态,判断是否可修改
if (ordertmproduct.deliveryStatus == 'ddj' || ordertmproduct.deliveryStatus == 'ywc') {
var deliveryStatusName = "待递交";
if (ordertmproduct.deliveryStatus == 'ywc') {
deliveryStatusName = "已完成";
}
return system.getResultFail(-103, "该商标交付单状态为" + deliveryStatusName + ",不能进行修改");
}
//获取渠道用户数据
var user = await this.userDao.model.findOne({
where: { id: ordertmproduct.createuser_id },
raw: true
});
if (!user) {
return system.getResultFail(-104, "未知的用户");
}
//获取渠道数据
var app = await this.appDao.model.findOne({
where: { id: ordertmproduct.app_id },
raw: true
});
if (!app) {
return system.getResultFail(-105, "未知的渠道");
}
var itemCode = obj.itemCode;//产品编码
if (!itemCode) {
return system.getResultFail(-106, "产品编码参数错误");
}
var productItem = await this.appproductDao.findOneByServiceItemCode(itemCode, app.id);//获取产品
if (!productItem) {
return system.getResultFail(-107, "未知的产品");
}
return await self.db.transaction(async function (t) {
var whereObj = { where: { deliveryOrderNo: deliveryOrderNo, app_id: app.id }, transaction: t };
//申请人
var applyObj = obj.apply;
applyObj["updated_at"] = new Date();
await self.customerinfoDao.model.update(applyObj, whereObj);
//联系人
var contactObj = obj.contacts;
contactObj["updated_at"] = new Date();
await self.customercontactsDao.model.update(contactObj, whereObj);
//商标信息
var tmsList = obj.tms;
await self.trademarkDao.bulkDeleteByWhere(whereObj, t);
for (var i = 0; i < tmsList.length; i++) {
var tm = tmsList[i];
tm["needNo"] = needNo;
tm["deliveryOrderNo"] = deliveryOrderNo;
tm["app_id"] = app.id;
tm["createuser_id"] = user.id;
tm["owner_id"] = user.id;
tm["owner"] = user.nickname;
tm["ownerMoblie"] = user.ownerMoblie;
tm["creator"] = user.nickname;
tm["itemCode"] = itemCode;
tm["itemName"] = productItem.itemName;
tm["channelUserId"] = user.channelUserId;
tm["updated_at"] = new Date();
tm.officialType = "dsh"
// if (tm.officialType == "WAITARTIFICIALEXAMINE") {
// tm.officialType = "dsh"
// }
// else if (tm.officialType == "FILLEXCEPTION") {
// tm.officialType = "shbtg"
// }
// else if (tm.officialType == "WAITCOMMIT") {
// tm.officialType = "ddj"
// }
// else if (tm.officialType == "ROBOT") {
// tm.officialType = "ydj"
// } else {
// tm.officialType = "dsccl";
// }
await self.trademarkDao.create(tm, t);
}
//交付单
var otp = obj.order;
// if (otp.tmStatus && otp.tmStatus == "SUBALITMOK") {
// otp["deliveryStatus"] = "dqrfa";
// }
otp["deliveryStatus"] = "dqrfa";
otp["updated_at"] = new Date();
await self.dao.model.update(otp, whereObj);
return system.getResultSuccess();
})
}
async tmConfirm(obj) {
var self = this;
var user = obj.user;
var app = obj.app;
if (!user || !user.id) {
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var channelUserId = obj.channelUserId;
var deliveryOrderNo = obj.deliveryOrderNo;
var isConfirm = obj.isConfirm;
if (!channelUserId) {
return system.getResultFail(-101, "渠道用户id不能为空");
}
if (!deliveryOrderNo) {
return system.getResultFail(-102, "交付单号不能为空");
}
if (!isConfirm) {
return system.getResultFail(-103, "确认码不能为空");
}
//获取交付单信息
var ordertmproduct = await this.ordertmproductDao.model.findOne({
where: { deliveryOrderNo: deliveryOrderNo },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-104, "未知支付单");
}
if (ordertmproduct.deliveryStatus != "dqrfa") {
return system.getResultFail(-105, "方案确认失败,该方案交付状态为" + ordertmproduct.deliveryStatusName);
}
// if(ordertmproduct.channelUserId!=channelUserId){
// return system.getResultFail(-105, "方案确认失败,只能确认自己的商标方案");
// }
return await self.db.transaction(async function (t) {
var otpObj = { id: ordertmproduct.id };
var tmObj = { officialType: "dsh" };
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "商标方案确认", app_id: app.id, isShow: 1 };
if (isConfirm == "0") {
if (!obj.notes) {
return system.getResultFail(-106, "方案确认失败,不通过原因不能为空");
}
otpObj["deliveryStatus"] = "fabtg";
otpObj["notes"] = obj.notes;
tmObj.officialType = "fabtg";
logMsg["opContent"] = "商标方案不通过";
}
if (isConfirm == "1") {
otpObj["deliveryStatus"] = "dsh";
otpObj["notes"] = obj.notes || "";
logMsg["opContent"] = "商标方案确认通过";
}
await self.trademarkDao.updateByWhere(tmObj, { where: { deliveryOrderNo: deliveryOrderNo } }, t);
await self.dao.update(otpObj, t);
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
//------------------------接收辅助注册商标数据--------end---------------------------------------------------------
}
module.exports = OrderTmProductService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class ReceiptVoucherService extends ServiceBase {
constructor() {
super("dborder", ServiceBase.getDaoName(ReceiptVoucherService));
}
}
module.exports=ReceiptVoucherService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class TmOfficialService extends ServiceBase {
constructor() {
super("dbtrademark", ServiceBase.getDaoName(TmOfficialService));
}
}
module.exports=TmOfficialService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
class TradeMarkService extends ServiceBase {
constructor() {
super("dbtrademark", ServiceBase.getDaoName(TradeMarkService));
this.ordertmproductSve = system.getObject("service.dborder.ordertmproductSve");
this.tmofficialDao = system.getObject("db.dbtrademark.tmofficialDao");
this.orderflowDao = system.getObject("db.dborder.orderflowDao");
this.statusConvertJSON = {
"WAITARTIFICIALEXAMINE": "dsh",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "10",
"11": "11",
"12": "12",
"13": "13",
"READY": "dsccl",
"DOCFINISH": "dsh",
"AWAITCHECK": "dsh",
"WAITCOMMIT": "ddj",
"COMMITED": "ydj",
"ROBOT": "ydj",
"ROBOTPAY": "ydj",
"RECVCOMMIT": "ydj",
"FILLEXCEPTION": "shbtg",
//1688
"WAITCONFIRM": "dqrfa",
"CONFIRMFAIL": "dqrfa"
}
}
/**
* 修改商标信息 (订单详情页面使用)
* @param {*} obj
* obj.deliveryOrderNo 交付订单号,
* obj.tmName 商标名称,
* obj.tmFormType 商标类型,
* obj.notes 商标说明,
* obj.picUrl 商标图样,
* obj.colorizedPicUrl 商标彩色图样,
* obj.user 用户数据
*/
async updateTmInfo(obj) {
var user = obj.user;
var app = obj.app;
if (!user || !user.id) {
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var deliveryOrderNo = obj.deliveryOrderNo;
if (!deliveryOrderNo) {
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where: { deliveryOrderNo: deliveryOrderNo,app_id:app.id },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-102, "商标交付单不存在");
}
// 2.获取交付单状态,判断是否可修改
if (ordertmproduct.deliveryStatus == 'ddj' || ordertmproduct.deliveryStatus == 'ywc') {
var deliveryStatusName = "待递交";
if (ordertmproduct.deliveryStatus == 'ywc') {
deliveryStatusName = "已完成";
}
return system.getResultFail(-103, "该商标交付单状态为" + deliveryStatusName + ",不能进行修改");
}
var self = this;
return await self.db.transaction(async function (t) {
var otpObj = {
id: ordertmproduct.id,
deliveryOrderNo: deliveryOrderNo,
updateuser_id: user.id,
updateuser: user.nickname
};
if (obj.picUrl) {//商标图样 黑白
otpObj["picUrl"] = obj.picUrl;
}
if (obj.colorizedPicUrl) {//彩色商标图样
otpObj["colorizedPicUrl"] = obj.colorizedPicUrl;
}
if (obj.tmName) {//商标名称
otpObj["tmName"] = obj.tmName;
}
if (obj.tmFormType) {//商标类型
otpObj["tmFormType"] = obj.tmFormType;
}
if (obj.notes) {//商标说明
otpObj["notes"] = obj.notes;
}
await self.ordertmproductSve.dao.update(otpObj, t);//商标交付单 修改商标图样
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "修改订单信息", app_id: app.id, isShow: 1 };
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
/**
* 修改商标尼斯信息 (订单详情页面使用)
* @param {*} obj
* obj.tbCode 商标提报号,
* obj.deliveryOrderNo 交付订单号,
* obj.nclOneCodes 商标尼斯大类,
* obj.nclSmallCodes 商标尼斯小类数组
* obj.user 用户数据
*/
async updateNclInfo(obj) {
var user = obj.user;
var app = obj.app;
var self = this;
if (!user || !user.id) {
return system.getResultFail(-100, "未知用户");
}
if (!app || !app.id) {
return system.getResultFail(-100, "未知渠道");
}
var deliveryOrderNo = obj.deliveryOrderNo;
if (!deliveryOrderNo) {
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where: { deliveryOrderNo: deliveryOrderNo,app_id:app.id },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-102, "商标交付单不存在");
}
// 2.获取交付单状态,判断是否可修改
if (ordertmproduct.deliveryStatus == 'ddj' || ordertmproduct.deliveryStatus == 'ywc') {
var deliveryStatusName = "待递交";
if (ordertmproduct.deliveryStatus == 'ywc') {
deliveryStatusName = "已完成";
}
return system.getResultFail(-103, "该商标交付单状态为" + deliveryStatusName + ",不能进行修改");
}
var tbCode = obj.tbCode;
if (!tbCode) {
return system.getResultFail(-104, "tbCode参数错误");
}
//获取商标尼斯信息
var tm = await this.dao.model.findOne({
where: { tbCode: tbCode },
raw: true
});
if (!tm || !tm.id) {
return system.getResultFail(-105, "尼斯信息不存在");
}
//获取交付单下其它商标尼斯信息
var othertm = await this.dao.model.findAll({
where: {
deliveryOrderNo: deliveryOrderNo,
tbCode: { [self.db.Op.ne]: tbCode }
},
raw: true
});
if (!obj.nclOneCodes) {
return system.getResultFail(-106, "nclOneCodes参数错误");
}
if (!obj.nclSmallCodes || obj.nclSmallCodes.length < 1) {
return system.getResultFail(-107, "nclSmallCodes参数错误");
}
if (obj.nclSmallCodes.length > 10) {
return system.getResultFail(-108, "尼斯小类不能超过10项");
}
var nclOneCodes2 = obj.nclOneCodes;
for (var i = 0; i < othertm.length; i++) {//判断重复大类
var other = othertm[i];
if (other.nclOneCodes == obj.nclOneCodes) {
return system.getResultFail(-109, "该商标存在重复的尼斯大类");
} else {
nclOneCodes2 = nclOneCodes2 + "," + other.nclOneCodes;
}
}
return await self.db.transaction(async function (t) {
var tmObj = {
id: tm.id,
nclOneCodes: obj.nclOneCodes,
nclSmallCodes: JSON.stringify(obj.nclSmallCodes),
updateuser_id: user.id,
updateuser: user.nickname
};
await self.dao.update(tmObj, t);//修改商标尼斯信息
var otpObj = {
id: ordertmproduct.id,
nclOneCodes: nclOneCodes2,
updateuser_id: user.id,
updateuser: user.nickname
};
await self.ordertmproductSve.dao.update(otpObj, t);//商标交付单 修改大类列表
var logMsg = { sourceOrderNo: deliveryOrderNo, opContent: "修改订单信息", app_id: app.id, isShow: 1 };
await self.orderflowDao.create(logMsg, t);
return system.getResultSuccess();
})
}
/**
* 接收商标回执数据
* @param {*} obj
* obj.tbCode 商标提报号,
* obj.deliveryOrderNo 交付订单号,
* obj.officialType 商标状态类型officialType,
* 1: 商标注册申请书, 2: 商标注册申请补正通知书, 3: 商标注册申请受理通知书, 4: 商标注册申请不予受理通知书,
5: 商标注册同日申请补送使用证据通知书,6: 商标注册同日申请协商通知书商标注册同日申请抽签通知书,
7: 商标驳回通知书, 8: 商标部分驳回通知书, 9: 商标注册申请初步审定公告通知书,
10: 商标异议答辩通知书, 11: 异议裁定书, 12: 纸质版商标注册证, 13: 电子版商标注册证
"dsccl": "待上传材料", "dsh": "待审核", "shbtg": "审核不通过", "ddj": "待递交",
"ydj": "已递交", "djyc": "递交异常" ,
* obj.tmRegistNum 商标注册号,
* obj.officialFileName 官文文件名称 ,
* obj.officialFileUrl 官文文件地址 ,
*/
async receiveTmOfficialData(obj) {
// return system.getResultFail(-100, "接口开发中");
// var user = obj.user;
// var app = obj.app;
var self = this;
// if(!user || !user.id){
// return system.getResultFail(-100, "未知用户");
// }
var deliveryOrderNo = obj.deliveryOrderNo;
if (!deliveryOrderNo) {
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where: { deliveryOrderNo: deliveryOrderNo },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-102, "商标交付单不存在");
}
// if(!app){
// return system.getResultFail(-103, "未知应用");
// }
var tbCode = obj.tbCode;
if (!tbCode) {
return system.getResultFail(-104, "tbCode参数错误");
}
//获取商标尼斯信息
var tm = await this.dao.model.findOne({
where: { tbCode: tbCode, deliveryOrderNo: deliveryOrderNo },
raw: true
});
if (!tm || !tm.id) {
return system.getResultFail(-105, "尼斯信息不存在");
}
return await self.db.transaction(async function (t) {
var tmObj = {
id: tm.id
};
var officialObj = {
app_id: ordertmproduct.app_id
};
if (obj.officialType) {
if (self.statusConvertJSON[obj.officialType]) {
tmObj["officialType"] = self.statusConvertJSON[obj.officialType];
officialObj["officialType"] = self.statusConvertJSON[obj.officialType];
}
}
if (obj.tmRegistNum) {
officialObj["tmRegistNum"] = obj.tmRegistNum;
tmObj["tmRegistNum"] = obj.tmRegistNum;
}
await self.dao.update(tmObj, t);//修改商标状态信息
if (officialObj["tmRegistNum"] && officialObj["officialType"]) {
if (obj.officialFileName) {
officialObj["officialFileName"] = obj.officialFileName;
}
if (obj.officialFileUrl) {
officialObj["officialFileUrl"] = obj.officialFileUrl;
}
var code = await self.getBusUid("tmoff");
officialObj["code"] = code;
await self.tmofficialDao.create(officialObj, t);
}
return system.getResultSuccess();
})
}
/**
* 辅助商标状态修改
* @param {*} obj
*/
async updateAssistTmStatus(obj) {
var self = this;
var deliveryOrderNo = obj.channelOrderNum;
if (!deliveryOrderNo) {
return system.getResultFail(-101, "deliveryOrderNo参数错误");
}
// 1.获取交付单信息
var ordertmproduct = await this.ordertmproductSve.dao.model.findOne({
where: { deliveryOrderNo: deliveryOrderNo },
raw: true
});
if (!ordertmproduct || !ordertmproduct.id) {
return system.getResultFail(-102, "商标交付单不存在");
}
var tbCode = obj.proxyCode;
if (!tbCode) {
return system.getResultFail(-104, "tbCode参数错误");
}
//获取商标尼斯信息
var tm = await this.dao.model.findOne({
where: { tbCode: tbCode, deliveryOrderNo: deliveryOrderNo },
raw: true
});
if (!tm || !tm.id) {
return system.getResultFail(-105, "商标信息不存在");
}
return await self.db.transaction(async function (t) {
var tmObj = { id: tm.id };
var otp = { id: ordertmproduct.id };
if (obj.tmStatus) {
if (self.statusConvertJSON[obj.tmStatus]) {
tmObj["officialType"] = self.statusConvertJSON[obj.tmStatus];
}
if (tmObj.officialType && ",dqrfa,dsccl,dsh,ddj,ydj,ywc,".indexOf(tmObj.officialType) >= 0) {
otp["deliveryStatus"] = tmObj.officialType;
await self.ordertmproductSve.update(otp, t);
}
// {"dqrfa":"待确认方案", "dsccl": "待上传材料", "dsh": "待审核", "ddj": "待递交", "ydj": "已递交", "ywc": "已完成" },
}
if (obj.opNotes) {
tmObj["opNotes"] = obj.opNotes;
}
if (obj.submitTime) {
tmObj["submitTime"] = obj.submitTime;
}
if(obj.tmRegistNum){
tmObj["tmRegistNum"]=obj.tmRegistNum;
}
await self.dao.update(tmObj,t);//修改商标状态信息
var deliveryStatusName = uiconfig.config.pdict.official_type[tmObj.officialType];
var flowObj = {
isShow: 1,
app_id: ordertmproduct.app_id,
createuser_id: ordertmproduct.createuser_id,
sourceOrderNo: deliveryOrderNo,
opContent: "第" + tm.nclOneCodes + "类商标状态更新为【" + deliveryStatusName + "】" + obj.opNotes
};
await self.orderflowDao.create(flowObj, t);//创建交付流程
await self.dao.update(tmObj, t);//修改商标状态信息
return system.getResultSuccess();
})
}
}
module.exports = TradeMarkService;
This source diff could not be displayed because it is too large. You can view the blob instead.
const system=require("../../../system");
var settings=require("../../../../config/settings");
class bigtmService {
constructor(){
this.GsbByTmSearchApi=system.getObject("api.tmquery.bytmsearch");
}
}
module.exports=bigtmService;
// var test = new TmqueryService();
// test.bigtmcompanyjuhe({status:3,tmreg_year:2018,seltype:1,apply_addr_province:""}).then(function(d){
// console.log("#################################");
// console.log(d);
// })
const system=require("../../../system");
var settings=require("../../../../config/settings");
class BytmmonitService {
constructor(){
}
}
module.exports=BytmmonitService;
// var test = new TmqueryService();
// test.bigtmcount({tmreg_year:2018,apply_addr_province:""}).then(function(d){
// console.log("#################################");
// console.log(d);
// })
const system = require("../../../system");
var settings = require("../../../../config/settings");
const crypto = require('crypto');
const cryptoJS = require("crypto-js");
var fs = require("fs");
// var AWS = require('aws-sdk');
var ak = "D0784B08541791E175B544D5317281B0";
var sk = "93AB12B3BFADB1356EC078D52B064A33";
var ossurl = "https://hangtang.s3.cn-north-1.jdcloud-oss.com";
class JdossService {
constructor() {
this.execClient = system.getObject("util.execClient");
}
async getJdOssConfig(app, opStr) {
var date = new Date();
var month = date.getMonth()+1;
month=month.toString();
if(month<10){
month="0"+month;
}
var day = date.getDate().toString();
if(day<10){
day="0"+day;
}
var time = date.getFullYear().toString()+month+day;
let timestamp = date.getTime();//当前的时间戳
timestamp = timestamp + 6 * 60 * 60 * 1000;
//格式化时间获取年月日
var dateAfter = new Date(timestamp);
var policyText = {
"expiration": dateAfter,
"conditions": [
{"bucket": "hangtang"},
["starts-with", "$key", "zc"],
{"Content-Type": "image/jpeg"},
{"X-Amz-Credential": ak+"/"+time+"/cn-north-1/s3/aws4_request"},
{"X-Amz-Algorithm": "AWS4-HMAC-SHA256"},
{"X-Amz-Date": date}
]
};
var b = new Buffer(JSON.stringify(policyText));
var policyBase64 = b.toString('base64');
var signature = crypto.createHmac('sha256', sk).update(policyBase64).digest("hex");
var data = {
"OSSAccessKeyId":ak,
"Bucket":"hangtang",
"Signature":signature,
"policy": policyBase64,
"success_action_status": 201,
"x-amz-algorithm":"AWS4-HMAC-SHA256",
"x-amz-credential":ak+"/"+time+"/cn-north-1/s3/aws4_request",
"x-amz-date":date,
"x-amz-signature":signature,
"url": ossurl
};
return system.getResultSuccess(data);
}
}
module.exports = JdossService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
class TmqueryService {
constructor() {
this.zcApiUrl = settings.reqZcApi();
this.execClient = system.getObject("util.execClient");
}
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;
}
}
module.exports = TmqueryService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
const crypto = require('crypto');
const cryptoJS = require("crypto-js");
var fs = require("fs");
var accesskey = 'DHmRtFlw2Zr3KaRwUFeiu7FWATnmla';
var accessKeyId = 'LTAIyAUK8AD04P5S';
var url = "https://gsb-zc.oss-cn-beijing.aliyuncs.com";
class ToolService {
constructor() {
this.zcApiUrl = settings.reqZcApi();
this.execClient = system.getObject("util.execClient");
}
async getCropperPic(obj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getCropperPic";
return await this.opReqResult(url, obj, req);
}
//智能分析 bycquerytm.html
async bycznfx(obj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/bycznfx";
return await this.opReqResult(url, queryobj, req);
}
//根据尼斯编号获取尼斯子类,尼斯树节点点击时触发调用
async getNcl(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getNcl";
return await this.opReqResult(url, queryobj, req);
}
//根据大类、名称查询尼斯信息
async getNclByLikeNameAndNcl(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getNclByLikeNameAndNcl";
return await this.opReqResult(url, queryobj, req);
}
//文字转图片
async word2pic(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/word2pic";
return await this.opReqResult(url, queryobj, req);
}
//商标样式转换 彩色商标图样转黑白,调整图样宽高,生成符合商标局规范的标准商标图样
async uploadStandardTm(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/uploadStandardTm";
return await this.opReqResult(url, queryobj, req);
}
//营业执照(身份证明)图片文件转为符合商标局要求的pdf文件
async pic2pdf(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/pic2pdf";
return await this.opReqResult(url, queryobj, req);
}
//企业近似查询
async getCompanyInfoByLikeName(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getCompanyInfoByLikeName";
return await this.opReqResult(url, queryobj, req);
}
//企业注册信息查询
async getEntregistryByCompanyName(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getEntregistryByCompanyName";
return await this.opReqResult(url, queryobj, req);
}
//调整委托书 调整委托书大小使其符合商标局规范
async adjustWTSSize(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/adjustWTSSize";
return await this.opReqResult(url, queryobj, req);
}
//工商核名
async icheming(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/icheming";
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 getOssConfig(queryobj, req) {
var policyText = {
"expiration": "2119-12-31T16:00:00.000Z",
"conditions": [
["content-length-range", 0, 1048576000],
["starts-with", "$key", "zc"]
]
};
var b = new Buffer(JSON.stringify(policyText));
var policyBase64 = b.toString('base64');
var signature = crypto.createHmac('sha1', accesskey).update(policyBase64).digest().toString('base64'); //base64
var data = {
OSSAccessKeyId: accessKeyId,
policy: policyBase64,
Signature: signature,
Bucket: 'gsb-zc',
success_action_status: 201,
url: url
};
return system.getResultSuccess(data);
};
//加密信息
async encryptStr(app, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(app.uappKey);
let ivHex = cryptoJS.enc.Utf8.parse(app.appSecret.substring(0, 8));
var cipherStr = cryptoJS.TripleDES.encrypt(opStr, keyHex, { iv: ivHex }).toString();
return system.getResultSuccess(cipherStr);
}
//解密信息
async decryptStr(app, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(app.uappKey);
let ivHex = cryptoJS.enc.Utf8.parse(app.appSecret.substring(0, 8));
var bytes = cryptoJS.TripleDES.decrypt(opStr, keyHex, {
iv: ivHex
});
var plaintext = bytes.toString(cryptoJS.enc.Utf8);
return system.getResultSuccess(plaintext);
}
}
module.exports = ToolService;
var System=require("../../../system");
var settings=require("../../../../config/settings");
const logCtl=System.getObject("web.common.oplogCtl");
//内容过滤查询
class UtilsTmService{
constructor(){
this.reqEsAddr=settings.reqEsAddr();
}
async getSynonymsList(obj,opName){
var result={
code: 1,
message: "success",
data: []
};
var name=obj.name==null||obj.name==""||obj.name=="undefined"?"":obj.name;
if(name==""){
result.code=-101;
result.message="name参数有误";
return result;
}
var reqUrl=this.reqEsAddr+"bigdata_synonyms_filter/_search";
var params ={
"query" : {
"term" : { "name" : name }
},
"from": 0,
"size": 200,
"_source": [
"name"
]
};
var tResult=await this.returnResult(params,reqUrl,opName,"getSynonymsList");
if(tResult.status!=0){
result.code=-200;
result.message="查询错误";
return result;
}
var tArry=[name];
if(tResult.data.length>0){
for (var i = 0; i < tResult.data.length; i++) {
var tmp=tResult.data[i];
if(tmp!=null && tmp!="" && tmp.name!=null && tmp.name!=""){
for (var j = 0; j < tmp.name.length; j++) {
var tmpName=tmp.name[j];
var indexLength=tArry.findIndex(v => v ===tmpName);
if(indexLength<0){
tArry.push(tmpName);
}
}
}
}
}
result.data=tArry;
return result;
}
async getSimilarList(obj,opName){
var result={
code: 1,
message: "success",
data: []
};
var name=obj.name==null||obj.name==""||obj.name=="undefined"?"":obj.name;
if(name==""){
result.code=-101;
result.message="name参数有误";
return result;
}
var reqUrl=this.reqEsAddr+"bigdata_similar_filter/_search";
var params ={
"query" : {
"term" : { "name" : name }
},
"from": 0,
"size": 200,
"_source": [
"name"
]
};
var tResult=await this.returnResult(params,reqUrl,opName,"getSimilarList");
if(tResult.status!=0){
result.code=-200;
result.message="查询错误";
return result;
}
var tArry=[name];
if(tResult.data.length>0){
for (var i = 0; i < tResult.data.length; i++) {
var tmp=tResult.data[i];
if(tmp!=null && tmp!="" && tmp.name!=null && tmp.name!=""){
for (var j = 0; j < tmp.name.length; j++) {
var tmpName=tmp.name[j];
var indexLength=tArry.findIndex(v => v ===tmpName);
if(indexLength<0){
tArry.push(tmpName);
}
}
}
}
}
result.data=tArry;
return result;
}
async returnResult(params,reqUrl,opClassName,opMethod){
var rc=System.getObject("util.execClient");
var rtn=null;
try{
rtn=await rc.execPost(params,reqUrl);
var j=JSON.parse(rtn.stdout);
if(j.status!=undefined){
//执行查询有错
//日志记录
logCtl.error({
optitle:"ES内容过滤查询opClassName="+opClassName+",opMethod="+opMethod+"ES执行异常error",
op:"base/service/impl/tmutilsSve.js",
content:rtn.stdout,
clientIp:""
});
return System.getResult2(null,null,null,"查询出错");
}
return System.getResult3(j.hits,null);
}catch(e){
//日志记录
logCtl.error({
optitle:"ES内容过滤查询opClassName="+opClassName+",opMethod="+opMethod+"操作异常异常error",
op:"base/service/impl/tmutilsSve.js",
content:e.stack,
clientIp:""
});
return System.getResult2(null,null,null,"查询异常");
}
}
}
module.exports=UtilsTmService;
var System=require("../../../system");
var settings=require("../../../../config/settings");
const logCtl=System.getObject("web.common.oplogCtl");
//商标查询操作
class UtilsTmService{
constructor(){
this.tmSearchUrl=settings.apiconfig.tmSearchUrl();
this.tmFlowUrl=settings.apiconfig.tmFlowUrl();
this.tmNclUrl=settings.apiconfig.tmNclUrl();
this.nclUrl=settings.apiconfig.nclUrl();
}
/*查询某一个申请人名下有多少条商标(applicant_cn:申请人-精确)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 2,----总条数
"data": [],
"bizmsg": "empty"
}
*/
async tmCountByApplicantCn(obj,opName){
var applicantCn=obj.applicant_cn==null||obj.applicant_cn==""||obj.applicant_cn=="undefined"?"":obj.applicant_cn;
if(applicantCn==""){
return System.getResult2(null,null,null,"申请人信息不能为空");
}
applicantCn=await this.getConvertSemiangleStr(applicantCn);
var reqUrl=this.tmSearchUrl;
var params ={
"size":0,
"query" : {
"term" : { "applicant_cn" :applicantCn }
}
};
return this.returnResult(params,reqUrl,opName,"tmCountByApplicantCn");
}
async tmShortListByRegistNums(obj,opName){
var registNums=obj.registNums==null||obj.registNums==""||obj.registNums=="undefined"?[]:obj.registNums;
var pagesize=obj.page_size==null||obj.page_size==""||obj.page_size=="undefined"?20:obj.page_size;
if(pagesize>100){
pagesize=20;
}
var from=obj.current_page==null||obj.current_page==""||obj.current_page=="undefined"?0:Number((obj.current_page-1)*pagesize);
if(!registNums || registNums.length<1){
return System.getResult2(null,null,null,"注册号不能为空");
}
var shouldList=[];
for(var i=0;i<registNums.length;i++){
if(registNums[i]){
var obj= {"term" : { "tm_regist_num" : registNums[i] }};
shouldList.push(obj);
}
}
// applicantCn=await this.getConvertSemiangleStr(applicantCn);
var reqUrl=this.tmSearchUrl;
var params ={
"query" : {
"bool": {
"should": shouldList
}
},
"from": from,
"size": pagesize,
"_source": [
"ncl_one_codes",
"status",
"tm_type",
"tm_regist_num",
"tm_name",
"apply_day",
"regist_notice_day",
"tm_end_day",
"pic_url",
"applicant_cn"
],
"sort": [
{
"apply_day": "desc"
}
]
};
return this.returnResult(params,reqUrl,opName,"tmShortListByApplicantCn");
}
/*查询某一个申请人名下有商标列表(applicant_cn:申请人-精确、page_size:每页大小、current_page:当前第几页)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 2,
"data": [
{
"tm_end_day": 1740632400,
"tm_name": "图形",
"tm_type": "T",
"apply_day": 1387170000,
"ncl_one_codes": "43",
"regist_notice_day": 1425013200,
"tm_regist_num": "13739653",
"pic_url": "http://43.247.184.94:7170/Img/000/137/396/53A/068d5558-be1d-4f2c-94db-61808c8316ad.jpg",
"status": 3
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"ncl_one_codes" 国际分类
"status" 商标状态 1:有效;2:无效;3:待审;4:不定 5-未知状态
"tm_regist_num" 注册号
"tm_name" 商标中文
"apply_day" 申请日期----格式为return System.getResult2(null,null,null,"openid参数有误");时间戳,转换后的格式为2018-08-21
"pic_url" 商标图样url
“regist_notice_day” 注册公告日期
“tm_type” 商标类别:p普通商标、J集体商标、Z证明商标、T特殊商标
“tm_end_day” 商标截至时间
"total" 总条数
*/
async tmShortListByApplicantCn(obj,opName){
var applicantCn=obj.applicant_cn==null||obj.applicant_cn==""||obj.applicant_cn=="undefined"?"":obj.applicant_cn;
var pagesize=obj.page_size==null||obj.page_size==""||obj.page_size=="undefined"?20:obj.page_size;
if(pagesize>100){
pagesize=20;
}
var from=obj.current_page==null||obj.current_page==""||obj.current_page=="undefined"?0:Number((obj.current_page-1)*pagesize);
if(applicantCn==""){
return System.getResult2(null,null,null,"申请人信息不能为空");
}
applicantCn=await this.getConvertSemiangleStr(applicantCn);
var reqUrl=this.tmSearchUrl;
var params ={
"query" : {
"term" : { "applicant_cn" : applicantCn }
},
"from": from,
"size": pagesize,
"_source": [
"ncl_one_codes",
"status",
"tm_type",
"tm_regist_num",
"tm_name",
"apply_day",
"regist_notice_day",
"tm_end_day",
"pic_url",
"applicant_cn"
],
"sort": [
{
"apply_day": "desc"
}
]
};
return this.returnResult(params,reqUrl,opName,"tmShortListByApplicantCn");
}
/*商标查询参数(tm_name:商标名称-模糊、reg_num:注册号-精确、applier:申请人-精确、page_size:每页大小、current_page:当前第几页,从1开始)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 4835,
"data": [
{
"ncl_one_codes": "40",
"status": 3,
"tm_regist_num": "26316702",
"tm_name": "洋河",
"applicant_en_addr": null,
"applicant_cn": "江苏洋河酒厂股份有限公司",
"applicant_cn_addr": "江苏省宿迁市洋河中大街118号",
"original_applicant_en": null,
"apply_day": 1504843200,
"original_applicant_cn": null,
"applicant_en": null,
"pic_url": "http://43.247.184.94:7170/Img/000/143/154/66A/original.jpg"
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"ncl_one_codes" 国际分类
"status" 商标状态 1:有效;2:无效;3:待审;4:不定 5-未知状态
"tm_regist_num" 注册号
"tm_name" 商标中文
"apply_day" 申请日期----格式为时间戳,转换后的格式为2018-08-21
"applicant_cn" 申请人中文
"applicant_en" 申请人英文
"original_applicant_cn", 原申请人中文
"original_applicant_en", 原申请人英文
"applicant_cn_addr", 申请人中文地址
"applicant_en_addr", 申请人英文地址
"pic_url" 商标图样url
"total" 总条数
*/
async tmSearch(obj,opName){
var tmName=obj.tm_name==null||obj.tm_name==""||obj.tm_name=="undefined"?"":obj.tm_name;
var regNum=obj.reg_num==null||obj.reg_num==""||obj.reg_num=="undefined"?"":obj.reg_num;
var applicantCn=obj.applicant_cn==null||obj.applicant_cn==""||obj.applicant_cn=="undefined"?"":obj.applicant_cn;
var pagesize=obj.page_size==null||obj.page_size==""||obj.page_size=="undefined"?20:obj.page_size;
if(pagesize>100){
pagesize=20;
}
var from=obj.current_page==null||obj.current_page==""||obj.current_page=="undefined"?0:Number((obj.current_page-1)*pagesize);
if(tmName=="" && regNum=="" && applicantCn==""){
return System.getResult2(null,null,null,"查询信息不能空");
}
var reqUrl=this.tmSearchUrl;
var params = {
"query": {
"bool": {
"must": []
}
},
"from": from,
"size": pagesize,
"_source": [
"ncl_one_codes",
"status",
"tm_type",
"tm_regist_num",
"tm_name",
"tm_name_py",
"tm_name_en",
"apply_day",
"first_notice_day",
"original_regist_notice_day",
"first_notice_issue",
"first_notice_page_num",
"regist_notice_issue",
"regist_notice_page_num",
"tm_end_day",
"applicant_cn",
"original_applicant_cn",
"applicant_cn_addr",
"tm_agency",
"pic_url"
],
"sort": [
{
"apply_day": "desc"
}
]
};
if(tmName!=""){
var param= {
"match": {
"tm_name": tmName
}
}
params.query.bool.must.push(param)
}
if(regNum!=""){
var param= {
"term": {
"tm_regist_num": regNum
}
}
params.query.bool.must.push(param)
}
if(applicantCn!=""){
applicantCn=await this.getConvertSemiangleStr(applicantCn);
var param= {
"term": {
"applicant_cn": applicantCn
}
}
params.query.bool.must.push(param)
}
if(tmName=="" && regNum=="" && applicantCn==""){
params.query= { "match_all": {} };
}
return this.returnResult(params,reqUrl,opName,"tmSearch");
}
/*商标流程参数(reg_num:注册号-精确)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 2,
"data": [
{
"notice_type_name": "商标注册公告(一)",
"notice_data": 1211860800,
"link_url": "http://sbggwj.saic.gov.cn:8000/tmann/group1/M00/1B/4B/yBQCH1mEmQWAVEbpAAGe8w8mrJE224.jpg"
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"notice_type_name" 公告类型名称
"notice_data" 日期
"link_url" 文档链接
*/
async getTmFlow(obj,opName){
var regNum=obj.reg_num==null||obj.reg_num==""||obj.reg_num=="undefined"?"":obj.reg_num;
if(regNum==""){
return System.getResult2(null,null,null,"商标注册号不能为空");
}
var reqUrl=this.tmFlowUrl;
var params = {
"query": {
"term": {
"tm_regist_num": regNum
}
},
"from": 0,
"size": 500,
"_source": [
"notice_data",
"notice_type_name",
"link_url"
],
"sort": [
{
"notice_data": "desc"
}
]
};
return this.returnResult(params,reqUrl,opName,"getTmFlow");
}
/*商标小类(reg_num:注册号-精确、nclone_code:大类号-精确)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 10,
"data": [
{
"ncl_one": "2:颜料油漆",
"ncl_last": "020059:颜料"
},
{
"ncl_one": "2:颜料油漆",
"ncl_last": "020008:绘画用铝粉"
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"ncl_one" 国际分类编码及名称
"ncl_last" 小类编码及名称
"total" 总条数
*/
async getTmNclSmallCodes(obj,opName){
var regNum=obj.reg_num==null||obj.reg_num==""||obj.reg_num=="undefined"?"":obj.reg_num;
var nclOneCode=obj.nclone_code==null||obj.nclone_code==""||obj.nclone_code=="undefined"?"":obj.nclone_code;
if(regNum==""){
return System.getResult2(null,null,null,"商标注册号不能为空");
}
if(nclOneCode==""){
return System.getResult2(null,null,null,"商标大类不能为空");
}
var reqUrl=this.tmNclUrl;
var params = {
"query": {
"bool": {
"must": [
{
"term": {
"reg_num": regNum
}
},
{
"wildcard": {
"ncl_one": nclOneCode+":*"
}
}
]
}
},
"from": 0,
"size": 500,
"_source": [
"ncl_one",
"ncl_two",
"ncl_last"
]
};
return this.returnResult(params,reqUrl,opName,"getTmNclSmallCodes");
}
//××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××商标群组信息-开始*********************************
/*商标群组信息(reg_num:注册号-精确、nclone_code:大类号-精确)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 10,
"data": [
{
"ncl_one": "2:颜料油漆",
"ncl_last": "020059:颜料"
},
{
"ncl_one": "2:颜料油漆",
"ncl_last": "020008:绘画用铝粉"
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"ncl_one" 国际分类编码及名称
"ncl_last" 小类编码及名称
"total" 总条数
*/
async getGroupNclNumList(obj,opName){
var regNum=obj.reg_num||"";
var nclOneCode=obj.nclone_code||"";
if(regNum==""){
return System.getResult2(null,null,null,"商标注册号不能为空");
}
if(nclOneCode==""){
return System.getResult2(null,null,null,"商标大类不能为空");
}
var small_list=await this.getTmNclSmallCodes(obj,opName);
if(small_list.status!=0 || small_list.data.length==null || small_list.data.length==0 ){
return System.getResult2(null,null,null,"查询数据为空");
}
var retsultData={
exist:[],
}
var self=this;
for (var i = 0; i < small_list.data.length; i++) {
var item=small_list.data[i];
if(item!=null){
var exist_two_code=item.ncl_two||"";
// var small_code=item.ncl_last||"";
var exist_data={};
if(exist_two_code!=null && exist_two_code!=""){
//处理存在的二级类
var twoList=exist_two_code.split(':');
exist_data.code=twoList.length==2?twoList[0]:exist_two_code;
if(retsultData.exist.findIndex(v => v.code ===exist_data.code)<0){
retsultData.exist.push(exist_data);
}
}
}
}
retsultData.exist.sort(self.keysort('code',false));
return System.getResult2(retsultData,"ok");
}
async getGroupNclInfo(obj,opName){
var regNum=obj.reg_num||"";
var nclOneCode=obj.nclone_code||"";
if(regNum==""){
return System.getResult2(null,null,null,"商标注册号不能为空");
}
if(nclOneCode==""){
return System.getResult2(null,null,null,"商标大类不能为空");
}
var small_list=await this.getTmNclSmallCodes(obj,opName);
if(small_list.status!=0 || small_list.data.length==null || small_list.data.length==0 ){
return System.getResult2(null,null,null,"查询数据为空");
}
//获取大类下的所有二级类
var two_nclList=await this.getNclInfo({nclcode:nclOneCode,level:2},opName);
if(two_nclList.status!=0 || two_nclList.data.length==null || two_nclList.data.length==0 ){
return System.getResult2(null,null,null,"查询二级类数据为空");
}
var tmp_twoNclDataList=two_nclList.data;
var retsultData={
exist:[],
not_exist:[]
}
var self=this;
for (var i = 0; i < small_list.data.length; i++) {
var item=small_list.data[i];
if(item!=null){
var exist_two_code=item.ncl_two||"";
var small_code=item.ncl_last||"";
var exist_data={};
//处理三级类
if(small_code!=null && small_code!=""){
var smallList=small_code.split(':');
exist_data.small_name=smallList.length==2?smallList[1]:small_code;
}
if(exist_two_code!=null && exist_two_code!=""){
//处理存在的二级类
var twoList=exist_two_code.split(':');
exist_data.code=twoList.length==2?twoList[0]:exist_two_code;
retsultData.exist.push(exist_data);
var delIndex=tmp_twoNclDataList.findIndex(v => v.code ===exist_data.code);
if(delIndex>=0){
//移除单个数据
tmp_twoNclDataList.splice(delIndex, 1);
}
}
}
}
retsultData.not_exist=tmp_twoNclDataList;
retsultData.exist.sort(self.keysort('code',false));
retsultData.not_exist.sort(self.keysort('code',false));
return System.getResult2(retsultData,"ok");
}
/**
* 排序有倒序 对数组中的对象,按对象的key进行sortType排序
* @param key 数组中的对象为object,按object中的key进行排序
* @param sortType true为降序;false为升序
*/
keysort(key,sortType) {
return function(a,b){
return sortType ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
}
}
//××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××商标群组信息-结束*********************************
//获取尼斯数据
async getNclInfo(obj,opName){
var nclcode=obj.nclcode==null?"":obj.nclcode;
var level=obj.level==null?"":obj.level;
var reqUrl=this.nclUrl;
var params = {
"query": {
"bool": {
"must": []
}
},
"from": 0,
"size": 2000,
"_source": [
"pid",
"level",
"code",
"name"
],
"sort": [
{
"code": "asc"
}
]
};
if(nclcode!=null && nclcode!=""){
if(nclcode.length==1){
nclcode="0"+nclcode;
}
var param= {
"term": {
"pid": nclcode
}
}
params.query.bool.must.push(param)
}
if(level!=null && level!="" && level!='undefined'){
var param= {
"term": {
"level": level
}
}
params.query.bool.must.push(param)
}
return this.returnResult(params,reqUrl,opName,"getNclInfo");
}
async getConvertSemiangleStr(str){
var result = "";
var len = str.length;
for(var i=0;i<len;i++)
{
var cCode = str.charCodeAt(i);
//全角与半角相差(除空格外):65248(十进制)
cCode = (cCode>=0xFF01 && cCode<=0xFF5E)?(cCode - 65248) : cCode;
//处理空格
cCode = (cCode==0x03000)?0x0020:cCode;
result += String.fromCharCode(cCode);
}
return result;
}
async returnResult(params,reqUrl,opClassName,opMethod){
var rc=System.getObject("util.execClient");
var rtn=null;
try{
rtn=await rc.execPost(params,reqUrl);
var j=JSON.parse(rtn.stdout);
if(j.status!=undefined){
//执行查询有错
//日志记录
logCtl.error({
optitle:"ES查询商标信息opClassName="+opClassName+",opMethod="+opMethod+"ES执行异常error",
op:"base/service/impl/tmutilsSve.js",
content:rtn.stdout,
clientIp:""
});
return System.getResult2(null,null,null,"查询出错");
}
return System.getResult3(j.hits,null);
}catch(e){
//日志记录
logCtl.error({
optitle:"ES查询商标信息opClassName="+opClassName+",opMethod="+opMethod+"操作异常异常error",
op:"base/service/impl/tmutilsSve.js",
content:e.stack,
clientIp:""
});
return System.getResult2(null,null,null,"查询异常");
}
}
}
module.exports=UtilsTmService;
var System = require("../../../system");
var settings = require("../../../../config/settings");
const logCtl = System.getObject("web.common.oplogCtl");
//商标查询操作
class UtilsTmTransactionService {
constructor() {
this.tmSearchUrl = settings.apiconfig.tmSearchUrl();
this.tmFlowUrl = settings.apiconfig.tmFlowUrl();
this.tmNclUrl = settings.apiconfig.tmNclUrl();
this.nclUrl = settings.apiconfig.nclUrl();
this.tmTransactionUrl = settings.apiconfig.tmTransactionUrl();
this.tmTransactionUpdateUrl = settings.apiconfig.tmTransactionUpdateUrl();
}
/*查询某一个申请人名下有商标列表(applicant_cn:申请人-精确、page_size:每页大小、current_page:当前第几页)
auther:sy
返回值:
{
"status": 0,
"msg": "操作成功",
"total": 2,
"data": [
{
"tm_end_day": 1740632400,
"tm_name": "图形",
"tm_type": "T",
"apply_day": 1387170000,
"ncl_one_codes": "43",
"regist_notice_day": 1425013200,
"tm_regist_num": "13739653",
"pic_url": "http://43.247.184.94:7170/Img/000/137/396/53A/068d5558-be1d-4f2c-94db-61808c8316ad.jpg",
"status": 3
}
],
"bizmsg": "empty"
}
返回值说明:status为0则为成功,否则为查询有误
"ncl_one_codes" 国际分类
"status" 商标状态 1:有效;2:无效;3:待审;4:不定 5-未知状态
"tm_regist_num" 注册号
"tm_name" 商标中文
"apply_day" 申请日期----格式为return System.getResult2(null,null,null,"openid参数有误");时间戳,转换后的格式为2018-08-21
"pic_url" 商标图样url
“regist_notice_day” 注册公告日期
“tm_type” 商标类别:p普通商标、J集体商标、Z证明商标、T特殊商标
“tm_end_day” 商标截至时间
"total" 总条数
*/
async tmTransactionSearch(obj) {//商标交易检索接口
console.log("=========================");
console.log(obj);
var keyword = obj.keyword;
var tm_nclcode = obj.tm_nclcode;
var price_min = obj.price_min;
var price_max = obj.price_max;
var tm_structure = obj.tm_structure;
var tm_word = obj.tm_word;
var order_field = obj.order_field;
var sort = obj.sort;
var pagesize = obj.pagesize;
var currentpage = obj.currentpage;
var pagesize = obj.pagesize == null ? 15 : obj.pagesize;
if (obj.currentpage == null) {
var from = 0;
} else {
var from = Number((obj.currentpage - 1) * obj.pagesize);
}
var reqUrl = this.tmTransactionUrl;
var params = {
"query": {
"bool": {
"must": [
{
"range": {
"platform_quoted_price": {
"gte": parseFloat(price_min),
"lte": parseFloat(price_max)
}
}
},
{
"term": {
"is_transaction": 1
}
}
],
"must_not": []
}
},
"from": from,
"size": pagesize,
"_source": [
"tm_name",
"tm_regist_num",
"platform_quoted_price",
"pic_url",
"ncl_one_codes",
"tm_introduction",
"pic_url_user"
]
};
if (keyword != null && keyword != "") {
var param = {
"wildcard": {
"tm_name.raw": "*" + keyword + "*"
}
}
params.query.bool.must.push(param)
}
if (tm_nclcode && tm_nclcode.length > 0) {
for(var i=0;i<tm_nclcode.length;i++){
console.log(tm_nclcode[i]);
var param = {
"term": {
"ncl_one_code_list": tm_nclcode[i]
}
}
params.query.bool.must.push(param)
}
var param = {
"terms": {
"ncl_one_codes": tm_nclcode
}
}
params.query.bool.must.push(param)
if(tm_structure=="纯图形"){
var param = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool.must.push(param)
}else{
var param = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool["must_not"]=param;
}
params["sort"]={
"tm_name.raw":"desc"
}
}
//每次都随机查询数据
if (keyword == "" && !tm_nclcode && tm_nclcode.length == 0 && price_min == "" && price_max == "" && tm_structure == "" && tm_word == "" && order_field == "" && sort == "") {
console.log("================================++++++++++++++++++++++++++");
params.sort = {
"_script": {
"script": "Math.random()",//随机排序
"type": "number",
"order": "asc"
}
}
}
if (order_field != "" && order_field != null) {
if (sort != "" && sort != null) {
if(order_field=="created_at"){
params.sort={
"created_at":sort
}
}
if(order_field=="platform_quoted_price"){
params.sort={
"platform_quoted_price":sort
}
}
}
}
var tiiaojianparams = {
"bool": {
"should": []
}
};
if (tm_structure != "" && tm_structure != null) {
if (tm_structure == "纯中文") {
var param = {
"range": {
"cn_count": {
"gte": 1
}
}
}
var paramen = {
"range": {
"en_name_count": {
"lte": 0
}
}
}
var paramnot = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool.must.push(param)
params.query.bool.must.push(paramen)
params.query.bool.must_not.push(paramnot)
} if (tm_structure == "中文+英文") {
var param = {
"range": {
"cn_count": {
"gte": 1
}
}
}
var paramen = {
"range": {
"en_name_count": {
"gte": 1
}
}
}
var paramnot = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool.must.push(param)
params.query.bool.must.push(paramen)
params.query.bool.must_not.push(paramnot)
} if (tm_structure == "纯英文") {
var param = {
"range": {
"cn_count": {
"lte": 0
}
}
}
var paramen = {
"range": {
"en_name_count": {
"gte": 1
}
}
}
var paramnot = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool.must.push(param)
params.query.bool.must.push(paramen)
params.query.bool.must_not.push(paramnot)
} if (tm_structure == "纯图形") {
var param = {
"term": {
"tm_name.raw": "图形"
}
}
params.query.bool.must.push(param)
} if (tm_structure == "纯数字") {
var param = {
"regexp": {
"tm_name.raw": "[0-9]*"
}
}
params.query.bool.must.push(param)
} if (tm_structure == "中文+图形") {
var param = {
"range": {
"cn_count": {
"gte": 1
}
}
}
var paramen = {
"range": {
"en_name_count": {
"lte": 0
}
}
}
// var paramtu = {
// "term": {
// "tm_name.raw": "图形"
// }
// }
// tiiaojianparams.bool.should.push(paramtu);
params.query.bool.must.push(param);
params.query.bool.must.push(paramen);
// params.query.bool.must.push(tiiaojianparams)
} if (tm_structure == "英文+图形") {
var param = {
"range": {
"cn_count": {
"lte": 0
}
}
}
var paramen = {
"range": {
"en_name_count": {
"gte": 1
}
}
}
// var paramtu = {
// "term": {
// "tm_name.raw": "图形"
// }
// }
// tiiaojianparams.bool.should.push(paramtu);
params.query.bool.must.push(param);
params.query.bool.must.push(paramen);
} if (tm_structure == "中文+英文+图形") {
var param = {
"range": {
"cn_count": {
"gte": 1
}
}
}
var paramen = {
"range": {
"en_name_count": {
"gte": 1
}
}
}
// var paramtu = {
// "term": {
// "tm_name.raw": "图形"
// }
// }
// tiiaojianparams.bool.should.push(paramtu);
params.query.bool.must.push(param);
params.query.bool.must.push(paramen);
}
}
if (tm_word != "" && tm_word != null) {
if (tm_word == "2") {
var param = {
"range": {
"tm_name_count": {
"lte": tm_word
}
}
}
params.query.bool.must.push(param)
}
if (tm_word == "3") {
var param = {
"term": {
"tm_name_count": tm_word
}
}
params.query.bool.must.push(param)
}
if (tm_word == "4") {
var param = {
"term": {
"tm_name_count": tm_word
}
}
params.query.bool.must.push(param)
}
if (tm_word == "5") {
var param = {
"term": {
"tm_name_count": tm_word
}
}
params.query.bool.must.push(param)
}
if (tm_word == "6") {
var param = {
"range": {
"tm_name_count": {
"gte": tm_word
}
}
}
params.query.bool.must.push(param)
}
}
// if(price_min!=""&&price_min!=null){
// if(price_max!=""&&price_max!=null){
// var param= {
// "range": {
// "platform_quoted_price":{
// "gte": price_min,
// "lte":price_max
// }
// }
// }
// params.query.bool.must.push(param)
// }else {
// var param= {
// "range": {
// "platform_quoted_price":{
// "gte": price_min
// }
// }
// }
// params.query.bool.must.push(param)
// }
// }else{
// if(price_max!=""&&price_max!=null){
// var param= {
// "range": {
// "platform_quoted_price":{
// "gte": price_min,
// "lte":price_max
// }
// }
// }
// params.query.bool.must.push(param)
// }
// }
if (tiiaojianparams.bool.should.length > 0) {
params.query.bool.must.push(tiiaojianparams);
}
console.log(params);
var rc = System.getObject("util.execClient");
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
var j = JSON.parse(rtn.stdout);
return System.getResult3(j.hits, null);
} catch (e) {
return rtn = System.getResult2(null, null);
}
};
async tmRegistSearchsve(obj) {//通过商标号查询
var regNum = obj.registNum == null ? "" : obj.registNum;
regNum = regNum.toString();
if (regNum == "") {
return System.getResult2(null, null);
}
var reqUrl = this.tmSearchUrl;
var params = {
"query": {
"bool": {
"must": []
}
},
"size": 45,
"_source": [
"ncl_one_codes",
"status",
"tm_type",
"tm_regist_num",
"tm_name",
"tm_name_py",
"tm_name_en",
"apply_day",
"first_notice_day",
"original_regist_notice_day",
"first_notice_issue",
"first_notice_page_num",
"regist_notice_issue",
"regist_notice_page_num",
"tm_end_day",
"tm_end_day_format",
"regist_notice_day_format",
"applicant_cn",
"original_applicant_cn",
"applicant_cn_addr",
"applicant_en",
"applicant_en_addr",
"tm_agency",
"pic_url",
"ncl_two_codes"
],
};
if (regNum != "" && regNum != null) {
var lastchar = regNum.split("");
var last = lastchar[lastchar.length - 1];
if (last == "A") {
regNum = regNum.substring(0, regNum.length - 1);
}
var param = {
"regexp": {
"tm_regist_num": "[TG]{0,1}" + regNum + "[A]{0,1}"
}
}
params.query.bool.must.push(param)
}
var rc = System.getObject("util.execClient");
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
var j = JSON.parse(rtn.stdout);
return System.getResult3(j.hits, null);
} catch (e) {
return rtn = System.getResult2(null, null);
}
}
async tmTransactionDetailsve(obj) {//商标交易详情接口
console.log("=========================");
console.log(obj);
var sbzch = obj.sbzch;
var gjfl = obj.gjfl;
var reqUrl = this.tmTransactionUrl;
var params = {
"query": {
"bool": {
"must": [
{
"term": {
"is_transaction": 1
}
}
]
}
},
"_source": [
"tm_name",
"tm_regist_num",
"platform_quoted_price",
"pic_url",
"ncl_one_codes",
"tm_introduction",
"pic_url_user"
]
};
if (sbzch != null && sbzch != "") {
var param = {
"term": {
"tm_regist_num": sbzch
}
}
params.query.bool.must.push(param)
}
if (gjfl != null && gjfl != "") {
var param = {
"term": {
"ncl_one_codes": parseInt(gjfl)
}
}
params.query.bool.must.push(param)
}
console.log(params.query.bool.must);
var rc = System.getObject("util.execClient");
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
var j = JSON.parse(rtn.stdout);
return System.getResult3(j.hits, null);
} catch (e) {
return rtn = System.getResult2(null, null);
}
}
async tmTransactionUpdatesve(obj, rc) {//商标交易修改接口
if (!rc) {
rc = System.getObject("util.execClient");
}
var sbzch = obj.sbzch;
var is_transaction = obj.is_transaction;
var platform_quoted_price = obj.platform_quoted_price;
var tm_introduction = obj.tm_introduction;
var pic_url_user = obj.pic_url_user;
var reqUrl = this.tmTransactionUpdateUrl;
var params = {
"query": {
"bool": {
"must": [
{
"term": {
"tm_regist_num": sbzch
}
}]
}
},
"script": {
"inline": "ctx._source.platform_quoted_price = params.platform_quoted_price;ctx._source.tm_introduction = params.tm_introduction;ctx._source.is_transaction = params.is_transaction;ctx._source.pic_url_user = params.pic_url_user",
"params": {
"platform_quoted_price": platform_quoted_price,
"tm_introduction":tm_introduction,
"is_transaction":is_transaction,
"pic_url_user":pic_url_user
},
"lang": "painless"
}
};
// console.log(params.query.bool.must);
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
logCtl.info({
optitle: "商标交易修改接口错误-info",
op: "/base/service/impl/utilstmTransactionSve.js/tmTransactionUpdatesve",
content: rtn.stdout,
clientIp: ""
});
var j = JSON.parse(rtn.stdout);
console.log(j);
var result = {
status: 0,
msg: "修改成功",
total: j.total
};
return result;
} catch (e) {
logCtl.error({
optitle: "商标交易修改接口错误-error",
op: "/base/service/impl/utilstmTransactionSve.js/tmTransactionUpdatesve",
content: e.stack,
clientIp: ""
});
var result = {
status: -1,
msg: "修改失败",
total: 0
};
return result;
}
}
async tmTransactionUpdateHeatsve(obj) {//商标交易修改热度接口
// console.log("=========================");
// console.log(obj);
var sbzch = obj.sbzch;
var gjfl = obj.gjfl;
var heat = obj.heat;
var reqUrl = this.tmTransactionUpdateUrl;
var params = {
"query": {
"bool": {
"must": [
{
"term": {
"tm_regist_num": sbzch
}
}
]
}
},
"script": {
"source": "ctx._source.platform_quoted_price = params.heat",
"params": {
"heat": heat
}
}
};
console.log(params.query.bool.must);
var rc = System.getObject("util.execClient");
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
var j = JSON.parse(rtn.stdout);
console.log(j);
var result = {
status: 0,
msg: "修改成功",
total: j.total
};
return result;
} catch (e) {
var result = {
status: -1,
msg: "修改失败",
total: 0
};
return result;
}
}
}
module.exports = UtilsTmTransactionService;
var System = require("../../../system");
var settings = require("../../../../config/settings");
const logCtl = System.getObject("web.common.oplogCtl");
//商标查询操作
class UtilsTmTaskTradeService {
constructor() {
// this.tmFlowUrl = settings.apiconfig.tmFlowUrl();
// this.tmNclUrl = settings.apiconfig.tmNclUrl();
// this.nclUrl = settings.apiconfig.nclUrl();
this.tmSearchUrl = settings.apiconfig.tmSearchUrl();
this.opTmTransactionUrl = settings.apiconfig.opTmTransactionUrl();
this.tmTransactionUrl = settings.apiconfig.tmTransactionUrl();
this.trademarktransactionDao = System.getObject("db.trademarktransactionDao");
this.orderSve = System.getObject("service.orderSve");
}
async getAuditList(pageIndex, pageSize) {
//publish_status===:tm_transaction_publish_status": { "audit": "审核中", "fail": "审核不通过", "success": "审核通过", "uppershelf": "上架", "lowershelf": "下架" }
var whereObj = { publish_status: "audit" };
return this.trademarktransactionDao.getPageList(pageIndex, pageSize, whereObj, [["created_at", 'desc']], null);
}
buildDate(date) {
var date = new Date(date);
var time = Date.parse(date);
time = time / 1000;
return time;
}
convertDate(time) {//es时间戳转换时间
if (time == null) {
return "";
}
var date = new Date(Number(time * 1000));
var y = 1900 + date.getYear();
var m = "0" + (date.getMonth() + 1);
var d = "0" + date.getDate();
return y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length);
}
async opAuditData() {
var self = this;
var rc = System.getObject("util.execClient");
var list = await self.getAuditList(1, 1000);
if (!list || list.rows.length == 0) {
return "no";
}
var codeList = [];
for (let i = 0; i < list.rows.length; i++) {
const codeItem = list.rows[i];
if (codeItem) {
codeList.push(codeItem.code);
}
if (codeList.length == 200) {
await self.opEsQuery(list.rows, codeList, self, rc);
codeList = [];
}
}
if (codeList.length > 0) {
await self.opEsQuery(list.rows, codeList, self, rc);
}
}
//订单付款提醒任务(针对未付款订单)
async orderPaymentReminder(){
return this.orderSve.orderPaymentReminder();
}
async opEsQuery(auditData, codeList, self, rc) {
var params = {
"query": {
"terms": {
"tm_regist_num": codeList
}
},
"from": 0,
"size": 500,
"_source": [
"pic_url",
"tm_name",
"tm_name_en",
"tm_regist_num",
"ncl_one_codes",
"applicant_cn",
"original_regist_notice_day",
"tm_end_day",
"ncl_two_codes",
"cn_count",
"en_name_count"
]
};
var esData = await self.returnResult(params, this.tmSearchUrl, "UtilsTmTaskTradeService", "opEsQuery");
if (esData.status == 0 && esData.data.length > 0) {
await self.addEsData(auditData, esData.data, self, rc);
}
}
async addEsData(auditData, esTmList, self, rc) {
var addDbList = [];
var rtn = null;
for (let b = 0; b < esTmList.length; b++) {
const esItem = esTmList[b];
var auditList = auditData.filter(a => a.code == esItem.tm_regist_num);
if (!auditList || auditList.length == 0) {
continue;
}
var params = {
created_at: self.buildDate(auditList[0].created_at),
tm_regist_num: esItem.tm_regist_num,
en_name: esItem.tm_name_en,
en_name_count: esItem.en_name_count,
en_name_standard: esItem.tm_name_en,
tm_name: esItem.tm_name,
tm_name_standard: esItem.tm_name,
tm_name_count: Number(esItem.cn_count || "0") + Number(esItem.en_name_count || "0"),
cn_count: esItem.cn_count,
pic_url: esItem.pic_url,
pic_url_user: auditList[0].pic_url || "",
is_transaction: 1,//--------------------db----是否可以交易
ncl_one_codes: esItem.ncl_one_codes,
platform_quoted_price: auditList[0].platform_quoted_price,
tm_heat: 0,
tm_introduction: auditList[0].tm_introduction,
};
try {
await self.putDbData(esItem, auditData, addDbList, self);
var esParams = {
"query": {
"bool": {
"must": [
{
"term": {
"ncl_one_codes": esItem.ncl_one_codes
}
},
{
"term": {
"tm_regist_num": esItem.tm_regist_num
}
}
]
}
},
"from": 0,
"size": 1,
"_source": [
"tm_name"
]
};
var queryEs = await self.returnResult(esParams, this.tmTransactionUrl, "UtilsTmTaskTradeService", "addEsData");
if (queryEs.status == 0 && queryEs.data && queryEs.data.length == 0) {
await rc.execPost(params, self.opTmTransactionUrl);
}
} catch (e) {
logCtl.error({
optitle: "往ES中插入数据或更新商标交易中的商标异常error",
op: "/igirl-web/app/base/service/impl/utilstmtasktradeSve.js/addEsData.js",
content: e.stack,
clientIp: ""
});
}
}
if (addDbList.length > 0) {
await this.trademarktransactionDao.model.bulkCreate(addDbList);
}
}
async putDbData(esItem, auditData, addDbList, self) {//更新数据库
var putIndex = auditData.findIndex(f => f.code === esItem.tm_regist_num);
if (putIndex < 0) {
return;
}
var filterTmList = auditData.filter(f => f.code === esItem.tm_regist_num && f.ncl_one_code === esItem.ncl_one_codes);
if (filterTmList && filterTmList.length > 0) {
var addParams = {
code: esItem.tm_regist_num,
ncl_one_code: esItem.ncl_one_codes,
name: esItem.tm_name,
excelName: esItem.tm_name,
tm_applier: esItem.applicant_cn,
tm_group: JSON.stringify(esItem.ncl_two_codes),
pic_url: auditData[putIndex].pic_url || esItem.pic_url,
business_quoted_price: auditData[putIndex].business_quoted_price,
platform_quoted_price: auditData[putIndex].platform_quoted_price,
tm_structure_name: auditData[putIndex].tm_structure_name,
tm_introduction: auditData[putIndex].tm_introduction,
publish_status: "uppershelf",
createcompany_id: auditList[0].createcompany_id,
createuser_id: auditList[0].createuser_id,
notes: "add_new",
};
if (esItem.original_regist_notice_day && esItem.original_regist_notice_day != null) {
addParams.tm_start_day = self.convertDate(esItem.original_regist_notice_day);
}
if (esItem.tm_end_day && esItem.tm_end_day != null) {
addParams.tm_end_day = self.convertDate(esItem.tm_end_day);
}
addDbList.push(addParams);
return;
}//大类是有值,则新增数据到db
auditData[putIndex].ncl_one_code = esItem.ncl_one_codes;
var setField = {
ncl_one_code: esItem.ncl_one_codes,
name: esItem.tm_name,
tm_applier: esItem.applicant_cn,
tm_group: JSON.stringify(esItem.ncl_two_codes),
pic_url: auditData[putIndex].pic_url || esItem.pic_url,
publish_status: "uppershelf"
};
if (esItem.original_regist_notice_day && esItem.original_regist_notice_day != null) {
setField.tm_start_day = self.convertDate(esItem.original_regist_notice_day);
}
if (esItem.tm_end_day && esItem.tm_end_day != null) {
setField.tm_end_day = self.convertDate(esItem.tm_end_day);
}
var sqlWhere = { where: { id: auditData[putIndex].id } };
var tmpR = await self.trademarktransactionDao.updateByWhere(setField, sqlWhere);
return;
}
async returnResult(params, reqUrl, opClassName, opMethod) {
var rc = System.getObject("util.execClient");
var rtn = null;
try {
rtn = await rc.execPost(params, reqUrl);
var j = JSON.parse(rtn.stdout);
if (j.status != undefined) {
//执行查询有错
//日志记录
logCtl.error({
optitle: "商标交易ES查询商标信息opClassName=" + opClassName + ",opMethod=" + opMethod + "ES执行异常error",
op: "base/service/impl/tmutilsSve.js",
content: rtn.stdout,
clientIp: ""
});
return System.getResult2(null, null, null, "查询出错");
}
return System.getResult3(j.hits, null);
} catch (e) {
//日志记录
logCtl.error({
optitle: "ES查询商标信息opClassName=" + opClassName + ",opMethod=" + opMethod + "操作异常异常error",
op: "base/service/impl/tmutilsSve.js",
content: e.stack,
clientIp: ""
});
return System.getResult2(null, null, null, "查询异常");
}
}
}
module.exports = UtilsTmTaskTradeService;
...@@ -10,7 +10,6 @@ class OpPlatformUtils { ...@@ -10,7 +10,6 @@ class OpPlatformUtils {
this.fetchDefaultVCodeUrl = settings.paasUrl() + "api/auth/accessAuth/fetchDefaultVCode"; this.fetchDefaultVCodeUrl = settings.paasUrl() + "api/auth/accessAuth/fetchDefaultVCode";
this.loginUrl = settings.paasUrl() + "api/auth/accessAuth/loginByMd5Password"; this.loginUrl = settings.paasUrl() + "api/auth/accessAuth/loginByMd5Password";
this.authByCodeUrl = settings.paasUrl() + "api/auth/accessAuth/authByCode"; this.authByCodeUrl = settings.paasUrl() + "api/auth/accessAuth/authByCode";
this.exTime = 2 * 3600;//缓存过期时间,2小时
} }
getUUID() { getUUID() {
var uuid = uuidv4(); var uuid = uuidv4();
...@@ -21,9 +20,9 @@ class OpPlatformUtils { ...@@ -21,9 +20,9 @@ class OpPlatformUtils {
var cacheManager = system.getObject("db.common.cacheManager"); var cacheManager = system.getObject("db.common.cacheManager");
var reqApiAccessKey = null; var reqApiAccessKey = null;
if (appKey && secret) { if (appKey && secret) {
reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(appKey, null, this.exTime, secret); reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(appKey, null, system.exTime, secret);
} else { } else {
reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(settings.appKey, null, this.exTime); reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(settings.appKey, null, system.exTime);
} }
if (!reqApiAccessKey || !reqApiAccessKey.data) { if (!reqApiAccessKey || !reqApiAccessKey.data) {
return system.getResult(null, "获取请求token失败"); return system.getResult(null, "获取请求token失败");
...@@ -151,6 +150,25 @@ class OpPlatformUtils { ...@@ -151,6 +150,25 @@ class OpPlatformUtils {
} }
return system.getResultSuccess(restResult.data); return system.getResultSuccess(restResult.data);
} }
//-----新的方式
async getReqTokenByHosts(app_hosts) {
if (!app_hosts) {
return system.getResult(null, "app_hosts can not be empty");
}
var cacheManager = system.getObject("db.common.cacheManager");
var result = await cacheManager["AppTokenByHostsCache"].cache(app_hosts, null, system.exTime);
return result;
}
async getReqUserPinByChannelUserId(actionBody) {
if (!actionBody.channelUserId) {
return system.getResult(null, "actionBody.channelUserId can not be empty");
}
var inputkey = actionBody.appInfo.uapp_key + "_" + actionBody.channelUserId;
var cacheManager = system.getObject("db.common.cacheManager");
var result = await cacheManager["AppUserPinByChannelUserIdCache"].cache(inputkey, actionBody, system.exTime);
return result;
}
} }
module.exports = OpPlatformUtils; module.exports = OpPlatformUtils;
...@@ -4,7 +4,7 @@ const md5 = require("MD5"); ...@@ -4,7 +4,7 @@ const md5 = require("MD5");
class PushUtils { class PushUtils {
constructor() { constructor() {
this.logCtl = system.getObject("web.common.oplogCtl"); this.logCtl = system.getObject("service.common.oplogSve");
this.merchantpushlogSve = system.getObject("service.merchant.merchantpushlogSve"); this.merchantpushlogSve = system.getObject("service.merchant.merchantpushlogSve");
this.execClient = system.getObject("util.execClient"); this.execClient = system.getObject("util.execClient");
this.merchantpushSve = system.getObject("service.merchant.merchantpushSve"); this.merchantpushSve = system.getObject("service.merchant.merchantpushSve");
......
...@@ -3,7 +3,6 @@ const redis = require("redis"); ...@@ -3,7 +3,6 @@ const redis = require("redis");
const settings = require("../../config/settings"); const settings = require("../../config/settings");
const bluebird = require("bluebird"); const bluebird = require("bluebird");
bluebird.promisifyAll(redis); bluebird.promisifyAll(redis);
// const logCtl=system.getObject("web.oplogCtl");
class RedisClient { class RedisClient {
constructor() { constructor() {
const redisConfig = settings.redis(); const redisConfig = settings.redis();
...@@ -87,49 +86,49 @@ class RedisClient { ...@@ -87,49 +86,49 @@ class RedisClient {
this.subclient.on("message", async function (channel, message) { this.subclient.on("message", async function (channel, message) {
console.log(channel, '------------- redis message ------------------- '); console.log(channel, '------------- redis message ------------------- ');
if (self.taskmanager) { // if (self.taskmanager) {
if (channel == "task") { // if (channel == "task") {
if (message == "newtask") { // if (message == "newtask") {
(async (that) => { // (async (that) => {
var msg2 = await that.rpop("tasklist"); // var msg2 = await that.rpop("tasklist");
if (msg2) { // if (msg2) {
console.log("taskName+++++" + msg2); // console.log("taskName+++++" + msg2);
var msgs2 = msg2.split("_"); // var msgs2 = msg2.split("_");
var action = msgs2[0]; // var action = msgs2[0];
var taskName = msgs2[1]; // var taskName = msgs2[1];
var exp = msgs2[2]; // var exp = msgs2[2];
await that.taskmanager.addTask(taskName, exp); // await that.taskmanager.addTask(taskName, exp);
} // }
})(self) // })(self)
} else { // } else {
(async (msg, that) => { // (async (msg, that) => {
var msgs = msg.split("_"); // var msgs = msg.split("_");
var action = msgs[0]; // var action = msgs[0];
if (action == "delete") { // if (action == "delete") {
var taskName = msgs[1]; // var taskName = msgs[1];
await that.taskmanager.deleteTask(taskName); // await that.taskmanager.deleteTask(taskName);
} // }
})(message, self); // })(message, self);
} // }
} // }
} // }
if (self.chatserver) { // if (self.chatserver) {
if (channel != "task") { // if (channel != "task") {
var message = JSON.parse(message); // var message = JSON.parse(message);
console.log(message, "------------------------------------------ publish message"); // console.log(message, "------------------------------------------ publish message");
if (channel == "brc") {//如果是广播频道,则发送广播到客户端 // if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", message); // self.chatserver.server.emit("brc", message);
} else if (self.chatserver.users[channel]) { // } else if (self.chatserver.users[channel]) {
if (message.type) { // if (message.type) {
self.chatserver.users[channel].client.emit(message.type, message.data); // self.chatserver.users[channel].client.emit(message.type, message.data);
} else { // } else {
//持久化 // //持久化
self.chatserver.users[channel].client.emit("chatmsg", message); // self.chatserver.users[channel].client.emit("chatmsg", message);
} // }
} // }
} // }
} // }
}); });
} }
async subscribe(channel, chatserver) { async subscribe(channel, chatserver) {
...@@ -244,6 +243,11 @@ class RedisClient { ...@@ -244,6 +243,11 @@ class RedisClient {
async incr(key) { async incr(key) {
return this.client.incrAsync(key); return this.client.incrAsync(key);
} }
async producerMessage(channel, consumetarget, val) {
await this.client.rpush(consumetarget, val);
console.log("publish--" + channel + ":" + consumetarget);
return this.client.publishAsync(channel, consumetarget);
}
} }
module.exports = RedisClient; module.exports = RedisClient;
// var client=new RedisClient(); // var client=new RedisClient();
......
...@@ -11,7 +11,7 @@ var errorHandler = require('errorhandler'); ...@@ -11,7 +11,7 @@ var errorHandler = require('errorhandler');
var settings = require('./settings'); var settings = require('./settings');
var system = require('../base/system'); var system = require('../base/system');
var routes = require('./routes'); var routes = require('./routes');
const logCtl = system.getObject("web.common.oplogCtl"); const logCtl = system.getObject("service.common.oplogSve");
const clientRedis = system.getObject("util.redisClient").client; const clientRedis = system.getObject("util.redisClient").client;
//const tm=system.getObject("db.taskManager"); //const tm=system.getObject("db.taskManager");
module.exports = function (app) { module.exports = function (app) {
......
...@@ -3,7 +3,7 @@ var settings={ ...@@ -3,7 +3,7 @@ var settings={
host: "43.247.184.32", host: "43.247.184.32",
port: 8967, port: 8967,
password: "Gongsibao2018", password: "Gongsibao2018",
db:8, db:7,
}, },
database:{ database:{
dbname : "center_app", dbname : "center_app",
......
var path= require('path'); var path= require('path');
var basepath=path.normalize(path.join(__dirname, '../..')); var basepath=path.normalize(path.join(__dirname, '../..'));
var settings = { var settings = {
web:path.join(basepath,"app/base/controller/impl"),
api:path.join(basepath,"app/base/api/impl"), api:path.join(basepath,"app/base/api/impl"),
util:path.join(basepath,"app/base/utils"), util:path.join(basepath,"app/base/utils"),
service:path.join(basepath,"app/base/service/impl"), service:path.join(basepath,"app/base/service/impl"),
db:path.join(basepath,"app/base/db/impl"), db:path.join(basepath,"app/base/db/impl"),
tool:path.join(basepath,"app/base/tool"), tool:path.join(basepath,"app/base/tool"),
service2:path.join(basepath,"app/base/service"), service2:path.join(basepath,"app/base/service"),
applet:path.join(basepath,"app/base/wxapplet/impl"),
}; };
module.exports = settings; module.exports = settings;
...@@ -2,17 +2,10 @@ ...@@ -2,17 +2,10 @@
var system = require("../../base/system"); var system = require("../../base/system");
// var userSve = system.getObject("service.auth.userSve"); // var userSve = system.getObject("service.auth.userSve");
module.exports = function (app) { module.exports = function (app) {
// app.get("/auth", async function (req, res) {
// if (!req.query.opencode) {
// return system.getResult(null, "opencode参数不能为空");
// }
// return await userSve.authByCode(opencode);
// });
app.get('/:gname/:qname/:method', function (req, res) { app.get('/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"]; var classPath = req.params["qname"];
var methodName = req.params["method"]; var methodName = req.params["method"];
var gname = req.params["gname"]; var gname = req.params["gname"];
classPath = gname + "." + classPath; classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req); var tClientIp = system.get_client_ip(req);
req.clientIp = tClientIp; req.clientIp = tClientIp;
...@@ -60,56 +53,4 @@ module.exports = function (app) { ...@@ -60,56 +53,4 @@ module.exports = function (app) {
res.end(JSON.stringify(r)); res.end(JSON.stringify(r));
}); });
}); });
// app.get('/api/:gname/:qname/:method', function (req, res) {
// var classPath = req.params["qname"];
// var methodName = req.params["method"];
// var gname = req.params["gname"];
// classPath = gname + "." + classPath;
// var tClientIp = system.get_client_ip(req);
// req.clientIp = tClientIp;
// req.uagent = req.headers["user-agent"];
// req.classname = classPath;
// var params = [];
// params.push(gname);
// params.push(methodName);
// params.push(req.body);
// params.push(req.query);
// params.push(req);
// var p = null;
// var invokeObj = system.getObject("api." + classPath);
// if (invokeObj["doexec"]) {
// p = invokeObj["doexec"].apply(invokeObj, params);
// }
// p.then(r => {
// res.end(JSON.stringify(r));
// });
// });
// app.post('/api/:gname/:qname/:method', function (req, res) {
// var classPath = req.params["qname"];
// var methodName = req.params["method"];
// var gname = req.params["gname"];
// var params = [];
// classPath = gname + "." + classPath;
// var tClientIp = system.get_client_ip(req);
// req.clientIp = tClientIp;
// req.uagent = req.headers["user-agent"];
// req.classname = classPath;
// params.push(gname);
// params.push(methodName);
// params.push(req.query);
// params.push(req.body);
// params.push(req);
// var p = null;
// var invokeObj = system.getObject("api." + classPath);
// if (invokeObj["doexec"]) {
// p = invokeObj["doexec"].apply(invokeObj, params);
// }
// p.then(r => {
// res.end(JSON.stringify(r));
// });
// });
}; };
var url = require("url");
var system = require("../../base/system");
var fs = require('fs');
var marked = require("marked");
module.exports = function (app) {
app.get('/doc', function (req, res) {
var path = process.cwd() + "/app/front/entry/public/apidoc/README.md";
fs.readFile(path, function(err, data){
if(err){
console.log(err);
res.send("文件不存在!");
} else{
console.log(data);
str = marked(data.toString());
res.render('apidoc',{str});
}
});
});
app.get('/doc/:forder', function (req, res) {
var path = process.cwd() + "/app/front/entry/public/apidoc/README.md";
fs.readFile(path, function(err, data){
if(err){
console.log(err);
res.send("文件不存在!");
} else{
console.log(data);
str = marked(data.toString());
res.render('apidoc',{str});
}
});
});
app.get('/doc/api/:forder/:fileName', function (req, res) {
var forder = req.params["forder"];
var fileName = req.params["fileName"] || "README.md";
var path = process.cwd() + "/app/front/entry/public/apidoc";
if(forder) {
path = path + "/" + forder + "/" + fileName;
} else {
path = path + "/" + fileName;
}
fs.readFile(path, function(err, data){
if(err){
console.log(err);
res.send("文件不存在!");
} else{
console.log(data);
str = marked(data.toString());
console.log(str);
res.render('apidoc',{str});
}
});
});
};
var url = require("url");
var system = require("../../base/system");
// var userCtl = system.getObject("web.auth.userCtl");
module.exports = function (app) {
app.get("/", async function (req, res) {
res.render("index", { appinfo: null, app: null });
// console.log(req.hostname);
// var appinfo=await metaCtl.getAppInfo(req);
// if(!appinfo){
// res.render("index",{appinfo:null,app:null});
// }else{
// res.render("index",appinfo);
// }
});
app.get('/web/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
classPath = gname + "." + classPath;
var params = [];
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("web." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
app.post('/web/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
var params = [];
classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req);
req.body.clientIp = tClientIp;
req.body.agent = req.headers["user-agent"];
req.body.classname = classPath;
params.push(methodName);
params.push(req.query);
params.push(req.body);
params.push(req);
var p = null;
var invokeObj = system.getObject("web." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
};
...@@ -16,10 +16,10 @@ var settings = { ...@@ -16,10 +16,10 @@ var settings = {
appKey: "201911061250", appKey: "201911061250",
secret: "f99d413b767f09b5dff0b3610366cc46", secret: "f99d413b767f09b5dff0b3610366cc46",
salt: "%iatpD1gcxz7iF#B", salt: "%iatpD1gcxz7iF#B",
cacheprefix: "jd", cacheprefix: "centerApp",
usertimeout: 3600,//单位秒 usertimeout: 3600,//单位秒
basepath: path.normalize(path.join(__dirname, '../..')), basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 4003, port: process.env.NODE_PORT || 4010,
paasUrl: function () { paasUrl: function () {
if (this.env == "dev") { if (this.env == "dev") {
return "http://p.apps.com:4001/"; return "http://p.apps.com:4001/";
......
var Server=require('socket.io');
var System = require('../base/system');
var redisClient=System.getObject("util.redisClient");
const logCtl=System.getObject("web.common.oplogCtl");
const notifyCtl=System.getObject("web.socketNotifyCtl");
const msgHistoryService=System.getObject("service.msghistorySve");
class MsgHandler{
constructor(server,client){
this.server=server;
this.client=client;
this.init();
}
notifyClient(ukchannel,msg){
var msgH={msgType:"system",sender:"s¥s¥s¥s",target:msg.to,content:msg.content};
msgHistoryService.create(msgH).then((m)=>{
redisClient.publish(ukchannel,JSON.stringify(msg));
}).catch(e=>{
console.log(e);
logCtl.info({
optitle:"socket.server.js->notifyClient接口调用异常error:",
op:"chatmsg",
content:e.stack,
clientIp:null,
agent:"",
});
});
}
init(){
var self=this;
//转发通信消息
this.client.on("chatmsg",msg=>{
const from=msg.from;
const to=msg.to;
const msgContent=msg.content;
var arrs=to.split("¥");
var tochannel=arrs[0]+"¥"+arrs[1];
//发布消息
//持久化消息
var msgH={msgType:"single",sender:msg.from,target:msg.to,content:msg.content};
msgHistoryService.create(msgH).then((m)=>{
redisClient.publish(tochannel,JSON.stringify(msg));
}).catch(e=>{
console.log(e);
logCtl.info({
optitle:"socket.server.js->发布消息->持久化消息接口调用异常error:",
op:"chatmsg",
content:e,
clientIp:null,
agent:"",
});
});
//self.server.users[to].emit("chatmsg",msg);
});
this.client.on("mryzmsg", async msg=>{
try {
const from=msg.from;
const to=msg.to;
const msgContent=msg.content;
var fromArrs = from.split("¥");
var toArrs=to.split("¥");
var fromId = Number(fromArrs[1]);
var toId = Number(toArrs[1]);
var fromChannel = fromArrs[0]+"¥"+fromArrs[1];
var toChannel = toArrs[0]+"¥"+toArrs[1];
// 消息对象
var msgH = {
msgType:msg.msgType || "mryzSingle",
sender:from,
senderId:fromId,
target:msg.to,
targetId:toId,
content:msgContent,
isRead:false,
businessLicense_id:msg.businessLicense_id || 0,
};
msgH = await msgHistoryService.saveMsg(msgH);
redisClient.publish(fromChannel, JSON.stringify(msgH));
if(fromChannel != toChannel) {
redisClient.publish(toChannel, JSON.stringify(msgH));
}
} catch (e) {
console.error(e);
logCtl.info({
optitle:"socket.server.js->发布每日易照消息->持久化每日易照消息接口调用异常error:",
op:"mryzmsg",
content:e,
clientIp:null,
agent:"",
});
}
//self.server.users[to].emit("chatmsg",msg);
});
//响应消息处理
this.client.on("replymsg",(msg,fn)=>{
var p=null;
var invokeObj= System.getObject("web."+msg.cls);
console.log(invokeObj);
if(invokeObj[msg.method]){
p=invokeObj[msg.method].apply(invokeObj,[msg.data]);
}
p.then(r=>{
fn(r);
}).then(()=>{
logCtl.info({
optitle:"socket.server.js->响应消息处理->接口调用info:",
op:msg.cls+"/"+msg.method,
content:JSON.stringify(msg.data),
clientIp:null,
agent:"",
});
}).catch(err=>{
logCtl.error({
optitle:"socket.server.js->响应消息处理->接口调用异常error:",
op:msg.cls+"/"+msg.method,
content:JSON.stringify(msg.data),
clientIp:null,
agent:"",
});
})
});
}
}
class SocketServer{
constructor(httpServer){
this.server=Server(httpServer,{
serveClient: false,
});
this.users={};
this.init();
this.onlines=0;
}
init(){
var self=this;
//挂载到web应用的控制器
notifyCtl.setSocketServer(self);
//订阅广播频道
redisClient.subscribe("brc",self);
//中间件可以在链接事件发出前调用一次
this.server.use((socket,next)=>{
next();
});
this.server.on('connection', function(client){
console.log("connection.....socket");
//链接登录事件
client.on('login', function(data){
console.log("login...........................................................success");
console.log(data);
console.log(client.remoteAddress);
var uk=data.appid+"¥"+data.id;
client.uk=uk;
client.uid=data.id;
client.username=data.nickName;
client.appname=data.appname;
client.appkey=data.appkey;
client.sex=data.sex;
client.imgUrl=data.imgUrl;
self.users[uk]=new MsgHandler(self,client);
//订阅uk私人频道
var ss = redisClient.subscribe(uk,self);
//加入redisClient列表
redisClient.sadd("onlineset"+"¥"+data.appkey,[uk+"¥"+data.nickName+"¥"+data.imgUrl]).then(n=>{
//当前在线
self.onlines=n;
redisClient.publish("brc",JSON.stringify({"type":"online","content":n}));
});
});
//链接断开事件
client.on('disconnect', async function(r){
console.log("connection.........................................dismiss.............");
if(client.uk) {
await redisClient.srem("onlineset"+"¥"+client.appkey,client.uk+"¥"+client.username+"¥"+client.imgUrl);
await redisClient.publish("brc",JSON.stringify({"type":"online","content":(self.onlines--)}));
delete self.users[client.uk];
redisClient.unsubscribe(client.uk);
//redisClient.unsubscribe("brc");
console.log(client.uk+"¥"+client.username+"¥"+client.imgUrl);
}
});
});
}
}
module.exports=SocketServer;
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="keywords" content="api文档">
<meta name="baidu-site-verification" content="lATAxZAm8y" />
<meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8, user-scalable=1">
<link href="https://cdn.bootcss.com/github-markdown-css/2.8.0/github-markdown.min.css" rel="stylesheet">
</head>
<body>
<div style="width:100%;text-align: center;font-size: 20px;">
渠道接入API文档
</div>
<div class="markdown-body" style="margin-left:40px;" id="doc-page">
<%- str%>
</div>
</body>
</html>
\ No newline at end of file
## 1. 调用接口需要开通app应用
  1 [获取app信息](doc/api/appDesc/demoDesc.md)
  2 [获取token信息](doc/api/appDesc/demoDesc.md)
  3 [通用接口示例](doc/api/appDesc/demoDesc.md)
## 2. 商标操作相关接口
  1 [商标操作中心](doc/api/opTrademark/opTm.md)
## 3. 商标检索相关接口
  1 [商标检索中心](doc/api/opTrademark/opTm.md)
<a name="menu" href="/doc">返回主目录</a>
1. [开通app参数](#appParams)
1. [获取token](#getToken)
1. [通用接口示例](#demo)
## **<a name="appParams"> 开通app参数</a>**
[返回到目录](#menu)
#### 请求接口之前需要向合作方获取如下参数:
#### appkey:2019090811
#### secret:f99d413b767f09b5dff0b3610366cc46
#### 参数说明:appkey、secret为获取请求头token的参数。
## **<a name="getToken"> 获取token</a>**
[返回到目录](#menu)
##### URL
[/auth/accessAuth/getToken]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
```
## **<a name="demo"> 通用接口示例</a>**
[返回到目录](#menu)
##### URL
[/auth/accessAuth]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
所有请求接口在请求前,必须获取token,并把token放在请求头Headers中,无特殊说明请求方式统一为POST请求。
通用请求接口示例:
请求头中需要传递的参数:tokenrequest-id
请求参数:
{
"actionProcess": "jd", //Y string 执行的渠道名称
"actionType": "demo", //Y string 渠道执行的类型
"actionBody": { //N JSON 要传递的body信息
"userId": "019101116473600000", //N string 用户ID
"userName": "张三" //N string 用户名称
}
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"opDesc": "京东云合作"
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
返回值参数说明:
status 返回状态,0为成功,否则为失败
msg 成功或失败信息描述
data 接口返回的数据信息
requestId 请求头中的request-id,作为接口调用跟踪
```
<a name="menu" href="/doc">返回主目录</a>
1. [尼斯查询(一)](#getNcl)
1. [尼斯查询(二)](#getNclTwo)
## **<a name="getNcl"> 尼斯查询(一)</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getNcl
``` javascript
{
"nclcode": "01" //Y string 尼斯编号(尼斯大类类别获取群组类别)
}
```
#### 返回结果
```javascript
{
"status": 0,//操作状态0:操作成功-1:操作失败
"msg": "操作成功",//操作信息
"data": [
{
"code": "01",//尼斯大类编码
"name": "",//大类名称
"pcode": "",//父类编码 大类要为父类则为空
"type": 1,
"children": [//尼斯群组信息
{
"code": "0106",//群组编码
"name": "化学试剂",//群组名称
"pcode": "01",//群组父类编码 即其所属大类编码
"type": 1,
"children": [//尼斯小类
{
"code": "010122",//小类编码
"name": "生物化学催化剂",//小类名称
"pcode": "0106"//小类父类编码 即其所属群组编码
}
]
}
]
},
{
"code": "42",
"name": "",
"pcode": "",
"type": 1,
"children": [
{
"code": "4211",
"name": "提供化学研究服务",
"pcode": "42",
"type": 1,
"children": [
{
"code": "",
"name": "生物化学研究和分析",
"pcode": "4211"
}
]
}
]
}
],
"requestId": "8cd7e91ec607453c805da8302f3e068c"
}
```
## **<a name="getNclTwo"> 尼斯查询(二)</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getNcl
``` javascript
{
"name": "生物化学",//Y strin 尼斯名称
"ncls ": ["01"]//N List 尼斯大类编码列表
}
```
#### 返回结果
```javascript
{
"status": 0,//操作状态0:操作成功-1:操作失败
"msg": "操作成功",//操作信息
"data": [
{
"code": "01",//尼斯大类编码
"name": "",//大类名称
"pcode": "",//父类编码 大类要为父类则为空
"type": 1,
"children": [//尼斯群组信息
{
"code": "0106",//群组编码
"name": "化学试剂",//群组名称
"pcode": "01",//群组父类编码 即其所属大类编码
"type": 1,
"children": [//尼斯小类
{
"code": "010122",//小类编码
"name": "生物化学催化剂",//小类名称
"pcode": "0106"//小类父类编码 即其所属群组编码
}
]
}
]
},
{
"code": "42",
"name": "",
"pcode": "",
"type": 1,
"children": [
{
"code": "4211",
"name": "提供化学研究服务",
"pcode": "42",
"type": 1,
"children": [
{
"code": "",
"name": "生物化学研究和分析",
"pcode": "4211"
}
]
}
]
}
],
"requestId": "8cd7e91ec607453c805da8302f3e068c"
}
```
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