Commit 2ca780fc by 宋毅

tj

parent aaa35c5e
> 1%
last 2 versions
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential',
'eslint:recommended'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
},
parserOptions: {
parser: 'babel-eslint'
}
}
const system = require("../system");
const settings = require("../../config/settings");
const DocBase = require("./doc.base");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class APIBase {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("web.common.oplogCtl");
this.oplogSve = system.getObject("service.common.oplogSve");
this.toolSve = system.getObject("service.trademark.toolSve");
this.exTime = 2 * 3600;//缓存过期时间,2小时
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
if (!params.timestamp) {
return system.getResult(null, "请求参数timestamp为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "签名验证失败");
}
return system.getResultSuccess();
}
/**
* 白名单验证
* @param {*} gname 组名
* @param {*} methodname 方法名
*/
async isCheckWhiteList(gname, methodname) {
var fullname = gname + "." + methodname;
var lst = [
"test.test",
"action.info",
"action.error",
"auth.getToken",
"auth.getJdSign"
];
var x = lst.indexOf(fullname);
return x >= 0;
}
async checkAcck(gname, methodname, pobj, query, req) {
var uAppInfo = null;
var selfAppInfo = null;
var ispass = await this.isCheckWhiteList(gname, methodname);
if (ispass) {
return system.getResultSuccess();
}//在白名单里面
var token = req.headers["token"];
if (!token) {
return system.getResult(null, "token不能为空");
}
uAppInfo = await this.cacheManager["ApiAccessKeyCheckCache"].cache(token, { status: true }, this.exTime);
if (!uAppInfo || (uAppInfo.status && uAppInfo.status != 0)) {
return uAppInfo;
}
var selfAppInfo = await this.cacheManager["ApiAppKeyCheckCache"].cache(uAppInfo.data.app.appkey, null, this.exTime);
if (!selfAppInfo || (selfAppInfo.status && selfAppInfo.status != 0)) {
return selfAppInfo;
}
// if (!appInfo) {
// return system.getResult(null, "通过token获取sign的密钥信息失败,请重新获取");
// }
// var signResult = await this.verifySign(pobj.action_body, appInfo.appSecret);
// if (signResult.status != 0) {
// return system.getResultFail(system.signFail, signResult.msg);
// }
if (pobj.isUser && pobj.isUser == "yes") {
var channelUserId = pobj.channelUserId ? pobj.channelUserId : pobj.actionBody.channelUserId || "";
if (!channelUserId && pobj.actionBody.channelUser) {
channelUserId = pobj.actionBody.channelUser.channelUserId;
}
if (!channelUserId) {
return system.getResult(null, "base verify channelUserId is empty");
}
var userCacheKey = selfAppInfo.data.uappKey + "_" + channelUserId;
var userInfo = await this.cacheManager["ApiUserCache"].cache(userCacheKey, channelUserId,
this.exTime, pobj.actionBody, selfAppInfo, uAppInfo.data.app.id);
if (!userInfo || (userInfo.status && userInfo.status != 0)) {
return userInfo;
}
if (userInfo.data && userInfo.data.isEnabled && userInfo.data.isEnabled != 1) {
return system.getResultFail(system.getUserInfoFail, "用户处于待审核等待启用状态");
}
req.user = userInfo.data;
pobj.actionBody.channelUserId = channelUserId;
}
req.app = selfAppInfo.data;
return system.getResultSuccess();
}
async doexec(gname, methodname, pobj, query, req) {
var requestid = req.headers["request-id"] || this.getUUID();
if (!req.headers["request-id"]) {
req.headers["request-id"] = requestid;
}
try {
if (pobj.actionType == "createChannelUser") {
if (!pobj.isUser) {
system.getResult(null, "isUser is empty");
}
if (pobj.isUser != "yes") {
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);
if (rtn && !rtn.requestId) {
rtn.requestId = requestid;
}
this.oplogSve.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: requestid,
op: req.classname + "/" + methodname,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
return rtn;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
this.oplogSve.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: requestid,
op: req.classname + "/" + methodname,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(e.stack),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api调用出现异常,请联系管理员error,appKey:" + settings.appKey,
});
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: requestid,
op: pobj.classname + "/" + methodname,
content: e.stack,
clientIp: pobj.clientIp,
agent: req.uagent,
optitle: "api调用出现异常,请联系管理员",
});
var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack);
rtnerror.requestId = requestid;
return rtnerror;
}
}
}
module.exports = APIBase;
const system = require("../system");
const settings = require("../../config/settings");
const DocBase = require("./doc.base");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class APIBase extends DocBase {
constructor() {
super();
this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("web.common.oplogCtl");
this.oplogSve = system.getObject("service.common.oplogSve");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
if (!params.times_tamp) {
return system.getResult(null, "请求参数times_tamp为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "签名验证失败");
}
return system.getResultSuccess();
}
/**
* 白名单验证
* @param {*} gname 组名
* @param {*} methodname 方法名
*/
async isCheckWhiteList(gname, methodname) {
var fullname = gname + "." + methodname;
var lst = [
"test.testApi"
];
var x = lst.indexOf(fullname);
return x >= 0;
}
async checkAcck(gname, methodname, pobj, query, req) {
var appInfo = null;
var result = system.getResultSuccess();
var ispass = await this.isCheckWhiteList(gname, methodname);
var appkey = req.headers["accesskey"];
if (ispass) {
return result;
}//在百名单里面
if (appkey) {
appInfo = await this.cacheManager["ApiAccessKeyCheckCache"].cache(appkey, { status: true }, 3000);
if (!appInfo || !appInfo.app) {
result.status = system.tokenFail;
result.msg = "请求头accesskey失效,请重新获取";
}
}//验证accesskey
else {
result.status = -1;
result.msg = "请求头没有相关访问参数,请验证后在进行请求";
}
return result;
}
async doexec(gname, methodname, pobj, query, req) {
var requestid = this.getUUID();
try {
//验证accesskey或验签
// var isPassResult = await this.checkAcck(gname, methodname, pobj, query, req);
// if (isPassResult.status != 0) {
// isPassResult.requestid = "";
// return isPassResult;
// }
var rtn = await this[methodname](pobj, query, req);
rtn.requestid = requestid;
this.oplogSve.createDb({
appid: req.headers["app_id"] || "",
appkey: req.headers["accesskey"] || "",
requestId: requestid,
op: req.classname + "/" + methodname,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
return rtn;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
this.logCtl.error({
appid: req.headers["app_id"] || "",
appkey: req.headers["accesskey"] || "",
requestId: requestid,
op: pobj.classname + "/" + methodname,
content: e.stack,
clientIp: pobj.clientIp,
agent: req.uagent,
optitle: "api调用出现异常,请联系管理员",
});
var rtnerror = system.getResultFail(-200, "出现异常,请联系管理员");
rtnerror.requestid = requestid;
return rtnerror;
}
}
}
module.exports = APIBase;
const system=require("../system");
const uuidv4 = require('uuid/v4');
class DocBase{
constructor(){
this.apiDoc={
group:"逻辑分组",
groupDesc:"",
name:"",
desc:"请对当前类进行描述",
exam:"概要示例",
methods:[]
};
this.initClassDoc();
}
initClassDoc(){
// this.descClass();
// this.descMethods();
}
descClass(){
var classDesc= this.classDesc();
this.apiDoc.group=classDesc.groupName;
this.apiDoc.groupDesc=classDesc.groupDesc;
this.apiDoc.name=classDesc.name;
this.apiDoc.desc=classDesc.desc;
this.apiDoc.exam=this.examHtml();
}
examHtml(){
var exam= this.exam();
exam=exam.replace(/\\/g,"<br/>");
return exam;
}
exam(){
throw new Error("请在子类中定义类操作示例");
}
classDesc(){
throw new Error(`
请重写classDesc对当前的类进行描述,返回如下数据结构
{
groupName:"auth",
groupDesc:"认证相关的包"
desc:"关于认证的类",
exam:"",
}
`);
}
descMethods(){
var methoddescs=this.methodDescs();
for(var methoddesc of methoddescs){
for(var paramdesc of methoddesc.paramdescs){
this.descMethod(methoddesc.methodDesc,methoddesc.methodName
,paramdesc.paramDesc,paramdesc.paramName,paramdesc.paramType,
paramdesc.defaultValue,methoddesc.rtnTypeDesc,methoddesc.rtnType);
}
}
}
methodDescs(){
throw new Error(`
请重写methodDescs对当前的类的所有方法进行描述,返回如下数据结构
[
{
methodDesc:"生成访问token",
methodName:"getAccessKey",
paramdescs:[
{
paramDesc:"访问appkey",
paramName:"appkey",
paramType:"string",
defaultValue:"x",
},
{
paramDesc:"访问secret",
paramName:"secret",
paramType:"string",
defaultValue:null,
}
],
rtnTypeDesc:"xxxx",
rtnType:"xxx"
}
]
`);
}
descMethod(methodDesc,methodName,paramDesc,paramName,paramType,defaultValue,rtnTypeDesc,rtnType){
var mobj=this.apiDoc.methods.filter((m)=>{
if(m.name==methodName){
return true;
}else{
return false;
}
})[0];
var param={
pname:paramName,
ptype:paramType,
pdesc:paramDesc,
pdefaultValue:defaultValue,
};
if(mobj!=null){
mobj.params.push(param);
}else{
this.apiDoc.methods.push(
{
methodDesc:methodDesc?methodDesc:"",
name:methodName,
params:[param],
rtnTypeDesc:rtnTypeDesc,
rtnType:rtnType
}
);
}
}
}
module.exports=DocBase;
\ No newline at end of file
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 system = require("../../../system");
const logCtl = system.getObject("web.common.oplogCtl");
class opLog extends APIBase {
constructor() {
super();
}
async info(pobj, qobj, req) {
this.logCtl.info(pobj);
}
async error(pobj, qobj, req) {
this.logCtl.error(pobj);
}
}
module.exports = opLog;
\ No newline at end of file
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;
var APIBase = require("../../api.base");
var system = require("../../../system");
class AccessAuthAPI extends APIBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
}
async getToken(pobj, qobj, req) {
var appkey = pobj.appkey;
var secret = pobj.secret;
if (!appkey) {
return system.getResult(null, "appkey参数不能为空");
}
if (!secret) {
return system.getResult(null, "secret参数不能为空");
}
var result = await this.opPlatformUtils.getReqApiAccessKey(appkey, secret);
if (result && result.status && result.status != 0) {
return result;
}
var resultData = {
token: result && result.data ? result.data.accessKey : ""
};
return system.getResultSuccess(resultData);
}
/**
* 开放平台回调处理
* @param {*} req
*/
async authByCode(pobj, qobj, req) {
return await this.opPlatformUtils.authByCode(qobj.code);
}
}
module.exports = AccessAuthAPI;
\ No newline at end of file
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
mongoose = require('mongoose');
var Schema = mongoose.Schema({
company_name: { type: String},
})
const ad = mongoose.model('taierphones', Schema);
//导出模型
module.exports =ad;
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 system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
function exp(db, DataTypes) {
var base = {
code: DataTypes.STRING(100),
app_id: DataTypes.INTEGER,//
createuser_id: DataTypes.INTEGER,//
updateuser_id: DataTypes.INTEGER,//
auditoruser_id: DataTypes.INTEGER,//
moneyaccount_id: DataTypes.INTEGER,//
creator: DataTypes.STRING(100),//创建者
updator: DataTypes.STRING(100),//更新者
auditor: DataTypes.STRING(100),//审核者
opNotes: DataTypes.STRING(500),//操作备注
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",
},
sourceTypeName: DataTypes.STRING(50),
sourceType: {//来源类型 "order": "订单","expensevoucher": "费用单","receiptvoucher": "收款单", "trademark": "商标单"
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]);
}
},
sourceOrderNo: DataTypes.STRING(100),//来源单号
channelServiceNo: DataTypes.STRING(100),//渠道服务单号
};
return base;
}
module.exports = exp;
const system = require("../system")
const settings = require("../../config/settings.js");
class CacheBase {
constructor() {
this.redisClient = system.getObject("util.redisClient");
this.desc = this.desc();
this.prefix = this.prefix();
this.cacheCacheKeyPrefix = "s_sadd_appkeys:" + settings.appKey + "_cachekey";
this.isdebug = this.isdebug();
}
isdebug() {
return false;
}
desc() {
throw new Error("子类需要定义desc方法,返回缓存描述");
}
prefix() {
throw new Error("子类需要定义prefix方法,返回本缓存的前缀");
}
async cache(inputkey, val, ex, ...items) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null" || this.isdebug) {
var objval = await this.buildCacheVal(cachekey, inputkey, val, ex, ...items);
if (!objval || (objval.status && objval.status != 0)) {
return objval;
}
if (ex) {
await this.redisClient.setWithEx(cachekey, JSON.stringify(objval), ex);
} else {
await this.redisClient.set(cachekey, JSON.stringify(objval));
}
//缓存当前应用所有的缓存key及其描述
this.redisClient.sadd(this.cacheCacheKeyPrefix, [cachekey + "|" + this.desc]);
return objval;
} else {
return JSON.parse(cacheValue);
}
}
async invalidate(inputkey) {
const cachekey = this.prefix + inputkey;
this.redisClient.delete(cachekey);
return 0;
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
throw new Error("子类中实现构建缓存值的方法,返回字符串");
}
}
module.exports = CacheBase;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class ApiAccessKeyCache extends CacheBase {
constructor() {
super();
this.restS = system.getObject("util.restClient");
}
desc() {
return "应用中缓存访问token";
}
prefix() {
return settings.cacheprefix + "_accesskey:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var appkey = inputkey || settings.appKey;
var secret = items && items.length > 0 ? items[0] : settings.secret;
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 = ApiAccessKeyCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
//缓存首次登录的赠送的宝币数量
class ApiAccessKeyCheckCache extends CacheBase {
constructor() {
super();
this.restS = system.getObject("util.restClient");
}
desc() {
return "应用中来访访问token缓存";
}
prefix() {
return settings.cacheprefix + "_verify_reqaccesskey:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var cacheManager = system.getObject("db.common.cacheManager");
//当来访key缓存不存在时,需要去开放平台检查是否存在来访key缓存
var acckapp = await cacheManager["ApiAccessKeyCache"].cache(settings.appKey, null, ex);//先获取本应用accessKey
if (acckapp.status != 0) {
return system.getResult(null, "获取本应用accessKey错误");
}
var checkresult = await this.restS.execPostWithAK({ checkAccessKey: inputkey }, settings.paasUrl() + "api/auth/accessAuth/authAccessKey", acckapp.data.accessKey);
if (checkresult.status == 0) {
return checkresult;
// var s = checkresult.data;
// return JSON.stringify(s);
} else {
await cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
var acckapp = await cacheManager["ApiAccessKeyCache"].cache(settings.appKey, null, ex);//先获取本应用accessKey
var checkresult = await this.restS.execPostWithAK({ checkAccessKey: inputkey }, settings.paasUrl() + "api/auth/accessAuth/authAccessKey", acckapp.data.accessKey);
return checkresult;
// var s = checkresult.data;
// return JSON.stringify(s);
}
}
}
module.exports = ApiAccessKeyCheckCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class ApiAppKeyCheckCache extends CacheBase {
constructor() {
super();
this.appDao = system.getObject("db.dbapp.appDao");
}
desc() {
return "应用中来访访问appid缓存";
}
prefix() {
return settings.cacheprefix + "_verify_appKey:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var item = await this.appDao.getItemByAppKey(inputkey);
if (!item) {
return system.getResult(null, "返回数据为空!");
}
if (item.status != 1) {
return system.getResultFail(system.waitAuditSelfApp, "渠道应用处于待审核等待启用状态");
}
return system.getResultSuccess(item);
}
}
module.exports = ApiAppKeyCheckCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
//缓存首次登录的赠送的宝币数量
class ApiUserCache extends CacheBase {
constructor() {
super();
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
this.appDao = system.getObject("db.dbapp.appDao");
this.appuserDao = system.getObject("db.dbapp.appuserDao");
this.restClient = system.getObject("util.restClient");
}
desc() {
return "应用中来访访问token缓存";
}
prefix() {
return settings.cacheprefix + "_userdata:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
var actionBody = items[0];
var selfAppInfo = items[1];
var uAppId = items[2];
var channelUserId = val || "";
var uUserName = channelUserId + "$" + selfAppInfo.data.uappKey;//uUserName
var createUserPwd = inputkey;//(格式:selfAppInfo.data.uappKey+”_“+channelUserId)
var userInfo = await this.appuserDao.getItemByUUserId(uUserName, selfAppInfo.data.id);
if (userInfo) {
var loginNum = Number(userInfo.loginNum || 0) + 1;
this.appuserDao.updateByWhere({ lastLoginTime: new Date(), loginNum: loginNum }, { where: { id: userInfo.id } });
return system.getResultSuccess(userInfo);
}
var uUserInfo = await this.opPlatformUtils.createUserInfo(uUserName, actionBody.channelUserMoblie || "15010888888",
createUserPwd, selfAppInfo.data.uappKey, selfAppInfo.data.appSecret);
if (uUserInfo.status != 2000 && uUserInfo.status != 0) {
return uUserInfo;
}//已经存在此用户 或 注册失败
if (uUserInfo.status == 0) {
var params = {
app_id: selfAppInfo.data.id,
channelUserId: channelUserId,
channelUserName: actionBody.channelUserName || channelUserId,
userMoblie: actionBody.channelUserMoblie || "88888888888",
nickname: actionBody.nickname || "",
orgName: actionBody.orgName || "",
orgPath: actionBody.orgPath || "",
uUserName: uUserName,
uAppId: uAppId,
isEnabled: 1,
lastLoginTime: new Date()
};
userInfo = await this.appuserDao.create(params);
}
else {
return uUserInfo;
}
return system.getResultSuccess(userInfo);
}
}
module.exports = ApiUserCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class MagCache extends CacheBase {
constructor() {
super();
this.prefix = "magCache";
}
desc() {
return "应用UI配置缓存";
}
//暂时没有用到,只是使用其帮助的方法
prefix() {
return settings.cacheprefix + "_uiconfig:";
}
async getCacheSmembersByKey(key) {
return this.redisClient.smembers(key);
}
async delCacheBySrem(key, value) {
return this.redisClient.srem(key, value)
}
async keys(p) {
return this.redisClient.keys(p);
}
async get(k) {
return this.redisClient.get(k);
}
async del(k) {
return this.redisClient.delete(k);
}
async clearAll() {
console.log("xxxxxxxxxxxxxxxxxxxclearAll............");
return this.redisClient.flushall();
}
}
module.exports = MagCache;
const system = require("../system");
class Dao {
constructor(modelName) {
this.modelName = modelName;
var db = system.getObject("db.common.connection").getCon();
this.db = db;
this.model = db.models[this.modelName];
}
preCreate(u) {
return u;
}
/**
*
* @param {*} u 对象
* @param {*} t 事务对象t
*/
async create(u, t) {
var u2 = this.preCreate(u);
if (t) {
return this.model.create(u2, { transaction: t }).then(u => {
return u;
});
} else {
return this.model.create(u2, { transaction: t }).then(u => {
return u;
});
}
}
static getModelName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Dao")).toLowerCase()
}
async refQuery(qobj) {
var w = {};
if (qobj.likestr) {
w[qobj.fields[0]] = { [this.db.Op.like]: "%" + qobj.likestr + "%" };
return this.model.findAll({ where: w, attributes: qobj.fields });
} else {
return this.model.findAll({ attributes: qobj.fields });
}
}
async bulkDeleteByWhere(whereParam, t) {
var en = null;
if (t != null && t != 'undefined') {
whereParam.transaction = t;
return await this.model.destroy(whereParam);
} else {
return await this.model.destroy(whereParam);
}
}
async bulkDelete(ids) {
var en = await this.model.destroy({ where: { id: { [this.db.Op.in]: ids } } });
return en;
}
async delete(qobj) {
var en = await this.model.findOne({ where: qobj });
if (en != null) {
return en.destroy();
}
return null;
}
extraModelFilter() {
//return {"key":"include","value":{model:this.db.models.app}};
return null;
}
extraWhere(obj, where) {
return where;
}
orderBy() {
//return {"key":"include","value":{model:this.db.models.app}};
return [["created_at", "DESC"]];
}
buildAttributes() {
return [];
}
buildQuery(qobj) {
var linkAttrs = [];
const pageNo = qobj.pageInfo.pageNo;
const pageSize = qobj.pageInfo.pageSize;
const search = qobj.search;
const orderInfo = qobj.orderInfo;//格式:[["created_at", 'desc']]
var qc = {};
//设置分页查询条件
qc.limit = pageSize;
qc.offset = (pageNo - 1) * pageSize;
//默认的查询排序
if (orderInfo) {
qc.order = orderInfo;
} else {
qc.order = this.orderBy();
}
//构造where条件
qc.where = {};
if (search) {
Object.keys(search).forEach(k => {
console.log(search[k], ":search[k]search[k]search[k]");
if (search[k] && search[k] != 'undefined' && search[k] != "") {
if ((k.indexOf("Date") >= 0 || k.indexOf("_at") >= 0)) {
if (search[k] != "" && search[k]) {
var stdate = new Date(search[k][0]);
var enddate = new Date(search[k][1]);
qc.where[k] = { [this.db.Op.between]: [stdate, enddate] };
}
}
else if (k.indexOf("id") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("channelCode") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Type") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Status") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("status") >= 0) {
qc.where[k] = search[k];
}
else {
if (k.indexOf("~") >= 0) {
linkAttrs.push(k);
} else {
qc.where[k] = { [this.db.Op.like]: "%" + search[k] + "%" };
}
}
}
});
}
this.extraWhere(qobj, qc.where, qc, linkAttrs);
var extraFilter = this.extraModelFilter();
if (extraFilter) {
qc[extraFilter.key] = extraFilter.value;
}
var attributesObj = this.buildAttributes();
if (attributesObj && attributesObj.length > 0) {
qc.attributes = attributesObj;
}
console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
console.log(qc);
return qc;
}
async findAndCountAll(qobj, t) {
var qc = this.buildQuery(qobj);
var apps = await this.model.findAndCountAll(qc);
return apps;
}
preUpdate(obj) {
return obj;
}
async update(obj, tm) {
var obj2 = this.preUpdate(obj);
if (tm != null && tm != 'undefined') {
return this.model.update(obj2, { where: { id: obj2.id }, transaction: tm });
} else {
return this.model.update(obj2, { where: { id: obj2.id } });
}
}
async updateByWhere(setObj, whereObj, t) {
if (t && t != 'undefined') {
if (whereObj && whereObj != 'undefined') {
whereObj.transaction = t;
} else {
whereObj = { transaction: t };
}
}
return this.model.update(setObj, whereObj);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.db.query(sql, paras);
}
async customQuery(sql, paras, t) {
var tmpParas = null;//||paras=='undefined'?{type: this.db.QueryTypes.SELECT }:{ replacements: paras, type: this.db.QueryTypes.SELECT };
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' || paras.keys == 0 ? { type: this.db.QueryTypes.SELECT } : { replacements: paras, type: this.db.QueryTypes.SELECT };
}
var result = this.db.query(sql, tmpParas);
return result;
}
async customUpdate(sql, paras, t) {
var tmpParas = null;
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.UPDATE };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.UPDATE };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' ? { type: this.db.QueryTypes.UPDATE } : { replacements: paras, type: this.db.QueryTypes.UPDATE };
}
return this.db.query(sql, tmpParas);
}
async findCount(whereObj = null) {
return this.model.count(whereObj, { logging: false }).then(c => {
return c;
});
}
async findSum(fieldName, whereObj = null) {
return this.model.sum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
var tmpWhere = {};
tmpWhere.limit = pageSize;
tmpWhere.offset = (pageIndex - 1) * pageSize;
if (whereObj != null) {
tmpWhere.where = whereObj;
}
if (orderObj != null && orderObj.length > 0) {
tmpWhere.order = orderObj;
}
if (attributesObj != null && attributesObj.length > 0) {
tmpWhere.attributes = attributesObj;
}
if (includeObj != null && includeObj.length > 0) {
tmpWhere.include = includeObj;
tmpWhere.distinct = true;
}
tmpWhere.raw = true;
return await this.model.findAndCountAll(tmpWhere);
}
async findOne(obj, t) {
var params = { "where": obj };
if (t) {
params.transaction = t;
}
return this.model.findOne(params);
}
async findById(oid) {
return this.model.findById(oid);
}
}
module.exports = Dao;
const system=require("../../../system");
const fs=require("fs");
const settings=require("../../../../config/settings");
var glob = require("glob");
class APIDocManager{
constructor(){
this.doc={};
this.buildAPIDocMap();
}
async buildAPIDocMap(){
var self=this;
//订阅任务频道
var apiPath=settings.basepath+"/app/base/api/impl";
var rs = glob.sync(apiPath + "/**/*.js");
if(rs){
for(let r of rs){
// var ps=r.split("/");
// var nl=ps.length;
// var pkname=ps[nl-2];
// var fname=ps[nl-1].split(".")[0];
// var obj=system.getObject("api."+pkname+"."+fname);
var ClassObj=require(r);
var obj=new ClassObj();
var gk=obj.apiDoc.group+"|"+obj.apiDoc.groupDesc
if(!this.doc[gk]){
this.doc[gk]=[];
this.doc[gk].push(obj.apiDoc);
}else{
this.doc[gk].push(obj.apiDoc);
}
}
}
}
}
module.exports=APIDocManager;
const fs = require("fs");
const settings = require("../../../../config/settings");
class CacheManager {
constructor() {
//await this.buildCacheMap();
this.buildCacheMap();
}
buildCacheMap() {
try {
var self = this;
self.doc = {};
var cachePath = settings.basepath + "/app/base/db/cache/";
const files = fs.readdirSync(cachePath);
if (files) {
files.forEach(function (r) {
var classObj = require(cachePath + "/" + r);
self[classObj.name] = new classObj();
var refTmp = self[classObj.name];
if (refTmp.prefix) {
self.doc[refTmp.prefix] = refTmp.desc;
}
else {
console.log("请在" + classObj.name + "缓存中定义prefix");
}
});
}
} catch (e) {
console.log(e.stack, "CacheManager................error")
}
}
}
module.exports = CacheManager;
// var cm= new CacheManager();
// cm["InitGiftCache"].cacheGlobalVal("hello").then(function(){
// cm["InitGiftCache"].cacheGlobalVal().then(x=>{
// console.log(x);
// });
// });
const Sequelize = require('sequelize');
const settings = require("../../../../config/settings")
const fs = require("fs")
const path = require("path");
var glob = require("glob");
class DbFactory {
constructor() {
const dbConfig = settings.database();
this.db = new Sequelize(dbConfig.dbname,
dbConfig.user,
dbConfig.password,
dbConfig.config);
this.db.Sequelize = Sequelize;
this.db.Op = Sequelize.Op;
this.initModels();
this.initRelations();
}
async initModels() {
var self = this;
var modelpath = path.normalize(path.join(__dirname, '../..')) + "/models/";
console.log("modelpath=====================================================");
console.log(modelpath);
var models = glob.sync(modelpath + "/**/*.js");
console.log(models.length);
models.forEach(function (m) {
console.log(m);
self.db.import(m);
});
console.log("init models....");
}
async initRelations() {
/**
一个账户对应多个登陆用户
一个账户对应一个commany
一个APP对应多个登陆用户
一个APP有多个角色
登陆用户和角色多对多
**/
/*建立账户和用户之间的关系*/
//account--不属于任何一个app,是统一用户
//用户登录时首先按照用户名和密码检查account是否存在,如果不存在则提示账号或密码不对,如果
//存在则按照按照accountid和应用key,查看user,后台实现对应user登录
}
//async getCon(){,用于使用替换table模型内字段数据使用
getCon() {
//同步模型
if (settings.env == "dev") {
}
return this.db;
}
getConhb() {
var that = this;
if (settings.env == "dev") {
}
return this.dbhb;
}
}
module.exports = DbFactory;
const mongoose = require('mongoose')
class MgDbFactory {
constructor() {
const reqUrl = "mongodb://wdy1:123456@43.247.184.94:27017/phones";
this.mgdb = mongoose.connect(reqUrl, { useNewUrlParser: true });
}
getModel(tabName) {
// let schema = require("./model/" + tabName.replace(/_/g, "."));
let model = mongoose.models[tabName];
if (!model) {
model = mongoose.model(tabName, new mongoose.Schema({
company_name: { type: String }
}), tabName);
}
return model
}
}
module.exports = MgDbFactory;
\ No newline at end of file
const system=require("../../../system");
const Dao=require("../../dao.base");
class OplogDao extends Dao{
constructor(){
super(Dao.getModelName(OplogDao));
}
}
module.exports=OplogDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class PushlogDao extends Dao{
constructor(){
super(Dao.getModelName(PushlogDao));
}
}
module.exports=PushlogDao;
\ No newline at end of file
const system = require("../../../system");
const Dao = require("../../dao.base");
class AppDao extends Dao {
constructor() {
super(Dao.getModelName(AppDao));
}
async getItemByAppKey(appKey) {
return this.model.findOne({
where: {
uappKey: appKey
},
attributes: ["id",
"name", // 应用名称
"appDataOpType", // 应用数据操作类型:00独立,10全委托,20部分委托
"appPayType", // 支付类型:00第三方应用自己支付,10平台代收款
"contactName", // 联系人姓名
"contactMobile", // 联系人手机
"contactEmail", // 联系人邮箱
"uappKey", // 平台应用key
"appSecret", // 密钥信息,用于进行签名请求接口
"status", // 状态 0禁用 1启用
"uAppId",
"channelAppId", // 渠道appID
"channelAppKey", // 渠道appKey
"pushOrderUrl", //获取渠道推送订单的url
"appSourceCode", //app来源code
"notes"],
raw: true
});
}
}
module.exports = AppDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class AppProductDao extends Dao {
constructor() {
super(Dao.getModelName(AppProductDao));
}
async findOneByServiceItemCode(itemCode, appId) {
return this.model.findOne({
where: {
serviceItemCode: itemCode,
app_id: appId
},
attributes: ["id",
"app_id", // 应用id
"itemCode", // 产品编码
"itemName", // 产品名称
"picUrl", // 产品图片地址
"channelItemCode", // 渠道产品编码
"channelItemName", // 渠道产品名称
"serviceItemCode",
"pushServiceItemCode",
"status", // 状态 0禁用 1启用
"verifyPrice", // 是否验证价格 0不验证 1验证
"proPrice", // 产品价格
"serviceCharge", // 服务费
"publicExpense", // 官费
"rateConfig", // 税率
"discountsRateConfig",// 优惠税率
"channelProfitRate",// 渠道利润分成比率(只分订单中毛利润总额的分成)
"sort",
"productType_id",
"productOneType_id"],
raw: true
});
}
async findOneByCode(itemCode, appId) {
return this.model.findOne({
where: {
itemCode: itemCode,
app_id: appId
},
attributes: ["id",
"app_id", // 应用id
"itemCode", // 产品编码
"itemName", // 产品名称
"picUrl", // 产品图片地址
"channelItemCode", // 渠道产品编码
"channelItemName", // 渠道产品名称
"serviceItemCode",
"pushServiceItemCode",
"status", // 状态 0禁用 1启用
"verifyPrice", // 是否验证价格 0不验证 1验证
"proPrice", // 产品价格
"serviceCharge", // 服务费
"publicExpense", // 官费
"rateConfig", // 税率
"discountsRateConfig",// 优惠税率
"channelProfitRate",// 渠道利润分成比率(只分订单中毛利润总额的分成)
"sort",
"productType_id",
"productOneType_id"],
raw: true
});
}
async findOneByChannelItemCode(channelItemCode, appId) {
return this.model.findOne({
where: {
channelItemCode: channelItemCode,
app_id: appId
},
attributes: ["id",
"app_id", // 应用id
"itemCode", // 产品编码
"itemName", // 产品名称
"picUrl", // 产品图片地址
"channelItemCode", // 渠道产品编码
"channelItemName", // 渠道产品名称
"serviceItemCode",
"pushServiceItemCode",
"deliveryUrl",
"status", // 状态 0禁用 1启用
"verifyPrice", // 是否验证价格 0不验证 1验证
"proPrice", // 产品价格
"serviceCharge", // 服务费
"publicExpense", // 官费
"rateConfig", // 税率
"discountsRateConfig",// 优惠税率
"channelProfitRate",// 渠道利润分成比率(只分订单中毛利润总额的分成)
"sort",
"productType_id",
"productOneType_id"],
raw: true
});
}
}
module.exports = AppProductDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class AppUserDao extends Dao {
constructor() {
super(Dao.getModelName(AppUserDao));
}
async getItemByUUserId(uUserName, appId) {
return this.model.findOne({
where: {
uUserName: uUserName,
app_id: appId
},
attributes: ["id",
"app_id",
"channelUserId",
"channelUserName",
"uUserName",
"uAppId",
"userMoblie",
"nickname",
"orgName",
"orgPath",
"isEnabled",
"loginNum",
"lastLoginTime"],
raw: true
});
}
}
module.exports = AppUserDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class MoneyAccountDao extends Dao {
constructor() {
super(Dao.getModelName(MoneyAccountDao));
}
}
module.exports = MoneyAccountDao;
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;
module.exports = {
"appid": "201911061250",
"label": "知产渠道api应用",
"config": {
"rstree": {
"code": "paasroot",
"label": "paas",
"children": [
// {
// "code": "register",
// "icon": "fa fa-power-off",
// "path": "register",
// "isMenu": false,
// "label": "注册",
// "isctl": "no"
// },
],
},
"bizs": {
},
"pdict": {
"logLevel": { "debug": 0, "info": 1, "warn": 2, "error": 3, "fatal": 4 },
//应用数据操作类型
"app_data_op_type": { "00": "独立", "10": "全委托", "20": "部分委托" },
//支付类型
"app_pay_type": { "00": "第三方支付", "10": "平台代收款" },
//订单类型
"order_type": { "zzdd": "自主订单", "dkxd": "代客下单" },
//订单付款状态
"order_pay_status": { "dfk": "待付款", "zfpz": "已上传支付凭证", "yfk": "已付款", "bfyfk": "部分已付款", "ddqx": "订单取消", "tkclz": "退款处理中", "bfytk": "部分已退款", "ytk": "已退款", "zfshbtg": "支付审核不通过" },
//帐户类型( 支付类型)
"pay_account_type": { "cash": "现金", "bank": "银行", "wx": "微信", "alipay": "支付宝", "other": "其它" },
//订单服务付款状态
"order_service_pay_status": { "dfk": "待付款", "yfk": "已付款" },
//商标交付状态
"delivery_status": { "dqrfa": "待确认方案", "fabtg": "方案不通过", "dfwsfw": "待服务", "dsccl": "待上传材料", "dsh": "待审核", "ddj": "待递交", "ydj": "已递交", "ywc": "已完成" },
//商标类型
"tm_type": { "p": "普通商标", "j": "集体商标", "z": "证明商标", "t": "特殊商标" },
//商标类型形式
"tm_form_type": { "1": "立体", "3": "字", "4": "图", "5": "字图", "6": "颜色", "7": "彩色" },
//商标官文回执类型
"official_receipt_type": {
"1": "商标注册申请书", "2": "商标注册申请补正通知书", "3": "商标注册申请受理通知书", "4": "商标注册申请不予受理通知书", "5": "商标注册同日申请补送使用证据通知书",
"6": "商标注册同日申请协商通知书商标注册同日申请抽签通知书", "7": "商标驳回通知书", "8": "商标部分驳回通知书", "9": "商标注册申请初步审定公告通知书",
"10": "商标异议答辩通知书", "11": "异议裁定书", "12": "纸质版商标注册证", "13": "电子版商标注册证"
},
//商标状态
"official_type": {
"1": "商标注册申请书", "2": "商标注册申请补正通知书", "3": "商标注册申请受理通知书", "4": "商标注册申请不予受理通知书", "5": "商标注册同日申请补送使用证据通知书",
"6": "商标注册同日申请协商通知书商标注册同日申请抽签通知书", "7": "商标驳回通知书", "8": "商标部分驳回通知书", "9": "商标注册申请初步审定公告通知书",
"10": "商标异议答辩通知书", "11": "异议裁定书", "12": "纸质版商标注册证", "13": "电子版商标注册证",
"dsccl": "待上传材料", "dqrfa": "待确认方案", "fabtg": "方案不通过", "dsh": "待审核", "shbtg": "审核不通过", "ddj": "待递交", "ydj": "已递交", "djyc": "递交异常"
},
//申请企业类型
"customer_type": { "ent": "企业", "person": "个人" },
//附件类型
"stuff_type": { "csty": "彩色图样", "wts": "委托书", "gzwts": "盖章委托书", "ty": "图样", "sywj": "声音文件", "smwj": "说明文件" },
//来源类型
"source_type": { "childorders": "子订单", "expensevoucher": "费用单" },
//审核状态
"audit_status": { "dsh": "待审核", "btg": "不通过", "tg": "通过" },
//收款类型
"receipt_type": { "sk": "收款", "csrz": "初始入账", "ptdsk": "平台代收款" },
//退款类型
"refund_type": { "tk": "退款", "ptdtk": "平台代退款" },
//费用类型
"expense_type": { "gf": "官费", "tax": "税金", "channelSettleProfit": "订单渠道分润结算" },
//凭单类型
"direction_type": { "sr": "收", "zc": "支" },
"push_return_type": { "0": "推送失败", "1": "推送成功" },
},
}
}
\ No newline at end of file
module.exports={
"bizName":"oplogs",
"list":{
columnMetaData:[
{"width":"200","label":"应用","prop":"appname","isShowTip":true,"isTmpl":false},
{"width":"200","label":"时间","prop":"created_at","isShowTip":true,"isTmpl":false},
{"width":"100","label":"用户名","prop":"username","isShowTip":true,"isTmpl":false},
{"width":"100","label":"性别","prop":"sex","isShowTip":true,"isTmpl":false},
{"width":"200","label":"行为","prop":"op","isShowTip":true,"isTmpl":false},
{"width":"200","label":"内容","prop":"content","isShowTip":true,"isTmpl":false},
{"width":"200","label":"客户端IP","prop":"clientIp","isShowTip":true,"isTmpl":false},
{"width":"200","label":"客户端环境","prop":"agent","isShowTip":true,"isTmpl":false},
]
},
"form":[
{
"title":"应用名称",
"validProp":"name",
"rule": [
{ "required": true, "message": '请输入应用名称', "trigger": 'blur' },
],
ctls:[
{"type":"input","label":"应用名称","prop":"name","placeHolder":"应用名称","style":""},
]
},
{
"title":"应用ID",
"ctls":[
{"type":"input","label":"应用ID","prop":"appid","disabled":true,"placeHolder":"","style":""},
]
},
],
"search":[
{
"title":"应用名称",
ctls:[
{"type":"input","label":"操作用户","prop":"username","placeHolder":"请模糊输入应用名称","style":""},
]
},
{
"title":"客户环境",
ctls:[
{"type":"input","label":"客户环境","prop":"agent","placeHolder":"请模糊输入客户环境","style":""},
]
},
// {
// "title":"",
// "min":1,
// "max":1,
// ctls:[
// {"type":"check","dicKey":"sex","label":"客户环境","prop":"sex","style":""},
// ]
// },
// <gsb-select v-model="formModel[item.prop]"
// :dicKey="item.dicKey"
// :autoComplete="item.autoComplete"
// :isMulti="item.isMulti"
// :modelName="item.modelName"
// :isFilter="item.isFilter"
// :labelField="item.labelField"
// :valueField="item.valueField"></gsb-select>
{
"title":"性别",
ctls:[
{"type":"select","dicKey":"sex","label":"性别","prop":"sex","labelField":"label","valueField":"value","style":""},
]
},
],
"auth":{
"add":[
],
"edit":[
],
"delete":[
{"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isOnGrid":true},
],
"common":[
],
}
}
const fs=require("fs");
const path=require("path");
const appsPath=path.normalize(__dirname+"/apps");
const bizsPath=path.normalize(__dirname+"/bizs");
var appJsons={
}
function getBizFilePath(appJson,bizCode){
const filePath=bizsPath+"/"+"bizjs"+"/"+bizCode+".js";
return filePath;
}
//异常日志处理todo
function initAppBizs(appJson){
for(var bizCode in appJson.config.bizs)
{
const bizfilePath=getBizFilePath(appJson,bizCode);
try{
delete require.cache[bizfilePath];
const bizConfig=require(bizfilePath);
appJson.config.bizs[bizCode].config=bizConfig;
}catch(e){
console.log("bizconfig meta file not exist........");
}
}
return appJson;
}
//初始化资源树--objJson是rstree
function initRsTree(appjson,appidfolder,objJson,parentCodePath){
if(!parentCodePath){//说明当前是根结点
objJson.codePath=objJson.code;
}else{
objJson.codePath=parentCodePath+"/"+objJson.code;
}
if(objJson["bizCode"]){//表示叶子节点
objJson.auths=[];
if(appjson.config.bizs[objJson["bizCode"]]){
objJson.bizConfig=appjson.config.bizs[objJson["bizCode"]].config;
objJson.path=appjson.config.bizs[objJson["bizCode"]].path;
appjson.config.bizs[objJson["bizCode"]].codepath=objJson.codePath;
}
}else{
if(objJson.children){
objJson.children.forEach(obj=>{
initRsTree(appjson,appidfolder,obj,objJson.codePath);
});
}
}
}
fs.readdirSync(appsPath).forEach(f=>{
const ff=path.join(appsPath,f);
delete require.cache[ff];
var appJson=require(ff);
appJson= initAppBizs(appJson);
initRsTree(appJson,appJson.appid,appJson.config.rstree,null);
appJsons[appJson.appid]=appJson;
});
module.exports=appJsons;
module.exports={
"appid":"wx76a324c5d201d1a4",
"label":"企业服务工具箱",
"config":{
"rstree":{
"code":"toolroot",
"label":"工具箱",
"children":[
{
"code":"toggleHeader",
"icon":"el-icon-sort",
"isMenu":true,
"label":"折叠",
},
{
"code":"personCenter",
"label":"个人信息",
"src":"/imgs/logo.png",
"isSubmenu":true,
"children":[
{"code":"wallet","isGroup":true,"label":"账户","children":[
{"code":"mytraderecord","label":"交易记录","isMenu":true,"bizCode":"trades","bizConfig":null,"path":""},
{"code":"smallmoney","label":"钱包","isMenu":true,"bizCode":"oplogs","bizConfig":null,"path":""},
{"code":"fillmoney","label":"充值","isMenu":true,},
]},
{"code":"tool","isGroup":true,"label":"工具","children":[
{"code":"entconfirm","label":"企业用户认证","isMenu":true,"bizCode":"apps","bizConfig":null,"path":""},
{"code":"fav","label":"收藏夹","isMenu":true,"bizCode":"fav","bizConfig":null,"path":""},
{"code":"filebox","label":"文件柜","isMenu":true,"bizCode":"filebox","bizConfig":null,"path":""},
]},
],
},
{
"code":"fillmoney",
"icon":"fa fa-money",
"isMenu":true,
"label":"充值",
},
{
"code":"platformop",
"label":"平台运营",
"icon":"fa fa-cubes",
"isSubmenu":true,
"children":[
{"code":"papp","isGroup":true,"label":"平台数据","children":[
{"code":"papparch","label":"应用档案","isMenu":true,"bizCode":"apps","bizConfig":null,"path":""},
{"code":"userarch","label":"用户档案","isMenu":true,"bizCode":"pusers","bizConfig":null,"path":""},
{"code":"traderecord","label":"交易记录","isMenu":true,"bizCode":"trades","bizConfig":null,"qp":"my","path":""},
{"code":"pconfigs","label":"平台配置","isMenu":true,"bizCode":"pconfigs","bizConfig":null,"qp":"my","path":""},
]},
{"code":"pop","isGroup":true,"label":"平台运维","children":[
{"code":"cachearch","label":"缓存档案","isMenu":true,"bizCode":"cachearches","bizConfig":null,"path":""},
{"code":"oplogmag","label":"行为日志","isMenu":true,"bizCode":"oplogs","bizConfig":null,"path":""},
{"code":"machinearch","label":"机器档案","isMenu":true,"bizCode":"machines","bizConfig":null,"path":""},
{"code":"codezrch","label":"代码档案","isMenu":true,"bizCode":"codezrch","bizConfig":null,"path":""},
{"code":"imagearch","label":"镜像档案","isMenu":true},
{"code":"containerarch","label":"容器档案","isMenu":true},
]},
],
},
{
"code":"sysmag",
"label":"系统管理",
"icon":"fa fa-cube",
"isSubmenu":true,
"children":[
{"code":"usermag","isGroup":true,"label":"用户管理","children":[
{"code":"rolearch","label":"角色档案","isMenu":true,"bizCode":"roles","bizConfig":null},
{"code":"appuserarch","label":"用户档案","isMenu":true,"bizCode":"appusers","bizConfig":null},
]},
{"code":"productmag","isGroup":true,"label":"产品管理","children":[
{"code":"productarch","label":"产品档案","bizCode":"mgproducts","isMenu":true,"bizConfig":null},
{"code":"products","label":"首页产品档案","bizCode":"products","isMenu":false,"bizConfig":null},
]},
],
},
{
"code":"exit",
"icon":"fa fa-power-off",
"isMenu":true,
"label":"退出",
},
{
"code":"toolCenter",
"label":"工具集",
"src":"/imgs/logo.png",
"isSubmenu":false,
"isMenu":false,
"children":[
{"code":"tools","isGroup":true,"label":"查询工具","children":[
{"code":"xzquery","label":"续展查询","bizCode":"xzsearch","bizConfig":null,"path":""},
{"code":"xzgqquery","label":"续展过期查询","bizCode":"xzgqsearch","bizConfig":null,"path":""},
]},
],
},
],
},
"bizs":{
"cachearches":{"title":"首页产品档案","config":null,"path":"/platform/cachearches","comname":"cachearches"},
"products":{"title":"首页产品档案","config":null,"path":"/","comname":"products"},
"mgproducts":{"title":"产品档案","config":null,"path":"/platform/mgproducts","comname":"mgproducts"},
"codezrch":{"title":"代码档案","config":null,"path":"/platform/codezrch","comname":"codezrch"},
"machines":{"title":"机器档案","config":null,"path":"/platform/machines","comname":"machines"},
"pconfigs":{"title":"平台配置","config":null,"path":"/platform/pconfigs","comname":"pconfigs"},
"apps":{"title":"应用档案","config":null,"path":"/platform/apps","comname":"apps"},
"roles":{"title":"角色档案","config":null,"path":"/platform/roles","comname":"roles"},
"pusers":{"title":"平台用户档案","config":null,"path":"/platform/pusers","comname":"users"},
"appusers":{"title":"某应用用户档案","config":null,"path":"/platform/appusers","comname":"users"},
"oplogs":{"title":"行为日志","config":null,"path":"/platform/op/oplogs","comname":"oplogs"},
"trades":{"title":"交易记录","config":null,"path":"/platform/uc/trades","comname":"trades"},
"xzsearch":{"title":"续展查询","config":null,"isDynamicRoute":true,"path":"/products/xzsearch","comname":"xzsearch"},
"xzgqsearch":{"title":"续展过期查询","config":null,"isDynamicRoute":true,"path":"/products/xzgqsearch","comname":"xzgqsearch"},
},
"pauths":[
"add","edit","delete","export","show"
],
"pdict":{
"sex":{"male":"男","female":"女"},
"configType":{"price":"宝币兑换率","initGift":"初次赠送"},
"productCata":{"ip":"知产","ic":"工商","tax":"财税","hr":"人力","common":"常用"},
"logLevel":{"debug":0,"info":1,"warn":2,"error":3,"fatal":4},
"tradeType":{"fill":"充值","consume":"消费","gift":"赠送","giftMoney":"红包","refund":"退款"},
"tradeStatus":{"unSettle":"未结算","settled":"已结算"}
}
}
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("oplog", {
appid: DataTypes.STRING,
appkey: DataTypes.STRING,
requestId: DataTypes.STRING,
logLevel: {
type: DataTypes.ENUM,
allowNull: false,
values: Object.keys(uiconfig.config.pdict.logLevel),
defaultValue: "info",
},
op: DataTypes.STRING,
content: DataTypes.STRING(5000),
resultInfo: DataTypes.TEXT('long'),
clientIp: DataTypes.STRING,
agent: {
type: DataTypes.STRING,
allowNull: true,
},
opTitle: DataTypes.TEXT,
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_op_log',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("pushlog", {
appid: DataTypes.STRING,
appkey: DataTypes.STRING,
requestId: DataTypes.STRING,
logLevel: {
type: DataTypes.ENUM,
allowNull: false,
values: Object.keys(uiconfig.config.pdict.logLevel),
defaultValue: "info",
},
op: DataTypes.STRING,
content: DataTypes.TEXT,
resultInfo: DataTypes.TEXT('long'),
returnTypeName:DataTypes.STRING,
returnType : {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.push_return_type),
set: function (val) {
this.setDataValue("returnType", val);
this.setDataValue("returnTypeName", uiconfig.config.pdict.push_return_type[val]);
},
defaultValue: "0",
}, //数据推送返回结果类型 push_return_type:{"0":"失败","1":"成功"}
clientIp: DataTypes.STRING,
agent: {
type: DataTypes.STRING,
allowNull: true,
},
opTitle: DataTypes.STRING(500),
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_push_log',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("app", {
name: DataTypes.STRING(100), // 应用名称
appDataOpType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.app_data_op_type),
}, // 应用数据操作类型:00独立,10全委托,20部分委托
appPayType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.app_pay_type),
}, // 支付类型:00第三方支付,10平台代收款
contactName : DataTypes.STRING(30), // 联系人姓名
contactMobile: DataTypes.STRING(30), // 联系人手机
contactEmail : DataTypes.STRING(30), // 联系人邮箱
uappKey : DataTypes.STRING(64), // 平台应用key
uAppId : DataTypes.INTEGER, //
appSecret : DataTypes.STRING(64), // 密钥信息,用于进行签名请求接口
status : DataTypes.INTEGER, // 状态 0禁用 1启用
channelAppId : DataTypes.STRING(64), // 渠道appID
channelAppKey: DataTypes.STRING(64), // 渠道appKey
pushOrderUrl : DataTypes.STRING(500), // 获取渠道推送订单的url
appSourceCode : DataTypes.STRING(50), // app来源code
notes : DataTypes.STRING, // 备注
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_app',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("appproduct", {
app_id :DataTypes.STRING(50),// 应用id
itemCode :DataTypes.STRING(100),// 产品编码
itemName :DataTypes.STRING(100),// 产品名称
picUrl :DataTypes.STRING(500),// 产品图片地址
channelItemCode :DataTypes.STRING(100),// 渠道产品编码
channelItemName :DataTypes.STRING(100),// 渠道产品名称
serviceItemCode :DataTypes.STRING(100),// 服务商产品编码
pushServiceItemCode :DataTypes.STRING(100),// 推送到服务商的产品编码
status :DataTypes.BOOLEAN,// 状态 0禁用 1启用
verifyPrice :DataTypes.BOOLEAN,// 是否验证价格 0不验证 1验证
proPrice :DataTypes.DOUBLE,// 产品价格
serviceCharge :DataTypes.DOUBLE,// 服务费
publicExpense :DataTypes.DOUBLE,// 官费
rateConfig :DataTypes.DECIMAL(12, 2),// 税率
discountsRateConfig :DataTypes.DECIMAL(12, 2),// 优惠税率
channelProfitRate :DataTypes.DECIMAL(12, 2),// 渠道利润分成比率(只分订单中毛利润总额的分成)
sort :DataTypes.INTEGER,// 排序
productType_id :DataTypes.INTEGER,// 产品类型Id
productOneType_id :DataTypes.INTEGER,// 产品大类Id
deliveryUrl:DataTypes.STRING(500),// 交付地址
productLogo:DataTypes.STRING(500),// 产品logo
productDesc:DataTypes.STRING(1024),// 产品描述
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_app_product',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("appuser", {
app_id : DataTypes.INTEGER, // 应用id
channelUserId : DataTypes.STRING(64), // 渠道用户ID
channelUserName : DataTypes.STRING(64), // 渠道用户登录名
uUserName : DataTypes.STRING(64), //
uAppId : DataTypes.INTEGER, //
userMoblie : DataTypes.STRING(20), // 用户手机号
nickname : DataTypes.STRING(50), // 昵称
orgName : DataTypes.STRING(255), // 组织结构名称
orgPath : DataTypes.STRING(255), // 组织结构路径
isEnabled : DataTypes.INTEGER, // 是否启用
loginNum : DataTypes.INTEGER, // 登录次数
lastLoginTime : DataTypes.DATE, // 上次登录时间
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'c_app_user',
validate: {
},
indexes: [
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("moneyaccount", {
app_id: DataTypes.INTEGER, // 是否显示
balance: {//余额
type: DataTypes.DECIMAL(12, 3),
defaultValue: 0.00,
},
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(50),
defaultValue: "其它",
},
payeeName: {
type: DataTypes.STRING(100),
},//收款人姓名
certificateNo: DataTypes.STRING(100),//帐号
bankAddr: DataTypes.STRING(500), //银行地址
description: DataTypes.STRING,//描述
isOfflinePay: {//是否支持线下支付,0否,1是
type: DataTypes.BOOLEAN,
defaultValue: false,
},
transferRate: {//商户收款费率,千分率,如:值为5,计算时除以1000(第三方公司收款账户有此值)
type: DataTypes.DECIMAL(12, 2),
defaultValue: 5.00,
},
bankToPtTransferRate: {//银行收平台费率,千分率,如:值为2.6,计算时除以1000(平台公司收款账户有此值)
type: DataTypes.DECIMAL(12, 2),
defaultValue: 0,
},
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'b_moneyaccount',
validate: {
},
indexes: [
]
});
}
\ No newline at end of file
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 logCtl=system.getObject("web.common.oplogCtl");
class TaskBase{
constructor(className){
this.redisClient=system.getObject("util.redisClient");
this.serviceName=className;
}
async doTask(){
try {
await this.subDoTask();
//日志记录
logCtl.info({
optitle:this.serviceName+",任务成功执行完成",
op:"base/db/task.base.js",
content:"",
clientIp:""
});
} catch (e) {
//日志记录
logCtl.error({
optitle:this.serviceName+"任务执行异常",
op:"base/db/task.base.js",
content:e.stack,
clientIp:""
});
}
}
async subDoTask(){
console.log("请在子类中重写此方法进行操作业务逻辑............................!");
}
static getServiceName(ClassObj){
return ClassObj["name"];
}
}
module.exports=TaskBase;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class CacheService {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
}
async buildCacheRtn(pageValues) {
var ps = pageValues.map(k => {
var tmpList = k.split("|");
if (tmpList.length == 2) {
return { name: tmpList[0], val: tmpList[1], key: k };
}
});
return ps;
}
async findAndCountAll(obj) {
const pageNo = obj.pageInfo.pageNo;
const pageSize = obj.pageInfo.pageSize;
const limit = pageSize;
const offset = (pageNo - 1) * pageSize;
var search_name = obj.search && obj.search.name ? obj.search.name : "";
var cacheCacheKeyPrefix = "sadd_children_appkeys:" + settings.appKey + "_cachekey";
var cacheList = await this.cacheManager["MagCache"].getCacheSmembersByKey(cacheCacheKeyPrefix);
if (search_name) {
cacheList = cacheList.filter(f => f.indexOf(search_name) >= 0);
}
var pageValues = cacheList.slice(offset, offset + limit);
var kobjs = await this.buildCacheRtn(pageValues);
var tmpList = { results: { rows: kobjs, count: cacheList.length } };
return system.getResultSuccess(tmpList);
}
async delCache(obj) {
var keyList = obj.del_cachekey.split("|");
if (keyList.length == 2) {
var cacheCacheKeyPrefix = "sadd_children_appkeys:" + settings.appKey + "_cachekey";
await this.cacheManager["MagCache"].delCacheBySrem(cacheCacheKeyPrefix, obj.del_cachekey);
await this.cacheManager["MagCache"].del(keyList[0]);
return { status: 0 };
}
}
async clearAllCache(obj) {
await this.cacheManager["MagCache"].clearAll();
return { status: 0 };
}
}
module.exports = CacheService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class OplogService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(OplogService));
//this.appDao=system.getObject("db.appDao");
this.opLogUrl = settings.apiconfig.opLogUrl();
this.opLogEsIsAdd = settings.apiconfig.opLogEsIsAdd();
}
async create(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) {
return null;
}
var rc = system.getObject("util.execClient");
var rtn = null;
try {
// var myDate = new Date();
// var tmpTitle=myDate.toLocaleString()+":"+qobj.optitle;
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
if (this.opLogEsIsAdd == 1) {
qobj.content = qobj.content.replace("field list", "字段列表")
qobj.created_at = (new Date()).getTime();
//往Es中写入日志
var addEsData = JSON.stringify(qobj);
rc.execPost(qobj, this.opLogUrl);
} else {
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
} catch (e) {
console.log(e.stack, "addLog------error-----------------------*****************");
qobj.content = e.stack;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
}
async createDb(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) {
return null;
}
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
} catch (e) {
console.log(e.stack, "addLog------error-----------------------*****************");
qobj.content = e.stack;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
}
}
module.exports = OplogService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class PushlogService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(PushlogService));
//this.appDao=system.getObject("db.appDao");
this.opLogUrl = settings.apiconfig.opLogUrl();
this.opLogEsIsAdd = settings.apiconfig.opLogEsIsAdd();
}
async create(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) {
return null;
}
var rc = system.getObject("util.execClient");
var rtn = null;
try {
// var myDate = new Date();
// var tmpTitle=myDate.toLocaleString()+":"+qobj.optitle;
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
if (this.opLogEsIsAdd == 1) {
qobj.content = qobj.content.replace("field list", "字段列表")
qobj.created_at = (new Date()).getTime();
//往Es中写入日志
var addEsData = JSON.stringify(qobj);
rc.execPost(qobj, this.opLogUrl);
} else {
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
} catch (e) {
console.log(e.stack, "addLog------error-----------------------*****************");
qobj.content = e.stack;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
}
async createDb(qobj) {
if (!qobj || !qobj.op || qobj.op.indexOf("metaCtl/getUiConfig") >= 0 ||
qobj.op.indexOf("userCtl/checkLogin") >= 0 ||
qobj.op.indexOf("oplogCtl") >= 0 ||
qobj.op.indexOf("getDicConfig") >= 0 ||
qobj.op.indexOf("getRouteConfig") >= 0 ||
qobj.op.indexOf("getRsConfig") >= 0) {
return null;
}
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
} catch (e) {
console.log(e.stack, "addLog------error-----------------------*****************");
qobj.content = e.stack;
//解决日志大于4000写入的问题
if (qobj.content.length > 4980) {
qobj.content = qobj.content.substring(0, 4980);
}
this.dao.create(qobj);
}
}
}
module.exports = PushlogService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class AapService extends ServiceBase {
constructor() {
super("dbapp", ServiceBase.getDaoName(AapService));
}
async getItemByAppKey(appKey) {
return this.dao.getItemByAppKey(appKey);
}
}
module.exports = AapService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class AppProductService extends ServiceBase {
constructor() {
super("dbapp", ServiceBase.getDaoName(AppProductService));
}
//根据渠道产品码获取产品详情
async findByChannelItemCode(obj){
// var user = obj.user;
var app = obj.app;
// if(!user){
// return system.getResultFail(-101, "未知用户");
// }
if(!app){
return system.getResultFail(-102, "未知渠道");
}
var channelItemCode = obj.channelItemCode;
if(!channelItemCode){
return system.getResultFail(-103, "渠道产品编码不能为空");
}
var product = await this.dao.model.findOne({
where:{channelItemCode:channelItemCode,app_id:app.id,status:1},
attributes:["id","app_id","itemCode","itemName","picUrl","channelItemCode","channelItemName",
"serviceItemCode","proPrice","serviceCharge","publicExpense","rateConfig","discountsRateConfig"],
raw:true
});
if(!product){
return system.getResultFail(-104, "未知产品");
}
return system.getResultSuccess(product);
}
//获取产品列表(根据父类产品编码获取)
async findByProductTypeCode(obj){
// var user = obj.user;
var app = obj.app;
// if(!user){
// return system.getResultFail(-101, "未知用户");
// }
if(!app){
return system.getResultFail(-102, "未知渠道");
}
var itemCode = obj.itemCode;
if(!itemCode){
return system.getResultFail(-103, "渠道产品编码不能为空");
}
var pProduct = await this.dao.model.findOne({
where:{itemCode:itemCode,app_id:app.id,status:1},
attributes:["id","app_id","itemCode","itemName"],
raw:true
});
if(!pProduct || !pProduct.id){
return system.getResultFail(-104, "未知产品");
}
var pList = await this.dao.model.findAll({
where:{productType_id:pProduct.id,app_id:app.id,status:1},
attributes:["id","app_id","itemCode","itemName","picUrl","channelItemCode","channelItemName",
"serviceItemCode","proPrice","serviceCharge","publicExpense","rateConfig","discountsRateConfig",
"productLogo","productDesc"
],
raw:true
});
return system.getResultSuccess(pList);
}
//获取产品列表(根据产品一类编码获取)
async findByProductOneTypeCode(obj){
// var user = obj.user;
var app = obj.app;
// if(!user){
// return system.getResultFail(-101, "未知用户");
// }
if(!app){
return system.getResultFail(-102, "未知渠道");
}
var itemCode = obj.itemCode;
if(!itemCode){
return system.getResultFail(-103, "渠道产品编码不能为空");
}
var pProduct = await this.dao.model.findOne({
where:{itemCode:itemCode,app_id:app.id,status:1},
attributes:["id","app_id","itemCode","itemName"],
raw:true
});
if(!pProduct || !pProduct.id){
return system.getResultFail(-104, "未知产品");
}
var pList = await this.dao.model.findAll({
where:{productOneType_id:pProduct.id,productType_id:{ [this.db.Op.ne]: 0 },app_id:app.id,status:1},
attributes:["id","app_id","itemCode","itemName","picUrl","channelItemCode","channelItemName",
"serviceItemCode","proPrice","serviceCharge","publicExpense","rateConfig","discountsRateConfig",
"productLogo","productDesc"
],
raw:true
});
return system.getResultSuccess(pList);
}
}
module.exports = AppProductService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class AapUserService extends ServiceBase {
constructor() {
super("dbapp", ServiceBase.getDaoName(AapUserService));
this.opPlatformUtils = system.getObject("util.businessManager.opPlatformUtils");
}
async loginUser(channelUserId, channelUserName, userMoblie, nickname, orgName, orgPath) {
if (!channelUserId) {
return system.getResult(null, "channelUserId不能为空");
}
var params = {
channelUserId: channelUserId,
channelUserName: channelUserName,
userMoblie: userMoblie,
nickname: nickname,
orgName: orgName,
orgPath: orgPath
}
var userItem = await this.cacheManager["ApiUserCache"].cache(channelUserId, { status: true }, 3000, params);
if (!userItem) {
return system.getResult(null, "用户注册失败");
}
return system.getResultSuccess(userItem);
}
}
module.exports = AapUserService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class MoneyAccountService extends ServiceBase {
constructor() {
super("dbapp", ServiceBase.getDaoName(MoneyAccountService));
}
}
module.exports=MoneyAccountService;
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;
const system = require("../system");
const moment = require('moment')
const settings = require("../../config/settings");
const md5 = require("MD5");
class ServiceBase {
constructor(gname, daoName) {
this.db = system.getObject("db.common.connection").getCon();
this.cacheManager = system.getObject("db.common.cacheManager");
this.daoName = daoName;
this.dao = system.getObject("db." + gname + "." + daoName);
this.restS = system.getObject("util.restClient");
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey] && !(params[tKey] instanceof Array)) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "返回值签名验证失败");
}
return system.getResultSuccess();
}
/**
* 创建签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async createSign(params, app_key) {
if (!params) {
return system.getResultFail(-310, "请求参数为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResultFail(-330, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey] && !(params[tKey] instanceof Array)) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResultFail(-350, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
return system.getResultSuccess(resultTmpSign);
}
/**
* 验证参数信息不能为空
* @param {*} params 验证的参数
* @param {*} verifyParamsCount 需要验证参数的数量,如至少验证3个,则传入3
* @param {*} columnList 需要过滤掉的验证参数列表,格式:[]
*/
async verifyParams(params, verifyParamsCount, columnList) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!columnList) {
columnList = [];
}
var keys = Object.keys(params);
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
if (keys.length < verifyParamsCount) {
return system.getResult(null, "请求参数不完整");
}
var tResult = system.getResultSuccess();
for (let k = 0; k < keys.length; k++) {
const tKeyValue = keys[k];
if (columnList.length == 0 || columnList.indexOf(tKeyValue) < 0) {
if (!tKeyValue) {
tResult = system.getResult(null, k + "参数不能为空");
break;
}
}//白名单为空或不在白名单中,则需要验证不能为空
}
return tResult;
}
async apiCallWithAk(url, params) {
var acckapp = await this.cacheManager["ApiAccessKeyCache"].cache(settings.appKey);
var acck = acckapp.accessKey;
//按照访问token
var restResult = await this.restS.execPostWithAK(params, url, acck);
if (restResult) {
if (restResult.status == 0) {
var resultRtn = restResult.data;
return resultRtn;
} else {
await this.cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
return null;
}
}
return null;
}
// async apiCallWithAkNoWait(url,params){
// var acckapp=await this.cacheManager["ApiAccessKeyCache"].cache(settings.appKey);
// var acck=acckapp.accessKey;
// //按照访问token
// var restResult=await this.restS.execPostWithAK(params,url,acck);
// if(restResult){
// if(restResult.status==0){
// var resultRtn=restResult.data;
// return resultRtn;
// }else{
// await this.cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
// return null;
// }
// }
// return null;
// }
static getDaoName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Service")).toLowerCase() + "Dao";
}
async findAndCountAll(obj) {
const apps = await this.dao.findAndCountAll(obj);
return apps;
}
async refQuery(qobj) {
return this.dao.refQuery(qobj);
}
async bulkDeleteByWhere(whereParam, t) {
return await this.dao.bulkDeleteByWhere(whereParam, t);
}
async bulkDelete(ids) {
var en = await this.dao.bulkDelete(ids);
return en;
}
async delete(qobj) {
return this.dao.delete(qobj);
}
async create(qobj) {
return this.dao.create(qobj);
}
async update(qobj, tm = null) {
return this.dao.update(qobj, tm);
}
async updateByWhere(setObj, whereObj, t) {
return this.dao.updateByWhere(setObj, whereObj, t);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.dao.customExecAddOrPutSql(sql, paras);
}
async customQuery(sql, paras, t) {
return this.dao.customQuery(sql, paras, t);
}
async findCount(whereObj = null) {
return this.dao.findCount(whereObj);
}
async findSum(fieldName, whereObj = null) {
return this.dao.findSum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
return this.dao.getPageList(pageIndex, pageSize, whereObj, orderObj, attributesObj, includeObj);
}
async findOne(obj) {
return this.dao.findOne(obj);
}
async findById(oid) {
return this.dao.findById(oid);
}
/*
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid(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(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/*
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo(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 = ServiceBase;
var sha1 = require('sha1'),
events = require('events'),
emitter = new events.EventEmitter(),
xml2js = require('xml2js');
// 微信类
var Weixin = function(path) {
this.data = '';
this.msgType = 'text';
this.fromUserName = '';
this.toUserName = '';
this.funcFlag = 0;
this.path=path;
}
// 验证
Weixin.prototype.checkSignature = function(req) {
// 获取校验参数
this.signature = req.query.signature,
this.timestamp = req.query.timestamp,
this.nonce = req.query.nonce,
this.echostr = req.query.echostr;
// 按照字典排序
var array = [this.token, this.timestamp, this.nonce];
array.sort();
// 连接
var str = sha1(array.join(""));
// 对比签名
if(str == this.signature) {
return true;
} else {
return false;
}
}
// ------------------ 监听 ------------------------
// 监听文本消息
Weixin.prototype.textMsg = function(callback) {
emitter.on("weixinTextMsg", callback);
return this;
}
// 监听图片消息
Weixin.prototype.imageMsg = function(callback) {
emitter.on("weixinImageMsg", callback);
return this;
}
// 监听地理位置消息
Weixin.prototype.locationMsg = function(callback) {
emitter.on("weixinLocationMsg", callback);
return this;
}
// 监听链接消息
Weixin.prototype.urlMsg = function(callback) {
emitter.on("weixinUrlMsg", callback);
return this;
}
// 监听事件
Weixin.prototype.eventMsg = function(callback) {
emitter.on("weixinEventMsg", callback);
return this;
}
// ----------------- 消息处理 -----------------------
/*
* 文本消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType text
* Content 文本消息内容
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseTextMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"content" : this.data.Content[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinTextMsg", msg);
return this;
}
/*
* 图片消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType image
* Content 图片链接
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseImageMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"picUrl" : this.data.PicUrl[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinImageMsg", msg);
return this;
}
/*
* 地理位置消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType location
* Location_X x
* Location_Y y
* Scale 地图缩放大小
* Label 位置信息
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseLocationMsg = function(data) {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"locationX" : this.data.Location_X[0],
"locationY" : this.data.Location_Y[0],
"scale" : this.data.Scale[0],
"label" : this.data.Label[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinLocationMsg", msg);
return this;
}
/*
* 链接消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType link
* Title 消息标题
* Description 消息描述
* Url 消息链接
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseLinkMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"title" : this.data.Title[0],
"description" : this.data.Description[0],
"url" : this.data.Url[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinUrlMsg", msg);
return this;
}
/*
* 事件消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType event
* Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)
* EventKey 事件KEY值,与自定义菜单接口中KEY值对应
*/
Weixin.prototype.parseEventMsg = function() {
var eventKey = '';
if (this.data.EventKey) {
eventKey = this.data.EventKey[0];
}
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"event" : this.data.Event[0],
"eventKey" : eventKey,
"appk":this.path,
}
emitter.emit("weixinEventMsg", msg);
return this;
}
// --------------------- 消息返回 -------------------------
// 返回文字信息
Weixin.prototype.sendTextMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<Content><![CDATA[" + msg.content + "]]></Content>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// 返回音乐信息
Weixin.prototype.sendMusicMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<Music>" +
"<Title><![CDATA[" + msg.title + "]]></Title>" +
"<Description><![CDATA[" + msg.description + "DESCRIPTION]]></Description>" +
"<MusicUrl><![CDATA[" + msg.musicUrl + "]]></MusicUrl>" +
"<HQMusicUrl><![CDATA[" + msg.HQMusicUrl + "]]></HQMusicUrl>" +
"</Music>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// 返回图文信息
Weixin.prototype.sendNewsMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
//
var articlesStr = "";
for (var i = 0; i < msg.articles.length; i++)
{
articlesStr += "<item>" +
"<Title><![CDATA[" + msg.articles[i].title + "]]></Title>" +
"<Description><![CDATA[" + msg.articles[i].description + "]]></Description>" +
"<PicUrl><![CDATA[" + msg.articles[i].picUrl + "]]></PicUrl>" +
"<Url><![CDATA[" + msg.articles[i].url + "]]></Url>" +
"</item>";
}
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<ArticleCount>" + msg.articles.length + "</ArticleCount>" +
"<Articles>" + articlesStr + "</Articles>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// ------------ 主逻辑 -----------------
// 解析
Weixin.prototype.parse = function() {
if(this.data){
this.msgType = this.data.MsgType[0] ? this.data.MsgType[0] : "text";
switch(this.msgType) {
case 'text' :
this.parseTextMsg();
break;
case 'image' :
this.parseImageMsg();
break;
case 'location' :
this.parseLocationMsg();
break;
case 'link' :
this.parseLinkMsg();
break;
case 'event' :
this.parseEventMsg();
break;
}
}
}
// 发送信息
Weixin.prototype.sendMsg = function(msg) {
switch(msg.msgType) {
case 'text' :
this.sendTextMsg(msg);
break;
case 'music' :
this.sendMusicMsg(msg);
break;
case 'news' :
this.sendNewsMsg(msg);
break;
}
}
// Loop
Weixin.prototype.loop = function(req, res) {
// 保存res
this.res = res;
var self = this;
// 获取XML内容
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
buf += chunk;
});
// 内容接收完毕
req.on('end', function() {
xml2js.parseString(buf, function(err, json) {
if (err) {
err.status = 400;
} else {
req.body = json;
}
});
if(req.body){
self.data = req.body.xml;
}
self.parse();
});
}
module.exports = Weixin;
var fs = require("fs");
var objsettings = require("../config/objsettings");
var settings = require("../config/settings");
class System {
static declare(ns) {
var ar = ns.split('.');
var root = System;
for (var i = 0, len = ar.length; i < len; ++i) {
var n = ar[i];
if (!root[n]) {
root[n] = {};
root = root[n];
} else {
root = root[n];
}
}
}
static register(key, ClassObj) {
if (System.objTable[key] != null) {
throw new Error("相同key的对象已经存在");
} else {
let obj = new ClassObj();
System.objTable[key] = obj;
}
return System.objTable[key];
}
static getResult(data, opmsg = "操作成功", req) {
return {
status: !data ? -1 : 0,
msg: opmsg,
data: data || null,
bizmsg: req && req.session && req.session.bizmsg ? req.session.bizmsg : "empty"
};
}
static getErrResult2(errmsg) {
return this.getResult2(null, null, null, errmsg);
}
static getResult2(data, req, okmsg = "操作成功", errmsg = "操作失败") {
var result = {
status: 0,
msg: okmsg,
data: data,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!data) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResult3(data, req, okmsg = "操作成功", errmsg = "操作失败") {
var total = data.total;
data = data.hits;
var sources = [];
data.forEach(function (d) {
sources.push(d._source);
})
var result = {
status: 0,
msg: okmsg,
total: total,
data: sources,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!data) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResult4(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var codes_count = aggs.ncl_one_codes_count;
var bucketlist = codes_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
bucklist.push(d);
})
var data = j.hits;
var total = data.total;
var hit = data.hits;
var sources = [];
hit.forEach(function (d) {
sources.push(d._source);
})
var result = {
status: 0,
msg: okmsg,
total: total,
data: sources,
buckets: bucklist,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!hit) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResultjuhe4(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var codes_count = aggs.ncl_one_codes_count;
var bucketlist = codes_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
bucklist.push(d);
})
var result = {
status: 0,
msg: okmsg,
buckets: bucklist,
};
if (!bucklist) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResultjuhetwo(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var notice_count = aggs.notice_count;
var bucketlist = notice_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
var notice_issue = d.key;
var date = d.date_max.value;
var data = {
notice_issue: notice_issue,
date: date
}
bucklist.push(data);
})
var result = {
status: 0,
msg: okmsg,
buckets: bucklist,
};
if (!bucklist) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据
* @param {*} okmsg 操作成功的描述
*/
static getResultSuccess(data, okmsg = "success") {
return {
status: 0,
msg: okmsg,
data: data || null,
};
}
/**
* 请求返回失败
* @param {*} status 操作失败状态,默认为-1
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultFail(status = -1, errmsg = "fail", data = null) {
return {
status: status,
msg: errmsg,
data: data,
};
}
static getObject(objpath) {
var pathArray = objpath.split(".");
var packageName = pathArray[0];
var groupName = pathArray[1];
var filename = pathArray[2];
var classpath = "";
if (filename) {
classpath = objsettings[packageName] + "/" + groupName;
} else {
classpath = objsettings[packageName];
filename = groupName;
}
var objabspath = classpath + "/" + filename + ".js";
if (System.objTable[objabspath] != null) {
console.log(objabspath, "get cached obj....");
return System.objTable[objabspath];
} else {
console.log("no cached...");
var ClassObj = require(objabspath);
return System.register(objabspath, ClassObj);
}
}
static getUiConfig(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/" + appid + "/index.js";
if (settings.env == "dev") {
delete require.cache[configPath];
}
var configValue = require(configPath);
return configValue;
}
static getUiConfig2(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/index.js";
// if(settings.env=="dev"){
// console.log("delete "+configPath+"cache config");
// delete require.cache[configPath];
// }
delete require.cache[configPath];
var configValue = require(configPath);
return configValue[appid];
}
static get_client_ip(req) {
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket && req.connection.socket.remoteAddress) || '';
var x = ip.match(/(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/);
if (x) {
return x[0];
} else {
return "localhost";
}
};
static y2f(y) {
if (!y) {
return 0;
}
return (Number(y) * 100).toFixed(0);
}
static f2y(f) {
if (!f) {
return 0;
}
return parseFloat((Number(f) / 100).toFixed(2));
}
static f2y4list(list, fields, prev) {
if (!list || list.length == 0 || !fields || fields.length == 0) {
return;
}
prev = prev || "";
for (var item of list) {
for (var f of fields) {
var v = item[f];
if (v) {
try {
item[f + "_y"] = prev + parseFloat((Number(v) / 100).toFixed(2));
} catch (error) {
console.log(error);
}
}
}
}
}
}
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
System.objTable = {};
//访问token失效,请重新获取
System.tokenFail = 1000;
//appKey授权有误
System.appKeyError = 1100;
//应用处于待审核等待启用状态
System.waitAuditApp = 1110;
//渠道应用处于待审核等待启用状态
System.waitAuditSelfApp = 1120;
//用户处于待审核等待启用状态
System.getUserInfoFail = 1140;
//访问appid失效,请重新获取
System.appidFail = 1200;
//签名验证失败,请重新获取
System.signFail = 1300;
//获取访问token失败
System.getAppInfoFail = 1130;
//已经存在信息
System.existData = 1400;
module.exports = System;
\ No newline at end of file
const Client = require('aliyun-api-gateway').Client;
var RPCClient = require('@alicloud/pop-core').RPCClient;
// const client = new Client('203756805', 'crkyej0xlmqa6bmvqijun6ltxparllyn');//开发
const client = new Client('203763771', 'e5e2ytnn6nrkr9qnqk4w5e6z0xlhkznu');//线上
class aliyunClient {
constructor() {
// this.aliReqUrl = "https://aliapi.gongsibao.com/tm/springboard";
this.aliclient = new RPCClient({
accessKeyId: 'LTAI4FmyipY1wuLHjLhMWiPa',
accessKeySecret: 'hp4FF18IDCSym1prqzxrAjnnhNH3ju',
endpoint: 'https://trademark.aliyuncs.com',
apiVersion: '2018-07-24'
});
}
async post(aliReqUrl, actionBody) {
// var reqParam = {};
// reqParam["ActionProcess"] = "AliTm";
// reqParam["ActionType"] = actionType;
// reqParam["ActionBody"] = actionBody;
// if (!actionBody.reqOnlyCode) {
// actionBody["reqOnlyCode"] = await this.getCreateOrderNum();
// }
var param = {
data: actionBody,
timeout: 20000,
headers: {
accept: 'application/json'
}
};
console.log(JSON.stringify(param), "______________峰擎---阿里云参数_______");
var result = await client.post(aliReqUrl, param);
console.log(JSON.stringify(result), "______________峰擎---阿里云返回结果_______");
return result;
}
//阿里接口
async reqbyget(obj, cbk) {
var self = this;
var action = obj.action;
var reqbody = obj.reqbody;
return self.aliclient.request(action, reqbody, {
timeout: 3000, // default 3000 ms
formatAction: true, // default true, format the action to Action
formatParams: true, // default true, format the parameter name to first letter upper case
method: 'GET', // set the http method, default is GET
headers: {}, // set the http request headers
});
}
// async getCreateOrderNum() {
// var createOrderNum = await this.getUidStr(5, 36);//====================订单号生成
// return createOrderNum + "" + Date.now();
// }
// async getUidStr(len, radix) {
// var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
// 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 = aliyunClient;
const system = require("../../system");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
var settings = require("../../../config/settings");
class OpPlatformUtils {
constructor() {
this.restClient = system.getObject("util.restClient");
this.createUserUrl = settings.paasUrl() + "api/auth/accessAuth/register";
this.fetchDefaultVCodeUrl = settings.paasUrl() + "api/auth/accessAuth/fetchDefaultVCode";
this.loginUrl = settings.paasUrl() + "api/auth/accessAuth/loginByMd5Password";
this.authByCodeUrl = settings.paasUrl() + "api/auth/accessAuth/authByCode";
this.exTime = 2 * 3600;//缓存过期时间,2小时
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async getReqApiAccessKey(appKey, secret) {
var cacheManager = system.getObject("db.common.cacheManager");
var reqApiAccessKey = null;
if (appKey && secret) {
reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(appKey, null, this.exTime, secret);
} else {
reqApiAccessKey = await cacheManager["ApiAccessKeyCache"].cache(settings.appKey, null, this.exTime);
}
if (!reqApiAccessKey || !reqApiAccessKey.data) {
return system.getResult(null, "获取请求token失败");
}
return reqApiAccessKey;
}
/**
* 创建用户信息
* @param {*} userName 用户名
* @param {*} mobile 手机号
* @param {*} password 密码,不传为使用默认密码
*
* 返回值:
* {
"status": 0,---值为2000为已经存在此用户,注册失败
"msg": "success",
"data": {
"auth_url": "http://sj.app.com:3002/auth?opencode=1e4949d1c39444a8b32f023143625b1d",---回调url,通过回调地址获取平台用户信息
"opencode": "1e4949d1c39444a8b32f023143625b1d",---平台用户code随机生成会变,平台是30s有效期,通过其可以向获取用户信息
"open_user_id": 12---平台用户id
},
"requestid": "5362bf6f941e4f92961a61068f05cd7f"
}
*/
async createUserInfo(userName, mobile, password, appKey, secret) {
var reqApiAccessKey = await this.getReqApiAccessKey(appKey, secret);
if (reqApiAccessKey.status != 0) {
return reqApiAccessKey;
}
var param = {
userName: userName,
mobile: mobile,
password: password || settings.defaultPassWord,
}
//按照访问token
var restResult = await this.restClient.execPostWithAK(
param,
this.createUserUrl, reqApiAccessKey.data.accessKey);
if (restResult.status != 0 || !restResult.data) {
return system.getResult(restResult.status, restResult.msg);
}
return system.getResultSuccess(restResult.data);
}
async fetchVCode(mobile) {
var reqApiAccessKey = await this.getReqApiAccessKey(null, null);
if (reqApiAccessKey.status != 0) {
return reqApiAccessKey;
}
var param = { mobile: mobile }
//按照访问token
var restResult = await this.restClient.execPostWithAK(
param,
this.fetchDefaultVCodeUrl, reqApiAccessKey.data.accessKey);
if (restResult.status != 0 || !restResult.data) {
return system.getResult(null, restResult.msg);
}
return system.getResultSuccess();
}
/**
* 用户登录
* @param {*} userName 用户名
* @param {*} password 密码,不传为使用默认密码
*
* 返回值:
* {
"status": 0,---值为2010为用户名或密码错误
"msg": "success",
"data": {
"auth_url": "http://sj.app.com:3002/auth?opencode=1e4949d1c39444a8b32f023143625b1d",---回调url,通过回调地址获取平台用户信息
"opencode": "1e4949d1c39444a8b32f023143625b1d"---平台用户code随机生成会变,平台是30s有效期,通过其可以向获取用户信息
},
"requestid": "5362bf6f941e4f92961a61068f05cd7f"
}
*/
async login(userName, password, appKey, secret) {
var reqApiAccessKey = await this.getReqApiAccessKey(appKey, secret);
if (reqApiAccessKey.status != 0) {
return reqApiAccessKey;
}
var param = {
userName: userName,
password: password || settings.defaultPassWord,
}
//按照访问token
var restResult = await this.restClient.execPostWithAK(
param,
this.loginUrl, reqApiAccessKey.data.accessKey);
if (restResult.status != 0 || !restResult.data) {
return system.getResult(restResult.status, restResult.msg);
}
return system.getResultSuccess(restResult.data);
}
/**
* 通过opencode获取用户登录信息
* @param {*} opencode 用户登录或注册opencode
*
* 返回值:
* {
"status": 0,---值为2010为用户名或密码错误
"msg": "success",
"data": {},---平台用户信息
"requestid": "5362bf6f941e4f92961a61068f05cd7f"
}
*/
async authByCode(opencode, appKey, secret) {
var reqApiAccessKey = await this.getReqApiAccessKey(appKey, secret);
if (reqApiAccessKey.status != 0) {
return reqApiAccessKey;
}
var param = {
opencode: opencode
}
//按照访问token
var restResult = await this.restClient.execPostWithAK(
param,
this.authByCodeUrl, reqApiAccessKey.data.accessKey);
if (restResult.status != 0 || !restResult.data) {
return system.getResult(restResult.status, restResult.msg);
}
return system.getResultSuccess(restResult.data);
}
}
module.exports = OpPlatformUtils;
const system = require("../../system");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class PushUtils {
constructor() {
this.logCtl = system.getObject("web.common.oplogCtl");
this.merchantpushlogSve = system.getObject("service.merchant.merchantpushlogSve");
this.execClient = system.getObject("util.execClient");
this.merchantpushSve = system.getObject("service.merchant.merchantpushSve");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async getCachePushItemUrl(merchant_id) {
var cacheManager = system.getObject("db.common.cacheManager");
return await cacheManager["MerchantPushUrlCache"].cache(merchant_id, null, 3600);
}
/**
* 推送到第三方数据
* @param {*} reqUrl 请求推送的url
* @param {*} params 推送的参数
*/
async push(merchantId, field, params) {
try {
var pushConfig = await this.getCachePushItemUrl(merchantId) || {};
var reqUrl = pushConfig[field];
if(!reqUrl) {
this.logCtl.error({
optitle: "推送到第三方数据异常error",
op: "merchantId = " + merchantId + "; reqUrl is empty, field = " + field,
content: "reqUrl is empty",
clientIp: "pushUtils中没有ip"
});
return;
}
// 签名
params.sign = await this.createSign(params, merchantId);
params.requestid = this.getUUID();
var rtn = await this.execClient.execPost(params, reqUrl);
var returnValue = 0;
if (rtn.stdout) {
var result = JSON.parse(rtn.stdout);
if (result.code == "success") {
returnValue = 1;
}
}
//记录推送结果
this.merchantpushlogSve.create({
merchant_id: merchantId,//商户id
api: reqUrl,//接口地址
params: JSON.stringify(params),//推送数据信息
rs: rtn.stdout,//推送返回结果
success: returnValue//是否推送成功
});
} catch (e) {
console.log(e.stack);
this.logCtl.error({
optitle: "推送到第三方数据异常error",
op: reqUrl + ";params=" + JSON.stringify(params) + ";reqid=" + params.requestid,
content: e.stack,
clientIp: "pushUtils中没有ip"
});
}
}
/**
* 多次推送到第三方数据
* @param {*} reqUrl 请求推送的url
* @param {*} params 推送的参数
*/
async pushMany(reqUrl, params) {
try {
params.requestid = this.getUUID();
var rtn = this.execClient.execPost(params, reqUrl);
//TODO:可以做多次推送,规则待定
// var result = JSON.parse(rtn.stdout);
// if (result && result.code == 200) {
// var resultdata = result.data;
// return { code: 1, msg: "success" };
// } else {
// return { code: -1, msg: "err" };
// }
} catch (e) {
this.logCtl.error({
optitle: "多次推送到第三方数据异常error",
op: url + ";params=" + JSON.stringify(params) + ";reqid=" + params.requestid,
content: e.stack,
clientIp: pobj.clientIp
});
}
}
async createSign(params, appId) {
var cacheManager = system.getObject("db.common.cacheManager");
var appInfo = await cacheManager["ApiAppKeyCheckCache"].cache(appId, null, 3000);
var signArr = [];
var keys = Object.keys(params).sort();
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
var resultSignStr = signArr.join("&") + "&key=" + appInfo.appSecret;
return md5(resultSignStr).toUpperCase();
}
}
module.exports = PushUtils;
var excel = require('exceljs');
const system=require("../system");
const uuidv4 = require('uuid/v4');
const fs=require("fs");
class ExcelClient {
constructor() {
this.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
this.ossClient=system.getObject("util.ossClient");
this.filedownloadDao = system.getObject("db.filedownloadDao");
}
async download(params) {
var self = this;
var title = params.title || "";
var code = params.code || uuidv4();
var fileName = params.fileName || code + ".xlsx";
var filePath = params.filePath || "/tmp/" + fileName;
var rows = params.rows || [];
var user = params.user || {};
var wb = new excel.Workbook();
wb.properties.date1904 = true;
var sheet = wb.addWorksheet("sheet1");
var headers = rows[0];
console.log(headers, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2 headers");
if(title) {
sheet.addRow([title]);
sheet.getCell("A1").font = {
    name: '微软雅黑',
    family: 4,
    size: 12,
    bold: true
};
sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' };
var colkey = 0;
if(headers.length > 0) {
colkey = headers.length - 1;
}
var endColumn = this.columns[colkey] || "A";
sheet.mergeCells("A1:" + endColumn + "1");
}
for(var r of rows) {
sheet.addRow(r);
}
wb.xlsx.writeFile(filePath).then(async function(d) {
var rtn = await self.ossClient.upfile(fileName, filePath);
fs.unlink(filePath,function(err){});
var obj = {
user_id : user.id || 0,
userName : user.userName || "",
code : code,
fileName : fileName,
filePath : rtn.url || "",
isDownload : false,
}
var obj = await self.filedownloadDao.create(obj);
});
}
}
module.exports = ExcelClient;
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
class ExecClient {
constructor() {
this.cmdPostPattern = "curl --user admines:adminGSBes. -k -H 'Content-type: application/json' -d '{data}' {url}";
this.cmdGetPattern = "curl -G -X GET '{url}'";
this.cmdPushDataPostPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'request-id:{requestId}' -d '{data}' {url}";
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
async exec2(cmd) {
return exec(cmd, { encoding: "base64" });
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
FetchPushDataPostCmd(subData, url, token, requestId) {
var requestId = requestId || this.getUUID();
var data = JSON.stringify(subData);
var cmd = this.cmdPushDataPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{tk\}/g, token).replace(/\{requestId\}/g, requestId);
console.log(cmd);
return cmd;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execPushDataPost(subData, url, token, requestId) {
let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId);
var result = await this.exec(cmd);
return result;
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec2(cmd);
return result;
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
async execGet(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec2(cmd);
return result;
}
async execGetTimeOut(subData, url, timeOut = 5000) {
//timeOut,单位是毫秒
let cmd = this.FetchGetCmd(subData, url);
var options = {
timeout: timeOut,
};
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
}
}
module.exports = ExecClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
// var log4js = require('log4js');
var settings=require("../../config/settings");
class LogClient{
constructor(){
// log4js.configure(settings.basepath+"/app/config/log4js.json");
// this.logerApp=log4js.getLogger("app");
// this.logerHttp=log4js.getLogger("http");
}
}
module.exports=LogClient;
var nodemailer = require('nodemailer');
class MailClient{
constructor(){
this.mailer=nodemailer.createTransport({
service: 'aliyun',
secureConnection: true,
port: 465,
auth: {
user: 'czhd_ip@gongsibao.com',
pass: 'HANtang2018'
}
});
}
//嵌入图片
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Embedded Image',
// html: '<b>Hello world ✔</b><br/>Embedded image: <img src="cid:00000001"/>',
// attachments: [{
// filename: '01.png',
// path: './img/r-book1.png',
// cid: '00000001'
// }]
// }
//发送邮件
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Hello ✔',
// text: 'Hello world ✔',
// html: '<b>Hello world ✔</b>' // html body
// attachments: [
// {
// filename: 'text0.txt',
// content: 'hello world!'
// },
// {
// filename: 'text1.txt',
// path: './attach/text1.txt'
// }
// ]
// };
async sendMsg(to,title,text,html,cc,bcc,atts){
var options={
from: "czhd_ip@gongsibao.com", // sender address
to: to, // list of receivers
cc: cc||'',
bcc: bcc||'',
subject: title, // Subject line
text: text || '', // plaintext body
html: html || '',// html body
attachments: atts||[
]
};
var self=this;
var p=new Promise(function(resv,rej){
self.mailer.sendMail(options, function(error, info){
if(error){
return rej(error);
}else{
return resv(info.response);
}
});
});
return p;
}
}
module.exports=MailClient;
// var d=new MailClient();
// d.sendMsg("zhangjiao@gongsibao.com","test","see","hello txt",null,null,[
// {
// filename: 'text1.jpg',
// path: 'https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_3369154019592833720182216128337mmexport1540195729827.jpg'
// }
// ]).then(r=>{
// console.log(r);
// }).catch(e=>{
// console.log(e);
// });
var co = require('co');
var OSS = require('ali-oss');
class OSSClient{
constructor(){
this.client=new OSS({
endpoint: 'https://oss-cn-beijing.aliyuncs.com',
accessKeyId: 'LTAIyAUK8AD04P5S',
accessKeySecret: 'DHmRtFlw2Zr3KaRwUFeiu7FWATnmla'
});
this.client.useBucket('gsb-zc');
}
async downfile(key){
var me=this;
var result=await co(function* () {
var result = yield me.client.get(key, '/tmp/'+key);
return result;
});
return result;
}
async upfile(key,filepath){
var me=this;
var result=await co(function* () {
var result = yield me.client.put(key, filepath);
return result;
})
return result;
}
async putBuffer (key,buf) {
try {
var result = await this.client.put(key, buf);
console.log(result);
return result
} catch (e) {
console.log(e);
return null
}
}
}
module.exports=OSSClient;
// var oss=new OSSClient();
// var key="netsharp_QSzjD4HdKdTmRR6b5486pEA3AbsW8Pr8.jpg"
// oss.upfile(key,"/usr/devws/OMC/igirl-api/r3.jpg").then(function(result){
// console.log(result);
// });
// oss.downfile(key).then(function(result){
// console.log(result);
// });
const system = require("../system");
const redis = require("redis");
const settings = require("../../config/settings");
const bluebird = require("bluebird");
bluebird.promisifyAll(redis);
// const logCtl=system.getObject("web.oplogCtl");
class RedisClient {
constructor() {
const redisConfig = settings.redis();
this.client = null;
if (!redisConfig.password) {
this.client = redis.createClient({
host: redisConfig.host,
port: redisConfig.port,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
} else {
this.client = redis.createClient({
host: redisConfig.host,
port: redisConfig.port,
password: redisConfig.password,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
}
// return client.multi().get('foo').execAsync().then(function(res) {
// console.log(res); // => 'bar'
// });
this.client.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.client.on异常:",
// op:"base/utils/redisClient/this.client.on",
// content:err,
// clientIp:""
// });
});
this.subclient = this.client.duplicate();
this.subclient.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.subclient.on异常:",
// op:"base/utils/redisClient/this.subclient.on",
// content:err,
// clientIp:""
// });
});
var self = this;
this.subclient.on("message", async function (channel, message) {
console.log(channel, '------------- redis message ------------------- ');
if (self.taskmanager) {
if (channel == "task") {
if (message == "newtask") {
(async (that) => {
var msg2 = await that.rpop("tasklist");
if (msg2) {
console.log("taskName+++++" + msg2);
var msgs2 = msg2.split("_");
var action = msgs2[0];
var taskName = msgs2[1];
var exp = msgs2[2];
await that.taskmanager.addTask(taskName, exp);
}
})(self)
} else {
(async (msg, that) => {
var msgs = msg.split("_");
var action = msgs[0];
if (action == "delete") {
var taskName = msgs[1];
await that.taskmanager.deleteTask(taskName);
}
})(message, self);
}
}
}
if (self.chatserver) {
if (channel != "task") {
var message = JSON.parse(message);
console.log(message, "------------------------------------------ publish message");
if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", message);
} else if (self.chatserver.users[channel]) {
if (message.type) {
self.chatserver.users[channel].client.emit(message.type, message.data);
} else {
//持久化
self.chatserver.users[channel].client.emit("chatmsg", message);
}
}
}
}
});
}
async subscribe(channel, chatserver) {
if (!this.chatserver) {
this.chatserver = chatserver;
}
return this.subclient.subscribeAsync(channel);
}
async unsubscribe(channel) {
//this.chatserver=null;
return this.subclient.unsubscribeAsync(channel);
}
async subscribeTask(channel, taskmanager) {
if (!this.taskmanager) {
this.taskmanager = taskmanager;
}
return this.subclient.subscribeAsync(channel);
}
async publish(channel, msg) {
console.log(channel + ":" + msg);
return this.client.publishAsync(channel, msg);
}
async rpush(key, val) {
return this.client.rpushAsync(key, val);
}
async llen(key) {
return this.client.llenAsync(key);
}
async rpushWithEx(key, val, t) {
var p = this.rpush(key, val);
this.client.expire(key, t);
return p;
}
async rpop(key) {
return this.client.rpopAsync(key);
}
async lpop(key) {
return this.client.lpopAsync(key);
}
async lrem(key, val) {
return this.client.lremAsync(key, 1, val);
}
async ltrim(key, s, e) {
return this.client.ltrimAsync(key, s, e);
}
async clearlist(key) {
await this.client.ltrim(key, -1, -1);
await this.client.ltrim(key, 1, -1);
return 0;
}
async flushall() {
console.log("sss");
return this.client.flushallAsync();
}
async keys(p) {
return this.client.keysAsync(p);
}
async set(key, val) {
if (typeof val == "undefined" || typeof key == "undefined") {
console.log("......................cache val undefined");
console.log(key);
return null;
}
return this.client.setAsync(key, val);
}
async setWithEx(key, val, t) {
var p = this.client.setAsync(key, val);
this.client.expire(key, t);
return p;
}
async get(key) {
return this.client.getAsync(key);
}
async delete(key) {
return this.client.delAsync(key);
}
async hmset(key, jsonObj) {
return this.client.hmsetAsync(key, jsonObj);
}
async hmsetWithEx(key, jsonObj, t) {
var p = this.client.hmsetAsync(key, jsonObj);
this.client.expire(key, t);
return p;
}
async hgetall(key) {
return this.client.hgetallAsync(key);
}
async hincrby(key, f, n) {
return this.client.hincrbyAsync(key, f, n);
}
async sadd(key, vals) {
await this.client.saddAsync(key, ...vals);
return this.scard(key);
}
async scard(key) {
return this.client.scardAsync(key);
}
async srem(key, val) {
return this.client.sremAsync(key, val);
}
async sismember(key, val) {
return this.client.sismemberAsync(key, val);
}
async smembers(key) {
return this.client.smembersAsync(key);
}
async exists(key) {
return this.client.existsAsync(key);
}
async incr(key) {
return this.client.incrAsync(key);
}
}
module.exports = RedisClient;
// var client=new RedisClient();
// (async ()=>{
// await client.rpush("tasklist","xxx");
// await client.rpush("tasklist","xxx");
// var len=await client.llen("tasklist");
// //await client.clearlist("tasklist");
// len=await client.llen("tasklist");
// console.log(len);
// })()
// client.keys('*').then(s=>{
// console.log(s);
// });
// let clients = {};
// clients.watcher = redis.createClient({ ... } );
// clients.alterer = clients.watcher.duplicate();
// client.sadd("h",["ok","jy","ok"]).then(function(r){
// console.log(r);
// });
// client.smembers("h").then(function(r){
// console.log(r);
// });
// client.sismember("h","ok").then(function(r){
// console.log(r);
// });
// console.dir(client);ti.exec( callback )回调函数参数err:返回null或者Array,出错则返回对应命令序列链中发生错误的错误信息,这个数组中最后一个元素是源自exec本身的一个EXECABORT类型的错误
// r.set("hello","oooo").then(function(result){
// console.log(result);
// });
// r.get("hello").then(function(result){
// console.log(result);
// });
// client.hmset("user_1",{name:"jy",age:13}).then(function(r){
// console.log(r);
//
// });
// client.hincrby("user_1","age",2).then(function(r){
// console.log(r);
// setTimeout(function(){
// client.hgetall("user_1").then(function(u){
// console.log(u);
// });
// },3000);
// });
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const querystring = require('querystring');
var settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
class RestClient {
constructor() {
this.cmdGetPattern = "curl {-G} -k -d '{data}' {url}";
this.cmdPostPattern = "curl -k -H 'Content-type: application/json' -d '{data}' '{url}'";
this.cmdPostPatternWithAK = "curl -k -H 'Content-type: application/json' -H 'AccessKey:{ak}' -H 'request-id:{requestId}' -d '{data}' {url}";
this.cmdDownLoadFilePattern = "curl -G -o {fileName} {url}";
this.cmdPostPattern2 = "curl -k -H 'Content-type: application/x-www-form-urlencoded' -d '{data}' {url}";
// form-data形式post data参数类型 md5=2&data=1
this.cmdPostPattern5 = "curl -k --data '{data}' {url}";
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(/\{\-G\}/g, "-G").replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmdWithAK(subData, url, acck) {
var data = JSON.stringify(subData);
var requestId = this.getUUID();
var cmd = this.cmdPostPatternWithAK.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{ak\}/g, acck).replace(/\{requestId\}/g, requestId);
return cmd;
}
FetchPostCmd2(subData, url) {
var data = subData;
var cmd = this.cmdPostPattern2.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd5(subData, url) {
var data = subData;
var cmd = this.cmdPostPattern5.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchDownLoadCmd(outfname, url) {
// console.log(this.cmdPattern);
var cmd = this.cmdDownLoadFilePattern.replace(/\{fileName\}/g, outfname).replace(
/\{url\}/g, url);
return cmd;
}
async exec(cmd, options) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
if (options) {
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
} else {
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
}
async execDownload(url, outfname) {
let cmd = this.FetchDownLoadCmd(outfname, url);
var result = await this.exec(cmd);
return result;
}
async execGet(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
var data = querystring.stringify(subData);
let cmd = this.FetchGetCmd(data, url);
var result = await this.exec(cmd);
return result;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd, {
maxBuffer: 10000 * 1024
});
return result;
}
async execPostWithAK(subData, url, ak) {
let cmd = this.FetchPostCmdWithAK(subData, url, ak);
var result = await this.exec(cmd, {
maxBuffer: 1024 * 1024 * 15
});
var rtn = result.stdout;
if (rtn) {
return JSON.parse(rtn);
} else {
return null;
}
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd2(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPost3(subData, url) {
let cmd = this.FetchPostCmd3(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet3(url) {
let cmd = this.FetchGetCmd3(url);
console.log("execGet3-----01");
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPostESignBao(subData, url) {
let cmd = this.FetchPostCmd4(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPostForm(subData, url) {
let cmd = this.FetchPostCmd5(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execCustomPostESignBao(cmd) {
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
test() {
console.log("hello");
}
}
module.exports = RestClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
const system=require("../system");
class SmsClient{
constructor(){
this.smsTeml="http://123.57.156.109:4103/api/Send";
this.restClient=system.getObject("util.restClient");
}
async sendMsg(to,content){
var txtObj ={
"appId":8,
"mobilePhone":to,
"content":content
}
return this.restClient.execPost(txtObj,this.smsTeml);
}
}
module.exports=SmsClient;
// var util = require('util');
// var ssdb = require('ssdb-node');
// const settings = require("../../config/settings");
// const bluebird = require("bluebird");
// bluebird.promisifyAll(ssdb);
// class SsdbClient {
// constructor() {
// this.pool = new ssdb({
// port: 8888,
// host: '192.168.18.26',
// auth: 'lowlogslowlogslowlogslowlogYsy123',
// authCallback:""
// });
// }
// async set(obj) {
// var key = obj.key;
// var value = obj.value;
// return new Promise((resolve, reject) => {
// this.pool.set(key, value, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// async get(obj) {
// var key = obj.key;
// return new Promise((resolve, reject) => {
// this.pool.get(key, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// }
// module.exports = SsdbClient;
\ No newline at end of file
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var methodOverride = require('method-override');
var cookierParser = require('cookie-parser');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');
var multer = require('multer');
var errorHandler = require('errorhandler');
var settings = require('./settings');
var system = require('../base/system');
var routes = require('./routes');
const logCtl = system.getObject("web.common.oplogCtl");
const clientRedis = system.getObject("util.redisClient").client;
//const tm=system.getObject("db.taskManager");
module.exports = function (app) {
app.set('port', settings.port);
app.set('views', settings.basepath + '/app/front/entry');
app.set('view engine', 'ejs');
app.use(methodOverride());
app.use(cookierParser());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
routes(app);//初始化路由
app.use(express.static(path.join(settings.basepath, '/app/front/entry/public')));
app.all('*', function (req, res, next) {
req.objs = system;
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
// res.header('Access-Control-Allow-Credentials', 'true');
if (req.method == 'OPTIONS') {
res.send(200); //让options请求快速返回/
}
else {
next();
}
});
if (settings.env == "dev") {
app.use(session(
{
name: 'devdemosid',
cookie: { maxAge: 3600000 },
rolling: true,
resave: false,
saveUninitialized: false,
secret: 'uwotm8',
store: new RedisStore({
client: clientRedis,
}),
}));
} else {
app.use(session(
{
name: 'demosid',
cookie: { maxAge: 3600000 },
rolling: true,
resave: false,
saveUninitialized: false,
secret: 'uwotm8',
store: new RedisStore({
client: clientRedis,
}),
}));
}
// development only
if ('development' == app.get('env')) {
app.use(errorHandler());
} else {
app.use(function (err, req, res) {
console.log("prod error handler...........................................");
console.log(err);
logCtl.error({
optitle: "environment 调用异常error:",
op: req.url,
content: e.toString(),
clientIp: system.get_client_ip(req),
agent: req.headers["user-agent"],
});
//logerApp.error("prod error handler",err);
res.send("link index");
});
}
};
var settings={
redis:{
host: "43.247.184.32",
port: 8967,
password: "Gongsibao2018",
db:8,
},
database:{
dbname : "igirl_channel",
user: "write",
password: "write",
config: {
host: '192.168.18.237',
port: 3306,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug:false,
dialectOptions:{
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
}
},
reqEsDevUrl:"http://192.168.4.249:9200/",
reqHomePageDevUrl:"http://zcchannel.apps.com:4003/",
reqAuthUrl:"http://sj.app.com:4002/auth"
};
module.exports = settings;
var path= require('path');
var basepath=path.normalize(path.join(__dirname, '../..'));
var settings = {
web:path.join(basepath,"app/base/controller/impl"),
api:path.join(basepath,"app/base/api/impl"),
util:path.join(basepath,"app/base/utils"),
service:path.join(basepath,"app/base/service/impl"),
db:path.join(basepath,"app/base/db/impl"),
tool:path.join(basepath,"app/base/tool"),
service2:path.join(basepath,"app/base/service"),
applet:path.join(basepath,"app/base/wxapplet/impl"),
};
module.exports = settings;
var fs=require("fs");
var path=require("path");
var system = require('../base/system');
module.exports = function (app) {
var routePath=__dirname+"/routes";
fs.readdir(routePath,function(err,rs){
if(rs){
rs.forEach(function(r){
var func=require(routePath+"/"+r);
func.call(null,app);
});
}
});
};
var url=require("url");
var qr=require("qr-image")
module.exports = function (app) {
app.get('/api/qc', function(req,res){
var params = url.parse(req.url,true);
var detailLink = params.query.detailLink;
try {
var img = qr.image(detailLink,{size :10});
console.log(detailLink)
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
} catch (e) {
res.writeHead(414, {'Content-Type': 'text/html'});
res.end('<h1>414 Request-URI Too Large</h1>');
}
});
};
var url = require("url");
var system = require("../../base/system");
// var userSve = system.getObject("service.auth.userSve");
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) {
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('/: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.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.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 fs=require("fs");
var settings=require("../settings");
var glob = require("glob");
var system = require('../../base/system');
var bizcompCache={};
async function asycReadFile(path){
var p=new Promise(function(reslv,reject){
fs.readFile(path,function(err,r){
if(err){
reject(err);
}else{
reslv(r);
}
});
});
return p;
}
async function buildComponent(compname){
if(bizcompCache[compname] && settings.env=="prod"){
return bizcompCache[compname];
}else{
var htmlpath=settings.basepath+"/app/front/vues/pages/"+compname+"/"+compname+".html";
var jspath=settings.basepath+"/app/front/vues/pages/"+compname+"/"+compname+".js";
var html= await asycReadFile(htmlpath);
var tmpl=html.toString("utf-8");
var js= await asycReadFile(jspath);
var jsstr=js.toString("utf-8");
jsstr=jsstr.replace("${tmpl}",tmpl);
bizcompCache[compname]=jsstr;
return jsstr;
}
}
module.exports = function (app) {
app.get('/vue/comp/base',function(req,res){
var vuePath=settings.basepath+"/app/front/vues/base";
var baseComps=[];
var rs=glob.sync(vuePath+"/**/*.vue");
if(rs){
rs.forEach(function(r){
var comp="";
if(settings.env=="dev"){
delete require.cache[r];
comp=require(r).replace(/\n/g,"");
}else{
comp=require(r).replace(/\n/g,"");
}
baseComps.push(comp);
});
res.end(JSON.stringify(baseComps));
}
});
app.get('/vue/comp/:cname',function(req,res){
var componentName=req.params.cname;
var theme=req.headers["theme"];
var hostname=req.hostname;
buildComponent(componentName,theme,hostname).then(function(r){
res.end(escape(r.replace(/\n/g,"")));
// res.end(r);
});
});
};
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));
});
});
};
var path = require('path');
var ENVINPUT={
DB_HOST:process.env.DB_HOST,
DB_PORT:process.env.DB_PORT,
DB_USER:process.env.DB_USER,
DB_PWD:process.env.DB_PWD,
DB_NAME:process.env.ZC_CHANNEL_DB_NAME,
REDIS_HOST:process.env.REDIS_HOST,
REDIS_PORT:process.env.REDIS_PORT,
REDIS_PWD:process.env.REDIS_PWD,
REDIS_DB:process.env.ZC_CHANNEL_REDIS_DB,
APP_ENV:process.env.APP_ENV?process.env.APP_ENV:"dev"
};
var settings = {
env:ENVINPUT.APP_ENV,
appKey: "201911061250",
secret: "f99d413b767f09b5dff0b3610366cc46",
salt: "%iatpD1gcxz7iF#B",
cacheprefix: "jd",
usertimeout: 3600,//单位秒
basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 4003,
paasUrl: function () {
if (this.env == "dev") {
return "http://p.apps.com:4001/";
} else {
return "https://open.gongsibao.com/";
}
},
reqTransferurl: function () {
if (this.env == "dev") {
return "http://192.168.18.61:3003/";
} else {
return "http://jiaxiya-service/";
}
},
reqEsAddr: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return "http://43.247.184.94:7200/";//localsettings.reqEsDevUrl;
} else {
return "http://43.247.184.94:7200/";
}
},
reqZcApi: function () {
if (this.env == "dev") {
return "http://zcapi.apps.com:4002/";//localsettings.reqEsDevUrl;
} else {
return "http://zcapi-service/";//k8s服务名称
}
},
pushFqbossDataUrl: function () {
if (this.env == "dev") {
return "http://192.168.18.141:3000/";//localsettings.reqEsDevUrl;
} else {
return "https://fqgirl.gongsibao.com/";
}
},
apiconfig: {
opLogUrl: function () {
return settings.reqEsAddr() + "bigdata_zc_op_log/_doc?pretty";
},
opLogEsIsAdd: function () {
return 1;
},
},
homePage: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.reqHomePageDevUrl;
} else {
return "http://boss.gongsibao.com/";
}
},
redis: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.redis;
} else {
return {
host:ENVINPUT.REDIS_HOST,
port:ENVINPUT.REDIS_PORT,
password:ENVINPUT.REDIS_PWD,
db:ENVINPUT.REDIS_DB,
};
}
},
database: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.database;
} else {
return {
dbname : ENVINPUT.DB_NAME,
user : ENVINPUT.DB_USER,
password : ENVINPUT.DB_PWD,
config : {
host: ENVINPUT.DB_HOST,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug:false,
dialectOptions:{
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
},
};
}
}
};
module.exports = settings;
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
<!DOCTYPE html>
<html lang="zh-CN">
<body>
<div style="width:100%;text-align: center;font-size: 20px;">
ok
</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"
}
```
data:function(){
return {
downloadTimes : 1, // 设置检查重试次数变量,
code : '', // 下载文件的code值
}
},
methods : {
// 创建下载文件方法
exportFile() {
var self = this;
var datas = self.querydata;
if(!datas || datas.length == 0) {
that.$message.warning(`无查询结果`);
return ;
}
/* [{},{},{}]转换成[[],[],[]] 格式 */
var rows = [];
for(var dd of datas) {
var arr = [];
for(var _idx in dd) {
arr.push(dd[_idx]);
}
rows.push(arr);
}
this.code = "";
/* 生成文件 */
self.$root.postReq("/web/filedownloadCtl/download",{rows : rows}).then(function(d){
if(d.status == 0) {
setTimeout((function(){
/* d.data 返回文件标识 */
self.code = d.data;
self.downloadFile();
}), 2000);
}
});
},
/* 循环检查code, 并下载文件 */
downloadFile() {
var self = this;
self.$root.postReq("/web/filedownloadCtl/findOne",{code : self.code}).then(function(d){
if(d.status == 0) {
if(d.data && d.data.filePath) {
downloadTimes = 1;
/* 文件生成成功 */
window.open(d.data.filePath, "_blank");
} else {
/* 递归2秒一次,超过5次,下载失败 */
if(downloadTimes > 5) {
downloadTimes = 1;
/* 下载超时 */
return;
}
downloadTimes = downloadTimes + 1;
setTimeout((function(){
self.downloadFile();
}), 2000);
}
}
});
},
}
/* Element Chalk Variables */
/* Transition
-------------------------- */
$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--fade-linear-transition: opacity 200ms linear !default;
$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
/* Colors
-------------------------- */
$--color-white: black !default;
$--color-black: #000 !default;
$--color-primary: #2c3e50 !default;
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
$--color-success: #67c23a !default;
$--color-warning: #e6a23c !default;
$--color-danger: #f56c6c !default;
$--color-info: #909399 !default;
$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
$--color-text-primary: #303133 !default;
$--color-text-regular: #606266 !default;
$--color-text-secondary: #909399 !default;
$--color-text-placeholder: #c0c4cc !default;
/* Link
-------------------------- */
$--link-color: $--color-primary-light-2 !default;
$--link-hover-color: $--color-primary !default;
/* Background
-------------------------- */
$--background-color-base: #f5f7fa !default;
/* Border
-------------------------- */
$--border-width-base: 1px !default;
$--border-style-base: solid !default;
$--border-color-base: #dcdfe6 !default;
$--border-color-light: #e4e7ed !default;
$--border-color-lighter: #ebeef5 !default;
$--border-color-extra-light: #f2f6fc !default;
$--border-color-hover: $--color-text-placeholder !default;
$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
$--border-radius-base: 4px !default;
$--border-radius-small: 2px !default;
$--border-radius-circle: 100% !default;
/* Box-shadow
-------------------------- */
$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
/* Fill
-------------------------- */
$--fill-base: $--color-white !default;
/* Font
-------------------------- */
$--font-path: 'fonts' !default;
$--font-size-base: 14px !default;
$--font-size-small: 13px !default;
$--font-size-large: 18px !default;
$--font-color-disabled-base: #bbb !default;
$--font-weight-primary: 500 !default;
$--font-line-height-primary: 24px !default;
/* Size
-------------------------- */
$--size-base: 14px !default;
/* z-index
-------------------------- */
$--index-normal: 1 !default;
$--index-top: 1000 !default;
$--index-popper: 2000 !default;
/* Disable base
-------------------------- */
$--disabled-fill-base: $--background-color-base !default;
$--disabled-color-base: $--color-text-placeholder !default;
$--disabled-border-base: $--border-color-light !default;
/* Icon
-------------------------- */
$--icon-color: #666 !default;
$--icon-color-base: $--color-info !default;
/* Checkbox
-------------------------- */
$--checkbox-font-size: 14px !default;
$--checkbox-font-weight: $--font-weight-primary !default;
$--checkbox-color: $--color-text-regular !default;
$--checkbox-input-height: 14px !default;
$--checkbox-input-width: 14px !default;
$--checkbox-input-border-radius: $--border-radius-small !default;
$--checkbox-input-fill: $--color-white !default;
$--checkbox-input-border: $--border-base !default;
$--checkbox-input-border-color: $--border-color-base !default;
$--checkbox-icon-color: $--color-white !default;
$--checkbox-disabled-input-border-color: $--border-color-base !default;
$--checkbox-disabled-input-fill: #edf2fc !default;
$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
$--checkbox-checked-text-color: $--color-primary !default;
$--checkbox-checked-input-border-color: $--color-primary !default;
$--checkbox-checked-input-fill: $--color-primary !default;
$--checkbox-checked-icon-color: $--fill-base !default;
$--checkbox-input-border-color-hover: $--color-primary !default;
$--checkbox-bordered-height: 40px !default;
$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
$--checkbox-bordered-medium-input-height: 14px !default;
$--checkbox-bordered-medium-input-width: 14px !default;
$--checkbox-bordered-medium-height: 36px !default;
$--checkbox-bordered-small-input-height: 12px !default;
$--checkbox-bordered-small-input-width: 12px !default;
$--checkbox-bordered-small-height: 32px !default;
$--checkbox-bordered-mini-input-height: 12px !default;
$--checkbox-bordered-mini-input-width: 12px !default;
$--checkbox-bordered-mini-height: 28px !default;
$--checkbox-button-font-size: $--font-size-base !default;
$--checkbox-button-checked-fill: $--color-primary !default;
$--checkbox-button-checked-color: $--color-white !default;
$--checkbox-button-checked-border-color: $--color-primary !default;
/* Radio
-------------------------- */
$--radio-font-size: 14px !default;
$--radio-font-weight: $--font-weight-primary !default;
$--radio-color: $--color-text-regular !default;
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
$--radio-input-border-radius: $--border-radius-circle !default;
$--radio-input-fill: $--color-white !default;
$--radio-input-border: $--border-base !default;
$--radio-input-border-color: $--border-color-base !default;
$--radio-icon-color: $--color-white !default;
$--radio-disabled-input-border-color: $--disabled-border-base !default;
$--radio-disabled-input-fill: $--disabled-fill-base !default;
$--radio-disabled-icon-color: $--disabled-fill-base !default;
$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
$--radio-checked-text-color: $--color-primary !default;
$--radio-checked-input-border-color: $--color-primary !default;
$--radio-checked-input-fill: $--color-white !default;
$--radio-checked-icon-color: $--color-primary !default;
$--radio-input-border-color-hover: $--color-primary !default;
$--radio-bordered-height: 40px !default;
$--radio-bordered-padding: 12px 20px 0 10px !default;
$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
$--radio-bordered-small-padding: 8px 15px 0 10px !default;
$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
$--radio-bordered-medium-input-height: 14px !default;
$--radio-bordered-medium-input-width: 14px !default;
$--radio-bordered-medium-height: 36px !default;
$--radio-bordered-small-input-height: 12px !default;
$--radio-bordered-small-input-width: 12px !default;
$--radio-bordered-small-height: 32px !default;
$--radio-bordered-mini-input-height: 12px !default;
$--radio-bordered-mini-input-width: 12px !default;
$--radio-bordered-mini-height: 28px !default;
$--radio-button-font-size: $--font-size-base !default;
$--radio-button-checked-fill: $--color-primary !default;
$--radio-button-checked-color: $--color-white !default;
$--radio-button-checked-border-color: $--color-primary !default;
$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
/* Select
-------------------------- */
$--select-border-color-hover: $--border-color-hover !default;
$--select-disabled-border: $--disabled-border-base !default;
$--select-font-size: $--font-size-base !default;
$--select-close-hover-color: $--color-text-secondary !default;
$--select-input-color: $--color-text-placeholder !default;
$--select-multiple-input-color: #666 !default;
$--select-input-focus-background: $--color-primary !default;
$--select-input-font-size: 14px !default;
$--select-option-color: $--color-text-regular !default;
$--select-option-disabled-color: $--color-text-placeholder !default;
$--select-option-disabled-background: $--color-white !default;
$--select-option-height: 34px !default;
$--select-option-hover-background: $--background-color-base !default;
$--select-option-selected: $--color-primary !default;
$--select-option-selected-hover: $--background-color-base !default;
$--select-group-color: $--color-info !default;
$--select-group-height: 30px !default;
$--select-group-font-size: 12px !default;
$--select-dropdown-background: $--color-white !default;
$--select-dropdown-shadow: $--box-shadow-light !default;
$--select-dropdown-empty-color: #999 !default;
$--select-dropdown-max-height: 274px !default;
$--select-dropdown-padding: 6px 0 !default;
$--select-dropdown-empty-padding: 10px 0 !default;
$--select-dropdown-border: solid 1px $--border-color-light !default;
/* Alert
-------------------------- */
$--alert-padding: 8px 16px !default;
$--alert-border-radius: $--border-radius-base !default;
$--alert-title-font-size: 13px !default;
$--alert-description-font-size: 12px !default;
$--alert-close-font-size: 12px !default;
$--alert-close-customed-font-size: 13px !default;
$--alert-success-color: $--color-success-lighter !default;
$--alert-info-color: $--color-info-lighter !default;
$--alert-warning-color: $--color-warning-lighter !default;
$--alert-danger-color: $--color-danger-lighter !default;
$--alert-icon-size: 16px !default;
$--alert-icon-large-size: 28px !default;
/* Message Box
-------------------------- */
$--msgbox-width: 420px !default;
$--msgbox-border-radius: 4px !default;
$--msgbox-font-size: $--font-size-large !default;
$--msgbox-content-font-size: $--font-size-base !default;
$--msgbox-content-color: $--color-text-regular !default;
$--msgbox-error-font-size: 12px !default;
$--msgbox-padding-primary: 15px !default;
$--msgbox-success-color: $--color-success !default;
$--msgbox-info-color: $--color-info !default;
$--msgbox-warning-color: $--color-warning !default;
$--msgbox-danger-color: $--color-danger !default;
/* Message
-------------------------- */
$--message-shadow: $--box-shadow-base !default;
$--message-min-width: 380px !default;
$--message-background-color: #edf2fc !default;
$--message-padding: 15px 15px 15px 20px !default;
$--message-content-color: $--color-text-regular !default;
$--message-close-color: $--color-text-placeholder !default;
$--message-close-size: 16px !default;
$--message-close-hover-color: $--color-text-secondary !default;
$--message-success-color: $--color-success !default;
$--message-info-color: $--color-info !default;
$--message-warning-color: $--color-warning !default;
$--message-danger-color: $--color-danger !default;
/* Notification
-------------------------- */
$--notification-width: 330px !default;
$--notification-padding: 14px 26px 14px 13px !default;
$--notification-radius: 8px !default;
$--notification-shadow: $--box-shadow-light !default;
$--notification-border-color: $--border-color-lighter !default;
$--notification-icon-size: 24px !default;
$--notification-close-font-size: $--message-close-size !default;
$--notification-group-margin: 13px !default;
$--notification-font-size: $--font-size-base !default;
$--notification-color: $--color-text-regular !default;
$--notification-title-font-size: 16px !default;
$--notification-title-color: $--color-text-primary !default;
$--notification-close-color: $--color-text-secondary !default;
$--notification-close-hover-color: $--color-text-regular !default;
$--notification-success-color: $--color-success !default;
$--notification-info-color: $--color-info !default;
$--notification-warning-color: $--color-warning !default;
$--notification-danger-color: $--color-danger !default;
/* Input
-------------------------- */
$--input-font-size: $--font-size-base !default;
$--input-color: $--color-text-regular !default;
$--input-width: 140px !default;
$--input-height: 40px !default;
$--input-border: $--border-base !default;
$--input-border-color: $--border-color-base !default;
$--input-border-radius: $--border-radius-base !default;
$--input-border-color-hover: $--border-color-hover !default;
$--input-fill: $--color-white !default;
$--input-fill-disabled: $--disabled-fill-base !default;
$--input-color-disabled: $--font-color-disabled-base !default;
$--input-icon-color: $--color-text-placeholder !default;
$--input-placeholder-color: $--color-text-placeholder !default;
$--input-max-width: 314px !default;
$--input-hover-border: $--border-color-hover !default;
$--input-clear-hover-color: $--color-text-secondary !default;
$--input-focus-border: $--color-primary !default;
$--input-focus-fill: $--color-white !default;
$--input-disabled-fill: $--disabled-fill-base !default;
$--input-disabled-border: $--disabled-border-base !default;
$--input-disabled-color: $--disabled-color-base !default;
$--input-disabled-placeholder-color: $--color-text-placeholder !default;
$--input-medium-font-size: 14px !default;
$--input-medium-height: 36px !default;
$--input-small-font-size: 13px !default;
$--input-small-height: 32px !default;
$--input-mini-font-size: 12px !default;
$--input-mini-height: 28px !default;
/* Cascader
-------------------------- */
$--cascader-menu-fill: $--fill-base !default;
$--cascader-menu-font-size: $--font-size-base !default;
$--cascader-menu-radius: $--border-radius-base !default;
$--cascader-menu-border: $--border-base !default;
$--cascader-menu-border-color: $--border-color-base !default;
$--cascader-menu-border-width: $--border-width-base !default;
$--cascader-menu-color: $--color-text-regular !default;
$--cascader-menu-option-color-active: $--color-text-secondary !default;
$--cascader-menu-option-fill-active: rgba($--color-text-secondary, 0.12) !default;
$--cascader-menu-option-color-hover: $--color-text-regular !default;
$--cascader-menu-option-fill-hover: rgba($--color-text-primary, 0.06) !default;
$--cascader-menu-option-color-disabled: #999 !default;
$--cascader-menu-option-fill-disabled: rgba($--color-black, 0.06) !default;
$--cascader-menu-option-empty-color: #666 !default;
$--cascader-menu-group-color: #999 !default;
$--cascader-menu-shadow: 0 1px 2px rgba($--color-black, 0.14), 0 0 3px rgba($--color-black, 0.14) !default;
$--cascader-menu-option-pinyin-color: #999 !default;
$--cascader-menu-submenu-shadow: 1px 1px 2px rgba($--color-black, 0.14), 1px 0 2px rgba($--color-black, 0.14) !default;
/* Group
-------------------------- */
$--group-option-flex: 0 0 (1/5) * 100% !default;
$--group-option-offset-bottom: 12px !default;
$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
$--group-title-color: $--color-black !default;
$--group-title-font-size: $--font-size-base !default;
$--group-title-width: 66px !default;
/* Tab
-------------------------- */
$--tab-font-size: $--font-size-base !default;
$--tab-border-line: 1px solid #e4e4e4 !default;
$--tab-header-color-active: $--color-text-secondary !default;
$--tab-header-color-hover: $--color-text-regular !default;
$--tab-header-color: $--color-text-regular !default;
$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
$--tab-vertical-header-width: 90px !default;
$--tab-vertical-header-count-color: $--color-white !default;
$--tab-vertical-header-count-fill: $--color-text-secondary !default;
/* Button
-------------------------- */
$--button-font-size: 14px !default;
$--button-font-weight: $--font-weight-primary !default;
$--button-border-radius: $--border-radius-base !default;
$--button-padding-vertical: 12px !default;
$--button-padding-horizontal: 20px !default;
$--button-medium-font-size: 14px !default;
$--button-medium-border-radius: $--border-radius-base !default;
$--button-medium-padding-vertical: 10px !default;
$--button-medium-padding-horizontal: 20px !default;
$--button-small-font-size: 12px !default;
$--button-small-border-radius: #{$--border-radius-base - 1} !default;
$--button-small-padding-vertical: 9px !default;
$--button-small-padding-horizontal: 15px !default;
$--button-mini-font-size: 12px !default;
$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
$--button-mini-padding-vertical: 7px !default;
$--button-mini-padding-horizontal: 15px !default;
$--button-default-color: $--color-text-regular !default;
$--button-default-fill: $--color-white !default;
$--button-default-border: $--border-color-base !default;
$--button-disabled-color: $--color-text-placeholder !default;
$--button-disabled-fill: $--color-white !default;
$--button-disabled-border: $--border-color-lighter !default;
$--button-primary-border: $--color-primary !default;
$--button-primary-color: $--color-white !default;
$--button-primary-fill: $--color-primary !default;
$--button-success-border: $--color-success !default;
$--button-success-color: $--color-white !default;
$--button-success-fill: $--color-success !default;
$--button-warning-border: $--color-warning !default;
$--button-warning-color: $--color-white !default;
$--button-warning-fill: $--color-warning !default;
$--button-danger-border: $--color-danger !default;
$--button-danger-color: $--color-white !default;
$--button-danger-fill: $--color-danger !default;
$--button-info-border: $--color-info !default;
$--button-info-color: $--color-white !default;
$--button-info-fill: $--color-info !default;
$--button-hover-tint-percent: 20% !default;
$--button-active-shade-percent: 10% !default;
/* cascader
-------------------------- */
$--cascader-height: 200px !default;
/* Switch
-------------------------- */
$--switch-on-color: $--color-primary !default;
$--switch-off-color: $--border-color-base !default;
$--switch-disabled-color: $--border-color-lighter !default;
$--switch-disabled-text-color: $--color-text-placeholder !default;
$--switch-font-size: $--font-size-base !default;
$--switch-core-border-radius: 10px !default;
$--switch-width: 40px !default;
$--switch-height: 20px !default;
$--switch-button-size: 16px !default;
/* Dialog
-------------------------- */
$--dialog-background-color: $--color-primary-light-4 !default;
$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
$--dialog-close-hover-color: $--color-primary !default;
$--dialog-title-font-size: $--font-size-large !default;
$--dialog-font-size: 14px !default;
$--dialog-line-height: $--font-line-height-primary !default;
$--dialog-padding-primary: 20px !default;
/* Table
-------------------------- */
$--table-border-color: $--border-color-lighter !default;
$--table-border: 1px solid $--table-border-color !default;
$--table-text-color: $--color-text-regular !default;
$--table-header-color: $--color-text-secondary !default;
$--table-row-hover-background: $--background-color-base !default;
$--table-current-row-background: $--color-primary-light-9 !default;
$--table-header-background: $--color-white !default;
$--table-footer-background: $--color-text-placeholder !default;
$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
/* Pagination
-------------------------- */
$--pagination-font-size: 13px !default;
$--pagination-fill: $--color-white !default;
$--pagination-color: $--color-text-primary !default;
$--pagination-border-radius: 3px !default;
$--pagination-button-color: $--color-text-primary !default;
$--pagination-button-width: 35.5px !default;
$--pagination-button-height: 28px !default;
$--pagination-button-disabled-color: $--color-text-placeholder !default;
$--pagination-button-disabled-fill: $--color-white !default;
$--pagination-hover-fill: $--color-primary !default;
$--pagination-hover-color: $--color-white !default;
/* Popover
-------------------------- */
$--popover-fill: $--color-white !default;
$--popover-font-size: $--font-size-base !default;
$--popover-border-color: $--border-color-lighter !default;
$--popover-arrow-size: 6px !default;
$--popover-padding: 12px !default;
$--popover-padding-large: 18px 20px !default;
$--popover-title-font-size: 16px !default;
$--popover-title-color: $--color-text-primary !default;
/* Tooltip
-------------------------- */
$--tooltip-fill: $--color-text-primary !default;
$--tooltip-color: $--color-white !default;
$--tooltip-font-size: 12px !default;
$--tooltip-border-color: $--color-text-primary !default;
$--tooltip-arrow-size: 6px !default;
$--tooltip-padding: 10px !default;
/* Tag
-------------------------- */
$--tag-padding: 0 10px !default;
$--tag-fill: rgba($--color-primary, 0.10) !default;
$--tag-color: $--color-primary !default;
$--tag-border: rgba($--color-primary, 0.20) !default;
$--tag-font-size: 12px !default;
$--tag-border-radius: 4px !default;
$--tag-info-fill: rgba($--color-info, 0.10) !default;
$--tag-info-border: rgba($--color-info, 0.20) !default;
$--tag-info-color: $--color-info !default;
$--tag-primary-fill: rgba($--color-primary, 0.10) !default;
$--tag-primary-border: rgba($--color-primary, 0.20) !default;
$--tag-primary-color: $--color-primary !default;
$--tag-success-fill: rgba($--color-success, 0.10) !default;
$--tag-success-border: rgba($--color-success, 0.20) !default;
$--tag-success-color: $--color-success !default;
$--tag-warning-fill: rgba($--color-warning, 0.10) !default;
$--tag-warning-border: rgba($--color-warning, 0.20) !default;
$--tag-warning-color: $--color-warning !default;
$--tag-danger-fill: rgba($--color-danger, 0.10) !default;
$--tag-danger-border: rgba($--color-danger, 0.20) !default;
$--tag-danger-color: $--color-danger !default;
/* Tree
-------------------------- */
$--tree-node-hover-color: $--background-color-base !default;
$--tree-text-color: $--color-text-regular !default;
$--tree-expand-icon-color: $--color-text-placeholder !default;
/* Dropdown
-------------------------- */
$--dropdown-menu-box-shadow: $--box-shadow-light !default;
$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
$--dropdown-menuItem-hover-color: $--link-color !default;
/* Badge
-------------------------- */
$--badge-fill: $--color-danger !default;
$--badge-radius: 10px !default;
$--badge-font-size: 12px !default;
$--badge-padding: 6px !default;
$--badge-size: 18px !default;
/* Card
--------------------------*/
$--card-border-color: $--border-color-lighter !default;
$--card-border-radius: 4px !default;
$--card-padding: 20px !default;
/* Slider
--------------------------*/
$--slider-main-background-color: $--color-primary !default;
$--slider-runway-background-color: $--border-color-light !default;
$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
$--slider-stop-background-color: $--color-white !default;
$--slider-disable-color: $--color-text-placeholder !default;
$--slider-margin: 16px 0 !default;
$--slider-border-radius: 3px !default;
$--slider-height: 6px !default;
$--slider-button-size: 16px !default;
$--slider-button-wrapper-size: 36px !default;
$--slider-button-wrapper-offset: -15px !default;
/* Steps
--------------------------*/
$--steps-border-color: $--disabled-border-base !default;
$--steps-border-radius: 4px !default;
$--steps-padding: 20px !default;
/* Menu
--------------------------*/
$--menu-item-color: $--color-text-primary !default;
$--menu-item-fill: $--color-white !default;
$--menu-item-hover-fill: $--color-primary-light-9 !default;
/* Rate
--------------------------*/
$--rate-height: 20px !default;
$--rate-font-size: $--font-size-base !default;
$--rate-icon-size: 18px !default;
$--rate-icon-margin: 6px !default;
$--rate-icon-color: $--color-text-placeholder !default;
/* DatePicker
--------------------------*/
$--datepicker-color: $--color-text-regular !default;
$--datepicker-off-color: $--color-text-placeholder !default;
$--datepicker-header-color: $--color-text-regular !default;
$--datepicker-icon-color: $--color-text-primary !default;
$--datepicker-border-color: $--disabled-border-base !default;
$--datepicker-inner-border-color: #e4e4e4 !default;
$--datepicker-inrange-color: $--border-color-extra-light !default;
$--datepicker-inrange-hover-color: $--border-color-extra-light !default;
$--datepicker-active-color: $--color-primary !default;
$--datepicker-text-hover-color: $--color-primary !default;
$--datepicker-cell-hover-color: #fff !default;
/* Loading
--------------------------*/
$--loading-spinner-size: 42px !default;
$--loading-fullscreen-spinner-size: 50px !default;
/* Scrollbar
--------------------------*/
$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
/* Carousel
--------------------------*/
$--carousel-arrow-font-size: 12px !default;
$--carousel-arrow-size: 36px !default;
$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
$--carousel-indicator-width: 30px !default;
$--carousel-indicator-height: 2px !default;
$--carousel-indicator-padding-horizontal: 4px !default;
$--carousel-indicator-padding-vertical: 12px !default;
$--carousel-indicator-out-color: $--border-color-hover !default;
/* Collapse
--------------------------*/
$--collapse-border-color: $--border-color-lighter !default;
$--collapse-header-height: 48px !default;
$--collapse-header-padding: 20px !default;
$--collapse-header-fill: $--color-white !default;
$--collapse-header-color: $--color-text-primary !default;
$--collapse-header-size: 13px !default;
$--collapse-content-fill: $--color-white !default;
$--collapse-content-size: 13px !default;
$--collapse-content-color: $--color-text-primary !default;
/* Transfer
--------------------------*/
$--transfer-border-color: $--border-color-lighter !default;
$--transfer-border-radius: $--border-radius-base !default;
$--transfer-panel-width: 200px !default;
$--transfer-panel-header-height: 40px !default;
$--transfer-panel-header-background: $--background-color-base !default;
$--transfer-panel-footer-height: 40px !default;
$--transfer-panel-body-height: 246px !default;
$--transfer-item-height: 30px !default;
$--transfer-item-hover-background: $--color-text-secondary !default;
$--transfer-filter-height: 32px !default;
/* Header
--------------------------*/
$--header-padding: 0 20px !default;
/* Footer
--------------------------*/
$--footer-padding: 0 20px !default;
/* Main
--------------------------*/
$--main-padding: 20px !default;
/* Break-point
--------------------------*/
$--sm: 768px !default;
$--md: 992px !default;
$--lg: 1200px !default;
$--xl: 1920px !default;
$--breakpoints: (
'xs' : (max-width: $--sm),
'sm' : (min-width: $--sm),
'md' : (min-width: $--md),
'lg' : (min-width: $--lg),
'xl' : (min-width: $--xl)
);
$--breakpoints-spec: (
'xs-only' : (max-width: $--sm - 1),
'sm-and-up' : (min-width: $--sm),
'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md} - 1)",
'sm-and-down': (max-width: $--md - 1),
'md-and-up' : (min-width: $--md),
'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg } - 1)",
'md-and-down': (max-width: $--lg - 1),
'lg-and-up' : (min-width: $--lg),
'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl } - 1)",
'lg-and-down': (max-width: $--xl - 1),
'xl-only' : (min-width: $--xl),
);
var gulp = require('gulp');
var fs = require("fs");
var tap = require('gulp-tap');
var minimist = require('minimist');
var merge = require('merge-stream');
var rename = require('gulp-rename');
var del = require("del");
var concat = require('gulp-concat');
var gulpif=require("gulp-if");
var knownOptions = {
string: 'name',
string: 'bizfile',
default: { name: process.env.NODE_ENV || 'Test' }
};
var options = minimist(process.argv.slice(2), knownOptions);
var name = options.name;
var bizfile = options.bizfile;
const BUILD_PATH = "./extra/build";
const DEST_PATH = "./extra/dest";
const CTL_PATH = "./app/base/controller/impl";
const SERVICE_PATH = "./app/base/service/impl";
const DAO_PATH = "./app/base/db/impl";
const PAGE_PATH = "./app/front/vues/pages";
const VUECOM_PATH = "./app/front/vues";
const CSS_PATH = "./app/front/entry/public/css";
const IMG_PATH = "./extra/imgs";
const DEST_IMGPATH="./app/front/entry/public/imgs";
const METABIZ_PATH = "./app/base/db/metadata/bizs/wx76a324c5d201d1a4";
gulp.task('makefile', function (done) {
// 将你的默认的任务代码放在这
del("./extra/dest/*");
var tmpName = name.toLowerCase();
var fstream = gulp.src("./extra/build/*.js")
.pipe(tap(function (file) {
var sfile = file.contents.toString('utf-8');
var rpstr = sfile.replace(/\$\{Name\}/g, name);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(gulp.dest("./extra/dest"));
return fstream;
// var pageStream=gulp.src("./extra/build/page/**/*").pipe(
// gulp.dest("./extra/dest")
// );
// return merge(fstream, pageStream);
});
gulp.task('page', function (cbk) {
var tmpName = name.toLowerCase();
return gulp.src("./extra/build/page/templPage/*.*")
.pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(tap(function (file) {
var sfile = file.contents.toString();
var rpstr = sfile.replace(/\$\{COMNAME\}/g, "gsb_" + tmpName);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
gulp.dest("./extra/dest/" + tmpName + "/")
);
});
gulp.task("cpctl", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Ctl.js").pipe(
rename(function (path) {
path.basename=path.basename.substring(0,1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(CTL_PATH));
});
gulp.task("cpsve", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Sve.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(SERVICE_PATH));
});
gulp.task("cpdao", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Dao.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(DAO_PATH));
});
gulp.task("cppage", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "/*.*").pipe(gulp.dest(PAGE_PATH + "/" + tmpName + "/"));
});
gulp.task("cpbizfile", function (cbk) {
return gulp.src("./extra/build/page/meta.js").pipe(
rename(function (path) {
if (bizfile) {
path.basename = bizfile;
} else {
path.basename = name;
}
})
).pipe(gulp.dest(METABIZ_PATH + "/"));
});
gulp.task("simple", ['page', 'cppage', 'cpbizfile'], function (done) {
done();
});
gulp.task('all', ['makefile', 'page', 'cpctl', 'cpsve', 'cpdao', 'cppage', 'cpbizfile'], function (done) {
done();
});
var minifycss = require('gulp-minify-css')
gulp.task("pagecss",function(cbk){
function defaultcondition(file){
if(file.path.indexOf("spring")>=0){
return false;
}else if(file.path.indexOf("summer")>=0){
return false;
}else if(file.path.indexOf("autumn")>=0){
return false;
}else if(file.path.indexOf("winter")>=0){
return false;
}else{
return true;
}
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(defaultcondition,concat("pagecom.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("springcss",function(cbk){
function springcondition(file){
if(file.path.indexOf("spring")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(springcondition,concat("spring.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("summercss",function(cbk){
function summercondition(file){
if(file.path.indexOf("summer")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(summercondition,concat("summer.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("autumncss",function(cbk){
function autumncondition(file){
if(file.path.indexOf("autumn")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(autumncondition,concat("autumn.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("wintercss",function(cbk){
function wintercondition(file){
if(file.path.indexOf("winter")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(wintercondition,concat("winter.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("1",function(cbk){
function mobilecondition(file){
if(file.path.indexOf("mobile")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(mobilecondition,concat("mobile.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task('allcss', ['pagecss', 'springcss', 'summercss', 'autumncss', 'wintercss'], function (done) {
done();
});
gulp.task('watch', function () {
gulp.watch(VUECOM_PATH+"/**/*/*.css",gulp.series(['allcss']));
});
gulp.task("basehandle",function(cbk){
return gulp.src(VUECOM_PATH+"/base/**/*.vue").
pipe(tap(function (file) {
file.contents=new Buffer(require(file.path).replace(/\n/g,""), "utf-8");
})).pipe(gulp.dest(VUECOM_PATH+"/allie/base/"));
});
var gulp = require('gulp'),
imagemin = require('gulp-imagemin');
pngquant = require('imagemin-pngquant'),
gulp.task('testimg', function () {
del("./extra/testimgs/*");
return gulp.src(IMG_PATH+'/**/*.{png,jpg,gif,ico}')
.pipe(imagemin({
optimizationLevel: 1, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true,//类型:Boolean 默认:false 多次优化svg直到完全优化
use:[pngquant({
quality: [0.3]
})]
}))
//.pipe(gulp.dest(DEST_IMGPATH));
.pipe(gulp.dest("./extra/testimgs/"));
});
\ No newline at end of file
var http = require('http');
var express = require('express');
var app = express();
var setttings=require("./app/config/settings");
var environment = require('./app/config/environment');
// var SocketServer=require("./app/config/socket.server");
//const cluster = require('cluster');
//const numCPUs = require('os').cpus().length;
// all environments
environment(app);//初始化环境
// 错误处理中间件应当在路由加载之后才能加载
// if (cluster.isMaster) {
// console.log(`Master ${process.pid} is running`);
//
// // Fork workers.
// for (let i = 0; i < numCPUs; i++) {
// cluster.fork();
// }
// cluster.on('exit', (worker, code, signal) => {
// console.log(`worker ${worker.process.pid} died`);
// });
// }else{
// var server = http.createServer(app);
// var socketServer = new SocketServer(server);
// server.listen(setttings.port, function(){
// console.log('Express server listening on port ' + app.get('port'));
// });
// }
var server = http.createServer(app);
//var socketServer = new SocketServer(server);
server.listen(setttings.port, function(){
console.log('Express server listening on port ' + app.get('port'));
});
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "bigdata",
"version": "1.0.0",
"description": "h5framework",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "jy",
"license": "ISC",
"dependencies": {
"@alicloud/pop-core": "^1.7.7",
"MD5": "^1.3.0",
"after": "^0.8.2",
"ali-oss": "^4.12.2",
"aliyun-api-gateway": "^1.1.6",
"babel-polyfill": "^6.26.0",
"base64id": "^1.0.0",
"bluebird": "^3.5.1",
"body-parser": "^1.18.2",
"co": "^4.6.0",
"connect-redis": "^3.3.3",
"continuation-local-storage": "^3.2.1",
"cookie-parser": "^1.4.3",
"crypto": "^1.0.1",
"crypto-js": "^3.1.9-1",
"ejs": "^2.5.8",
"element-ui": "^2.4.0",
"engine.io-parser": "^2.1.2",
"errorhandler": "^1.5.0",
"exif-js": "^2.3.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"gm": "^1.23.1",
"marked": "^0.7.0",
"method-override": "^2.3.10",
"mongoose": "^5.7.1",
"morgan": "^1.9.0",
"multer": "^1.3.0",
"mysql2": "^1.5.3",
"node-cron": "^2.0.1",
"node-uuid": "^1.4.8",
"node-xlsx": "^0.15.0",
"nodemailer": "^6.3.0",
"pinyin": "^2.9.0",
"puppeteer": "^1.20.0",
"qr-image": "^3.2.0",
"sequelize": "^4.37.8",
"sequelize-cli": "^4.1.1",
"serve-favicon": "^2.4.5",
"sha1": "^1.1.1",
"socket.io": "^2.1.1",
"uuid": "^3.2.1"
},
"devDependencies": {
"element-theme": "^2.0.1",
"element-theme-chalk": "^2.4.0"
}
}
示例:----------------------------------开始--------------------------------------------------------------------
示例:----------------------------------开始--------------------------------------------------------------------
ALTER TABLE p_channel ADD COLUMN totalChannelProfit DECIMAL(12,2) DEFAULT 0 COMMENT '渠道总利润';
ALTER TABLE h_page_statistics ADD COLUMN isRead int default 0 COMMENT '是否阅读,0未,1是';
ALTER TABLE b_customer_roll_pic ADD COLUMN picCategory ENUM('ip','ic','pa','icbc','common') DEFAULT 'ip';
ALTER TABLE p_customer_info DROP COLUMN customerContact;
ALTER TABLE biz_receiptvoucher modify COLUMN receiptType ENUM('sk','tk','zz','csrz','ptdsk','ptzz') DEFAULT 'sk';
示例:----------------------------------结束--------------------------------------------------------------------
ALTER TABLE c_app_product ADD COLUMN pushServiceItemCode VARCHAR(100) DEFAULT NULL COMMENT '推送到服务商的产品编码';
ALTER TABLE b_order ADD COLUMN needNoOrderNo VARCHAR(64) DEFAULT NULL COMMENT '需求订单号';
ALTER TABLE b_order_tm_product ADD COLUMN needNoOrderNo VARCHAR(64) DEFAULT NULL COMMENT '需求订单号';
ALTER TABLE b_order_tm_product modify COLUMN deliveryStatus ENUM('dqrfa','fabtg','dfwsfw','dsccl','dsh','ddj','ydj','ywc') DEFAULT 'dfwsfw';
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment