Commit c4874ae9 by 王昆

gsb

parent 60e79c44
/xgg-saas-merchant/node_modules/
*/node_modules/
.idea/*
\ No newline at end of file
......@@ -8,7 +8,7 @@
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/xgg-saas-merchant/main.js"
"program": "${workspaceFolder}/esign-admin/main.js"
}
]
}
\ No newline at end of file
#!/bin/bash
FROM registry.cn-beijing.aliyuncs.com/hantang2/node105:v2
MAINTAINER jy "jiangyong@gongsibao.com"
ADD xgg-saas-merchant /apps/xgg-saas-merchant/
WORKDIR /apps/xgg-saas-merchant/
ADD esign-admin /apps/esign-admin/
WORKDIR /apps/esign-admin/
RUN cnpm install -S
CMD ["node","/apps/xgg-saas-merchant/main.js"]
CMD ["node","/apps/esign-admin/main.js"]
......
var APIBase = require("../../api.base");
var system = require("../../../system");
class PlatformuserAPI extends APIBase {
class ADUserAPI extends APIBase {
constructor() {
super();
this.userSve = system.getObject("service.uc.userSve");
......@@ -44,4 +44,4 @@ class PlatformuserAPI extends APIBase {
];
}
}
module.exports = PlatformuserAPI;
\ No newline at end of file
module.exports = ADUserAPI;
\ No newline at end of file
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
const md5 = require("MD5");
const uuidv4 = require('uuid/v4');
var cacheBaseComp = null;
class UserCtl extends CtlBase {
constructor() {
super("auth", CtlBase.getServiceName(UserCtl));
}
}
module.exports = UserCtl;
\ No newline at end of file
......@@ -10,9 +10,6 @@ class UserCtl extends CtlBase {
super();
this.userSve = system.getObject("service.uc.userSve");
this.redisClient = system.getObject("util.redisClient");
this.captchaSve = system.getObject("service.common.captchaSve");
this.deliverSve = system.getObject("service.common.deliverSve");
this.merchantSve = system.getObject("service.saas.merchantSve");
}
async login(pobj, pobj2, req, res) {
......
const system=require("../../../system");
const Dao=require("../../dao.base");
class UserDao extends Dao{
constructor(){
super(Dao.getModelName(UserDao));
}
}
module.exports=UserDao;
// var u=new UserDao();
// var roledao=system.getObject("db.roleDao");
// (async ()=>{
// var users=await u.model.findAll({where:{app_id:1}});
// var role=await roledao.model.findOne({where:{code:"guest"}});
// console.log(role);
// for(var i=0;i<users.length;i++){
// await users[i].setRoles([role]);
// console.log(i);
// }
//
// })();
module.exports = function test(req, res, next) {
console.log("test interceptor");
test2(req, res);
next();
};
/**
* Create a getter for the given string.
*/
function test2 (req, res) {
console.log(req, res);
}
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base")
const settings = require("../../../../config/settings")
class UserService extends ServiceBase {
constructor() {
super("auth", ServiceBase.getDaoName(UserService));
}
}
module.exports = UserService;
// var task=new UserService();
// task.getUserStatisticGroupByApp().then(function(result){
// console.log((result));
// }).catch(function(e){
// console.log(e);
// });
......@@ -8,7 +8,7 @@ class UserService extends ServiceBase {
async login(params) {
try {
return await this.callms("uc", "merchantLogin", params);
return await this.callms("sve_uc", "login", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
......@@ -21,14 +21,6 @@ class UserService extends ServiceBase {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async mapByIds(params) {
try {
return await this.callms("uc", "merchantMapByIds", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = UserService;
\ No newline at end of file
......@@ -183,37 +183,32 @@ class System {
console.log(settings.env, "-------------- microsetting env ------------------");
var path = "/api/op/action/springboard";
if (settings.env == "dev") {
// var domain = "http://192.168.18.237";
let local = "http://127.0.0.1";
let dev = "http://39.107.234.14";
return {
// 公共服务
common: dev + ":3102" + path,
// 计费引擎
engine_fee: local + ":3103" + path,
// 认证引擎
engine_auth: local + ":3103" + path,
// 签约引擎
engine_sign: local + ":3103" + path,
// 用户服务
sve_uc: dev + ":3651" + path,
// 商户服务
merchant: dev + ":3101" + path,
sve_merchant: dev + ":3103" + path,
// 订单服务
order: local + ":3103" + path,
// 发票服务
invoice: dev + ":3105" + path,
// 用户服务
uc: dev + ":3106" + path,
// 交易
trade: dev + ":3107" + path,
sve_order: dev + ":3103" + path,
}
} else {
return {
common: "xggsvecommon-service" + path,
// merchant: "xggsvemerchant-service" + path,
merchant: "http://123.57.217.203:20500" + path,
order: "xggsveorder-service" + path,
invoice: "xggsveinvoice-service" + path,
uc: "xggsveuc-service" + path,
trade: "xggsvetrade-service" + path,
// common: "xggsvecommon-service" + path,
// // merchant: "xggsvemerchant-service" + path,
// merchant: "http://123.57.217.203:20500" + path,
// order: "xggsveorder-service" + path,
// invoice: "xggsveinvoice-service" + path,
// uc: "xggsveuc-service" + path,
// trade: "xggsvetrade-service" + path,
}
}
}
......
......@@ -27,7 +27,7 @@ module.exports = function (app) {
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, xggsaamerchantsid');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, esignadminsid');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
// res.header('Access-Control-Allow-Credentials', 'true');
res.header('content-type', 'text/html;charset=UTF-8');
......
......@@ -6,7 +6,7 @@ var settings={
db:10,
},
database:{
dbname : "xgg",
dbname : "esign-admin",
user: "write",
password: "write",
config: {
......
......@@ -7,10 +7,9 @@ const redisClient = system.getObject("util.redisClient");
module.exports = function (app) {
app.all("/web/*", async function (req, res, next) {
var loginsid;
var jsonUser = req.session.user;
// var jsonUser = null;
if(!jsonUser) {
loginsid = req.headers["xggsaamerchantsid"] || "";
loginsid = req.headers["esignadminsid"] || "";
jsonUser = await redisClient.get(loginsid);
if(jsonUser) {
jsonUser = JSON.parse(jsonUser);
......
......@@ -8,10 +8,11 @@ var ENVINPUT = {
REDIS_HOST: process.env.REDIS_HOST,
REDIS_PORT: process.env.REDIS_PORT,
REDIS_PWD: process.env.REDIS_PWD,
DB_NAME: process.env.XGGSAASMERCHANT_DB_NAME,
REDIS_DB: process.env.XGGSAASMERCHANT_REDIS_DB,
DB_NAME: process.env.ESIGNADMIN_DB_NAME,
REDIS_DB: process.env.ESIGNADMIN_REDIS_DB,
APP_ENV: process.env.APP_ENV ? process.env.APP_ENV : "dev"
};
var settings = {
env: ENVINPUT.APP_ENV,
platformid: 1,
......@@ -27,7 +28,7 @@ var settings = {
salt: "%iatpD1gcxz7iF#B",
defaultpwd: "987456",
basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 3702,
port: process.env.NODE_PORT || 3601,
localpath: function () {
let platform = os.platform() || "";
// windows
......
{
"name": "xgg-saas-merchant",
"name": "esign-admin",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
......
{
"name": "esign-admin",
"version": "1.0.0",
"description": "h5framework",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "sunyanan",
"license": "ISC",
"dependencies": {
"MD5": "^1.3.0",
"after": "^0.8.2",
"ali-oss": "^4.12.2",
"axios": "^0.19.2",
"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",
"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",
"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",
"svg-captcha": "^1.4.0",
"uuid": "^3.2.1"
},
"devDependencies": {
"element-theme": "^2.0.1",
"element-theme-chalk": "^2.4.0"
}
}
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
const md5 = require("MD5");
const uuidv4 = require('uuid/v4');
var cacheBaseComp = null;
class UserCtl extends CtlBase {
constructor() {
super("auth", CtlBase.getServiceName(UserCtl));
this.redisClient = system.getObject("util.redisClient");
this.captchaSve = system.getObject("service.common.captchaSve");
this.platformUtils = system.getObject("util.businessManager.opPlatformUtils");
}
async smsCode(qobj, pobj, req) {
var mobile = this.trim(qobj.mobile);
try {
if (!/^1[23456789]\d{9}$/.test(mobile)) {
return system.getResult(null, "手机号码格式不正确");
}
// TODO 发送短信验证码
return system.getResultSuccess("发送成功");
} catch (error) {
return system.getResultFail(500, "接口异常:" + error.message);
}
}
async login(pobj, pobj2, req, res) {
var loginName = this.trim(pobj.loginName);
var password = this.trim(pobj.password);
var captchaKey = this.trim(pobj.captchaKey);
var captchaCode = this.trim(pobj.captchaCode);
try {
var vrs = await this.captchaSve.valid({
key: captchaKey,
code: captchaCode,
});
if (vrs.status !== 0) {
// return vrs;
}
// 查用户
var loginrs = await this.platformUtils.login(loginName, password);
if(loginrs.status !== 0) {
return loginrs;
}
var user = await this.service.authByCode(loginrs.data.opencode);
req.session.user = user;
var xggadminsid = await this.setLogin(user);
return system.getResultSuccess(xggadminsid);
} catch (error) {
console.log(error);
return system.getResultFail(500, "接口异常:" + error.message);
}
}
async setLogin(user) {
var xggadminsid = uuidv4();
xggadminsid = "3cb49932-fa02-44f0-90db-9f06fe02e5c7";
await this.redisClient.setWithEx(xggadminsid, JSON.stringify(user), 60 * 60);
return xggadminsid;
}
async forgetPassword(qobj, pobj, req, res) {
var mobile = this.trim(pobj.mobile);
var vcode = this.trim(pobj.vcode);
var password = this.trim(qobj.password);
try {
} catch (error) {
return system.getResultFail(500, "接口异常:" + error.message);
}
}
async currentUser(qobj, pobj, req) {
return system.getResultSuccess(req.loginUser);
}
async getMenu(qobj, pobj, req) {
var menu = [{
"name": "首页",
"path": "/",
"submenu": []
},
{
"name": "商户中心",
"path": "/merchants",
"submenu": [{
"name": "客户管理",
"team": [{
"name": "商户信息",
"path": "/merchants/businessInformation"
},
{
"name": "签约信息",
"path": "/merchants/contractInformation"
},
{
"name": "地址信息",
"path": "/merchants/addressInformation"
},
{
"name": "抬头信息",
"path": "/merchants/lookUpInformation"
}
]
}]
},
{
"name": "业务中心",
"path": "/trading",
"submenu": [{
"name": "订单管理",
"team": [{
"name": "订单信息",
"path": "/trading/orderInformation"
}]
},
{
"name": "个体户管理",
"team": [{
"name": "用户信息",
"path": "/trading/userInformation"
},
{
"name": "用户签约",
"path": "/trading/usersSignUp"
}
]
},
{
"name": "发票管理",
"team": [{
"name": "发票申请",
"path": "/trading/invoiceApplyFor"
},
{
"name": "发票管理",
"path": "/trading/invoiceManagement"
}
]
}
]
},
{
"name": "财务中心",
"path": "/financial",
"submenu": [{
"name": "资金管理",
"team": [{
"name": "资金账户",
"path": "/financial/capitalAccount"
},
{
"name": "充值申请",
"path": "/financial/topUpApplication"
},
{
"name": "资金交易",
"path": "/financial/cashTransactions"
},
{
"name": "资金流水",
"path": "/financial/capitalFlows"
}
]
}]
},
{
"name": "数据中心",
"path": "/information",
"submenu": [{
"name": "暂无",
"team": [{
"name": "暂无",
"path": ""
}]
}]
},
{
"name": "系统中心",
"path": "/system",
"submenu": [{
"name": "信息维护",
"team": [{
"name": "注册地信息",
"path": "/system/registered"
},
{
"name": "经营范围信息",
"path": "/system/businessScope"
},
{
"name": "交付商信息",
"path": "/system/delivery"
},
{
"name": "发票内容信息",
"path": "/system/invoiceContent"
}
]
}]
}
]
return system.getResultSuccess(menu);
}
/**
* 开放平台回调处理
* @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) {
return system.getResultSuccess(req.session.user);
} else {
req.session.user = null;
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;
\ No newline at end of file
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctlms.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
var svgCaptcha = require('svg-captcha');
class BusinessscopeCtl extends CtlBase {
constructor() {
super();
//this.appS=system.getObject("service.appSve");
this.businessscopeSve = system.getObject("service.common.businessscopeSve");
}
async page(pobj, pobj2, req) {
try {
return await this.businessscopeSve.page(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async info(pobj, pobj2, req) {
try {
return await this.businessscopeSve.info(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async save(pobj, pobj2, req) {
try {
return await this.businessscopeSve.save(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async del(pobj, pobj2, req) {
try {
return await this.businessscopeSve.del(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async byDomicile(pobj, pobj2, req) {
try {
return await this.businessscopeSve.byDomicile(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
}
module.exports = BusinessscopeCtl;
\ No newline at end of file
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctlms.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
var svgCaptcha = require('svg-captcha');
class DeliverCtl extends CtlBase {
constructor() {
super();
this.deliverSve = system.getObject("service.common.deliverSve");
}
async all(pobj, pobj2, req) {
try {
return await this.deliverSve.all(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async page(pobj, pobj2, req) {
try {
return await this.deliverSve.page(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async info(pobj, pobj2, req) {
try {
return await this.deliverSve.info(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async save(pobj, pobj2, req) {
try {
return await this.deliverSve.save(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async del(pobj, pobj2, req) {
try {
return await this.deliverSve.del(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async deliverUserPage(pobj, pobj2, req) {
try {
return await this.deliverSve.deliverUserPage(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async deliverUserById(pobj, pobj2, req) {
try {
return await this.deliverSve.deliverUserById(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async deliverUserSave(pobj, pobj2, req) {
try {
return await this.deliverSve.deliverUserSave(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async allOrg(pobj, pobj2, req) {
try {
return await this.deliverSve.allOrg(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async orgTree(pobj, pobj2, req) {
try {
return await this.deliverSve.orgTree(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async orgById(pobj, pobj2, req) {
try {
return await this.deliverSve.orgById(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async orgSave(pobj, pobj2, req) {
try {
return await this.deliverSve.orgSave(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
}
module.exports = DeliverCtl;
\ No newline at end of file
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctlms.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
var svgCaptcha = require('svg-captcha');
class DomicileCtl extends CtlBase {
constructor() {
super();
//this.appS=system.getObject("service.appSve");
this.domicileSve = system.getObject("service.common.domicileSve");
}
async nameList(pobj, pobj2, req) {
try {
return await this.domicileSve.nameList(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async all(pobj, pobj2, req) {
try {
return await this.domicileSve.tree(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async page(pobj, pobj2, req) {
try {
return await this.domicileSve.page(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async info(pobj, pobj2, req) {
try {
return await this.domicileSve.info(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async save(pobj, pobj2, req) {
try {
return await this.domicileSve.save(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async del(pobj, pobj2, req) {
try {
return await this.domicileSve.del(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
}
module.exports = DomicileCtl;
\ No newline at end of file
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctlms.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
var svgCaptcha = require('svg-captcha');
class InvoicecontentCtl extends CtlBase {
constructor() {
super();
this.invoicecontentSve = system.getObject("service.common.invoicecontentSve");
}
async list(pobj, pobj2, req) {
try {
return await this.invoicecontentSve.list(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async info(pobj, pobj2, req) {
try {
return await this.invoicecontentSve.info(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async save(pobj, pobj2, req) {
try {
return await this.invoicecontentSve.save(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async del(pobj, pobj2, req) {
try {
return await this.invoicecontentSve.del(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
}
module.exports = InvoicecontentCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class ManagerCtl extends CtlBase {
constructor() {
super();
this.invoiceSve = system.getObject("service.invoice.invoiceSve");
}
/**
* 交易数据(平台)
* @param {*} pobj
*/
async transData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
};
// 交易数据
return await this.invoiceSve.statManageData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
/**
* 首页业务数据(平台)
* @param {*} pobj
*/
async businessData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
};
// 业务数据
return await this.invoiceSve.statBusinessData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
/**
* 首页交易数据(交付商)
* @param {*} pobj
*/
async delTransData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
delivererId:this.trim(pobj.delivererId)
};
// 交易数据
return await this.invoiceSve.delStatManageData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
/**
* 首页业务数据(交付商)
* @param {*} pobj
*/
async delBusinessData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
delivererId:this.trim(pobj.delivererId)
};
// 业务数据
return await this.invoiceSve.delStatBusinessData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
//业务概览 (平台)
async deliverData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
currentPage: pobj.currentPage || 1,
pageSize: pobj.pageSize || 10,
}
// 业务办理概览
return await this.invoiceSve.statDeliverData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
}
module.exports = ManagerCtl;
\ No newline at end of file
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctlms.base");
const logCtl = system.getObject("web.common.oplogCtl");
var cacheBaseComp = null;
class ManagerCtl extends CtlBase {
constructor() {
super();
this.orderSve = system.getObject("service.order.orderSve");
this.invoiceSve = system.getObject("service.invoice.invoiceSve");
}
/**
* 首页交易数据
* @param {*} pobj
*/
async transData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
};
// 交易数据
return await this.orderSve.statManageData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
/**
* 首页业务数据
* @param {*} pobj
*/
async businessData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
};
// 业务数据
return await this.orderSve.statBusinessData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
async deliverData(pobj, pobj2, req) {
try {
var params = {
type: pobj.type || 1,
currentPage: pobj.currentPage || 1,
pageSize: pobj.pageSize || 10,
}
// 业务办理概览
return await this.orderSve.statDeliverData(params);
} catch (e) {
console.log(e);
return system.getResultFail(500, "接口错误");
}
}
// 交付商统计
async deliverStatTransData(pobj, pobj2, req) {
if(!pobj.current_date){
let nowTime =new Date();
let month = nowTime.getMonth() + 1;
month = month<10?"0"+month:month;
pobj.current_date = nowTime.getFullYear()+"-"+month;
}
pobj.deliver_id = req.body.deliver_id;
try {
return await this.orderSve.deliverStatTransData(pobj);
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 业务办理
async businessManagement(pobj, pobj2, req) {
if(!pobj.current_date){
let nowTime =new Date();
let month = nowTime.getMonth() + 1;
month = month<10?"0"+month:month;
pobj.current_date = nowTime.getFullYear()+"-"+month;
}
pobj.deliver_id = req.body.deliver_id;
try {
return await this.orderSve.businessManagement(pobj);
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = ManagerCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class BusinessmenCtl extends CtlBase {
constructor() {
super();
this.businessmenSve = system.getObject("service.saas.businessmenSve");
}
/**
* 个体户列表
* @param params
* @param pobj2
* @param req
* @returns {Promise<void>}
*/
async saasorderbusinessmenPage (params, pobj2, req){
if(!params.saas_merchant_id){
return system.getResult(null,`请重新登陆`)
}
params.merchant_id = params.saas_merchant_id;
return await this.businessmenSve.saasorderbusinessmenPage(params);
}
}
module.exports = BusinessmenCtl;
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class ChannelCtl extends CtlBase {
constructor() {
super();
this.channelSve = system.getObject("service.saas.channelSve");
}
async dics(params, pobj2, req) {
try {
return await this.channelSve.dics(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async info(params, pobj2, req) {
try {
return await this.channelSve.info(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async page(params, pobj2, req) {
try {
return await this.channelSve.page(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async save(params, pobj2, req) {
try {
return await this.channelSve.save(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = ChannelCtl;
\ No newline at end of file
const system = require("../../../system")
const settings = require("../../../../config/settings")
const CtlBase = require("../../ctlms.base");
const validation = system.getObject("util.validation");
const moment = require("moment");
const axios = require("axios");
class InvoiceCtl extends CtlBase {
constructor() {
super();
this.orderSve = system.getObject("service.saas.orderSve");
this.tradeSve = system.getObject("service.trade.tradeSve");
this.invoiceSve = system.getObject("service.saas.invoiceSve");
this.merchantSve = system.getObject("service.saas.merchantSve");
this.redisClient = system.getObject("util.redisClient");
}
// 注册订单列表
async orderPage(params, pobj2, req) {
try {
params.unInvoice = 1;
params.handle_statuses = ['20', '30'];
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.orderSve.page(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 交易信息列表页
async tradePage(params, pobj2, req) {
try {
params.unInvoice = 1;
params.order_type = params.fee_type;
params.trade_status_array = ["00"];
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.tradeSve.itemPage(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 交易列表
async platformPage(params, pobj2, req) {
try {
if (["00", "10", "20"].indexOf(params.fee_type) == -1) {
return system.getResultSuccess({count: 0, rows: [], fee_type: params.fee_type});
}
if (params.fee_type == "00") {
return this.orderPage(params, pobj2, req);
} else {
return this.tradePage(params, pobj2, req);
}
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
//发票列表
async invoicePage(params, pobj2, req) {
try {
let rs = await this.invoiceSve.merchantinvoicePage(params);
return rs;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 发票申请
async apply(params, pobj2, req) {
try {
validation.check(params, "fee_type", {name: "费用记录类型", is_require: true, dics: ['00', "10", "20"]});
let fee_type = this.trim(params.fee_type);
if (fee_type == "00") {
return await this.apply00(params, pobj2, req);
} else if (fee_type == "10") {
return await this.apply10(params, pobj2, req);
} else if (fee_type == "20") {
return await this.apply20(params, pobj2, req);
} else {
return system.getResult(null, "费用类型错误");
}
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 功能2开票(平台交易)
async apply10(params, pobj2, req) {
validation.check(params, 'data_ids', {name: "交易信息", arr_require: true});
let title = await this.merchantSve.title(params) || {};
title = title.data || {};
if (!title.merchant_name || !title.merchant_credit_code || !title.merchant_addr
|| !title.merchant_mobile || !title.merchant_bank || !title.merchant_account) {
return system.getResult(null, "开票抬头不完整,请联系平台");
}
let addr = await this.merchantSve.addr(params) || {};
addr = addr.data || {};
if (!addr || !addr.mail_to || !addr.mail_addr || !addr.mail_mobile) {
return system.getResult(null, "开票邮寄不完整");
}
let trades = await this.tradeSve.byIds({
ids: params.data_ids,
saas_merchant_id: params.saas_merchant_id,
attrs: "id",
trade_statuses: ['00'],
unInvoice: true,
}) || [];
if (trades.data.length != params.data_ids.length) {
return system.getResult(null, "交易数据选择有误,请重新搜索后选择");
}
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
info = info.data || {};
if (!info.main_invoice || !info.main_invoice.id) {
return system.getResult(null, "商户未设置开票签约主体,请联系平台进行设置、");
}
let main = info.main_invoice || {};
let batch_no = await this.redisClient.genrateId("invoice_batch_no");
let apply_no = await this.redisClient.genrateId("invoice_apply_no");
let data = {
saas_id: params.saas_id,
saas_merchant_id: params.saas_merchant_id,
parent_id: "",
owner_type: "00",
status: "1000",
batch_no: batch_no,
apply_no: apply_no,
fee_type: this.trim(params.fee_type),
invoice_type: this.trim(params.invoice_type),
from_name: main.name,
from_credit_code: main.credit_code,
from_mobile: main.mobile,
from_addr: main.addr,
from_bank: main.bank_name,
from_account: main.bank_account,
to_name: this.trim(title.merchant_name),
to_credit_code: this.trim(title.merchant_credit_code),
to_addr: this.trim(title.merchant_addr),
to_mobile: this.trim(title.merchant_mobile),
to_bank: this.trim(title.merchant_bank),
to_account: this.trim(title.merchant_account),
mail_addr: this.trim(addr.mail_addr),
mail_mobile: this.trim(addr.mail_mobile),
mail_to: this.trim(addr.mail_to),
data_ids: params.data_ids.join(","),
};
data = await this.invoiceSve.applySave(data);
console.log(data);
data = data.data;
if (!data || !data.id) {
return system.getResult(null, "网络异常,发票申请失败");
}
let rs = await this.tradeSve.updateInvoice({ids: params.data_ids, saas_invoice_id: data.id});
console.log(rs);
console.log(data);
return system.getResultSuccess(data);
}
// 功能1开票(商户交易 也是线下交易)
async apply20(params, pobj2, req) {
try {
validation.check(params, "invoice_type", {name: "发票类型", is_require: true, dics: ['30', "10", "20"]});
validation.check(params, "pay_voucher", {name: "支付凭证", is_require: true});
validation.check(params, "invoiceList", {name: "开票信息", arr_require: true});
let title = await this.merchantSve.title(params) || {};
title = title.data || {};
if (!title.merchant_name || !title.merchant_credit_code || !title.merchant_addr
|| !title.merchant_mobile || !title.merchant_bank || !title.merchant_account) {
return system.getResult(null, "开票抬头不完整,请联系平台");
}
let addr = await this.merchantSve.addr(params) || {};
addr = addr.data || {};
if (!addr || !addr.mail_to || !addr.mail_addr || !addr.mail_mobile) {
return system.getResult(null, "开票邮寄不完整");
}
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
info = info.data || {};
// TODO WK
if (!info.main_invoice) {
return system.getResult(null, "商户未设置开票签约主体,请联系平台进行设置、");
}
let main = info.main_invoice;
let invoiceList = params.invoiceList;
let creditCodes = [];
for (let invoice of invoiceList) {
creditCodes.push(invoice.credit_code);
}
let businessmenMap = await this.orderSve.mapByCreditCodes({
creditCodes: creditCodes,
saas_merchant_id: params.saas_merchant_id
});
for (let invoice of invoiceList) {
validation.check(businessmenMap, invoice.credit_code, {name: `个体户[${invoice.credit_code}]`, is_require: true});
}
let applyList = [];
let pay_amount = 0;
let batch_no = await this.redisClient.genrateId("invoice_batch_no");
for (let invoice of invoiceList) {
if (!invoice.data_ids) {
return system.getResult(null, "数据有变化,请刷新重试");
}
let bussinessmen = businessmenMap[invoice.credit_code];
let apply_no = await this.redisClient.genrateId("invoice_apply_no");
let data = {
saas_id: params.saas_id,
saas_merchant_id: params.saas_merchant_id,
parent_id: "",
owner_type: "00",
status: "1000",
batch_no: batch_no,
apply_no: apply_no,
fee_type: params.fee_type,
invoice_amount: system.y2f(invoice.invoice_amount),
invoice_type: this.trim(params.invoice_type),
from_name: bussinessmen.name,
from_credit_code: bussinessmen.credit_code,
from_mobile: bussinessmen.legal_mobile,
from_addr: bussinessmen.business_place,
from_bank: bussinessmen.bank_name,
from_account: bussinessmen.bank_no,
to_name: this.trim(main.name),
to_credit_code: this.trim(main.credit_code),
to_mobile: this.trim(main.mobile),
to_addr: this.trim(main.addr),
to_bank: this.trim(main.bank_name),
to_account: this.trim(main.bank_no),
mail_addr: this.trim(addr.mail_addr),
mail_mobile: this.trim(addr.mail_mobile),
mail_to: this.trim(addr.mail_to),
personal_invoice_tax: system.y2f(invoice.personal_invoice_tax),
additional_tax: system.y2f(invoice.additional_tax),
service_tax: system.y2f(invoice.service_tax),
value_added_tax: system.y2f(invoice.value_added_tax),
unit: this.trim(invoice.unit),
quantity: this.trim(invoice.quantity),
price: this.trim(invoice.price),
remark: this.trim(invoice.remark),
pay_voucher: this.trim(params.pay_voucher),
data_ids: invoice.data_ids,
};
pay_amount = pay_amount + Number(data.personal_invoice_tax || 0) + Number(data.additional_tax || 0) + Number(data.value_added_tax || 0) + Number(data.service_tax || 0);
applyList.push(data);
}
let signInfo = await this.merchantSve.signInfo({id: params.saas_merchant_id});
if (!signInfo || !signInfo.data) {
return system.getResult(null, "商户签约信息不存在,请先做签约配置");
}
let accountInfo = JSON.stringify({
name: this.trim(main.name),
credit_code: this.trim(main.credit_code),
bank_account: this.trim(main.bank_account),
bank_name: this.trim(main.bank_name),
bank_no: this.trim(main.bank_no),
addr: this.trim(main.addr),
mobile: this.trim(main.mobile)
});
// 支付信息
let pay = await this.tradeSve.saveStPay({
saas_id: params.saas_id,
saas_merchant_id: params.saas_merchant_id,
pay_voucher_img: params.pay_voucher,
trade_no: batch_no,
busi_name: "saas_invoice_apply.batch_no",
busi_id: batch_no,
amount: pay_amount,
pay_type: "1",
pay_status: "10",
account_info: accountInfo,
});
// 判断支付是否插入
if (!pay || pay.status != 0 || !pay.data) {
return system.getResult(null, "");
}
let rs = await this.invoiceSve.applyBulkSave({
fee_type: params.fee_type,
dataList: applyList,
parent_id: ""
});
if (rs && rs.data && rs.data.length > 0) {
// 更改支付状态
await this.tradeSve.updatePayStatus({
id: pay.data.id,
pay_status: "20",
});
for (let d of rs.data) {
console.log(d.id, d.data_ids);
if (!d.data_ids) {
continue;
}
let tradeIds = d.data_ids.split(",");
await this.tradeSve.updateInvoice({ids: tradeIds, saas_invoice_id: d.id});
}
}
return system.getResultSuccess(rs);
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 功能3开票(订单交易)
async apply00(params, pobj2, req) {
validation.check(params, 'data_ids', {name: "订单信息", arr_require: true});
let title = await this.merchantSve.title(params) || {};
title = title.data || {};
if (!title.merchant_name || !title.merchant_credit_code || !title.merchant_addr
|| !title.merchant_mobile || !title.merchant_bank || !title.merchant_account) {
return system.getResult(null, "开票抬头不完整,请联系平台");
}
let addr = await this.merchantSve.addr(params) || {};
addr = addr.data || {};
if (!addr || !addr.mail_to || !addr.mail_addr || !addr.mail_mobile) {
return system.getResult(null, "开票邮寄不完整");
}
let orders = await this.orderSve.byIds({
ids: params.data_ids,
saas_merchant_id: params.saas_merchant_id,
attrs: "id,price",
handle_status: ['20', '30'],
unInvoice: true,
}) || [];
if (orders.data.length != params.data_ids.length) {
return system.getResult(null, "订单数据选择有误,请重新搜索后选择");
}
let invoice_amount = 0;
for (let item of orders.data) {
invoice_amount = invoice_amount + Number(item.price || 0);
}
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
// service_tax
info = info.data || {};
if (!info.main_invoice) {
return system.getResult(null, "商户未设置开票签约主体,请联系平台进行设置、");
}
let main = info.main_invoice || {};
let batch_no = await this.redisClient.genrateId("invoice_batch_no");
let apply_no = batch_no;
let service_tax = parseFloat((Number(invoice_amount) * Number(info.invoice_service_rate) / 100).toFixed(2));
let data = {
saas_id: params.saas_id,
saas_merchant_id: params.saas_merchant_id,
parent_id: "",
owner_type: "00",
status: "1000",
batch_no: batch_no,
apply_no: apply_no,
fee_type: this.trim(params.fee_type),
invoice_type: this.trim(params.invoice_type),
from_name: main.name,
from_credit_code: main.credit_code,
from_mobile: main.mobile,
from_addr: main.addr,
from_bank: main.bank_name,
from_account: main.bank_account,
to_name: this.trim(title.merchant_name),
to_credit_code: this.trim(title.merchant_credit_code),
to_addr: this.trim(title.merchant_addr),
to_mobile: this.trim(title.merchant_mobile),
to_bank: this.trim(title.merchant_bank),
to_account: this.trim(title.merchant_account),
mail_addr: this.trim(addr.mail_addr),
mail_mobile: this.trim(addr.mail_mobile),
mail_to: this.trim(addr.mail_to),
invoice_amount: invoice_amount,
service_tax: service_tax,
data_ids: params.data_ids.join(","),
};
data = await this.invoiceSve.applySave(data);
console.log(data);
data = data.data;
if (!data || !data.id) {
return system.getResult(null, "网络异常,发票申请失败");
}
let rs = await this.orderSve.updateInvoice({ids: params.data_ids, saas_invoice_id: data.id});
console.log(rs);
console.log(data);
return system.getResultSuccess(data);
}
//发票申请列表
async merchantinvoiceapplyPage(params, pobj2, req) {
try {
params.currentPage = Number(params.currentPage || 1);
params.pageSize = Number(params.pageSize || 1);
let rs = await this.invoiceSve.merchantinvoiceapplyPage(params);
return rs;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 发票账单列表
* @param {*} params
* @param {*} pobj2
* @param {*} req
*/
async invoiceOrder(params, pobj2, req) {
if (!params.id) {
return system.getResult(null, `发票ID 不能为空`);
}
try {
return await this.invoiceSve.invoiceOrder(params);
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误`);
}
}
// 功能1 确定个体户开票
async confirmInvoice(params, pobj2, req) {
try {
if (params.fee_type != "20") {
system.getResult(null, "费用类型错误");
}
let invoiceData = await this.buildTradeInvoice(params);
return invoiceData;
} catch (error) {
console.log(error);
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误`);
}
}
async buildTradeInvoice(params) {
validation.check(params, 'data_ids', {name: "交易信息", arr_require: true});
let invoice_type = params.invoice_type;
// 查交易
let items = await this.tradeSve.byIds({
ids: params.data_ids,
saas_merchant_id: params.saas_merchant_id,
order_type: params.fee_type,
trade_statuses: ['00'],
unInvoice: true,
}) || [];
items = items.data;
if (!items || params.data_ids.length != items.length) {
return system.getResult(null, "交易信息有变化,请刷新重新选择");
}
let signInfo = await this.merchantSve.signInfo({id: params.saas_merchant_id});
if (!signInfo || !signInfo.data) {
return system.getResult(null, "商户签约信息不存在,请先做签约配置");
}
// 开票签约主体
let main = signInfo.data.main_invoice;
if (!main || !main.id) {
return system.getResult(null, "开票签约主体未设置,请联系平台配置");
}
let invoice_service_rate = signInfo.data.invoice_service_rate || 0;
let bmMap = {};
let creditCodes = [];
for (let item of items) {
let creditCode = item.credit_code;
let list = bmMap[creditCode] || [];
list.push(item);
bmMap[creditCode] = list;
creditCodes.push(creditCode);
}
let businessmenMap = await this.orderSve.mapByCreditCodes({
creditCodes: creditCodes,
saas_merchant_id: params.saas_merchant_id
});
let invoiceList = [];
let calcParams = [];
for (let creditCode in bmMap) {
let businessmen = businessmenMap[creditCode];
let itemList = bmMap[creditCode];
let amount = 0;
let data_ids = [];
for (let item of itemList) {
amount = amount + Number(item.amt || 0);
data_ids.push(item.id);
}
let service_tax = parseFloat((Number(amount) * Number(invoice_service_rate) / 100).toFixed(2));
if (!businessmen.is_bank) {
calcParams.push({
"credit_code": creditCode,
"invoiced_time": moment().format("YYYY-MM-DD hh:mm:ss"),
"invoice_type": invoice_type,
"invoice_amount": amount
});
}
// TODO 总统计算 end
invoiceList.push({
"name": businessmen.name,
"credit_code": creditCode,
"is_bank": businessmen.is_bank ? 1 : 0,
"is_bank_name": businessmen.is_bank ? "已开户" : "未开户",
"invoice_amount": system.f2y(amount),
"personal_invoice_tax": 0,
"additional_tax": 0,
"value_added_tax": 0,
"service_tax": system.f2y(service_tax),
"unit": "",
"quantity": "",
"price": "",
"remark": "",
"data_ids": data_ids.join(","),
});
}
let additional_tax_total = 0;
let personal_invoice_tax_total = 0;
let value_added_tax_total = 0;
let service_tax_total = 0;
let pay_total = 0;
// TODO 总统计算 begin
// 计算税金
try {
let calcMap = {};
if (calcParams.length > 0) {
let url = settings.deliverSysApi().calcInvoice;
let res = await axios({
method: 'post',
url: url,
data: calcParams
});
if (!res || !res.data || res.data.status != 0 || res.data.data.length == 0) {
return system.getResult(null, `试算错误`);
}
let calcList = res.data.data;
let errors = [];
for (let c of calcList) {
calcMap[c.credit_code] = c;
if (c.error) {
errors.push(`${c.msg}${c.credit_code}】`);
}
}
if (errors.length > 0) {
return system.getResult(null, errors.join("、"));
}
}
for (let invoice of invoiceList) {
let businessmen = businessmenMap[invoice.credit_code];
if (!businessmen.is_bank) {
let invoiceCalc = calcMap[invoice.credit_code];
additional_tax_total = additional_tax_total + Number(invoiceCalc.additional_tax);
personal_invoice_tax_total = personal_invoice_tax_total + Number(invoiceCalc.personal_invoice_tax);
value_added_tax_total = value_added_tax_total + Number(invoiceCalc.value_added_tax);
invoice.personal_invoice_tax = system.toFloat(Number(invoiceCalc.personal_invoice_tax));
invoice.additional_tax = system.toFloat(Number(invoiceCalc.additional_tax));
invoice.value_added_tax = system.toFloat(Number(invoiceCalc.value_added_tax));
}
pay_total = pay_total + system.toFloat(Number(invoice.personal_invoice_tax || 0) + Number(invoice.additional_tax || 0) + Number(invoice.value_added_tax || 0) + Number(invoice.service_tax || 0));
service_tax_total = service_tax_total + Number(invoice.service_tax);
}
return system.getResultSuccess({
tax: {
additional_tax_total: system.toFloat(additional_tax_total),
personal_invoice_tax_total: system.toFloat(personal_invoice_tax_total),
value_added_tax_total: system.toFloat(value_added_tax_total),
service_tax_total: system.toFloat(service_tax_total),
pay_total: system.toFloat(pay_total),
},
main: main,
invoiceList: invoiceList
});
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误`);
}
}
}
module.exports = InvoiceCtl;
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class MainCtl extends CtlBase {
constructor() {
super();
this.mainSve = system.getObject("service.saas.mainSve");
}
async dics(params, pobj2, req) {
try {
return await this.mainSve.dics(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async info(params, pobj2, req) {
try {
return await this.mainSve.info(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async page(params, pobj2, req) {
try {
return await this.mainSve.page(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async save(params, pobj2, req) {
try {
return await this.mainSve.save(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = MainCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class MerchantCtl extends CtlBase {
constructor() {
super();
this.merchantSve = system.getObject("service.saas.merchantSve");
}
async dics(params, pobj2, req) {
try {
return await this.merchantSve.dics(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 开票类型字典获取
async feeTypeDic(params, pobj2, req) {
try {
params.forceUpdate = true;
let feeType = await this.merchantSve.getFeeTypeWithCache(params);
// let dic = [{"type": "00", "name": "注册订单付款"}, {"type": "10", "name": "转账交易付款10(仅供测试)"}, {"type": "20", "name": "转账交易付款20(仅供测试)"}];
let dic = [{"type": "00", "name": "注册订单付款"}, {"type": feeType, "name": "转账交易付款"}];
return system.getResultSuccess(dic);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async info(params, pobj2, req) {
try {
return await this.merchantSve.info(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async page(params, pobj2, req) {
try {
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.merchantSve.page(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async signPage(params, pobj2, req) {
try {
params.is_sign = 1;
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.merchantSve.page(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async save(params, pobj2, req) {
try {
return await this.merchantSve.save(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async sign(params, pobj2, req) {
try {
params.bm_reg_price = system.y2f(params.bm_reg_price || 0);
params.invoice_service_rate = system.y2f(params.invoice_service_rate || 0);
params.trans_service_rate = system.y2f(params.trans_service_rate || 0);
return await this.merchantSve.sign(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async signInfo(params, pobj2, req) {
try {
return await this.merchantSve.signInfo(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async title(params, pobj2, req) {
try {
return await this.merchantSve.title(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async addr(params, pobj2, req) {
try {
return await this.merchantSve.addr(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async saveAddr(params, pobj2, req) {
try {
if(!params.id) {
return system.getResult(null, "编辑失败,请联系平台增加开票信息");
}
if(!params.mail_to) {
return system.getResult(null, `联系人不能为空`);
}
if(!params.mail_mobile) {
return system.getResult(null, `联系电话不能为空`);
}
if(!params.mail_addr) {
return system.getResult(null, `邮寄地址不能为空`);
}
return await this.merchantSve.saveAddr(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async getFeeTypeWithCache(params, pobj2, req){
let res = await this.merchantSve.getFeeTypeWithCache(params);
return system.getResult({type: res});
}
/**
* fn:获取商户交付信息
* @param params
* @param pobj2
* @param req
* @returns {Promise<{msg: string, data: (*|null), bizmsg: string, status: number}|*>}
*/
async delvierInfo(params, pobj2, req) {
try {
if(!params.saas_merchant_id){
system.getResult(null, `登录失效,请重新登录`);
}
let user = req.loginUser;
let rs = {
contact_man:user.contact_man,
contact_mobile : user.contact_mobile,
contact_email : user.contact_email,
contact_addr : user.contact_addr,
};
return system.getResult(rs);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = MerchantCtl;
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class ChannelCtl extends CtlBase {
constructor() {
super();
this.orderSve = system.getObject("service.saas.orderSve");
this.merchantSve = system.getObject("service.saas.merchantSve");
}
async microAdd(params, pobj2, req) {
try {
return await this.orderSve.microAdd(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async info(params, pobj2, req) {
try {
let order = await this.orderSve.info(params);
return order;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* fn:商户系统订单列表
* @param params
* @param pobj2
* @param req
* @returns {Promise<{msg: string, data: (*|null), bizmsg: string, status: number}|{msg: string, data, bizmsg: (*|string), status: number}|*>}
*/
async page(params, pobj2, req) {
try {
let listRes = await this.orderSve.page(params);
if (listRes.status != 0) {
return system.getResult(null, `系统错误`);
}
let source_nos = [];
for (let item of listRes.data.rows) {
source_nos.push(item.id);
}
if(source_nos.length==0){
return system.getResult(null, `暂无数据`);
}
let res =await this.orderSve.queryOrderStatusBySourceNo({source_nos:source_nos});
if(res.status!=0){
return res;
}
let StatusMap = res.data;
for(let item of listRes.data.rows){
if(StatusMap[item.id]){
item.handle_name = StatusMap[item.id]['name3'] || "处理中";
}else if(item.pay_status=="10"){
item.handle_name ="订单待处理";
}else if(item.audit_status=="30"){
item.handle_name ="订单处理失败";
}else{
item.handle_name = "订单处理中";
}
}
return listRes;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async checkPay(params, pobj2, req) {
try {
if(!params.ids || params.ids.length == 0) {
return system.getResult(null, "请至少选择一笔订单");
}
let omap = await this.orderSve.mapByIds({ids: params.ids, attrs: "id, pay_status, price"});
let totalPrice = 0;
let totalNum = 0;
for(let id of params.ids) {
let obj = omap[id];
if(!obj || obj.pay_status !== "10") {
return system.getResult(null , "选择的订单中存在已支付的订单");
}
totalPrice = totalPrice + Number(obj.price);
}
totalNum = params.ids.length;
totalPrice = system.f2y(totalPrice);
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
info = info.data || {};
let main = info.main || {};
let result = {
totalNum : totalNum,
totalPrice : totalPrice,
account_name: main.bank_account,
account_bank_name: main.bank_name,
account_bank_no: main.bank_no,
}
// 获取商户信息
return system.getResult(result);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async offlinePay(params, pobj2, req) {
try {
if(!params.ids || params.ids.length == 0) {
return system.getResult(null, "请至少选择一笔订单");
}
if (!this.trim(params.pay_voucher_img)) {
return system.getResult(null, "请上传付款凭证");
}
if (!this.trim(params.merchant_deliver_man)) {
return system.getResult(null, "请填写交付联系人");
}
if (!this.trim(params.merchant_deliver_mobile)) {
return system.getResult(null, "请填写联系人电话");
}
if (!this.trim(params.merchant_deliver_addr)) {
return system.getResult(null, "请填写邮寄地址");
}
return await this.orderSve.offlinePay(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = ChannelCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class TaxCtl extends CtlBase {
constructor() {
super();
this.taxSve = system.getObject("service.tax.taxSve");
this.orderSve = system.getObject("service.saas.orderSve");
this.redisClient = system.getObject("util.redisClient");
}
/**
* 月账期
* @param {*} params
*/
async getReportData(params) {
try {
let res = await this.taxSve.getReportData(params);
return system.getResult(res);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 季度账期
* @param {*} params
*/
async getReportDataQuarter(params) {
try {
let res = await this.taxSve.getReportDataQuarter(params);
return system.getResult(res);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 获取账簿用户信息
* @param {*} pobj
* @param {*} pobj2
* @param {*} req
* @id
*/
async getCustomerById(pobj, pobj2, req) {
try {
// if (!pobj.id) {
// return system.getResult(null, `参数错误 ID 不能为空`);
// }
let res = await this.taxSve.getCustomerById(pobj);
return res;
} catch (error) {
console.log(error);
return system.getResult(error);
}
}
async businessmenPage(pobj, pobj2, req) {
try {
let res = await this.orderSve.businessmenPage(pobj);
return res;
} catch (error) {
console.log(error);
return system.getResult(error);
}
}
}
module.exports = TaxCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class TradeCtl extends CtlBase {
constructor() {
super();
this.tradeSve = system.getObject("service.trade.tradeSve");
this.redisClient = system.getObject("util.redisClient");
}
async orderPage(params, pobj2, req) {
try {
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.tradeSve.orderPage(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async parseItems(params, pobj2, req) {
try {
params.fileName = req.loginUser.id;
return await this.tradeSve.parseItems(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async orderInfo(params, pobj2, req) {
try {
return await this.tradeSve.orderInfo(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async lockOrder(params, pobj2, req) {
try {
return await this.tradeSve.lockOrder(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async offlinePay(params, pobj2, req) {
try {
return await this.tradeSve.offlinePay(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async itemPage(params, pobj2, req) {
try {
this.doTimeCondition(params, ["createBegin", "createEnd"]);
return await this.tradeSve.itemPage(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = TradeCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class AuthCtl extends CtlBase {
constructor() {
super();
this.authSve = system.getObject("service.uc.authSve");
}
/**
* 菜单 添加
* @param {*} params
*/
async addAuth(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
var auth = {
pid: Number(params.pid || 0),
saas_id: params.saas_id,
menuType: Number(params.menuType || 0),
name: this.trim(params.name),
icon: this.trim(params.icon),
path: this.trim(params.path),
sort: 99,
};
return await this.authSve.addAuth(auth);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 更新
* @param {*} params
*/
async updAuth(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
var auth = {
id: Number(params.id),
pid: Number(params.pid || 0),
saas_id: params.saas_id,
menuType: Number(params.menuType || 0),
name: this.trim(params.name),
icon: this.trim(params.icon),
path: this.trim(params.path),
};
try {
return await this.authSve.updAuth(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 删除
* @param {*} params
*/
async delAuth(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.authSve.delAuth(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 查询明细
* @param {*} params
*/
async queryById(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.authSve.queryById(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 根据pid查出子目录
* @param {*} params
*/
async byPid(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.authSve.byPid(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 查询整个树结构
* @param {*} params
*/
async tree(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.authSve.tree(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = AuthCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class OrgCtl extends CtlBase {
constructor() {
super();
this.orgSve = system.getObject("service.uc.orgSve");
}
/**
* 组织机构 添加
* @param {*} params
*/
async addOrg(params, pobj2, req) {
try {
params.saas_id = req.loginUser.saas_id;
return await this.orgSve.addOrg(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 更新
* @param {*} params
*/
async updOrg(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.orgSve.updOrg(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 删除
* @param {*} params
*/
async delOrg(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.orgSve.delOrg(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 查询列表
* @param {*} params
*/
async listOrg(params, pobj2, req) {
try {
params.saas_id = req.loginUser.saas_id;
return await this.orgSve.listOrg(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 查询明细
* @param {*} params
*/
async queryById(params, pobj2, req) {
try {
return await this.orgSve.queryById(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 根据pid查出子目录
* @param {*} params
*/
async byPid(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.orgSve.byPid(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 查询整个树结构
* @param {*} params
*/
async tree(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.orgSve.tree(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = OrgCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class RoleCtl extends CtlBase {
constructor() {
super();
this.roleSve = system.getObject("service.uc.roleSve");
}
/**
* saas 添加
* @param {*} params
*/
async addRole(params, pobj2, req) {
try {
params.saas_id = req.loginUser.saas_id;
return await this.roleSve.addRole(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 更新
* @param {*} params
*/
async updRole(params, pobj2, req) {
try {
return await this.roleSve.updRole(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 删除
* @param {*} params
*/
async delRole(params, pobj2, req) {
try {
return await this.roleSve.delRole(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询列表
* @param {*} params
*/
async listRole(params, pobj2, req) {
try {
return await this.roleSve.listRole(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询明细
* @param {*} params
*/
async queryById(params, pobj2, req) {
try {
return await this.roleSve.queryById(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async setAuth(params, pobj2, req) {
params.saas_id = req.loginUser.saas_id;
try {
return await this.roleSve.setAuth(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = RoleCtl;
\ No newline at end of file
var system = require("../../../system")
const CtlBase = require("../../ctlms.base");
class SaasCtl extends CtlBase {
constructor() {
super();
this.saasSve = system.getObject("service.uc.saasSve");
}
/**
* saas 添加
* @param {*} params
*/
async addSaas(params, pobj2, req) {
try {
return await this.saasSve.addSaas(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 更新
* @param {*} params
*/
async updSaas(params, pobj2, req) {
try {
return await this.saasSve.updSaas(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 删除
* @param {*} params
*/
async delSaas(params, pobj2, req) {
try {
return await this.saasSve.delSaas(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询列表
* @param {*} params
*/
async listSaas(params, pobj2, req) {
try {
return await this.saasSve.listSaas(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询明细
* @param {*} params
*/
async queryById(params, pobj2, req) {
try {
return await this.saasSve.queryById(params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = SaasCtl;
\ No newline at end of file
const system=require("../../../system");
const Dao=require("../../dao.base");
class UserDao extends Dao{
constructor(){
super(Dao.getModelName(UserDao));
}
async getAuths(userid){
var self=this;
return this.model.findOne({
where:{id:userid},
include:[{model:self.db.models.account,attributes:["id","isSuper","referrerOnlyCode"]},
{model:self.db.models.role,as:"Roles",attributes:["id","code"],include:[
{model:self.db.models.product,as:"Products",attributes:["id","code"]}
]},
],
});
}
extraModelFilter(){
//return {"key":"include","value":[{model:this.db.models.app,},{model:this.db.models.role,as:"Roles",attributes:["id","name"],joinTableAttributes:['created_at']}]};
return {"key":"include","value":[{model:this.db.models.app,},{model:this.db.models.role,as:"Roles",attributes:["id","name"]}]};
}
extraWhere(obj,w,qc,linkAttrs){
if(obj.codepath && obj.codepath!=""){
// if(obj.codepath.indexOf("userarch")>0){//说明是应用管理员的查询
// console.log(obj);
// w["app_id"]=obj.appid;
// }
}
if(linkAttrs.length>0){
var search=obj.search;
var lnkKey=linkAttrs[0];
var strq="$"+lnkKey.replace("~",".")+"$";
w[strq]= {[this.db.Op.like]:"%"+search[lnkKey]+"%"};
}
return w;
}
async preUpdate(u){
if(u.roles && u.roles.length>0){
var roles=await this.db.models.role.findAll({where:{id:{[this.db.Op.in]:u.roles}}});
console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
console.log(roles);
u.roles=roles
}
return u;
}
async update(obj){
var obj2=await this.preUpdate(obj);
console.log("update....................");
console.log(obj2);
await this.model.update(obj2,{where:{id:obj2.id}});
var user=await this.model.findOne({where:{id:obj2.id}});
user.setRoles(obj2.roles);
return user;
}
async findAndCountAll(qobj,t){
var users=await super.findAndCountAll(qobj,t);
return users;
}
async preCreate(u){
// var roles=await this.db.models.role.findAll({where:{id:{[this.db.Op.like]:u.roles}}});
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(roles);
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// u.roles=roles
return u;
}
async create(u,t){
var self=this;
var u2=await this.preCreate(u);
if(t){
return this.model.create(u2,{transaction: t}).then(user=>{
return user;
});
}else{
return this.model.create(u2).then(user=>{
return user;
});
}
}
//修改用户(user表)公司的唯一码
async putUserCompanyOnlyCode(userId,company_only_code,result){
var customerObj={companyOnlyCode:company_only_code};
var putSqlWhere={where:{id:userId}};
this.updateByWhere(customerObj,putSqlWhere);
return result;
}
}
module.exports=UserDao;
// var u=new UserDao();
// var roledao=system.getObject("db.roleDao");
// (async ()=>{
// var users=await u.model.findAll({where:{app_id:1}});
// var role=await roledao.model.findOne({where:{code:"guest"}});
// console.log(role);
// for(var i=0;i<users.length;i++){
// await users[i].setRoles([role]);
// console.log(i);
// }
//
// })();
const system = require("../../../system");
const ServiceBase = require("../../sve.base")
const settings = require("../../../../config/settings")
class UserService extends ServiceBase {
constructor() {
super("auth", ServiceBase.getDaoName(UserService));
this.platformUtils = system.getObject("util.businessManager.opPlatformUtils");
}
async saveUser(user) {
var u = await this.dao.findOne({
ucid: user.ucid,
}) || {};
u.ucid = user.ucid;
u.ucname = user.ucname;
u.passwd = user.passwd;
u.lastLoginTime = user.lastLoginTime;
if(u.id) {
u = await this.dao.create(ucid);
} else {
await u.save();
}
return u;
}
async authByCode(opencode) {
var existedUser = null;
var rawUser = null;
var openuser = await this.apiCallWithAk(settings.paasUrl() + "api/auth/accessAuth/authByCode", { opencode: opencode });
if (openuser) {
//先查看自己系统中是否已经存在当前用户
existedUser = await this.dao.model.findOne({ where: { ucname: openuser.userName, ucid: openuser.account_id }, raw: true });
if (!existedUser) {
existedUser = await this.register(openuser);
}
rawUser = existedUser;
rawUser.Roles = openuser.Roles;
}
return rawUser;
}
async getUserLoginInfo(token) {
var acckapp = await this.cacheManager["ApiUserCache"].cache(token, null, settings.usertimeout);
}
async register(openuser) {
var param = {
ucname: openuser.userName, ucid: openuser.account_id,
lastLoginTime: new Date()
}
var cruser = await this.dao.create(param);
return cruser;
}
//在平台进行登录,返回目标认证地址
async navSysSetting(user) {
var sysLoginUrl = settings.paasUrl() + "web/auth/userCtl/login?appKey=" + settings.appKey + "\&toKey=" + settings.paasKey;
var x = { userName: user.userName, password: user.password, mobile: user.mobile };
var restResult = await this.restS.execPost({ u: x }, sysLoginUrl);
if (restResult) {
var rtnres = JSON.parse(restResult.stdout);
if (rtnres.status == 0) {
return rtnres.data;
}
}
return null;
}
async getUserByUserNamePwd(u) {
var user = await this.dao.model.findOne({
where: { userName: u.userName, password: u.password, app_id: u.app_id },
include: [
{ model: this.db.models.role, as: "Roles", attributes: ["id", "code"] },
]
});
return user;
}
async checkSameName(uname, appid) {
var ac = await this.dao.model.findOne({ where: { userName: uname, app_id: appid } });
var rtn = { isExist: false };
if (ac) {
rtn.isExist = true;
}
return rtn;
}
}
module.exports = UserService;
// var task=new UserService();
// task.getUserStatisticGroupByApp().then(function(result){
// console.log((result));
// }).catch(function(e){
// console.log(e);
// });
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class BusinessmenService extends ServiceBase {
constructor() {
super();
}
async allPage(params) {
let rs = await this.callms("order", "businessmenPage", params);
if (rs.status != 0 || !rs.data || !rs.data.rows) {
return rs;
}
this.transField(rs.data.rows);
return rs;
}
async mapByCreditCodes(params) {
let rs = await this.callms("order", "businessmenMapByCreditCodes", params);
if(!rs || !rs.data) {
return {};
}
return rs.data;
}
transField(rows) {
if (!rows) {
return;
}
for (var row of rows) {
row.costRate = system.f2y(row.costRate);
row.taxRate = system.f2y(row.taxRate);
row.serviceRate = system.f2y(row.serviceRate);
row.serviceBeginTime = system.f2y(row.serviceRate);
row.serviceRate = system.f2y(row.serviceRate);
this.handleDate(row, ["service_begin_time", "service_end_time", "tax_reg_day", "reg_date", "sign_time"], "YYYY-MM-DD", -8);
this.parseJsonField(row, ["common_tax_ladder", "common_other_ladder", "special_tax_ladder", "special_other_ladder"]);
}
}
parseJsonField(row, fields) {
if (!row || !fields || fields.length == 0) {
return;
}
for (var f of fields) {
if (!f) {
continue;
}
if (!row[f]) {
row[f] = [];
continue;
}
try {
row[f] = JSON.parse(row[f]);
} catch (error) {
console.log(error);
}
}
}
}
module.exports = BusinessmenService;
// var task=new UserService();
// task.getUserStatisticGroupByApp().then(function(result){
// console.log((result));
// }).catch(function(e){
// console.log(e);
// });
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class BusinessscopeService extends ServiceBase {
constructor() {
super();
}
async page(params) {
return await this.callms("common", "businessscopePage", params);
}
async info(params) {
return await this.callms("common", "businessscopeInfo", params);
}
async save(params) {
return await this.callms("common", "businessscopeSave", params);
}
async del(params) {
return await this.callms("common", "businessscopeDelete", params);
}
async byDomicile(params) {
return await this.callms("common", "businessscopeByDomicileId", params);
}
}
module.exports = BusinessscopeService;
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class CaptchaService extends ServiceBase {
constructor() {
super();
}
async captcha(params) {
// "width": 120, // 验证码图片宽度 默认 120px
// "height": 36, // 验证码图片高度 默认 36px
// "background": "", // 验证码图片背景色,默认 #E8E8E8
// "expire": 0 // 验证码过期时间(秒)
var result = {};
var capthaData = await this.callms("common", "getCaptha", params);
if(capthaData.status === 0) {
result.key = capthaData.data.key;
result.captcha = capthaData.data.captcha;
console.log(result.key + " : " + result.text);
return system.getResultSuccess(result);
}
return system.getResult(null, "获取图片验证码失败");
}
async valid(params) {
var result = {};
return await this.callms("common", "validCaptha", params);
}
}
module.exports = CaptchaService;
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class DeliverService extends ServiceBase {
constructor() {
super();
}
async queryCourierTrace(params) {
var result = {
merchantId: "11111202101312",
courierNo: "222222222",
courierStatus: "配送中",
courierTime: "2019-10-01 10:10:10",
desc: "到达xxxxx",
applyNo: "100001",
}
return system.getResultSuccess(result);
}
}
module.exports = DeliverService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class DeliverService extends ServiceBase {
constructor() {
super();
}
async login(params) {
var rs = await this.callms("common", "deliverLogin", params);
return rs;
}
async all(params) {
var rs = await this.callms("common", "deliverAll", {});
await this.doPercent(rs.data);
return rs;
}
async page(params) {
var rs = await this.callms("common", "deliverPage", params);
await this.doPercent(rs.data.rows);
return rs;
}
async info(params) {
var rs = await this.callms("common", "deliverInfo", params);
await this.doPercent([rs.data]);
return rs;
}
async mayByIds(ids) {
var rs = await this.callms("common", "deliverUserMap", {ids: ids});
await this.doPercent([rs.data]);
return rs;
}
async save(params) {
params.invoiceDivide = system.y2f(params.invoiceDivide);
params.businessmenDivide = system.y2f(params.businessmenDivide);
var rs = await this.callms("common", "deliverSave", params);
await this.doPercent([rs.data]);
return rs;
}
async del(params) {
return await this.callms("common", "deliverDelete", params);
}
async deliverUserPage(params) {
return await this.callms("common", "deliverUserPage", params);
}
async deliverUserById(params) {
return await this.callms("common", "deliverUserById", params);
}
async deliverUserSave(params) {
let rs = await this.callms("common", "deliverUserSave", params);
if(!params.id && rs.status === 0) {
this.synSave(rs.data.id, params.password);
}
return rs;
}
async synSave(id, password) {
let rs = await this.callms("common", "deliverUserInfo", {id: id});
if(!rs || !rs.data || !rs.data.user || !rs.data.deliver) {
return;
}
let user = rs.data.user;
let deliver = rs.data.deliver;
let data = {
companyNo: deliver.id,
companyName: deliver.name,
path: user.org_path,
staffNo: user.id,
staffName: user.real_name,
loginId: user.ucname,
pwd: password,
};
if(user.isAdmin) {
data.classType = "leader";
data.className = "主管";
} else {
data.classType = "member";
data.className = " 普通员工";
}
let url = settings.ntapi().synUserDetails;
let res = await this.callApi(url, data, "创建交付商用户");
if(res && res.data && res.data.datas) {
let _d = res.data.datas;
await this.callms("common", "deliverSynUpdate", {user_id: id, nt_user_id: _d.id, nt_company_id: _d.companyId});
}
}
async allOrg(params) {
return await this.callms("common", "allOrg", params);
}
async orgTree(params) {
return await this.callms("common", "orgTree", params);
}
async orgById(params) {
return await this.callms("common", "orgById", params);
}
async orgSave(params) {
return await this.callms("common", "orgSave", params);
}
async doPercent(rows) {
if(!rows) {
return;
}
for(var row of rows) {
if(!row) {
continue;
}
row.invoiceDivide = system.f2y(row.invoiceDivide);
row.businessmenDivide = system.f2y(row.businessmenDivide);
}
}
}
module.exports = DeliverService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class DomicileService extends ServiceBase {
constructor() {
super();
}
async nameList() {
return await this.callms("common", "domicileNameList", {});
}
async tree(params) {
return await this.callms("common", "domicileTree", {});
}
async page(params) {
return await this.callms("common", "domicilePage", params);
}
async info(params) {
return await this.callms("common", "domicileInfo", params);
}
async save(params) {
return await this.callms("common", "domicileSave", params);
}
async del(params) {
return await this.callms("common", "domicileDelete", params);
}
}
module.exports = DomicileService;
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
var settings = require("../../../../config/settings");
class InvoicecontentService extends ServiceBase {
constructor() {
super();
}
async list(params) {
return await this.callms("common", "invoiceList", params);
}
async info(params) {
return await this.callms("common", "invoicecontent", params);
}
async save(params) {
return await this.callms("common", "invoicecontentSave", params);
}
async del(params) {
return await this.callms("common", "invoicecontentDelete", params);
}
}
module.exports = InvoicecontentService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class BusinessmenSveService extends ServiceBase {
constructor() {
super();
this.SETTINGS_KEY = "merchant_settings_";
this.INFO_KEY = "merchant_info_";
this.channelSve = system.getObject("service.saas.channelSve");
this.mainSve = system.getObject("service.saas.mainSve");
this.redisClient = system.getObject("util.redisClient");
}
async saasorderbusinessmenPage(params){
try{
var rs = await this.callms("order", "saasorderbusinessmenPage", params || {});
return rs;
}catch (e) {
console.log(e);
return system.getResult(null,`系统错误`);
}
}
/**
* 获取所有符合条件的个体户信息
* @param params
* @returns {Promise<void>}
*/
async assorderBusinessmenInfo(params){
try{
var rs = await this.callms("order", "assorderBusinessmenInfo", params || {});
return rs;
}catch (e) {
console.log(e);
return system.getResult(null,`系统错误`);
}
};
}
module.exports = BusinessmenSveService;
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class ChannelService extends ServiceBase {
constructor() {
super();
}
async dics(params) {
var rs = await this.callms("merchant", "channelDics", params || {});
return rs;
}
async page(params) {
var rs = await this.callms("merchant", "channelPage", params);
return rs;
}
async save(params) {
var rs = await this.callms("merchant", "channelSave", params);
return rs;
}
async info(params) {
var rs = await this.callms("merchant", "channelInfo", params);
return rs;
}
async mapByIds(params) {
var rs = await this.callms("merchant", "channelMapByIds", params);
return rs;
}
}
module.exports = ChannelService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class InvoiceService extends ServiceBase {
constructor() {
super();
this.tradeSve = system.getObject("service.trade.tradeSve");
}
async merchantinvoicePage(params) {
var rs = await this.callms("invoice", "merchantinvoicePage", params);
if (rs && rs.data && rs.data.rows) {
this.transOrderField(rs.data.rows);
}
return rs;
}
async merchantinvoiceapplyPage(params) {
var rs = await this.callms("invoice", "merchantinvoiceapplyPage", params);
if (rs && rs.data && rs.data.rows) {
this.transOrderField(rs.data.rows);
}
return rs;
}
async applySave(params) {
var rs = await this.callms("invoice", "invoiceapplySave", params);
if (rs && rs.data && rs.data.rows) {
this.transOrderField(rs.data.rows);
}
return rs;
}
async applyBulkSave(params) {
let rs = await this.callms("invoice", "invoiceapplyBulkSave", params);
return rs;
}
transOrderField(rows) {
if (!rows || rows.length == 0) {
return;
}
for (let row of rows) {
row.price = system.f2y(row.price);
row.invoice_amount = system.f2y(row.invoice_amount);
}
}
/**
* 发票详情
* @param {*} params
*/
async invoiceOrder(params) {
try {
let saasInvoiceApply = await this.callms("invoice", "saasInvoiceInfo", params);
if (saasInvoiceApply.status != 0 || !saasInvoiceApply.data) {
return system.getResult(null, `系统错误`);
}
saasInvoiceApply = saasInvoiceApply.data;
let tradOrder = [];
if (saasInvoiceApply.fee_type == "00") { //个体户注册订单
let invoiceOrderRes = await this.callms("order", "saasOrderPage", { saas_invoice_id: this.trim(params.id) ,currentPage:1,pageSize:99999});
if (invoiceOrderRes.status == 0) {
tradOrder = invoiceOrderRes.data.rows || [];
}
} else { //查询流水
let tradOrderRes = await this.tradeSve.invoiceTrade({
id: saasInvoiceApply.id,
order_type: saasInvoiceApply.fee_type
});
if (tradOrderRes.status == 0) {
tradOrder = tradOrderRes.data;
};
saasInvoiceApply.service_tax=system.f2y(saasInvoiceApply.service_tax);
}
saasInvoiceApply.tradOrder = tradOrder;
return system.getResult(saasInvoiceApply);
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误`);
}
}
async byIds(params) {
let rs = await this.callms("order", "itemByIds", params);
return rs;
}
async updateInvoice(params) {
let rs = await this.callms("order", "updateItemInvoice", params);
return rs;
}
/**
*
* @param params
* @returns {Promise<void>}
*/
async invoiceBycreditCode(params){
return await this.callms("invoice", "invoiceBycreditCode", params);
}
}
module.exports = InvoiceService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class MainService extends ServiceBase {
constructor() {
super();
}
async dics(params) {
var rs = await this.callms("merchant", "mainDics", params || {});
return rs;
}
async page(params) {
var rs = await this.callms("merchant", "mainPage", params);
return rs;
}
async save(params) {
var rs = await this.callms("merchant", "mainSave", params);
return rs;
}
async info(params) {
var rs = await this.callms("merchant", "mainInfo", params);
return rs;
}
async mapByIds(params) {
var rs = await this.callms("merchant", "mainMapByIds", params);
return rs;
}
}
module.exports = MainService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
class MerchantService extends ServiceBase {
constructor() {
super();
this.SETTINGS_KEY = "merchant_settings_";
this.INFO_KEY = "merchant_info_";
this.channelSve = system.getObject("service.saas.channelSve");
this.mainSve = system.getObject("service.saas.mainSve");
this.redisClient = system.getObject("util.redisClient");
}
async mapByIds(params) {
var rs = await this.callms("merchant", "mchtMapByIds", params || {});
return rs;
}
async dics(params) {
var rs = await this.callms("merchant", "mchtDics", params);
return rs;
}
async info(params) {
var rs = await this.callms("merchant", "mchtInfo", params);
if(rs.data && rs.data.sign) {
this.transSignFields([rs.data.sign]);
await this.setChannel([rs.data]);
await this.setMain(rs.data.rows);
}
return rs;
}
async save(params) {
var rs = await this.callms("merchant", "mchtSave", params);
return rs;
}
async page(params) {
var rs = await this.callms("merchant", "mchtPage", params);
if(rs.data && rs.data.rows) {
this.transSignFields(rs.data.rows);
await this.setChannel(rs.data.rows);
await this.setMain(rs.data.rows);
}
return rs;
}
async sign(params) {
var rs = await this.callms("merchant", "mchtSign", params);
return rs;
}
async signInfo(params) {
var rs = await this.callms("merchant", "mchtSignInfo", params);
if(rs.data) {
this.transSignFields([rs.data]);
await this.setMain([rs.data]);
}
return rs;
}
async getMerchantWithCache(params) {
let key = this.INFO_KEY + params.id;
let merchant = await this.redisClient.get(key);
if(!merchant || !merchant.id || params.forceUpdate) {
let info = await this.info(params) || {};
merchant = info.data || {};
await this.redisClient.setWithEx(key, JSON.stringify(merchant), 60 * 5);
} else {
merchant = JSON.parse(merchant);
}
return merchant;
}
async getFeeTypeWithCache(params) {
let merchant = await this.getMerchantWithCache({id: params.saas_merchant_id}) || {};
let sign = merchant.sign || {};
return sign.main_id_trade ? "10" : "20";
}
async getSettings(merchant_id) {
if(!merchant_id) {
return;
}
let key = this.SETTINGS_KEY + merchant_id;
let settings = await this.redisClient.get(key);
if(!settings) {
let rs = await this.callms("merchant", "mchtSettings", {id: merchant_id}) || {};
settings = rs.data;
if(settings && settings.appid && settings.secret) {
await this.redisClient.setWithEx(key, JSON.stringify(settings), 60 * 5);
}
} else {
settings = JSON.parse(settings);
}
return settings;
}
async title(params) {
let rs = await this.callms("merchant", "mchtTitles", params);
let list = rs.data || [];
let u = {};
if(list.length > 0) {
u = list[0];
}
return system.getResultSuccess(u);
}
async addr(params) {
let rs = await this.callms("merchant", "mchtAddrs", params);
let list = rs.data || [];
let u = {};
if(list.length > 0) {
u = list[0];
}
return system.getResultSuccess(u);
}
async saveAddr(params) {
let rs = await this.callms("merchant", "mchtAddrSave", params);
return rs;
}
async setChannel(rows) {
if(!rows) {
return;
}
let channelIds = [];
for(let row of rows) {
if(row.channel_id) {
channelIds.push(row.channel_id);
}
}
if(channelIds.length == 0) {
return;
}
let map = await this.channelSve.mapByIds({ids: channelIds}) || {};
map = map.data || {};
for(let row of rows) {
row.channel = map[row.channel_id] || {};
}
}
async setMain(rows) {
if(!rows) {
return;
}
let mainIds = [];
for(let row of rows) {
if(row.main_id) {
mainIds.push(row.main_id);
}
if(row.main_id_trade) {
mainIds.push(row.main_id_trade);
}
if(row.main_id_invoice) {
mainIds.push(row.main_id_invoice);
}
}
if(mainIds.length == 0) {
return;
}
let map = await this.mainSve.mapByIds({ids: mainIds}) || {};
map = map.data || {};
for(let row of rows) {
row.main = map[row.main_id] || {};
row.main_trade = map[row.main_id_trade] || {};
row.main_invoice = map[row.main_id_invoice] || {};
}
}
transSignFields(rows) {
if (!rows) {
return;
}
for (var item of rows) {
if (!item) {
continue;
}
item.bm_reg_price = system.f2y(item.bm_reg_price);
item.invoice_service_rate = system.f2y(item.invoice_service_rate);
item.trans_service_rate = system.f2y(item.trans_service_rate);
}
}
async setMerchant(rows) {
if (!rows || rows.length == 0) {
return;
}
let ids = [];
for(let row of rows) {
if(row.saas_merchant_id) {
ids.push(row.saas_merchant_id);
}
}
let map = await this.mapByIds({ids: ids, attrs: "id, name, short_name"}) || {};
map = map.data || {};
for(let row of rows) {
row.merchant = map[row.saas_merchant_id] || {};
}
}
async addConsumeLog(params) {
let rs = await this.callms("merchant", "addConsumeLog", params);
return rs;
}
}
module.exports = MerchantService;
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings")
const axios = require("axios");
class OrderService extends ServiceBase {
constructor() {
super();
}
async microAdd(params) {
let rs = await this.callms("order", "saasOrderMicroAdd", params);
return rs;
}
async orderInfo(params) {
let rs = await this.callms("order", "saasOrderInfo", params);
return rs;
}
async info(params) {
let rs = await this.callms("order", "saasOrderMerchantOrderInfo", params);
return rs;
}
async offlinePay(params) {
let rs = await this.callms("order", "saasOrderBulkOfflinePay", params);
return rs;
}
/**
* fn:商户系统
* @param params
* @returns {Promise<{msg: string, data, bizmsg: *|string, status: number}|*|undefined>}
*/
async page(params) {
let rs = await this.callms("order", "saasOrderPage", params);
if (rs && rs.data && rs.data.rows) {
this.transOrderField(rs.data.rows);
}
return rs;
}
async mapByIds(params) {
let rs = await this.callms("order", "saasOrderMapByIds", params) || {};
return rs.data || {};
}
// 交付信息 map by 信用代码
async mapByCreditCodes(params) {
let rs = await this.callms("order", "saasBusinessmenMapByCreditCodes", params);
if(!rs || !rs.data) {
return {};
}
return rs.data;
}
async businessmenPage(params) {
let rs = await this.callms("order", "saasOrderDeliverBusinessmenPage", params) || {};
return rs;
}
transOrderField(rows) {
if (!rows || rows.length == 0) {
return;
}
for (let row of rows) {
row.price = system.f2y(row.price);
}
}
async byIds(params) {
let rs = await this.callms("order", "itemByIds", params);
return rs;
}
async updateInvoice(params) {
let rs = await this.callms("order", "updateItemInvoice", params);
return rs;
}
/**
* fn:根据订单来源查询状态
* @param params
* @returns {Promise<{msg: string, data, bizmsg: *|string, status: number}|any|undefined>}
*/
async queryOrderStatusBySourceNo(params){
try{
let res = await axios({
method: 'post',
url: settings.deliverSysApi().queryOrderStatusBySourceNo,
data: params
});
console.log(res.data);
if(res.status == 200 && res.data && res.data.status == 0 && res.data.data) {
return res.data;
}
console.log(`xgg-saas-platform->orderSve->queryOrderStatusBySourceNo 请求结果` + JSON.stringify(res));
return system.getResult(null, `系统错误`);
}catch (e) {
console.log(e);
return system.getResult(null, `系统错误`);
}
}
}
module.exports = OrderService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
const settings = require("../../../../config/settings");
const axios = require("axios");
class TaxService extends ServiceBase {
constructor() {
super();
}
/**
* 月账期
* @param {*} params
*/
async getReportData(params) {
try {
let data ={
"accountPeriod": this.trim(params.accountPeriod),
"companyId": this.trim(params.companyId),
"customerId": this.trim(params.customerId),
"desc": this.trim(params.desc) || "string",
"reportType":this.trim(params.reportType) || 2,
"signWithoutKey": this.trim(params.signWithoutKey)|| "string"
}
let url = settings.ntapi().getReportData;
return await this.callApi(url, data, "月账期");
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 季度账期
* @param {*} params
*/
async getReportDataQuarter(params) {
try {
let data ={
"companyId": this.trim(params.companyId),
"customerId": this.trim(params.customerId),
"desc": this.trim(params.desc) || "string",
"reportType":this.trim(params.reportType) || 2,
"signWithoutKey": this.trim(params.signWithoutKey)|| "string",
"endPeriod": this.trim(params.endPeriod),
"startPeriod": this.trim(params.startPeriod)
}
let url = settings.ntapi().getReportDataQuarter;
return await this.callApi(url, params, "季度账期");
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 获取用户账簿信息
* @param {*} params
* id 个体工商户ID
*/
async getCustomerById(params) {
try {
let customer_id = this.trim(params.customer_id);
// let businessmen = await axios({
// method: 'post',
// url: settings.deliverSysApi().info,
// data: {id: params.id}
// });
// if (businessmen.status=!200 || businessmen.data.status!=0 || !businessmen.data.data.customer_id) {
// return system.getResult(null, `个体工商户不存在`);
// }
let url = settings.ntapi().getCustomerById;
let res = await this.callApi(url, {
// id: businessmen.data.data.customer_id
id: customer_id
}, "获取用户账簿信息");
return res;
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误`);
}
}
/**
* 获取工商户列表
* @param {*} params
*/
// async businessmenPage(params) {
// try {
// let businessmen = await axios({
// method: 'post',
// url: settings.deliverSysApi().businessmenPage,
// data: {id: params.id}
// });
// if (businessmen.status=!200 || businessmen.data.status!=0 ) {
// return system.getResult(null, `系统错误`);
// }
// let url = settings.ntapi().getCustomerById;
// let res = await this.callApi(url, {
// id: businessmen.data.data.customer_id
// }, "获取用户账簿信息");
// return res;
// } catch (error) {
// console.log(error);
// return system.getResult(null, `系统错误`);
// }
// }
}
module.exports = TaxService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base");
const settings = require("../../../../config/settings");
const fs = require("fs");
const xlsx = require('node-xlsx');
class TradeService extends ServiceBase {
constructor() {
super();
// this.businessmenSve = system.getObject("service.business.businessmenSve");
this.merchantSve = system.getObject("service.saas.merchantSve");
this.orderSve = system.getObject("service.saas.orderSve");
this.redisClient = system.getObject("util.redisClient");
}
async orderPage(params) {
params.currentPage = Number(params.currentPage || 1);
params.pageSize = Number(params.pageSize || 10);
let rs = await this.callms("trade", "orderPage", params) || {};
if (rs.data && rs.data.rows) {
this.transFields(rs.data.rows);
}
return rs;
}
async orderInfo(params) {
let rs = await this.callms("trade", "orderInfo", params) || {};
let order = rs.data;
if (order) {
this.transFields([order]);
let merchant = await this.merchantSve.info({id: params.saas_merchant_id}) || {};
merchant = merchant.data || {};
order.merchant_name = merchant.name;
}
return rs;
}
async itemPage(params) {
params.currentPage = Number(params.currentPage || 1);
params.pageSize = Number(params.pageSize || 10);
let rs = await this.callms("trade", "itemPage", params) || {};
if (rs.data && rs.data.rows) {
this.transFields(rs.data.rows);
}
return rs;
}
async lockOrder(params) {
let order_type = this.trim(params.order_type);
if (["10", "20"].indexOf(order_type) == -1) {
return system.getResult(null, `order_type[${params.order_type || null}]设置错误`)
}
params.acc_type = this.trim(params.acc_type);
params.fileUrl = this.trim(params.fileUrl);
let itemList = params.itemList || [];
if (["00", "01", "02"].indexOf(params.acc_type) == -1) {
return system.getResultFail(-1, `请选择打款通道`, itemList);
}
if (itemList.length == 0) {
return system.getResultFail(-1, `锁定批次无数据`, itemList);
}
// 验证字段
let error = await this.checkItemList(itemList, params);
if (error) {
return system.getResultFail(-1, `批次内有错误数据,请检查后修改`, itemList);
}
// 获取商户签约信息
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
info = info.data || {};
let main = info.main_trade || {};
// 计算预计付款金额
let result = await this.countAmt(itemList, info, params);
let current = new Date();
let projectName;
for (let item of itemList) {
item.amt = system.y2f(item.actual_amt);
item.actual_amt = system.y2f(item.actual_amt);
item.deduct_amt = system.y2f(item.deduct_amt);
item.service_tax = system.y2f(item.service_tax);
item.trade_status = "01";
if (order_type == "20") {
item.trade_time = current;
item.trade_desc = "商户自行交易";
}
projectName = item.project_name;
}
let out_trade_no = await this.redisClient.genrateId("gsb_out_trade_no");
// 构建批次对象
let order = {
saas_id: params.saas_id,
saas_merchant_id: params.saas_merchant_id,
out_trade_no: out_trade_no,
service_rate: system.y2f(info.trans_service_rate),
amt: system.y2f(result.actual_amt),
actual_amt: system.y2f(result.actual_amt),
deduct_amt: system.y2f(result.deduct_amt),
service_tax: system.y2f(result.service_tax),
item_count: itemList.length,
acc_type: params.acc_type,
order_file: params.fileUrl,
order_type: order_type,
project_name: projectName,
// 付款凭证信息
pay_voucher: "",
pay_bank_account: main.bank_account,
pay_bank_name: main.bank_name,
pay_bank_no: main.bank_no,
itemList: itemList
};
// 商户交易上传
if (order_type == "20") {
order.trade_status = "01";
order.check_status = "01";
}
let rs = await this.callms("trade", "orderAdd", order);
if (rs.data) {
this.transFields([rs.data]);
}
return rs;
}
async offlinePay(params) {
params.type = "offline";
params.pay_voucher = this.trim(params.pay_voucher);
params.pay_bank_account = this.trim(params.pay_bank_account);
params.pay_bank_name = this.trim(params.pay_bank_name);
params.pay_bank_no = this.trim(params.pay_bank_no);
if (!params.pay_voucher) {
return system.getResult(null, "请上传凭证");
}
let rs = await this.callms("trade", "orderPay", params);
return rs;
}
async parseItems(params) {
params.order_type = this.trim(params.order_type);
if (["10", "20"].indexOf(params.order_type) == -1) {
return system.getResult(null, `order_type[${params.order_type || null}]设置错误`)
}
// 获取商户签约信息
let info = await this.merchantSve.signInfo({id: params.saas_merchant_id}) || {};
info = info.data || {};
if (!info.main_trade || !info.main_trade.id) {
return system.getResult(null, "签约时未设置转账交易签约主体,请联系平台进行设置");
}
// 读取excel
let itemList = await this.readItems(params);
// 验证字段
let error = await this.checkItemList(itemList, params);
// 计算预计付款基恩
let result = await this.countAmt(itemList, info, params);
result.order_type = params.order_type;
// 封装返回对象
result.error = error;
if (result.error) {
// 处理错误信息
for (let idx = 0; idx < itemList.length; idx++) {
let item = itemList[idx];
if (item.errors && item.errors.length > 0) {
let len = Number(idx) + 7;
return system.getResult(null, `第${len}行错误,` + item.errors.join("、"));
}
}
}
result.itemList = itemList;
return system.getResultSuccess(result, `上传成功`);
}
async countAmt(itemList, info, params) {
let result = {amt: 0, actual_amt: 0, deduct_amt: 0, service_tax: 0};
if (!itemList) {
return result;
}
// 服务费,这里已经处理了分转元,不用在处理
let service_rate = info.trans_service_rate;
// 计算金额
for (let data of itemList) {
let amt = Number(data.amt);
data.service_tax = parseFloat((amt * service_rate) / 100).toFixed(2);
data.actual_amt = parseFloat(amt).toFixed(2);
data.deduct_amt = parseFloat(Number(data.actual_amt) + Number(data.service_tax)).toFixed(2);
// 总服务费
result.service_tax = Number(result.service_tax) + Number(data.service_tax);
// 总实发
result.actual_amt = Number(result.actual_amt) + Number(data.actual_amt);
// 总请求打款
result.amt = Number(result.amt) + amt;
}
// 总扣款
result.deduct_amt = Number(result.service_tax) + Number(result.actual_amt);
return result;
}
async readItems(params) {
let fileUrl = params.fileUrl;
let fileName = params.fileName;
let itemList = [];
let filePath = settings.localpath() + "saas_xgg_trade_order_" + this.trim(fileName) + ".xlsx";
try {
// await this.downloadFile(params.url, filePath);
await this.restClient.execDownload2(fileUrl, filePath);
let sheets = xlsx.parse(filePath);
fs.unlinkSync(filePath);
if (!sheets || sheets.length == 0) {
return system.getResult(null, "打款文件无数据")
}
let sheet = sheets[0];
if (!sheet || !sheet.data || sheet.data.length == 0) {
return system.getResult(null, "打款文件无数据")
}
let rows = sheet.data;
let projectRow = rows[2];
let projectName = projectRow.length >= 2 ? projectRow[1] : "";
let itemList = [];
for (let idx = 6; idx < rows.length; idx++) {
var data = {
errors: []
};
let cells = rows[idx];
let cellLength = cells.length;
if (cellLength == 0) {
continue;
}
if (cellLength < 6) {
data.errors.push("缺少数据, 列数不全");
continue;
}
data.project_name = projectName;
data.acc_name = this.trim(cells[1]);
data.credit_code = this.trim(cells[2]).toUpperCase();
data.acc_no = this.trim(cells[3]);
data.open_bank = this.trim(cells[4]);
data.amt = this.trim(cells[5]);
if (cellLength == 6) {
data.remark = "";
} else {
data.remark = this.trim(cells[6]);
}
itemList.push(data);
}
return itemList;
} catch (error) {
console.log(error);
return system.getResult(null, "excel解析出错")
}
}
async checkItemList(itemList, params) {
let saas_merchant_id = params.saas_merchant_id;
let error = false;
if (!itemList || itemList.length == 0) {
return system.getResult(null, "打款文件无数据")
}
// 统一社会信用代码获取
let creditCodes = [];
for (let data of itemList) {
creditCodes.push(data.credit_code);
}
let creditCodeMap = await this.orderSve.mapByCreditCodes({
saas_merchant_id: saas_merchant_id,
creditCodes: creditCodes,
attrs: "credit_code"
});
let order_type = this.trim(params.order_type);
let amtName = "商户请求打款金额";
if (order_type == "20") {
amtName = "实发金额";
}
for (let data of itemList) {
this.checkField(data, "acc_name", {name: "收款户名", is_require: true, maxLen: 64});
let bm = creditCodeMap[data.credit_code];
if (!bm) {
data.errors.push(`统一社会信用代码[${data.credit_code}]不存在`);
}
this.checkField(data, "credit_code", {name: "个体户统一信用代码", is_require: true, eqLen: 18});
this.checkField(data, "acc_no", {name: "收款账号", is_require: true, maxLen: 30, is_number: true});
this.checkField(data, "open_bank", {name: "开户银行全称", maxLen: 100});
this.checkField(data, "amt", {name: amtName, is_require: true, maxLen: 100, is_number: true});
this.checkField(data, "remark", {name: "备注", maxLen: 100});
if (!error && data.errors.length > 0) {
error = true;
}
}
return error;
}
async byIds(params) {
let rs = await this.callms("trade", "itemByIds", params);
return rs;
}
async updateInvoice(params) {
let rs = await this.callms("trade", "updateItemInvoice", params);
return rs;
}
async saveStPay(params) {
let rs = await this.callms("trade", "saveStPay", params);
return rs;
}
async updatePayStatus(params) {
let rs = await this.callms("trade", "updateStatus", params);
return rs;
}
checkField(data, field, rule) {
if (!data || !field) {
return;
}
data.errors = data.errors || [];
let v = data[field];
if (rule.is_require && !v) {
data.errors.push(`${rule.name}未填写`);
}
if (rule.maxLen && v.length > rule.maxLen) {
data.errors.push(`${rule.name}长度不允许超过${rule.maxLen}`);
}
if (rule.minLen && v.length < rule.minLen) {
data.errors.push(`${rule.name}长度不允许少于${rule.minLen}`);
}
if (rule.eqLen && v.length != rule.eqLen) {
data.errors.push(`${rule.name}长度为${rule.eqLen}`);
}
if (rule.is_number && isNaN(v)) {
data.errors.push(`${rule.name}需要填写数字类型`);
}
}
transFields(rows) {
if (!rows || rows.length == 0) {
return;
}
for (let row of rows) {
row.amt = system.f2y(row.amt);
row.actual_amt = system.f2y(row.actual_amt);
row.deduct_amt = system.f2y(row.deduct_amt);
row.service_tax = system.f2y(row.service_tax);
row.service_rate = system.f2y(row.service_rate);
}
}
async invoiceTrade(params) {
let rs = await this.callms("trade", "invoiceTrade", params) || {};
return rs;
}
/**
* 根据统一社会信用代码获取账单流水
* @returns {Promise<void>}
* @param credit_code_array Array
*/
async tradeItemBycreditCode(params) {
try{
if(!(params.credit_code_array instanceof Array) && params.credit_code_array.length <0){
return system.getResult(null, `参数格式错误`);
}
return await this.callms("trade", "tradeItemBycreditCode", params) || {};
}catch (e) {
console.log(e);
return system.getResult(null, `系统错误`);
}
}
}
module.exports = TradeService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class authService extends ServiceBase {
constructor() {
super();
}
/**
* 菜单 添加
* @param {*} params
*/
async addAuth(params) {
try {
return await this.callms("uc", "addAuth", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 更新
* @param {*} params
*/
async updAuth(params) {
try {
return await this.callms("uc", "updAuth", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 删除
* @param {*} params
*/
async delAuth(params) {
try {
return await this.callms("uc", "delAuth", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 菜单 查询明细
* @param {*} params
*/
async queryById(params) {
try {
return await this.callms("uc", "authInfo", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 根据pid查出子菜单
* @param {*} params
*/
async byPid(params) {
try {
return await this.callms("uc", "authByPid", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 查询整个树结构
* @param {*} params
*/
async tree(params) {
try {
return await this.callms("uc", "authTree", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = authService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class MerchantAppletuserService extends ServiceBase {
constructor() {
super();
this.redisClient = system.getObject("util.redisClient");
}
async login(params) {
try {
return await this.callms("uc", "appletLogin", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async getLoginUser(params) {
let key = "applet_login_" + params.merchant_id +"_" + params.openid;
try {
let user = await this.redisClient.get(key);
console.log(`getLoginUser key = ${key}, user = ${user}`);
if(!user) {
console.log(`1`);
let appletUserInfo = await this.callms("uc", "appletUserInfo", params) || {};
user = appletUserInfo.data;
console.log("getLoginUser result", params, user);
if(user) {
console.log(`2`);
await this.redisClient.setWithEx(key, JSON.stringify(user), 60 * 33);
}
} else {
user = JSON.parse(user);
}
console.log("getLoginUser return user", params, user);
return user;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = MerchantAppletuserService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class OrgService extends ServiceBase {
constructor() {
super();
}
/**
* 组织机构 添加
* @param {*} params
*/
async addOrg(params) {
try {
return await this.callms("uc", "addOrg", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 更新
* @param {*} params
*/
async updOrg(params) {
try {
return await this.callms("uc", "updOrg", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 删除
* @param {*} params
*/
async delOrg(params) {
try {
return await this.callms("uc", "delOrg", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 查询列表
* @param {*} params
*/
async listOrg(params) {
try {
return await this.callms("uc", "listOrg", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 组织机构 查询明细
* @param {*} params
*/
async queryById(params) {
try {
return await this.callms("uc", "orgQueryById", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 根据pid查出子目录
* @param {*} params
*/
async byPid(params) {
try {
return await this.callms("uc", "orgByPid", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 查询整个树结构
* @param {*} params
*/
async tree(params) {
try {
return await this.callms("uc", "orgTree", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = OrgService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class RoleService extends ServiceBase {
constructor() {
super();
}
/**
* 角色 添加
* @param {*} params
*/
async addRole(params) {
try {
return await this.callms("uc", "addRole", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 角色 更新
* @param {*} params
*/
async updRole(params) {
try {
return await this.callms("uc", "updRole", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 角色 删除
* @param {*} params
*/
async delRole(params) {
try {
return await this.callms("uc", "delRole", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 角色 查询列表
* @param {*} params
*/
async listRole(params) {
try {
return await this.callms("uc", "listRole", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* 角色 查询明细
* @param {*} params
*/
async queryById(params) {
try {
return await this.callms("uc", "roleQueryById", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async setAuth(params) {
try {
return await this.callms("uc", "setAuth", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = RoleService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class SaasService extends ServiceBase {
constructor() {
super();
}
/**
* saas 添加
* @param {*} params
*/
async addSaas(params) {
try {
return await this.callms("uc", "addSaas", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 更新
* @param {*} params
*/
async updSaas(params) {
try {
return await this.callms("uc", "updSaas", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 删除
* @param {*} params
*/
async delSaas(params) {
try {
return await this.callms("uc", "delSaas", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询列表
* @param {*} params
*/
async listSaas(params) {
try {
return await this.callms("uc", "listSaas", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
/**
* saas 查询明细
* @param {*} params
*/
async queryById(params) {
try {
return await this.callms("uc", "orgQuery", params);
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
}
module.exports = SaasService;
\ No newline at end of file
{
"name": "xgg-saas-merchant",
"version": "1.0.0",
"description": "h5framework",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "sunyanan",
"license": "ISC",
"dependencies": {
"MD5": "^1.3.0",
"after": "^0.8.2",
"ali-oss": "^4.12.2",
"axios": "^0.19.2",
"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",
"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",
"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",
"svg-captcha": "^1.4.0",
"uuid": "^3.2.1"
},
"devDependencies": {
"element-theme": "^2.0.1",
"element-theme-chalk": "^2.4.0"
}
}
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