|
|
|
'use strict';
|
|
|
|
const moment = require('moment')
|
|
|
|
|
|
|
|
async function get (ctx) {
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { userId, token } = ctx.fs.api
|
|
|
|
const { limit, page, orderBy, orderDirection, keyword, forbidden, paraphraseCustom } = ctx.query
|
|
|
|
|
|
|
|
const sequelize = ctx.fs.dc.ORM;
|
|
|
|
let findOption = {
|
|
|
|
attributes: {
|
|
|
|
include: [
|
|
|
|
[sequelize.fn('COUNT', sequelize.col('cameraStatusLogs.id')), 'logCount']
|
|
|
|
]
|
|
|
|
},
|
|
|
|
where: {},
|
|
|
|
order: [
|
|
|
|
[orderBy || 'id', orderDirection || 'DESC']
|
|
|
|
],
|
|
|
|
distinct: true,
|
|
|
|
subQuery: false,
|
|
|
|
group: [
|
|
|
|
'cameraStatus.id',
|
|
|
|
'cameraStatusLogs.status_id',
|
|
|
|
// 'cameraStatusResolves.id'
|
|
|
|
],
|
|
|
|
include: [
|
|
|
|
// {
|
|
|
|
// model: models.CameraStatusResolve,
|
|
|
|
// attributes: { exclude: ['statusId'] },
|
|
|
|
// required: false,
|
|
|
|
// duplicating: true
|
|
|
|
// },
|
|
|
|
{
|
|
|
|
model: models.CameraStatusLog,
|
|
|
|
attributes: [],
|
|
|
|
duplicating: false,
|
|
|
|
required: false,
|
|
|
|
}
|
|
|
|
],
|
|
|
|
}
|
|
|
|
if (orderBy) {
|
|
|
|
if (orderBy == 'logCount') {
|
|
|
|
findOption.order = sequelize.literal(`"logCount" ${orderDirection || 'DESC'}`)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (limit) {
|
|
|
|
findOption.limit = limit
|
|
|
|
}
|
|
|
|
if (page && limit) {
|
|
|
|
findOption.offset = page * limit
|
|
|
|
}
|
|
|
|
if (keyword) {
|
|
|
|
findOption.where['$or'] = {
|
|
|
|
describe: {
|
|
|
|
$like: `%${keyword}%`
|
|
|
|
},
|
|
|
|
paraphrase: {
|
|
|
|
$like: `%${keyword}%`
|
|
|
|
},
|
|
|
|
paraphraseCustom: {
|
|
|
|
$like: `%${keyword}%`
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (forbidden) {
|
|
|
|
if (forbidden === 'true') {
|
|
|
|
findOption.where.forbidden = true
|
|
|
|
} else if (forbidden === 'false') {
|
|
|
|
findOption.where.forbidden = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (paraphraseCustom) {
|
|
|
|
if (paraphraseCustom === 'true') {
|
|
|
|
findOption.where.paraphraseCustom = {
|
|
|
|
$or: [{
|
|
|
|
$eq: null
|
|
|
|
}, {
|
|
|
|
$eq: ''
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
} else if (paraphraseCustom === 'false') {
|
|
|
|
findOption.where.paraphraseCustom = {
|
|
|
|
$and: [{
|
|
|
|
$ne: null
|
|
|
|
}, {
|
|
|
|
$ne: ''
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const statusRes = await models.CameraStatus.findAll(findOption)
|
|
|
|
|
|
|
|
delete findOption.order
|
|
|
|
delete findOption.limit
|
|
|
|
delete findOption.offset
|
|
|
|
delete findOption.attributes
|
|
|
|
delete findOption.group
|
|
|
|
const count = await models.CameraStatus.count(findOption)
|
|
|
|
|
|
|
|
const statusIds = statusRes.map(r => r.id)
|
|
|
|
const statusResolveRes = await models.CameraStatusResolve.findAll({
|
|
|
|
where: {
|
|
|
|
statusId: {
|
|
|
|
$in: statusIds
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
for (let { dataValues: s } of statusRes) {
|
|
|
|
const corResolve = statusResolveRes.filter(r => r.statusId === s.id)
|
|
|
|
s.resolve = corResolve
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx.status = 200;
|
|
|
|
ctx.body = {
|
|
|
|
count,
|
|
|
|
rows: statusRes,
|
|
|
|
}
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getSimpleAll (ctx) {
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const statusRes = await models.CameraStatus.findAll({
|
|
|
|
attributes: ['id', 'platform', 'status', 'describe'],
|
|
|
|
})
|
|
|
|
ctx.status = 200;
|
|
|
|
ctx.body = statusRes
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function banned (ctx) {
|
|
|
|
try {
|
|
|
|
const { models } = ctx.fs.dc;
|
|
|
|
const data = ctx.request.body;
|
|
|
|
|
|
|
|
// 库记录
|
|
|
|
await models.CameraStatus.update({
|
|
|
|
forbidden: data.forbidden
|
|
|
|
}, {
|
|
|
|
where: {
|
|
|
|
id: data.statusId
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
ctx.status = 204;
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function paraphraseCustom (ctx) {
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { userId, token } = ctx.fs.api
|
|
|
|
const data = ctx.request.body
|
|
|
|
|
|
|
|
await models.CameraStatus.update({
|
|
|
|
paraphraseCustom: data.paraphrase,
|
|
|
|
}, {
|
|
|
|
where: {
|
|
|
|
id: { $in: data.statusId }
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
ctx.status = 204;
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function resolveEdit (ctx) {
|
|
|
|
const transaction = await ctx.fs.dc.orm.transaction();
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { userId, token } = ctx.fs.api
|
|
|
|
const data = ctx.request.body
|
|
|
|
|
|
|
|
await models.CameraStatusResolve.destroy({
|
|
|
|
where: {
|
|
|
|
statusId: data.statusId
|
|
|
|
},
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
|
|
|
|
await models.CameraStatusResolve.bulkCreate(
|
|
|
|
data.resolve.map(r => {
|
|
|
|
return {
|
|
|
|
statusId: data.statusId,
|
|
|
|
resolve: r
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
{ transaction }
|
|
|
|
)
|
|
|
|
|
|
|
|
await transaction.commit();
|
|
|
|
ctx.status = 204;
|
|
|
|
} catch (error) {
|
|
|
|
await transaction.rollback();
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function statusCheck (ctx) {
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { userId, token } = ctx.fs.api
|
|
|
|
const { status, platform, describe } = ctx.query
|
|
|
|
|
|
|
|
if (!status || !platform) {
|
|
|
|
throw 'status and platform is required'
|
|
|
|
}
|
|
|
|
|
|
|
|
const statusRes = await models.CameraStatus.findOne({
|
|
|
|
where: {
|
|
|
|
status,
|
|
|
|
platform,
|
|
|
|
},
|
|
|
|
include: [{
|
|
|
|
model: models.CameraStatusResolve,
|
|
|
|
attributes: { exclude: ['statusId'] },
|
|
|
|
}],
|
|
|
|
})
|
|
|
|
|
|
|
|
if (!statusRes && describe) {
|
|
|
|
await models.CameraStatus.create({
|
|
|
|
status, platform, describe
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx.status = 200;
|
|
|
|
ctx.body = statusRes
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {
|
|
|
|
message: typeof error == 'string' ? error : undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
get,
|
|
|
|
getSimpleAll,
|
|
|
|
banned,
|
|
|
|
paraphraseCustom,
|
|
|
|
resolveEdit,
|
|
|
|
statusCheck,
|
|
|
|
};
|