Commit f9b74497 by zhaoxiqing

Merge branch 'bpo-admin-department' of http://gitlab.gongsibao.com/jiangyong/zhichan into bpo-admin

parents 70562c90 00ded4f2
......@@ -166,9 +166,9 @@ class ChannelApi {
if(!queryobj.channel_id){
return system.getResultFail(-1, "channel_id不能为空");
}
if(!queryobj.origin_id){
return system.getResultFail(-1, "origin_id不能为空");
}
// if(!queryobj.origin_id){
// return system.getResultFail(-1, "origin_id不能为空");
// }
if(!queryobj.merchant_name){
return system.getResultFail(-1, "merchant_name不能为空");
}
......@@ -192,6 +192,7 @@ class ChannelApi {
return system.getResultFail(-1, "origin_merchant_name不能为空");
}
}
queryobj.origin_id = 10000;
return await this.channelService.merchantSaves(queryobj);
} catch (e) {
console.log(e);
......
......@@ -2,13 +2,101 @@ var system = require("../../system")
var moment = require("moment");
const md5 = require("MD5");
const logCtl = system.getObject("web.oplogCtl");
const syncDays = Number(5);
class EcontractApi {
constructor() {
this.esettleSve = system.getObject("service.esettleSve");
this.restClient = system.getObject("util.restClient");
this.redisClient = system.getObject("util.redisClient");
this.outTradeNoKey = 'bpo_outtradeno';
}
async syncUserDepartment(pobj) {
let map1 = await this.etemplatebusiSve.findOwnerBusiIdMap(1) || {};
let map2 = await this.etemplatebusiSve.findOwnerBusiIdMap(2) || {};
let keys1 = Object.keys(map1);
let keys2 = Object.keys(map2);
let keys3 = keys1.concat(keys2);
let userMap = await this.userSve.findMapByIds(keys3);
let departmentDic = await this.departmentSve.mapDict();
await this.updateStatDepartment(map1, userMap, departmentDic);
await this.updateStatDepartment(map2, userMap, departmentDic);
return system.getResult2(1);
}
async updateStatDepartment(map, userMap, departmentDic) {
for (let k in map) {
let busiIds = map[k] || [];
if (busiIds.length == 0) {
continue;
}
let user = userMap["id_" + k] || {};
let department = departmentDic[user.department_id || 0] || {};
await this.busistatSve.updateDepartmentName({
busiIds: busiIds,
user_name: user.nickName || "",
user_id: Number(k),
user_department_name: department.name || "",
});
}
}
this.outTradeNoKey = 'bpo_outtradeno';
async syncDepartmentStat(pobj) {
// 获取30天内数据
let t1 = new Date().getTime();
for (let i = 0; i < syncDays; i++) {
try {
let day = moment().subtract(syncDays - i, 'days').format('YYYY-MM-DD');
console.log(`---------------- begin ${day}`);
let t1 = new Date().getTime();
await this.syncDay({day: day});
let t2 = new Date().getTime();
console.log(`---------------- end ${day}`, t2 - t1);
} catch (e) {
console.log(e.stack);
}
}
let t2 = new Date().getTime();
console.log(t2 - t1, "------------------");
await this.syncUserDepartment();
return system.getResult2(1);
}
async syncDepartmentStatLocal(pobj) {
// 获取30天内数据
let t1 = new Date().getTime();
for (let i = 0; i < syncDays; i++) {
try {
let day = moment().subtract(syncDays - i, 'days').format('YYYY-MM-DD');
console.log(`---------------- begin ${day}`);
let t1 = new Date().getTime();
await this.syncDay({day: day, localdb: true});
let t2 = new Date().getTime();
console.log(`---------------- end ${day}`, t2 - t1);
} catch (e) {
console.log(e.stack);
}
}
let t2 = new Date().getTime();
console.log(t2 - t1, "------------------");
await this.syncUserDepartment();
return system.getResult2(1);
}
async syncDay(pobj) {
let day = pobj.day;
let dayNum = Number(day.replace(new RegExp("-", 'g'), ""));
let list;
if(pobj.localdb) {
list = await this.esettleSve.busiStatByDayLocal(day);
} else {
list = await this.esettleSve.busiStatByDay(day);
}
console.log(JSON.stringify(list));
await this.busistatSve.syncDayData(dayNum, list);
}
async settleCommission(obj, req) {
......@@ -280,4 +368,4 @@ class EcontractApi {
return uuid.join('');
}
}
module.exports = EcontractApi;
\ No newline at end of file
module.exports = EcontractApi;
var system = require("../../system")
var settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
const moment = require("moment");
class BusistatCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(BusistatCtl));
this.departmentSve = system.getObject("service.departmentSve");
this.excelClient = system.getObject("util.excelClient");
}
async suggest(query,qobj,req){
var name = this.trim(qobj.name);
if (!name) {
return system.getResult2([])
}
var list = await this.departmentSve.suggestByName(name);
return system.getResult2(list);
}
async departmentList(queryobj, qobj, req) {
var params = qobj.search;
try {
if (params.begin) {
params.begin = Number(params.begin.replace(new RegExp("-", 'g'), ""));
}
if (params.end) {
params.end = Number(params.end.replace(new RegExp("-", 'g'), ""));
}
// this.doTimeCondition(params, ["statBegin", "statEnd"]);
let page = await this.service.departmentPage(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async departmentExport(pobj, req, res) {
var params = JSON.parse(pobj.search);
if (params.begin) {
params.begin = Number(params.begin.replace(new RegExp("-", 'g'), ""));
}
if (params.end) {
params.end = Number(params.end.replace(new RegExp("-", 'g'), ""));
}
try {
params.currentPage = 1;
params.pageSize = -1;
let rows = await this.service.listByCondition(params);
let csvobj = {
fileName: "发薪统计-" + moment().format("YYYYMMDD") + ".csv",
rows: rows,
opts: {
fields: ['user_department_name', 'user_name', 'busi_id', 'busi_name', 'service_tax', 'actual_amt', 'deduct_amt', 'income_tax', 'added_value_tax', 'times'],
unwind: ['busistat'],
excelStrings: true,
unwindBlank: true
},
headers: {
'user_department_name':"部门名称",
'user_name': "业务员",
'busi_id': "商户号",
'busi_name': "企业名称",
'service_tax':"服务费",
'actual_amt':"实发金额",
'deduct_amt':"扣除金额",
'income_tax':"个税",
'added_value_tax':"增值税",
'times':"发薪次数",
},
};
await this.excelClient.exportCsv(req, res, csvobj);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
}
module.exports = BusistatCtl;
var system = require("../../system")
var settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
class DepartmentCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(DepartmentCtl));
}
}
module.exports = DepartmentCtl;
......@@ -21,6 +21,7 @@ class UserCtl extends CtlBase {
this.ejobapplySve = system.getObject("service.ejobapplySve");
this.redisClient = system.getObject("util.redisClient");
this.mailClient = system.getObject("util.mailClient");
this.departmentSve = system.getObject("service.departmentSve")
}
async findAndCountAll(queryobj, obj, req) {
var pageInfo = obj.pageInfo || {};
......@@ -118,13 +119,13 @@ class UserCtl extends CtlBase {
async getCurrentUser(qobj, pobj, req) {
var userid = req.headers.referer.substr(req.headers.referer.indexOf('userid') + 7);
// var accountInfo = await this.redisClient.get("yd_user_" + userid);
// var mobile = accountInfo.substr(accountInfo.indexOf('mobile') + 9,11);
// var name = accountInfo.substr(accountInfo.indexOf('userName') + 11,accountInfo.indexOf('mobile')-16);
// var personSign = accountInfo.substr(accountInfo.indexOf('personsSign') + 14,18);
// var bankno = accountInfo.substr(accountInfo.indexOf('bankno') + 9,16);
var accountInfoJson = await this.redisClient.get("yd_user_" + userid) || "";
var accountInfo = {};
if(accountInfoJson) {
......@@ -141,7 +142,7 @@ class UserCtl extends CtlBase {
userName: name,
bankno: bankno,
}
var result = {
status: 0,
message: "success",
......@@ -154,7 +155,7 @@ class UserCtl extends CtlBase {
//return system.getResult2(req.session.user);
}
async loginUser(qobj, pobj, req) {
var u = await super.findById(req.session.user.id);
......@@ -230,7 +231,7 @@ class UserCtl extends CtlBase {
var name = accountInfo.userName || "";
var personSign = accountInfo.personsSign || "";
var bankno = accountInfo.bankno || "";
if(openid) {
var existedUser = await this.service.getUserByOpenId(openid, appkey);
if(existedUser){
......@@ -241,7 +242,7 @@ class UserCtl extends CtlBase {
content: "cookie丢失,urlParam从新load," + JSON.stringify(req.query) + ",headers:"+ JSON.stringify(req.headers.referer),
clientIp: ""
});
var tmp = {
id: existedUser.id,
userName: existedUser.userName == "" ? name : existedUser.userName,
......@@ -789,8 +790,8 @@ class UserCtl extends CtlBase {
});
}
}
async loginyd2(req) {
try {
//日志记录
......@@ -1281,5 +1282,14 @@ class UserCtl extends CtlBase {
}
}
async suggestByName(qobj, pobj, req){
var name = this.trim(qobj.name);
if (!name) {
return system.getResult2([])
}
var list = await this.departmentSve.suggestByName(name);
return system.getResult2(list);
}
}
module.exports = UserCtl;
\ No newline at end of file
module.exports = UserCtl;
......@@ -45,6 +45,19 @@ class Dao{
var en= await this.model.destroy({where:{id:{[this.db.Op.in]:ids}}});
return en;
}
//批量插入
async bulkCreate(objs, t) {
if (!objs || objs.length == 0) {
return;
}
if (t) {
return await this.model.bulkCreate(objs, { transaction: t });
} else {
return await this.model.bulkCreate(objs);
}
}
async delete(qobj){
var en= await this.model.findOne({where:qobj});
if(en!=null){
......
const system = require("../../system");
const Dao = require("../dao.base");
class BusistatDao extends Dao {
constructor() {
super(Dao.getModelName(BusistatDao));
}
extraWhere(qobj, qw, qc) {
qc.raw = true;
return qw;
}
async delByDay(statDay) {
if (!statDay) {
return;
}
var sql = "DELETE FROM `c_busi_stat` WHERE stat_day = " + Number(statDay);
return await this.customExecAddOrPutSql(sql);
}
async updateDepartmentName(params) {
let sql = "UPDATE `c_busi_stat` SET user_name = :user_name, user_id=:user_id, user_department_name= :user_department_name WHERE busi_id IN (:busiIds)";
return await this.customExecAddOrPutSql(sql, {replacements: params});
}
async countByCondition(params) {
let sql = [];
sql.push("SELECT");
sql.push("COUNT(DISTINCT busi_id) AS num ");
sql.push("FROM `c_busi_stat`");
sql.push("WHERE 1 = 1");
this.setCondition(sql, params);
let list = await this.customQuery(sql.join(" "), params);
if (!list || list.length == 0) {
return 0;
}
return list[0].num || 0;
}
async listByCondition(params) {
params.currentPage = Number(params.currentPage || 1);
params.pageSize = Number(params.pageSize || 10);
params.startRow = (params.currentPage - 1) * params.pageSize;
let sql = [];
sql.push("SELECT");
sql.push("id, busi_name, user_name, user_department_name, ");
sql.push("SUM(times) AS times, SUM(amt) AS amt, SUM(actual_amt) AS actual_amt, SUM(deduct_amt) AS deduct_amt,");
sql.push("SUM(income_tax) AS income_tax, SUM(service_tax) AS service_tax, SUM(added_value_tax) AS added_value_tax");
sql.push("FROM `c_busi_stat`");
sql.push("WHERE 1 = 1");
this.setCondition(sql, params);
sql.push("GROUP BY busi_id ");
sql.push("ORDER BY service_tax DESC ");
if(params.pageSize && params.pageSize != -1) {
sql.push(" LIMIT :startRow, :pageSize ");
}
return await this.customQuery(sql.join(" "), params);
}
async setCondition(sql, params) {
if (!sql || !params) {
return;
}
if (params.busi_name) {
params.busi_name_like = `%${params.busi_name}%`;
sql.push("AND busi_name LIKE :busi_name_like");
}
if (params.user_department_name) {
sql.push("AND user_department_name = :user_department_name");
}
if(params.begin) {
sql.push("AND stat_day >= :begin");
}
if(params.end) {
sql.push("AND stat_day <= :end");
}
}
// async departmentList(params){
//
// var currentPage = Number(params.currentPage || 0);
// var pageSize = Number(params.pageSize || 10);
// var countsql = "SELECT COUNT(DISTINCT busi_id) AS num FROM `c_busi_stat` " + "WHERE 1 = 1 "
// var listsql = "SELECT busi_name,user_name,user_department_name,SUM(times) AS times,SUM(amt) AS amt,SUM(actual_amt) AS actual_amt,SUM(deduct_amt) AS deduct_amt,SUM(income_tax) AS income_tax,SUM(service_tax) AS service_tax,SUM(added_value_tax) AS added_value_taxFROM `c_busi_stat` WHERE 1 = 1 \n"
//
// if (params.busi_name) {
// countsql = countsql+" AND busi_name LIKE :busi_name";
// listsql = listsql+ " AND busi_name LIKE :busi_name"
// }
// if (params.user_department_name) {
// countsql = countsql+" AND user_department_name = :user_department_name"
// listsql = listsql+ " AND user_department_name = :user_department_name"
// }
// if(params.begin) {
// countsql = countsql + " AND created_at >= :begin ";
// listsql = listsql+ " AND stat_day >= :begin"
// }
// if(params.end) {
// countsql = countsql + " AND created_at <= :end ";
// listsql = listsql+ " AND stat_day <= :end"
// }
// console.log(countsql)
// console.log(listsql)
// var count = await this.customQuery(countsql, {busi_name:params.busi_name,user_department_name:params.user_department_name,begin:params.begin,end:params.end});
//
// if(count[0].num == 0 ){
//
// }
//
//
// }
}
module.exports = BusistatDao;
......@@ -70,6 +70,13 @@ class DbFactory {
constraints: false,
});
this.db.models.user.belongsTo(this.db.models.department, {
constraints: false,
});
this.db.models.department.hasMany(this.db.models.user, {
constraints: false,
});
this.db.models.econtract.belongsTo(this.db.models.etemplate, {
constraints: false,
});
......@@ -119,4 +126,4 @@ class DbFactory {
}
}
module.exports = DbFactory;
\ No newline at end of file
module.exports = DbFactory;
const system = require("../../system");
const Dao = require("../dao.base");
class DepartmentDao extends Dao {
constructor() {
super(Dao.getModelName(DepartmentDao));
}
async suggest(name) {
if (!name) {
return [];
}
var sql = "SELECT id, name FROM `p_department` WHERE name LIKE :queryLike AND deleted_at IS NULL ";
sql = sql + " ORDER BY id ASC ";
var list = await this.customQuery(sql, {queryLike: "%" + name + "%"});
return list || [];
}
}
module.exports = DepartmentDao;
......@@ -1355,7 +1355,27 @@ module.exports = {
},
],
},
{
"code": "sycpzx",
"isleft":true,
"label": "商业产品中心",
"icon":"el-icon-menu",
"isSubmenu": true,
"children": [
{
"code": "sycpzx_bpo", "isGroup": true,"icon":"fa fa-bars", "label": "BPO管理", "children": [
{
"code": "bpodepartmentstat",
"label": "发薪业绩",
"isMenu": true,
"bizCode": "bpodepartmentstat",
"bizConfig": null,
"path": ""
},
],
},
],
},
{
"code": "toolCenter",
"label": "H5",
......@@ -1635,7 +1655,7 @@ module.exports = {
"enttemplatemy": {"title": "模板管理", "config": null, "path": "/enttemplatemy", "comname": "enttemplatemy"},
"entcontractmy": {"title": "签约管理", "config": null, "path": "/entcontractmy", "comname": "entcontractmy"},
// "dkcompanyadmin": {"title": "企业管理", "config": null, "path": "/dkcompanyadmin", "comname": "dkcompanyadmin"},
"bpodepartmentstat": {"title": "发薪业绩", "config": null, "path": "/bpodepartmentstat", "comname": "bpodepartmentstat"},
},
"pauths": [
"add", "edit", "delete", "export", "show"
......
module.exports={
"bizName":"bpodepartmentstat",
"list":{
columnMetaData:[
]
},
"form":[
],
"search":[
],
"auth":{
"add":[
],
"edit":[
],
"delete":[
// {"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true},
],
"common":[
],
}
}
......@@ -5,6 +5,7 @@ module.exports={
{"width":"120","label":"手机号","prop":"mobile","isShowTip":true,"isTmpl":false},
{"width":"100","label":"昵称","prop":"nickName","isShowTip":true,"isTmpl":false},
{"width":"100","label":"角色","prop":"Roles","isShowTip":true,"isTmpl":false},
{"width":"200","label":"所属部门","prop":"department.name","isShowTip":true,"isTmpl":false},
{"width":"80","label":"状态","prop":"isEnabled","isShowTip":true,"isTmpl":false},
{"width":"null","label":"操作","name":"null","isShowTip":false,"isTmpl":true,"isBtns":true},
]
......@@ -20,6 +21,9 @@ module.exports={
{"type":"input","label":"昵称","prop":"nickName","placeHolder":"昵称","style":""},
// {"type":"switch","label":"管理员","prop":"isAdmin","acText":"是管理员","inactText":"否","placeHolder":"请输入单次使用消耗的宝币数","style":""},
{"type":"select","label":"角色","refModel":"role","isMulti":true,"prop":"roles","labelField":"name","valueField":"id","style":""},
{"type":"select","label":"部门","refModel":"department","isMulti":false,"label":"部门","placeHolder":"请选择","prop":"department_id","labelField":"name","valueField":"id","style":"", "rules": [{ "required": true, "message": '请选择所属部门', "trigger": 'blur' }]},
]
},
],
......
const system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("busistat", {
busi_id: DataTypes.STRING,
user_id: DataTypes.INTEGER,
stat_day: DataTypes.INTEGER,
busi_name: DataTypes.STRING,
user_name: DataTypes.STRING,
user_department_name: DataTypes.STRING(64),
times: DataTypes.INTEGER,
amt : DataTypes.INTEGER,
actual_amt : DataTypes.INTEGER,
deduct_amt : DataTypes.INTEGER,
income_tax : DataTypes.INTEGER,
service_tax : DataTypes.INTEGER,
added_value_tax : DataTypes.INTEGER,
}, {
paranoid: true, //假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_busi_stat',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("department", {
name: DataTypes.STRING,
}, {
paranoid: true, //假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_department',
validate: {},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
......@@ -53,6 +53,7 @@ module.exports = (db, DataTypes) => {
appId3rd: DataTypes.STRING(64),
userCode3rd: DataTypes.STRING(64),
branchCode3rd: DataTypes.STRING(64),
department_id : DataTypes.INTEGER,
}, {
paranoid: true, //假的删除
......@@ -97,4 +98,4 @@ module.exports = (db, DataTypes) => {
// }
]
});
}
\ No newline at end of file
}
const system = require("../../system");
const ServiceBase = require("../sve.base");
class BusistatService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(BusistatService));
}
async syncDayData(statDay, list) {
if (!list || list.length == 0) {
return;
}
await this.dao.delByDay(statDay);
await this.dao.bulkCreate(list);
}
async updateDepartmentName(params) {
return await this.dao.updateDepartmentName(params);
}
async countByCondition(params) {
return await this.dao.countByCondition(params) || 0;
}
async listByCondition(params) {
let list = await this.dao.listByCondition(params);
this.setF2y(list);
return list;
}
async departmentPage(params) {
let total = await this.countByCondition(params);
if (total == 0) {
return { count: 0, rows: [] };
}
let list = await this.listByCondition(params);
return { count: total, rows: list };
}
setF2y(list) {
if (!list || list.length == 0) {
return;
}
for (let item of list) {
item.amt = system.f2y(item.amt);
item.actual_amt = system.f2y(item.actual_amt);
item.deduct_amt = system.f2y(item.deduct_amt);
item.income_tax = system.f2y(item.income_tax);
item.service_tax = system.f2y(item.service_tax);
item.added_value_tax = system.f2y(item.added_value_tax);
}
}
}
module.exports = BusistatService;
const system = require("../../system");
const ServiceBase = require("../sve.base");
class DepartmentService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(DepartmentService));
}
async suggestByName(name){
return await this.dao.suggest(name);
}
async dict() {
let sql = "SELECT id, name FROM p_department WHERE deleted_at IS NULL";
return await this.customQuery(sql) || [];
}
async mapDict() {
let result = {};
let list = await this.dict();
for (let item of list) {
result[item.id] = item;
}
return result;
}
}
module.exports = DepartmentService;
......@@ -826,6 +826,23 @@ class EsettleService extends ServiceBase {
}
return list;
}
async mapBusiByIds(ids) {
let result = {};
if (!ids || ids.length == 0) {
return result;
}
var sql = "SELECT id, company_name FROM `tbl_busi` WHERE id IN (:ids)";
var list = await this.settledb.query(sql, { replacements: { ids: ids } });
if (list && list.length > 0) {
list = list[0, 0] || [];
for (let b of list) {
result[b.id] = b.company_name;
}
}
return result;
}
async findBybusiId(busiId) {
if (!busiId) {
return [];
......@@ -921,5 +938,103 @@ class EsettleService extends ServiceBase {
}
return list;
}
async busiStatByDay(day) {
if (!day) {
return [];
}
let dayNum = Number(day.replace(new RegExp("-", 'g'), ""))
let begin = day + " 00:00:00";
let end = day + " 23:59:59";
let sql = [];
// sql.push("SELECT ");
// sql.push(" busi_id,");
// sql.push(" COUNT(busi_id) AS times,");
// sql.push(" SUM(amt) AS amt,");
// sql.push(" SUM(actual_amt) AS actual_amt,");
// sql.push(" SUM(deduct_amt) AS deduct_amt,");
// sql.push(" SUM(income_tax) AS income_tax,");
// sql.push(" SUM(service_tax) AS service_tax,");
// sql.push(" SUM(added_value_tax) AS added_value_tax");
// sql.push("FROM");
// sql.push(" `tbl_order_item` ");
// sql.push("WHERE trade_status = '00' ");
// sql.push(" AND create_time >= :begin ");
// sql.push(" AND create_time <= :end ");
// sql.push("GROUP BY busi_id");
sql.push("SELECT ");
sql.push(" t1.busi_id,");
sql.push(" COUNT(t1.busi_id) AS times,");
sql.push(" SUM(t1.amt) AS amt,");
sql.push(" SUM(t1.actual_amt) AS actual_amt,");
sql.push(" SUM(t1.deduct_amt) AS deduct_amt,");
sql.push(" SUM(t1.income_tax) AS income_tax,");
sql.push(" SUM(t1.service_tax) AS service_tax,");
sql.push(" SUM(t1.added_value_tax) AS added_value_tax");
sql.push("FROM");
sql.push(" `tbl_order_item` t1");
sql.push("LEFT JOIN ( SELECT MIN( create_time ) AS createTime, order_item_id FROM tbl_order_item_info WHERE create_time >= :begin AND create_time <= :end GROUP BY order_item_id ) t5 ON t1.id = t5.order_item_id ");
sql.push("WHERE t1.trade_status = '00' ");
sql.push(" AND t5.createTime >= :begin ");
sql.push(" AND t5.createTime <= :end ");
sql.push("GROUP BY t1.busi_id ");
let list = await this.settledb.query(sql.join(" "), { replacements: { begin: begin, end: end } });
if (!list || list.length == 0) {
return [];
}
list = list[0, 0] || [];
let ids = [];
for (let item of list) {
item.stat_day = dayNum;
ids.push(item.busi_id);
}
let busiMap = await this.mapBusiByIds(ids);
for (let item of list) {
item.busi_name = busiMap[item.busi_id];
}
return list;
}
async busiStatByDayLocal(day) {
if (!day) {
return [];
}
let dayNum = Number(day.replace(new RegExp("-", 'g'), ""))
let begin = day + " 00:00:00";
let end = day + " 23:59:59";
let sql = [];
sql.push("SELECT ");
sql.push(" t1.busi_id,");
sql.push(" COUNT(t1.busi_id) AS times,");
sql.push(" SUM(t1.amt) AS amt,");
sql.push(" SUM(t1.actual_amt) AS actual_amt,");
sql.push(" SUM(t1.deduct_amt) AS deduct_amt,");
sql.push(" SUM(t1.income_tax) AS income_tax,");
sql.push(" SUM(t1.service_tax) AS service_tax,");
sql.push(" SUM(t1.added_value_tax) AS added_value_tax");
sql.push("FROM");
sql.push(" `tbl_order_item` t1");
sql.push("LEFT JOIN ( SELECT MIN( create_time ) AS createTime, order_item_id FROM tbl_order_item_info WHERE create_time >= :begin AND create_time <= :end GROUP BY order_item_id ) t5 ON t1.id = t5.order_item_id ");
sql.push("WHERE t1.trade_status = '00' ");
sql.push(" AND t5.createTime >= :begin ");
sql.push(" AND t5.createTime <= :end ");
sql.push("GROUP BY t1.busi_id ");
let list = await this.dao.customQuery(sql.join(" "), {begin: begin, end: end});
if (!list || list.length == 0) {
return [];
}
let ids = [];
for (let item of list) {
item.stat_day = dayNum;
ids.push(item.busi_id);
}
let busiMap = await this.mapBusiByIds(ids);
for (let item of list) {
item.busi_name = busiMap[item.busi_id];
}
return list;
}
}
module.exports = EsettleService;
......@@ -23,6 +23,26 @@ class EtemplatebusiService extends ServiceBase {
return 1;
}
async findOwnerBusiIdMap(template_type) {
template_type = template_type || 0;
let sql = [];
sql.push("SELECT t1.`busi_id`, t3.`owner_id` FROM `c_etemplate_busi` t1");
sql.push("INNER JOIN `c_etemplate` t2 ON t1.`template_id` = t2.`id` AND template_type = :template_type");
sql.push("INNER JOIN c_ecompany t3 ON t2.`ecompany_id` = t3.`id`");
sql.push("WHERE t3.`owner_id` > 0");
let list = await this.customQuery(sql.join(" "), {template_type: template_type});
let result = {};
if (!list || list.length == 0) {
return result;
}
for (let item of list) {
let busiIds = result[item.owner_id] || [];
busiIds.push(item.busi_id);
result[item.owner_id] = busiIds;
}
return result;
}
async suggest(name, ownerIds) {
return await this.dao.suggest(name, ownerIds);
}
......
......@@ -60,10 +60,31 @@ class UserService extends ServiceBase {
for (var row of page.rows) {
// this.handleDate(row, ["pay_complete_time"], "YYYY-MM-DD", -8);
await this.setRoles(page.rows);
await this.serDepartment(page.rows)
}
}
return page;
}
async serDepartment(list){
if(!list || list.length == 0) {
return;
}
var deIds = [];
for(var u of list) {
deIds.push(u.department_id);
}
var sql = [];
sql.push('SELECT id,name FROM `p_department` WHERE id IN (:deIds)');
var deList = await this.dao.customQuery(sql.join(" "), {deIds: deIds}) || [];
var dmap = {};
for(var de of deList) {
dmap[de.id] = de;
}
for(var u of list) {
u.department = dmap[u.department_id] || {};
}
}
async setRoles(list) {
if(!list || list.length == 0) {
......@@ -536,4 +557,4 @@ module.exports = UserService;
// console.log((result));
// }).catch(function(e){
// console.log(e);
// });
\ No newline at end of file
// });
......@@ -21,7 +21,7 @@
title="bpo结算公司权限"
:visible.sync="showBind"
width="570px">
<el-form :model="companysForm" ref="companysForm" label-width="100px" label="right" >
<el-form-item
v-for="item in companysForm.bpoCompanyList"
......
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