北斗启航科技教育平台管理系统
This commit is contained in:
173
app/service/BSide.js
Normal file
173
app/service/BSide.js
Normal file
@@ -0,0 +1,173 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "BSide";
|
||||
|
||||
class BSideService extends Service {
|
||||
// 注册B端用户
|
||||
async addBSide(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model.BSide.bulkCreate(form);
|
||||
return result.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addBSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看B端用户
|
||||
async showBSide(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['status', 'role', 'account_name', 'organization', 'user_name', 'phone', 'msg', 'created_at', 'updated_at', 'login_at', 'login_status'],
|
||||
where = {}, order = [], dbOptions,
|
||||
joinSubstring = ['organization'],
|
||||
substring = ['account_name', 'user_name', 'phone', 'msg'],
|
||||
key = ['status', 'role', 'login_status'],
|
||||
between = ['created_at', 'updated_at', 'login_at'];
|
||||
const Organization = await ctx.model3.Organization.findAll({ attributes: ['uid', 'organization_name'] });
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (joinSubstring.includes(element)) {
|
||||
let targetKeyArr = [];
|
||||
Organization.forEach(item => {
|
||||
if (item.dataValues.organization_name.includes(searchOptions[element])) {
|
||||
targetKeyArr.push(item.dataValues.uid);
|
||||
}
|
||||
});
|
||||
where[element] = targetKeyArr.length > 0 ? targetKeyArr : 'null';
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model.BSide.findAndCountAll(dbOptions);
|
||||
result.rows.forEach(element => {
|
||||
if (element.dataValues.organization !== null) {
|
||||
element.dataValues.organization = Organization.find(item => item.dataValues.uid == element.dataValues.organization).dataValues.organization_name;
|
||||
}
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showBSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑B端用户
|
||||
async editBSide(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
const Organization = await ctx.model3.Organization.findAll({ attributes: ['uid', 'organization_name'] });
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
let { account_name, organization } = requestMsg;
|
||||
if (organization !== null) {
|
||||
organization = Organization.find(item => item.dataValues.organization_name == organization).dataValues.uid;
|
||||
}
|
||||
where = { account_name, organization };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], organization_name = [], organization = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
account_name.push(element.account_name);
|
||||
organization_name.push(element.organization);
|
||||
});
|
||||
}
|
||||
organization_name.forEach(element => {
|
||||
if (element !== null) {
|
||||
organization.push(Organization.find(item => item.dataValues.organization_name == element).dataValues.uid);
|
||||
}
|
||||
});
|
||||
where = { account_name, organization };
|
||||
if (where.organization.length == 0) {
|
||||
delete where.organization;
|
||||
}
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model.BSide.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editBSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除B端用户
|
||||
async deleteBSide(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除B端用户',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { account_name, organization } = requestMsg;
|
||||
where = { account_name, organization };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], organization = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
account_name.push(element.account_name),
|
||||
organization.push(element.organization)
|
||||
});
|
||||
}
|
||||
where = { account_name, organization };
|
||||
}
|
||||
const resultList = await ctx.model.BSide.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteBSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BSideService;
|
||||
225
app/service/BdCard.js
Normal file
225
app/service/BdCard.js
Normal file
@@ -0,0 +1,225 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "BdCard";
|
||||
|
||||
class BdCardService extends Service {
|
||||
// 注册北斗卡
|
||||
async addBdCard(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.BDCard.bulkCreate(form);
|
||||
return result.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addBdCard";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看北斗卡
|
||||
async showBdCard(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['card_id', 'card_imsi', 'type', 'status', 'created_at', 'updated_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['card_id', 'card_imsi'], key = ['type', 'status'], between = ['created_at', 'updated_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
const [bside, cside, contest, bsideBind, csideBind, contestBind ] = await Promise.all([
|
||||
ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model2.CSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model4.Account.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model.BuserBind.findAll({ attributes: ['user_uid', 'card_id'] }),
|
||||
ctx.model2.CuserBind.findAll({ attributes: ['user_uid', 'card_id'] }),
|
||||
ctx.model4.TuserBind.findAll({ attributes: ['user_uid', 'card_id'] })
|
||||
]);
|
||||
if (searchOptions.account_name) {
|
||||
if (searchOptions.account_name == '*空') {
|
||||
if (where.status == '1' || where.status == '2' || where.status == '3') {
|
||||
where.status = null;
|
||||
} else if (where.status == undefined) {
|
||||
where.status = 0;
|
||||
}
|
||||
} else {
|
||||
let cardArr = [];
|
||||
if (where.status == '1' || where.status == undefined) {
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
bsideBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.card_id);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (where.status == '2' || where.status == undefined) {
|
||||
cside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
csideBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.card_id);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (where.status == '3' || where.status == undefined) {
|
||||
contest.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
contestBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.card_id);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
where.card_id = [...cardArr];
|
||||
}
|
||||
}
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model3.BDCard.findAndCountAll(dbOptions);
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.account_name = '';
|
||||
bsideBind.filter(item => {
|
||||
if (item.dataValues.card_id == element.dataValues.card_id) {
|
||||
bside.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
csideBind.filter(item => {
|
||||
if (item.dataValues.card_id == element.dataValues.card_id) {
|
||||
cside.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
contestBind.filter(item => {
|
||||
if (item.dataValues.card_id == element.dataValues.card_id) {
|
||||
contest.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showBdCard";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑北斗卡
|
||||
async editBdCard(uid, modelType, password, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
where = requestMsg;
|
||||
} else if (modelType == "multiple") {
|
||||
let card_id = [], card_imsi = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
card_id.push(element.card_id);
|
||||
card_imsi.push(element.card_imsi);
|
||||
});
|
||||
}
|
||||
where = { card_id, card_imsi };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model3.BDCard.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editBdCard";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除北斗卡
|
||||
async deleteBdCard(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除北斗卡',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
where = requestMsg;
|
||||
} else if (modelType == "multiple") {
|
||||
let card_id = [], card_imsi = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
card_id.push(element.card_id),
|
||||
card_imsi.push(element.card_imsi)
|
||||
});
|
||||
}
|
||||
where = { card_id, card_imsi };
|
||||
}
|
||||
const resultList = await ctx.model3.BDCard.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteBdCard";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BdCardService;
|
||||
179
app/service/BindRecord.js
Normal file
179
app/service/BindRecord.js
Normal file
@@ -0,0 +1,179 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "BindRecord";
|
||||
|
||||
class BindRecordService extends Service {
|
||||
// 查看北斗卡绑定记录
|
||||
async showBindRecord(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['user_uid', 'card_id', 'type', 'created_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['user_uid', 'card_id'],
|
||||
key = ['type'],
|
||||
between = ['created_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
const [bside, cside, bsideRecord, csideRecord] = await Promise.all([
|
||||
ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model2.CSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model.BindBrecord.findAll({ attributes: ['user_uid', 'card_id', 'created_at'] }),
|
||||
ctx.model2.BindCrecord.findAll({ attributes: ['user_uid', 'card_id', 'created_at'] })
|
||||
]);
|
||||
if (searchOptions.account_name) {
|
||||
if (searchOptions.account_name == '*空') {
|
||||
where.user_uid = [null, ''];
|
||||
} else {
|
||||
let userArr = [], cardArr = [], createdArr = [];
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
bsideRecord.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
userArr.push(item2.dataValues.user_uid);
|
||||
cardArr.push(item2.dataValues.card_id);
|
||||
createdArr.push(item2.dataValues.created_at);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
cside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
csideRecord.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
userArr.push(item2.dataValues.user_uid);
|
||||
cardArr.push(item2.dataValues.card_id);
|
||||
createdArr.push(item2.dataValues.created_at);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
where.user_uid = [...userArr];
|
||||
where.card_id = [...cardArr];
|
||||
where.created_at = [...createdArr];
|
||||
}
|
||||
}
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
let result;
|
||||
if (searchOptions.side !== undefined && searchOptions.side !== '') {
|
||||
if (searchOptions.side == '0') {
|
||||
result = await ctx.model.BindBrecord.findAndCountAll(dbOptions);
|
||||
} else if (searchOptions.side == '1') {
|
||||
result = await ctx.model2.BindCrecord.findAndCountAll(dbOptions);
|
||||
}
|
||||
} else {
|
||||
dbOptions.limit = Math.floor(limit / 2);
|
||||
dbOptions.offset = Math.floor(offset / 2);
|
||||
const [bresult, cresult] = await Promise.all([
|
||||
ctx.model.BindBrecord.findAndCountAll(dbOptions),
|
||||
ctx.model2.BindCrecord.findAndCountAll(dbOptions)
|
||||
]);
|
||||
result = {
|
||||
count: bresult.count + cresult.count,
|
||||
rows: bresult.rows.concat(cresult.rows)
|
||||
};
|
||||
result.rows.sort((a, b) => b.dataValues.created_at - a.dataValues.created_at);
|
||||
}
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.account_name = '';
|
||||
element.dataValues.side = element.dataValues.user_uid[element.dataValues.user_uid.length - 1] == 'B' ? '0' : '1';
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.uid == element.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item.dataValues.account_name;
|
||||
} else {
|
||||
cside.filter(item2 => {
|
||||
if (item2.dataValues.uid == element.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showBindRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除北斗卡绑定记录
|
||||
async deleteBindRecord(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemBindRecord = {
|
||||
operate: 2,
|
||||
operate_msg: '删除北斗卡绑定记录',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemBindRecord.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemBindRecord.status = 1;
|
||||
else if (result.dataValues.role < 9) systemBindRecord.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemBindRecord);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { card_id, type, created_at } = requestMsg;
|
||||
where = { card_id, type, created_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let card_id = [], type = [], created_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
card_id.push(element.card_id),
|
||||
type.push(element.type),
|
||||
created_at.push(element.created_at)
|
||||
});
|
||||
}
|
||||
where = { card_id, type, created_at };
|
||||
}
|
||||
const [bresultList, cresultList] = await Promise.all([
|
||||
ctx.model.BindBrecord.destroy({ where }),
|
||||
ctx.model2.BindCrecord.destroy({ where })
|
||||
]);
|
||||
systemBindRecord.status = bresultList + cresultList == 0 ? 3 : 4;
|
||||
systemBindRecord.affect_entries = bresultList + cresultList;
|
||||
await ctx.model3.Monitoring.create(systemBindRecord);
|
||||
return bresultList + cresultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemBindRecord.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemBindRecord);
|
||||
const blockName = fileName + "--" + "deleteBindRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BindRecordService;
|
||||
179
app/service/BindSNRecord.js
Normal file
179
app/service/BindSNRecord.js
Normal file
@@ -0,0 +1,179 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "BindSNRecord";
|
||||
|
||||
class BindSNRecordService extends Service {
|
||||
// 查看SN号绑定记录
|
||||
async showBindSNRecord(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['user_uid', 'sn_number', 'type', 'created_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['user_uid', 'sn_number'],
|
||||
key = ['type'],
|
||||
between = ['created_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
const [bside, cside, bsideRecord, csideRecord] = await Promise.all([
|
||||
ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model2.CSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model.BindBSNrecord.findAll({ attributes: ['user_uid', 'sn_number', 'created_at'] }),
|
||||
ctx.model2.BindCSNrecord.findAll({ attributes: ['user_uid', 'sn_number', 'created_at'] })
|
||||
]);
|
||||
if (searchOptions.account_name) {
|
||||
if (searchOptions.account_name == '*空') {
|
||||
where.user_uid = [null, ''];
|
||||
} else {
|
||||
let userArr = [], SNArr = [], createdArr = [];
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
bsideRecord.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
userArr.push(item2.dataValues.user_uid);
|
||||
SNArr.push(item2.dataValues.sn_number);
|
||||
createdArr.push(item2.dataValues.created_at);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
cside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
csideRecord.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
userArr.push(item2.dataValues.user_uid);
|
||||
SNArr.push(item2.dataValues.sn_number);
|
||||
createdArr.push(item2.dataValues.created_at);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
where.user_uid = [...userArr];
|
||||
where.sn_number = [...SNArr];
|
||||
where.created_at = [...createdArr];
|
||||
}
|
||||
}
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
let result;
|
||||
if (searchOptions.side !== undefined && searchOptions.side !== '') {
|
||||
if (searchOptions.side == '0') {
|
||||
result = await ctx.model.BindBSNrecord.findAndCountAll(dbOptions);
|
||||
} else if (searchOptions.side == '1') {
|
||||
result = await ctx.model2.BindCSNrecord.findAndCountAll(dbOptions);
|
||||
}
|
||||
} else {
|
||||
dbOptions.limit = Math.floor(limit / 2);
|
||||
dbOptions.offset = Math.floor(offset / 2);
|
||||
const [bresult, cresult] = await Promise.all([
|
||||
ctx.model.BindBSNrecord.findAndCountAll(dbOptions),
|
||||
ctx.model2.BindCSNrecord.findAndCountAll(dbOptions)
|
||||
]);
|
||||
result = {
|
||||
count: bresult.count + cresult.count,
|
||||
rows: bresult.rows.concat(cresult.rows)
|
||||
};
|
||||
result.rows.sort((a, b) => b.dataValues.created_at - a.dataValues.created_at);
|
||||
}
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.account_name = '';
|
||||
element.dataValues.side = element.dataValues.user_uid[element.dataValues.user_uid.length - 1] == 'B' ? '0' : '1';
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.uid == element.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item.dataValues.account_name;
|
||||
} else {
|
||||
cside.filter(item2 => {
|
||||
if (item2.dataValues.uid == element.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showBindSNRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除SN号绑定记录
|
||||
async deleteBindSNRecord(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemBindSNRecord = {
|
||||
operate: 2,
|
||||
operate_msg: '删除SN号绑定记录',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemBindSNRecord.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemBindSNRecord.status = 1;
|
||||
else if (result.dataValues.role < 9) systemBindSNRecord.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemBindSNRecord);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { sn_number, type, created_at } = requestMsg;
|
||||
where = { sn_number, type, created_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let sn_number = [], type = [], created_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
sn_number.push(element.sn_number),
|
||||
type.push(element.type),
|
||||
created_at.push(element.created_at)
|
||||
});
|
||||
}
|
||||
where = { sn_number, type, created_at };
|
||||
}
|
||||
const [bresultList, cresultList] = await Promise.all([
|
||||
ctx.model.BindBSNrecord.destroy({ where }),
|
||||
ctx.model2.BindCSNrecord.destroy({ where })
|
||||
]);
|
||||
systemBindSNRecord.status = bresultList + cresultList == 0 ? 3 : 4;
|
||||
systemBindSNRecord.affect_entries = bresultList + cresultList;
|
||||
await ctx.model3.Monitoring.create(systemBindSNRecord);
|
||||
return bresultList + cresultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemBindSNRecord.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemBindSNRecord);
|
||||
const blockName = fileName + "--" + "deleteBindSNRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BindSNRecordService;
|
||||
211
app/service/Business.js
Normal file
211
app/service/Business.js
Normal file
@@ -0,0 +1,211 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "Business";
|
||||
|
||||
class BusinessService extends Service {
|
||||
// 注册公司业务
|
||||
async addBusiness(uid, form) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 0,
|
||||
operate_msg: '注册公司业务',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
const resultList = await ctx.model3.Business.bulkCreate(form);
|
||||
systemMonitoring.status = resultList.length == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList.length;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "addBusiness";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看公司业务
|
||||
async showBusiness(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['salt', 'login_url', 'client_url', 'temporary_id', 'client_id', 'client_secret', 'name', 'type', 'level', 'status', 'created_at', 'updated_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['login_url', 'client_url', 'client_id', 'name'], key = ['type', 'level', 'status'], between = ['created_at', 'updated_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model3.Business.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showBusiness";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
//远程搜索公司业务
|
||||
async SearchBusiness(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { query, key, timeBefor } = body;
|
||||
let attributes = ['temporary_id', 'name', 'created_at'], where = {}, dbOptions;
|
||||
if (query == '*空') {
|
||||
delete where[key]
|
||||
} else {
|
||||
where[key] = { [Op.substring]: query };
|
||||
}
|
||||
where.created_at = { [Op.lt]: timeBefor };
|
||||
dbOptions = { attributes, where };
|
||||
const Business = await ctx.model3.Business.findAll(dbOptions);
|
||||
return Business.length == 0 ? false : Business;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "SearchBusiness";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑公司业务
|
||||
async editBusiness(uid, modelType, password, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 1,
|
||||
operate_msg: '编辑公司业务',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { temporary_id, client_id, client_secret, name } = requestMsg;
|
||||
where = { temporary_id, client_id, client_secret, name };
|
||||
} else if (modelType == "multiple") {
|
||||
let temporary_id = [], client_id = [], client_secret = [], name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
temporary_id.push(element.temporary_id),
|
||||
client_id.push(element.client_id),
|
||||
client_secret.push(element.client_secret),
|
||||
name.push(element.name)
|
||||
});
|
||||
}
|
||||
where = { temporary_id, client_id, client_secret, name };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model3.Business.update(updateMsg, { where });
|
||||
systemMonitoring.status = resultList[0] == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList[0];
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "editBusiness";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除公司业务
|
||||
async deleteBusiness(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除公司业务',
|
||||
type: 2,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { temporary_id, client_id, client_secret, name } = requestMsg;
|
||||
where = { temporary_id, client_id, client_secret, name };
|
||||
} else if (modelType == "multiple") {
|
||||
let temporary_id = [], client_id = [], client_secret = [], name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
temporary_id.push(element.temporary_id),
|
||||
client_id.push(element.client_id),
|
||||
client_secret.push(element.client_secret),
|
||||
name.push(element.name)
|
||||
});
|
||||
}
|
||||
where = { temporary_id, client_id, client_secret, name };
|
||||
}
|
||||
const resultList = await ctx.model3.Business.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteBusiness";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BusinessService;
|
||||
133
app/service/CSide.js
Normal file
133
app/service/CSide.js
Normal file
@@ -0,0 +1,133 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "CSide";
|
||||
|
||||
class CSideService extends Service {
|
||||
// 查看C端用户
|
||||
async showCSide(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['status', 'role', 'account_name', 'user_name', 'phone', 'gender', 'age', 'email', 'address', 'post_code', 'created_at', 'updated_at', 'login_at', 'login_status'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['account_name', 'user_name', 'phone', 'email', 'address', 'post_code'],
|
||||
key = ['status', 'role', 'gender', 'age', 'login_status'],
|
||||
between = ['created_at', 'updated_at', 'login_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model2.CSide.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showCSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑C端用户
|
||||
async editCSide(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { account_name, phone } = requestMsg;
|
||||
where = { account_name, phone };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], phone = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
account_name.push(element.account_name),
|
||||
phone.push(element.phone)
|
||||
});
|
||||
}
|
||||
where = { account_name, phone };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model2.CSide.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editCSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除C端用户
|
||||
async deleteCSide(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除C端用户',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { account_name, phone } = requestMsg;
|
||||
where = { account_name, phone };
|
||||
} else if (modelType == "multiple") {
|
||||
let account_name = [], phone = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
account_name.push(element.account_name),
|
||||
phone.push(element.phone)
|
||||
});
|
||||
}
|
||||
where = { account_name, phone };
|
||||
}
|
||||
const resultList = await ctx.model2.CSide.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteCSide";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CSideService;
|
||||
200
app/service/ContestAccount.js
Normal file
200
app/service/ContestAccount.js
Normal file
@@ -0,0 +1,200 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "ContestAccount";
|
||||
|
||||
class ContestAccountService extends Service {
|
||||
// 管理系统导入报名账号信息
|
||||
async importAccount(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.Account.bulkCreate(form);
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "importAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统创建竞赛账号信息
|
||||
async addAccount(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.Account.bulkCreate(form);
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统查看竞赛账号信息
|
||||
async showAccount(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['uid', 'contest_uid', 'account_name', 'status', 'created_at', 'login_status'],
|
||||
where = {}, order = [], dbOptions,
|
||||
joinSubstring = [],
|
||||
substring = ['uid', 'contest_uid', 'account_name'],
|
||||
key = ['status', 'login_status'],
|
||||
between = ['created_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (joinSubstring.includes(element)) {
|
||||
let targetKeyArr = [];
|
||||
where[element] = targetKeyArr.length > 0 ? targetKeyArr : 'null';
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model4.Account.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统编辑竞赛账号信息
|
||||
async editAccount(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, contest_uid, account_name, status, created_at, login_status } = requestMsg;
|
||||
where = { uid, contest_uid, account_name, status, created_at, login_status };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], contest_uid = [], account_name = [], status = [], created_at = [], login_status = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
contest_uid.push(element.contest_uid),
|
||||
account_name.push(element.account_name),
|
||||
status.push(element.status),
|
||||
created_at.push(element.created_at),
|
||||
login_status.push(element.login_status)
|
||||
});
|
||||
}
|
||||
where = { uid, contest_uid, account_name, status, created_at, login_status };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model4.Account.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统删除竞赛账号信息
|
||||
async delAccount(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除竞赛账号信息',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, contest_uid, account_name, status, created_at, login_status } = requestMsg;
|
||||
where = { uid, contest_uid, account_name, status, created_at, login_status };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], contest_uid = [], account_name = [], status = [], created_at = [], login_status = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
contest_uid.push(element.contest_uid),
|
||||
account_name.push(element.account_name),
|
||||
status.push(element.status),
|
||||
created_at.push(element.created_at),
|
||||
login_status.push(element.login_status)
|
||||
});
|
||||
}
|
||||
where = { uid, contest_uid, account_name, status, created_at, login_status };
|
||||
}
|
||||
const resultList = await ctx.model4.Account.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "delAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统重置竞赛账号密码
|
||||
async resetAccount(uid, accountUid, password) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '重置竞赛账号密码',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
const salt = this.generateRandomString();
|
||||
const resetResult = await ctx.model4.Account.update({ salt: this.encryptRequest(salt), password: this.shaForm('123456', salt) }, { where: { uid: accountUid } });
|
||||
return resetResult[0] == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "resetAccount";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ContestAccountService;
|
||||
163
app/service/ContestExamination.js
Normal file
163
app/service/ContestExamination.js
Normal file
@@ -0,0 +1,163 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "ContestExamination";
|
||||
|
||||
class ContestExaminationService extends Service {
|
||||
// 管理系统查看账号答题情况
|
||||
async showExamination(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['user_uid', 'contest_uid', 'exam_type', 'topic_type', 'score', 'created_at', 'updated_at'],
|
||||
where = {}, order = [], dbOptions,
|
||||
joinSubstring = [],
|
||||
substring = ['user_uid', 'contest_uid', 'score'],
|
||||
key = ['exam_type', 'topic_type'],
|
||||
between = ['created_at', 'updated_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (joinSubstring.includes(element)) {
|
||||
let targetKeyArr = [];
|
||||
where[element] = targetKeyArr.length > 0 ? targetKeyArr : 'null';
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model4.Examination.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showExamination";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统编辑账号答题情况
|
||||
async editExamination(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at } = requestMsg;
|
||||
where = { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let user_uid = [], contest_uid = [], exam_type = [], topic_type = [], score = [], created_at = [], updated_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
user_uid.push(element.user_uid),
|
||||
contest_uid.push(element.contest_uid),
|
||||
exam_type.push(element.exam_type),
|
||||
topic_type.push(element.topic_type),
|
||||
score.push(element.score),
|
||||
created_at.push(element.created_at),
|
||||
updated_at.push(element.updated_at)
|
||||
});
|
||||
}
|
||||
where = { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model4.Examination.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editExamination";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统删除账号答题情况
|
||||
async delExamination(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除账号答题情况',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at } = requestMsg;
|
||||
where = { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let user_uid = [], contest_uid = [], exam_type = [], topic_type = [], score = [], created_at = [], updated_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
user_uid.push(element.user_uid),
|
||||
contest_uid.push(element.contest_uid),
|
||||
exam_type.push(element.exam_type),
|
||||
topic_type.push(element.topic_type),
|
||||
score.push(element.score),
|
||||
created_at.push(element.created_at),
|
||||
updated_at.push(element.updated_at)
|
||||
});
|
||||
}
|
||||
where = { user_uid, contest_uid, exam_type, topic_type, score, created_at, updated_at };
|
||||
}
|
||||
const resultList = await ctx.model4.Examination.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "delExamination";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统导出账号答题情况
|
||||
async downloadExamination(uid, body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
console.log(uid);
|
||||
console.log(body);
|
||||
// 使用分数和时间排序后导出
|
||||
// const result = await ctx.model4.Examination.findAll({ where: { body } });
|
||||
// console.log(result);
|
||||
// return result.length == 0 ? false : result;
|
||||
return true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "downloadExamination";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ContestExaminationService;
|
||||
182
app/service/ContestMsg.js
Normal file
182
app/service/ContestMsg.js
Normal file
@@ -0,0 +1,182 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "ContestMsg";
|
||||
|
||||
class ContestMsgService extends Service {
|
||||
// 管理系统检索竞赛 uid
|
||||
async searchContestUid(uid, body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.Contest.findAll({ where: { uid: { [Op.substring]: body.contest_uid } } });
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "searchContestUid";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统创建竞赛信息
|
||||
async addContest(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.Contest.bulkCreate(form);
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addContest";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统查看竞赛信息
|
||||
async showContest(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['uid', 'contest_name', 'contest_organizers', 'contest_term', 'type', 'status', 'online_start', 'online_end', 'offline_start', 'offline_end', 'contest_start', 'contest_end', 'created_at'],
|
||||
where = {}, order = [], dbOptions,
|
||||
joinSubstring = [],
|
||||
substring = ['uid', 'contest_name', 'contest_organizers', 'contest_term'],
|
||||
key = ['type', 'status'],
|
||||
between = ['online_start', 'online_end', 'offline_start', 'offline_end', 'contest_start', 'contest_end', 'created_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (joinSubstring.includes(element)) {
|
||||
let targetKeyArr = [];
|
||||
where[element] = targetKeyArr.length > 0 ? targetKeyArr : 'null';
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model4.Contest.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showContest";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统编辑竞赛信息
|
||||
async editContest(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at } = requestMsg;
|
||||
where = { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], contest_name = [], contest_organizers = [], contest_term = [], type = [], status = [], online_start = [], online_end = [], offline_start = [], offline_end = [], contest_start = [], contest_end = [], created_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
contest_name.push(element.contest_name),
|
||||
contest_organizers.push(element.contest_organizers),
|
||||
contest_term.push(element.contest_term),
|
||||
type.push(element.type),
|
||||
status.push(element.status),
|
||||
online_start.push(element.online_start),
|
||||
online_end.push(element.online_end),
|
||||
offline_start.push(element.offline_start),
|
||||
offline_end.push(element.offline_end),
|
||||
contest_start.push(element.contest_start),
|
||||
contest_end.push(element.contest_end),
|
||||
created_at.push(element.created_at)
|
||||
});
|
||||
}
|
||||
where = { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at };
|
||||
}
|
||||
const resultList = await ctx.model4.Contest.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editContest";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统删除竞赛信息
|
||||
async delContest(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除竞赛信息',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at } = requestMsg;
|
||||
where = { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], contest_name = [], contest_organizers = [], contest_term = [], type = [], status = [], online_start = [], online_end = [], offline_start = [], offline_end = [], contest_start = [], contest_end = [], created_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
contest_name.push(element.contest_name),
|
||||
contest_organizers.push(element.contest_organizers),
|
||||
contest_term.push(element.contest_term),
|
||||
type.push(element.type),
|
||||
status.push(element.status),
|
||||
online_start.push(element.online_start),
|
||||
online_end.push(element.online_end),
|
||||
offline_start.push(element.offline_start),
|
||||
offline_end.push(element.offline_end),
|
||||
contest_start.push(element.contest_start),
|
||||
contest_end.push(element.contest_end),
|
||||
created_at.push(element.created_at)
|
||||
});
|
||||
}
|
||||
where = { uid, contest_name, contest_organizers, contest_term, type, status, online_start, online_end, offline_start, offline_end, contest_start, contest_end, created_at };
|
||||
}
|
||||
const resultList = await ctx.model4.Contest.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "delContest";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ContestMsgService;
|
||||
169
app/service/ContestTopic.js
Normal file
169
app/service/ContestTopic.js
Normal file
@@ -0,0 +1,169 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "ContestChoiceTopic";
|
||||
|
||||
class ContestChoiceTopicService extends Service {
|
||||
// 管理系统导入选择题
|
||||
async importChoiceTopic(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.ChoiceTopic.bulkCreate(form);
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "importChoiceTopic";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统创建选择题
|
||||
async addChoiceTopic(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model4.ChoiceTopic.bulkCreate(form);
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addChoiceTopic";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统查看选择题
|
||||
async showChoiceTopic(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['topic', 'options_a', 'options_b', 'options_c', 'options_d', 'answer'],
|
||||
where = {}, order = [], dbOptions,
|
||||
joinSubstring = [],
|
||||
substring = ['topic', 'options_a', 'options_b', 'options_c', 'options_d'],
|
||||
key = ['answer'],
|
||||
between = [];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (joinSubstring.includes(element)) {
|
||||
let targetKeyArr = [];
|
||||
where[element] = targetKeyArr.length > 0 ? targetKeyArr : 'null';
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model4.ChoiceTopic.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showChoiceTopic";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统编辑选择题
|
||||
async editChoiceTopic(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { topic, options_a, options_b, options_c, options_d, answer } = requestMsg;
|
||||
where = { topic, options_a, options_b, options_c, options_d, answer };
|
||||
} else if (modelType == "multiple") {
|
||||
let topic = [], options_a = [], options_b = [], options_c = [], options_d = [], answer = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
topic.push(element.topic),
|
||||
options_a.push(element.options_a),
|
||||
options_b.push(element.options_b),
|
||||
options_c.push(element.options_c),
|
||||
options_d.push(element.options_d),
|
||||
answer.push(element.answer)
|
||||
});
|
||||
}
|
||||
where = { topic, options_a, options_b, options_c, options_d, answer };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model4.ChoiceTopic.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editChoiceTopic";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 管理系统删除选择题
|
||||
async delChoiceTopic(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除竞赛题目',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { topic, options_a, options_b, options_c, options_d, answer } = requestMsg;
|
||||
where = { topic, options_a, options_b, options_c, options_d, answer };
|
||||
} else if (modelType == "multiple") {
|
||||
let topic = [], options_a = [], options_b = [], options_c = [], options_d = [], answer = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
topic.push(element.topic),
|
||||
options_a.push(element.options_a),
|
||||
options_b.push(element.options_b),
|
||||
options_c.push(element.options_c),
|
||||
options_d.push(element.options_d),
|
||||
answer.push(element.answer)
|
||||
});
|
||||
}
|
||||
where = { topic, options_a, options_b, options_c, options_d, answer };
|
||||
}
|
||||
const resultList = await ctx.model4.ChoiceTopic.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "delChoiceTopic";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ContestChoiceTopicService;
|
||||
193
app/service/Insiders.js
Normal file
193
app/service/Insiders.js
Normal file
@@ -0,0 +1,193 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "Insiders";
|
||||
|
||||
class InsidersService extends Service {
|
||||
// 注册管理系统用户
|
||||
async addInsiders(uid, form) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 0,
|
||||
operate_msg: '注册管理系统用户',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
const resultList = await ctx.model3.Insiders.bulkCreate(form);
|
||||
systemMonitoring.status = resultList.length == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList.length;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "addInsiders";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看管理系统用户
|
||||
async showInsiders(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['uid', 'status', 'role', 'name', 'department', 'change', 'created_at', 'updated_at', 'login_at', 'login_status'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['uid', 'name', 'department', 'change'],
|
||||
key = ['status', 'role', 'login_status'],
|
||||
between = ['created_at', 'updated_at', 'login_at'];
|
||||
where.role = { [Op.not]: 99 };
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
if(element == 'role' && searchOptions[element] == 99) {
|
||||
where.role = { [Op.not]: 99 };
|
||||
} else{
|
||||
where[element] = searchOptions[element];
|
||||
}
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const resultList = await ctx.model3.Insiders.findAndCountAll(dbOptions);
|
||||
return resultList.rows.length == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showInsiders";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑管理系统用户
|
||||
async editInsiders(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 1,
|
||||
operate_msg: '编辑管理系统用户',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, name } = requestMsg;
|
||||
where = { uid, name };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
name.push(element.name)
|
||||
});
|
||||
}
|
||||
where = { uid, name };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
where.role = { [Op.not]: 99 };
|
||||
const resultList = await ctx.model3.Insiders.update(updateMsg, { where });
|
||||
systemMonitoring.status = resultList[0] == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList[0];
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "editInsiders";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除管理系统用户
|
||||
async deleteInsiders(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除管理系统用户',
|
||||
type: 2,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, name } = requestMsg;
|
||||
where = { uid, name };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
name.push(element.name)
|
||||
});
|
||||
}
|
||||
where = { uid, name };
|
||||
}
|
||||
where.role = { [Op.not]: 99 };
|
||||
const resultList = await ctx.model3.Insiders.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteInsiders";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = InsidersService;
|
||||
125
app/service/Monitoring.js
Normal file
125
app/service/Monitoring.js
Normal file
@@ -0,0 +1,125 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "Monitoring";
|
||||
|
||||
class MonitoringService extends Service {
|
||||
// 查看危险操作记录
|
||||
async showMonitoring(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['operate', 'operate_msg', 'type', 'status', 'affect_entries', 'user', 'created_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['operate_msg', 'user'],
|
||||
key = ['type', 'status', 'operate'],
|
||||
between = ['created_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
const insiders = await ctx.model3.Insiders.findAll({ attributes: ['uid', 'name'] });
|
||||
if (searchOptions.name) {
|
||||
if (searchOptions.name == '*空') {
|
||||
where.user = [null, ''];
|
||||
} else {
|
||||
let uidArr = [];
|
||||
insiders.filter(item => {
|
||||
if (item.dataValues.name.includes(searchOptions.name)) {
|
||||
uidArr.push(item.dataValues.uid);
|
||||
}
|
||||
});
|
||||
where.user = [...uidArr];
|
||||
}
|
||||
}
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model3.Monitoring.findAndCountAll(dbOptions);
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.name = '';
|
||||
insiders.filter(item => {
|
||||
if (item.dataValues.uid == element.dataValues.user) {
|
||||
element.dataValues.name = item.dataValues.name;
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showMonitoring";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除危险操作记录
|
||||
async deleteMonitoring(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除危险操作记录',
|
||||
type: 2,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 9) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { user, created_at } = requestMsg;
|
||||
where = { user, created_at };
|
||||
} else if (modelType == "multiple") {
|
||||
let user = [], created_at = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
user.push(element.user),
|
||||
created_at.push(element.created_at)
|
||||
});
|
||||
}
|
||||
where = { user, created_at };
|
||||
}
|
||||
const resultList = await ctx.model3.Monitoring.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteMonitoring";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = MonitoringService;
|
||||
171
app/service/Organization.js
Normal file
171
app/service/Organization.js
Normal file
@@ -0,0 +1,171 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "Organization";
|
||||
|
||||
class OrganizationService extends Service {
|
||||
// 注册B端用户单位
|
||||
async addOrganization(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Organization.bulkCreate(form);
|
||||
return result.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addOrganization";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看B端用户单位
|
||||
async showOrganization(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['uid', 'organization_name', 'address', 'liaison_name', 'phone', 'email', 'other_information', 'post_code', 'created_at', 'updated_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['uid', 'organization_name', 'address', 'liaison_name', 'phone', 'email', 'other_information', 'post_code'],
|
||||
key = [], between = ['created_at', 'updated_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model3.Organization.findAndCountAll(dbOptions);
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showOrganization";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
//远程搜索B端用户单位
|
||||
async SearchOrganization(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { query, key } = body;
|
||||
let attributes = ['uid', 'organization_name', 'created_at'], where = {}, dbOptions;
|
||||
if (query == '*空') {
|
||||
delete where[key]
|
||||
} else {
|
||||
where[key] = { [Op.substring]: query };
|
||||
}
|
||||
dbOptions = { attributes, where };
|
||||
const Organization = await ctx.model3.Organization.findAll(dbOptions);
|
||||
return Organization.length == 0 ? false : Organization;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "SearchOrganization";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑B端用户单位
|
||||
async editOrganization(uid, modelType, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, organization_name } = requestMsg;
|
||||
where = { uid, organization_name };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], organization_name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
organization_name.push(element.organization_name)
|
||||
});
|
||||
}
|
||||
where = { uid, organization_name };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model3.Organization.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editOrganization";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除B端用户单位
|
||||
async deleteOrganization(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除B端用户单位',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { uid, organization_name } = requestMsg;
|
||||
where = { uid, organization_name };
|
||||
} else if (modelType == "multiple") {
|
||||
let uid = [], organization_name = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
uid.push(element.uid),
|
||||
organization_name.push(element.organization_name)
|
||||
});
|
||||
}
|
||||
where = { uid, organization_name };
|
||||
}
|
||||
const resultList = await ctx.model3.Organization.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteOrganization";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = OrganizationService;
|
||||
205
app/service/SNAdmin.js
Normal file
205
app/service/SNAdmin.js
Normal file
@@ -0,0 +1,205 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "SNAdmin";
|
||||
|
||||
class SNAdminService extends Service {
|
||||
// 搜索可分配的SN号
|
||||
async searchAllocationSN() {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { status: 0 };
|
||||
const result = await ctx.model3.SNNumber.findAll({ attributes: ['sn_number'], where });
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "searchAllocationSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 搜索可分配的单位用户
|
||||
async searchAllocationUser() {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const where = { status: { [Op.not]: 2 }, role: 1 };
|
||||
const bside = await ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'], where });
|
||||
const buser = await ctx.model.BuserSNAdmin.findAll({ attributes: ['user_uid'] });
|
||||
let result = [];
|
||||
bside.forEach(element => {
|
||||
buser.filter(item => {
|
||||
if (item.dataValues.user_uid !== element.dataValues.uid) {
|
||||
result.push(element);
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "searchAllocationUser";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// B端分配SN号
|
||||
async allocationSN(uid, body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.role < 6) return false;
|
||||
const { user_uid, length, sn_set } = body;
|
||||
const adminResult = await ctx.model.BuserSNAdmin.create({ user_uid, length, sn_set });
|
||||
if (adminResult == 0) return false;
|
||||
const where = { sn_number: sn_set.split(',') };
|
||||
const updateMsg = { status: 4, updated_at: new Date() };
|
||||
const resultList = await ctx.model3.SNNumber.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "allocationSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看B端SN号分配记录
|
||||
async showAllocationSNRecord(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['user_uid', 'length', 'sn_set'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['user_uid', 'sn_set'],
|
||||
key = ['length'],
|
||||
between = [];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
// const [bside, bsideSNRecord] = await Promise.all([
|
||||
// ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
// ctx.model.BindBSNrecord.findAll({ attributes: ['user_uid', 'sn_number', 'type'] })
|
||||
// ]);
|
||||
// if (searchOptions.account_name) {
|
||||
// if (searchOptions.account_name == '*空') {
|
||||
// where.user_uid = [null, ''];
|
||||
// } else {
|
||||
// let userArr = [], lengthArr = [], SNArr = [];
|
||||
// bside.filter(item => {
|
||||
// if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
// bsideSNRecord.filter(item2 => {
|
||||
// if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
// userArr.push(item2.dataValues.user_uid);
|
||||
// lengthArr.push(item2.dataValues.length);
|
||||
// SNArr.push(item2.dataValues.sn_set);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// where.user_uid = [...userArr];
|
||||
// where.length = [...lengthArr];
|
||||
// where.sn_set = [...SNArr];
|
||||
// }
|
||||
// }
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
// let result;
|
||||
dbOptions.limit = Math.floor(limit / 2);
|
||||
dbOptions.offset = Math.floor(offset / 2);
|
||||
// const [bresult] = await Promise.all([
|
||||
// ctx.model.BuserSNAdmin.findAndCountAll(dbOptions)
|
||||
// ]);
|
||||
// result = {
|
||||
// count: bresult.count,
|
||||
// rows: bresult.rows
|
||||
// };
|
||||
const bside = await ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] });
|
||||
const result = await ctx.model.BuserSNAdmin.findAndCountAll(dbOptions);
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.account_name = '';
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.uid == element.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showAllocationSNRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除B端SN号分配记录
|
||||
async deleteAllocationSNRecord(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemSNAdmin = {
|
||||
operate: 2,
|
||||
operate_msg: '删除SN号分配记录',
|
||||
type: 1,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 9) {
|
||||
if (!result) systemSNAdmin.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemSNAdmin.status = 1;
|
||||
else if (result.dataValues.role < 9) systemSNAdmin.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemSNAdmin);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
const { sn_set } = requestMsg;
|
||||
where = { sn_set };
|
||||
} else if (modelType == "multiple") {
|
||||
let sn_set = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
sn_set.push(element.sn_set)
|
||||
});
|
||||
}
|
||||
where = { sn_set };
|
||||
}
|
||||
const [bresultList] = await Promise.all([
|
||||
ctx.model.BuserSNAdmin.destroy({ where })
|
||||
]);
|
||||
systemSNAdmin.status = bresultList == 0 ? 3 : 4;
|
||||
systemSNAdmin.affect_entries = bresultList;
|
||||
await ctx.model3.Monitoring.create(systemSNAdmin);
|
||||
return bresultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemSNAdmin.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemSNAdmin);
|
||||
const blockName = fileName + "--" + "deleteAllocationSNRecord";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SNAdminService;
|
||||
223
app/service/Sn.js
Normal file
223
app/service/Sn.js
Normal file
@@ -0,0 +1,223 @@
|
||||
'use strict';
|
||||
|
||||
const Service = require('../core/base_service');
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const fileName = "SN";
|
||||
|
||||
class SNService extends Service {
|
||||
// 注册SN号
|
||||
async addSN(form) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.SNNumber.bulkCreate(form);
|
||||
return result.length == 0 ? false : true;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "addSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 查看SN号
|
||||
async showSN(body) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
let { offset, limit, searchOptions, sortOptions } = body;
|
||||
offset = (offset - 1) * limit;
|
||||
let attributes = ['sn_number', 'status', 'created_at', 'updated_at'],
|
||||
where = {}, order = [], dbOptions, joinSubstring = [],
|
||||
substring = ['sn_number'], key = ['status'], between = ['created_at', 'updated_at'];
|
||||
attributes.forEach(element => {
|
||||
if (searchOptions[element]) {
|
||||
if (searchOptions[element] == '*空') {
|
||||
if (joinSubstring.includes(element)) {
|
||||
where[element] = null;
|
||||
} else {
|
||||
where[element] = [null, ''];
|
||||
}
|
||||
} else if (substring.includes(element)) {
|
||||
where[element] = { [Op.substring]: searchOptions[element] };
|
||||
} else if (key.includes(element)) {
|
||||
where[element] = searchOptions[element];
|
||||
} else if (between.includes(element)) {
|
||||
where[element] = { [Op.between]: [searchOptions[element][0], searchOptions[element][1]] };
|
||||
}
|
||||
}
|
||||
if (sortOptions[element] == true) {
|
||||
order.push([element, 'ASC']);
|
||||
} else if (sortOptions[element] == false) {
|
||||
order.push([element, 'DESC']);
|
||||
}
|
||||
});
|
||||
const [bside, cside, contest, bsideSNBind, csideSNBind, contestSNBind] = await Promise.all([
|
||||
ctx.model.BSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model2.CSide.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model4.Account.findAll({ attributes: ['uid', 'account_name'] }),
|
||||
ctx.model.BuserSNBind.findAll({ attributes: ['user_uid', 'sn_number'] }),
|
||||
ctx.model2.CuserSNBind.findAll({ attributes: ['user_uid', 'sn_number'] }),
|
||||
ctx.model4.TuserSNBind.findAll({ attributes: ['user_uid', 'sn_number'] })
|
||||
]);
|
||||
if (searchOptions.account_name) {
|
||||
if (searchOptions.account_name == '*空') {
|
||||
if (where.status == '1' || where.status == '2' || where.status == '3') {
|
||||
where.status = null;
|
||||
} else if (where.status == undefined) {
|
||||
where.status = 0;
|
||||
}
|
||||
} else {
|
||||
let cardArr = [];
|
||||
if (where.status == '1' || where.status == undefined) {
|
||||
bside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
bsideSNBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.sn_number);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (where.status == '2' || where.status == undefined) {
|
||||
cside.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
csideSNBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.sn_number);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (where.status == '3' || where.status == undefined) {
|
||||
contest.filter(item => {
|
||||
if (item.dataValues.account_name.includes(searchOptions.account_name)) {
|
||||
contestSNBind.filter(item2 => {
|
||||
if (item2.dataValues.user_uid == item.dataValues.uid) {
|
||||
cardArr.push(item2.dataValues.sn_number);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
where.sn_number = [...cardArr];
|
||||
}
|
||||
}
|
||||
dbOptions = { attributes, offset, limit, where, order };
|
||||
const result = await ctx.model3.SNNumber.findAndCountAll(dbOptions);
|
||||
result.rows.forEach(element => {
|
||||
element.dataValues.account_name = '';
|
||||
bsideSNBind.filter(item => {
|
||||
if (item.dataValues.sn_number == element.dataValues.sn_number) {
|
||||
bside.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
csideSNBind.filter(item => {
|
||||
if (item.dataValues.sn_number == element.dataValues.sn_number) {
|
||||
cside.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
contestSNBind.filter(item => {
|
||||
if (item.dataValues.sn_number == element.dataValues.sn_number) {
|
||||
contest.filter(item2 => {
|
||||
if (item2.dataValues.uid == item.dataValues.user_uid) {
|
||||
element.dataValues.account_name = item2.dataValues.account_name;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
return result.rows.length == 0 ? false : result;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "showSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑SN号
|
||||
async editSN(uid, modelType, password, updateMsg, requestMsg) {
|
||||
const { ctx } = this;
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) return false;
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
where = requestMsg;
|
||||
} else if (modelType == "multiple") {
|
||||
let sn_number = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
sn_number.push(element.sn_number);
|
||||
});
|
||||
}
|
||||
where = { sn_number };
|
||||
}
|
||||
updateMsg.updated_at = new Date();
|
||||
const resultList = await ctx.model3.SNNumber.update(updateMsg, { where });
|
||||
return resultList[0] == 0 ? false : resultList;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "editSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 删除SN号
|
||||
async deleteSN(uid, modelType, password, requestMsg) {
|
||||
const { ctx } = this;
|
||||
const systemMonitoring = {
|
||||
operate: 2,
|
||||
operate_msg: '删除SN号',
|
||||
type: 0,
|
||||
status: 0,
|
||||
affect_entries: 0,
|
||||
user: uid,
|
||||
created_at: new Date()
|
||||
};
|
||||
try {
|
||||
const result = await ctx.model3.Insiders.findOne({ where: { uid } });
|
||||
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt)) || result.dataValues.role < 6) {
|
||||
if (!result) systemMonitoring.status = 0;
|
||||
else if (result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) systemMonitoring.status = 1;
|
||||
else if (result.dataValues.role < 6) systemMonitoring.status = 2;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return false;
|
||||
};
|
||||
let where = {};
|
||||
if (modelType == "single") {
|
||||
where = requestMsg;
|
||||
} else if (modelType == "multiple") {
|
||||
let sn_number = [];
|
||||
for (const key in requestMsg) {
|
||||
requestMsg[key].forEach(element => {
|
||||
sn_number.push(element.sn_number)
|
||||
});
|
||||
}
|
||||
where = { sn_number };
|
||||
}
|
||||
const resultList = await ctx.model3.SNNumber.destroy({ where });
|
||||
systemMonitoring.status = resultList == 0 ? 3 : 4;
|
||||
systemMonitoring.affect_entries = resultList;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
return resultList == 0 ? false : true;
|
||||
} catch (error) {
|
||||
systemMonitoring.status = 5;
|
||||
await ctx.model3.Monitoring.create(systemMonitoring);
|
||||
const blockName = fileName + "--" + "deleteSN";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SNService;
|
||||
Reference in New Issue
Block a user