Files

416 lines
17 KiB
JavaScript
Raw Permalink Normal View History

2026-03-27 17:51:58 +08:00
'use strict';
const Service = require('../core/base_service');
const { Op } = require('sequelize');
const shunt = (uid) => {
return uid[uid.length - 1];
};
const fileName = 'home';
class HomeService extends Service {
// 获取卡号
async getCard(uid) {
const { ctx } = this;
try {
const where = { user_uid: uid };
const uidLastCode = shunt(uid);
const model = {
"B": ctx.model.BuserBind,
"C": ctx.model2.CuserBind,
"T": ctx.model4.TuserBind,
};
const result = await model[uidLastCode].findOne({ where });
return result || false;
} catch (error) {
const blockName = fileName + "--" + "getCard";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 搜索卡号
async searchCard(cardID) {
const { ctx } = this;
try {
const where = { card_id: cardID };
const result = await ctx.model3.BDCard.findOne({ where });
return result || false;
} catch (error) {
const blockName = fileName + "--" + "searchCard";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 绑卡
async bindCard(uid, body) {
const { ctx } = this;
try {
const { cardID, IMSI } = body;
const where = {
card_id: cardID,
card_imsi: IMSI
};
const status = shunt(uid) == 'B' ? 1 : 2;
const defaults = {
card_id: cardID,
card_imsi: IMSI,
type: 0,
status,
created_at: new Date(),
updated_at: new Date()
};
const [card] = await ctx.model3.BDCard.findOrCreate({ where, defaults });
const model = {
"B": ctx.model.BuserBind,
"C": ctx.model2.CuserBind,
"T": ctx.model4.TuserBind
};
const uidLastCode = shunt(uid);
const bindCheck = await model[uidLastCode].findOne({ where: { user_uid: uid } });
if (card.status !== 0 || bindCheck.value) {
return false;
} else {
const cardResult = await ctx.model3.BDCard.update({ status }, { where });
const bindForm = {
user_uid: uid,
card_id: cardID
};
const resultForm = {
user_uid: uid,
card_id: cardID,
type: 1,
created_at: new Date()
};
const modelName = {
"B": ctx.model.BindBrecord,
"C": ctx.model2.BindCrecord
};
const bindResult = await model[uidLastCode].create(bindForm);
const recordResult = await modelName[uidLastCode].create(resultForm);
return cardResult[0] && bindResult && recordResult ? true : false;
}
} catch (error) {
const blockName = fileName + "--" + "bindCard";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 解绑
async unBindingCard(uid, body) {
const { ctx } = this;
try {
const { cardID, IMSI } = body;
const cardWhere = {
card_id: cardID,
card_imsi: IMSI
};
const cardResult = await ctx.model3.BDCard.update({ status: 0 }, { where: cardWhere });
if (cardResult[0] !== 0) {
const where = {
user_uid: uid,
card_id: cardID
};
const form = {
user_uid: uid,
card_id: cardID,
type: 0,
created_at: new Date()
};
const uidLastCode = shunt(uid);
const model = {
"B": ctx.model.BuserBind,
"C": ctx.model2.CuserBind,
};
const modelName = {
"B": ctx.model.BindBrecord,
"C": ctx.model2.BindCrecord
};
const bindResult = await model[uidLastCode].destroy({ where });
const recordResult = await modelName[uidLastCode].create(form);
return bindResult && recordResult ? true : false;
} else {
return false;
}
} catch (error) {
const blockName = fileName + "--" + "unBindingCard";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// B端单位管理员解绑
async unBindManager(uid, modelType, password, requestMsg) {
const { ctx } = this;
try {
const result = await ctx.model.BSide.findOne({ where: { uid, status: { [Op.not]: 2 }, role: 1 } });
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
let where = {};
let attributes = ['uid'];
if (modelType == "single") {
where = requestMsg;
} else if (modelType == "multiple") {
let account_name = [], user_name = [], phone = [];
for (const key in requestMsg) {
requestMsg[key].forEach(element => {
account_name.push(element.account_name),
user_name.push(element.user_name),
phone.push(element.phone)
});
}
where = { account_name, user_name, phone };
} else if (modelType == "all") {
const role = { [Op.not]: 1 };
where = { organization: result.dataValues.organization, role };
}
const userResult = await ctx.model.BSide.findAll({ attributes, where });
if (!userResult[0]) return false;
let user_uid = [];
userResult.forEach(element => {
user_uid.push(element.dataValues.uid);
});
attributes = ['card_id'];
where = { user_uid };
const bindResult = await ctx.model.BuserBind.findAll({ attributes, where });
if (!bindResult[0]) return false;
let card_id = [], recordForm = [];
bindResult.forEach((element, index) => {
card_id.push(element.dataValues.card_id);
recordForm.push({ user_uid: user_uid[index], card_id: card_id[index], type: 0, created_at: new Date() });
});
where = { user_uid, card_id };
const unbindResult = await ctx.model.BuserBind.destroy({ where });
const recordResult = await ctx.model.BindBrecord.bulkCreate(recordForm);
where = { card_id };
const cardResult = await ctx.model3.BDCard.update({ status: 0 }, { where });
return unbindResult !== 0 && recordResult[0] && cardResult[0] !== 0 ? true : false;
} catch (error) {
const blockName = fileName + "--" + "unBindManager";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 获取绑定记录
async getRecord(uid, body) {
const { ctx } = this;
try {
let { offset, limit, searchOptions, sortOptions } = body;
offset = (offset - 1) * limit;
let attributes = ['card_id', 'type', 'created_at'],
2026-06-04 10:39:42 +08:00
where = { user_uid: uid }, order = [], dbOptions, joinSubstring = [],
substring = ['card_id'], key = ['type'], between = ['created_at'];
2026-03-27 17:51:58 +08:00
const uidLastCode = shunt(uid);
attributes.forEach(element => {
if (searchOptions[element]) {
2026-06-04 10:39:42 +08:00
if (searchOptions[element] == '*空') {
if (joinSubstring.includes(element)) {
where[element] = null;
2026-03-27 17:51:58 +08:00
} else {
2026-06-04 10:39:42 +08:00
where[element] = [null, ''];
2026-03-27 17:51:58 +08:00
}
2026-06-04 10:39:42 +08:00
} else if (substring.includes(element)) {
2026-03-27 17:51:58 +08:00
where[element] = { [Op.substring]: searchOptions[element] };
} else if (key.includes(element)) {
where[element] = searchOptions[element] == "1" ? uidLastCode === 'B' ? 1 : 2 : 0;
} 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 model = {
"B": ctx.model.BindBrecord,
"C": ctx.model2.BindCrecord,
};
const result = await model[uidLastCode].findAndCountAll(dbOptions);
return result.rows.length == 0 ? false : result;
} catch (error) {
const blockName = fileName + "--" + "getRecord";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 存储消息记录
async shortMsg(form) {
const { ctx } = this;
try {
const where = { card_id: form.card_id };
const card = await ctx.model3.BDCard.findOne({ where });
if (!card) {
ctx.app.middleware.utils.log('../../../unknownCardLog', form);
return false;
};
const model = {
1: ctx.model.BuserBind,
2: ctx.model2.CuserBind,
3: ctx.model4.TuserBind,
};
const bind = await model[card.dataValues.status].findOne({ where });
if (!bind) return false;
form.user_uid = bind.dataValues.user_uid;
const uidLastCode = shunt(form.user_uid);
const modelName = {
"B": ctx.model.BShortMsg,
"C": ctx.model2.CShortMsg,
"T": ctx.model4.TShortMsg,
};
const result = await modelName[uidLastCode].create(form);
return result || false;
} catch (error) {
const blockName = fileName + "--" + "shortMsg";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
2026-06-04 10:39:42 +08:00
// 保存未知消息
async saveUnknown(form) {
const { ctx } = this;
try {
const result = await ctx.model3.UnknownBDCard.create(form);
return result || false;
} catch (error) {
const blockName = fileName + "--" + "saveUnknown";
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
2026-03-27 17:51:58 +08:00
// 获取历史消息
async getHistoryMsg(uid, body) {
const { ctx } = this;
try {
let { offset, limit, searchOptions, sortOptions } = body;
offset = (offset - 1) * limit;
let attributes = ['card_id', 'encode_type', 'msg_data', 'created_at'],
2026-06-04 10:39:42 +08:00
where = { user_uid: uid }, order = [], dbOptions, joinSubstring = [],
substring = ['card_id', 'msg_data'], key = ['encode_type'], between = ['created_at'];
2026-03-27 17:51:58 +08:00
attributes.forEach(element => {
if (searchOptions[element]) {
2026-06-04 10:39:42 +08:00
if (searchOptions[element] == '*空') {
if (joinSubstring.includes(element)) {
where[element] = null;
2026-03-27 17:51:58 +08:00
} else {
2026-06-04 10:39:42 +08:00
where[element] = [null, ''];
2026-03-27 17:51:58 +08:00
}
} else if (substring.includes(element)) {
where[element] = { [Op.substring]: searchOptions[element] };
} else if (key.includes(element)) {
where[element] = searchOptions[element] == "1" ? true : false;
} 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 uidLastCode = shunt(uid);
const model = {
"B": ctx.model.BShortMsg,
"C": ctx.model2.CShortMsg,
"T": ctx.model4.TShortMsg,
};
const result = await model[uidLastCode].findAndCountAll(dbOptions);
return result.rows.length == 0 ? false : result;
} catch (error) {
const blockName = fileName + "--" + "getHistoryMsg";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 删除历史消息
async delHistoryMsg(uid, modelType, password, requestMsg) {
const { ctx } = this;
try {
const uidLastCode = shunt(uid);
const model = {
"B": ctx.model.BSide,
"C": ctx.model2.CSide,
"T": ctx.model4.Account,
};
const result = await model[uidLastCode].findOne({ where: { uid } });
if (!result || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
let where = {};
if (modelType == "single") {
const { card_id, encode_type, msg_data, origin_time } = requestMsg;
where = { user_uid: uid, card_id, encode_type, msg_data, created_at: origin_time };
} else if (modelType == "multiple") {
let card_id = [], encode_type = [], msg_data = [], created_at = [];
for (const key in requestMsg) {
requestMsg[key].forEach(element => {
card_id.push(element.card_id),
2026-06-04 10:39:42 +08:00
encode_type.push(element.encode_type),
msg_data.push(element.msg_data),
created_at.push(element.origin_time)
2026-03-27 17:51:58 +08:00
});
}
where = { user_uid: uid, card_id, encode_type, msg_data, created_at };
} else if (modelType == "all") {
where = { user_uid: uid };
}
const modelName = {
"B": ctx.model.BShortMsg,
"C": ctx.model2.CShortMsg,
"T": ctx.model4.TShortMsg,
};
const resetList = await modelName[uidLastCode].destroy({ where });
2026-06-04 10:39:42 +08:00
return resetList == 0 ? false : resetList;
2026-03-27 17:51:58 +08:00
} catch (error) {
const blockName = fileName + "--" + "delHistoryMsg";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
// 获取单位用户
async bsideManager(uid, body) {
const { ctx } = this;
try {
const result = await ctx.model.BSide.findOne({ where: { uid, status: { [Op.not]: 2 }, role: 1 } });
if (!result || result.organization == null) return false;
let { offset, limit, searchOptions } = body;
offset = (offset - 1) * limit;
let attributes = ['account_name', 'user_name', 'phone'],
2026-06-04 10:39:42 +08:00
where = { organization: result.organization, role: { [Op.not]: 1 } }, dbOptions, joinSubstring = [];
2026-03-27 17:51:58 +08:00
attributes.forEach(element => {
if (searchOptions[element]) {
2026-06-04 10:39:42 +08:00
if (searchOptions[element] == '*空') {
if (joinSubstring.includes(element)) {
where[element] = null;
2026-03-27 17:51:58 +08:00
} else {
2026-06-04 10:39:42 +08:00
where[element] = [null, ''];
2026-03-27 17:51:58 +08:00
}
2026-06-04 10:39:42 +08:00
} else {
2026-03-27 17:51:58 +08:00
where[element] = { [Op.substring]: searchOptions[element] };
}
}
});
dbOptions = { attributes, offset, limit, where };
const userList = await ctx.model.BSide.findAndCountAll(dbOptions);
return userList.rows.length == 0 ? false : userList;
} catch (error) {
const blockName = fileName + "--" + "bsideManager";
ctx.app.middleware.utils.log('../../../serviceLog', blockName + ">>>>" + error);
return 'error';
}
}
}
module.exports = HomeService;