四好公路
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

483 lines
17 KiB

'use strict';
const moment = require('moment');
//获取每日汇总
async function getDayReport(ctx) {
try {
const { date, areaId } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let rslt = await models.ReportCollection.findAll({
where: {
dateTime: {
$between: range
},
regionId: areaId
},
include: [{
required: true,
model: models.User,
attributes: ['name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['name']
}]
});
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取全市每日汇总表失败"
}
}
}
//获取排查整治汇总表
async function getGovern(ctx) {
try {
const { date, areaId } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let rslt = await models.ReportRectify.findAndCountAll({
where: {
dateTime: {
$between: range
},
regionId: areaId
},
include: [{
required: true,
model: models.User,
attributes: ['id', 'name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['id', 'name']
}],
limit: 1
});
ctx.status = 200;
let obj = { count: 0 }
if (rslt.count > 0) {
obj.area = rslt.rows[0].department;
obj.dateTime = rslt.rows[0].dateTime;
obj.count = rslt.count;
obj.user = rslt.rows[0].user;
obj.isAudit = rslt.rows[0].isAudit
}
ctx.body = obj;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取排查整治汇总表失败"
}
}
}
//获取排查整治汇总详情
async function getGovernDetail(ctx) {
try {
const { name, date, areaId, pageSize, pageIndex } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let whereObj = {
dateTime: {
$between: range
},
regionId: areaId
};
if (name) {
whereObj.name = { $like: `%${name}%` }
}
let findObj = {
where: whereObj,
include: [{
required: true,
model: models.User,
attributes: ['id', 'name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['id', 'name']
}],
order: [['dateTime', 'desc']]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let rslt = await models.ReportRectify.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取排查整治汇总详情失败"
}
}
}
/**
* 确认整治汇总场所数据
* body {
* governDetailIds:'1,2'
* }
*/
async function operateGovern(ctx, next) {
try {
const data = ctx.request.body;
const models = ctx.fs.dc.models;
if (data.governDetailIds && data.governDetailIds.length > 0) {
await models.ReportRectify.update({
isAudit: true
}, { where: { id: { $in: data.governDetailIds.split(',') } } });
ctx.body = { "message": "确认整治汇总下场所数据成功" };
ctx.status = 200;
} else {
ctx.body = { "message": "确认参数有误" };
ctx.status = 400;
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "确认整治汇总下场所数据失败" }
}
}
//获取安全隐患排查详细数据列表
async function getSecurityRiskList(ctx) {
try {
const { name, date, areaId, pageSize, pageIndex } = ctx.query;
const models = ctx.fs.dc.models;
let whereObj = {};
let wheres = {
audit1ManId: { $not: null },
audit2ManId: { $not: null }
}
if (areaId) {
wheres.regionId = areaId;
}
if (name)
whereObj = { name: { $like: `%${name}%` } }
let findObj = {
attributes: ['id', 'time', 'placeId', 'userId'],
where:
// time: {
// $between: range
// },
// regionId: areaId,
// audit1ManId: { $not: null },
// audit2ManId: { $not: null }
wheres
,
include: [{
required: true,
model: models.Places,
attributes: ['id', 'name'],
where: whereObj
}, {
required: true,
model: models.User,
as: 'user',
attributes: ['id', 'name', 'username', 'phone']
}],
order: [['time', 'desc']]
};
if (date) {
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
findObj.where.time = {
$between: range
}
}
if (areaId) {
findObj.where.regionId = areaId
}
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let rslt = await models.UserPlaceSecurityRecord.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取安全隐患排查详细数据列表失败"
}
}
}
//获取待处理数量
async function getHomeCount(ctx) {
try {
let { userId, departmentId, userRegionType } = ctx.params;
const models = ctx.fs.dc.models;
const departmentRes = await models.Department.findOne({ where: { id: departmentId } });
if (userRegionType != 2 && userRegionType != 3 && !departmentRes) {
ctx.body = { "message": "请求参数有误" };
ctx.status = 400;
} else {
//获取当前用户数据范围管辖区域内所有用户ID
let attentionRegionIds = [departmentRes.id];
let regionType = departmentRes.type;
while (attentionRegionIds.length && regionType && regionType < 4) {
const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } });
regionType = departmentChilds.length ? departmentChilds[0].type : null;
attentionRegionIds = departmentChilds.map(d => d.id);
}
let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] });
let userIds = users.map(u => u.id);
let rslt = { recordCount: 0, reportCount: null }
if (userIds.length) {
let whereObj = {
userId: { $in: userIds },
rejectManId: null,
isDraft: false
}
if (userRegionType == 3) {
whereObj.audit1ManId = null;
} else {
whereObj.audit1ManId = { $not: null };
whereObj.audit2ManId = null;
}
let recordCount = await models.UserPlaceSecurityRecord.count({
where: whereObj
});
rslt.recordCount = recordCount;
if (userRegionType == 2) {
let reportCount = await models.ReportCollection.count({
where: {
userId: null,
regionId: departmentId
}
});
let reportRectify = await models.ReportRectify.findAll({
where: {
userId: null,
regionId: departmentId
}
});
let dateArr = [];
reportRectify.map(r => {
let date = moment(r.dateTime).format("YYYY-MM-DD");
if (!dateArr.includes(date)) {
dateArr.push(date)
}
})
rslt.reportCount = reportCount + dateArr.length;
}
}
ctx.status = 200;
ctx.body = rslt;
}
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取待处理数量失败"
}
}
}
//每日汇总表上报
async function operateReport(ctx, next) {
try {
let { id, userId } = ctx.params;
const models = ctx.fs.dc.models;
await models.ReportCollection.update({
userId: userId
}, { where: { id: id } });
ctx.body = { "message": "每日汇总表上报成功" };
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "每日汇总表上报失败" }
}
}
/**
* 根据筛选条件获取用户审核报表信息
* @query {
* approveUserId-审批人ID
* reportType-报表类型(1-整治汇总表,2-每日汇总表,null-整治汇总表+每日汇总表)
* timeRange-时间范围
* regionId-区域ID
* state-审批状态
* pageIndex-页码
* pageSize-页宽
* } ctx
*/
async function getApproveReportCollections(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { approveUserId, reportType, timeRange, regionId, state, pageIndex, pageSize } = ctx.query;
let whereCondition = {};
if (approveUserId) {
let approveUser = await models.User.findOne({ where: { id: approveUserId } });
if (approveUser) {
//市级用户可以看到所有报表数据
const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } });
if (departmentRes.dependence) {
if (departmentRes.type = 2) {
//区县人员只能看见自己区县下的报表信息
whereCondition.regionId = departmentRes.id;
} else {
//其它层级无报表信息
ctx.status = 200;
ctx.body = {
"count": 0,
"rows": []
};
return;
}
}
if (regionId) {
let region = await models.Department.findOne({ where: { id: regionId } });
if (region) {
if (whereCondition.regionId && whereCondition.regionId != regionId) {
//区县人员只能看见自己区县下的报表信息
ctx.status = 200;
ctx.body = {
"count": 0,
"rows": []
};
return;
} else {
whereCondition.regionId = regionId;
}
} else {
ctx.status = 400;
ctx.body = { "message": "区域不存在!" }
return;
}
}
let times = timeRange;
if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') }
if (times && times.length > 0) {
const len = times.length;
whereCondition.dateTime = {
$between: [
moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
};
}
switch (Number(state)) {
case 1: //待审批:无审核人员
whereCondition.userId = null;
break;
case 2://已审批:有审核人员
whereCondition.userId = { $not: null };
break;
default: break;
}
let findObj = {
where: whereCondition,
order: [["id", "desc"]],
include: [{
model: models.User,
attributes: ['name', 'username', 'phone']
}, {
model: models.Department,
attributes: ['id', 'name']
}]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
switch (Number(reportType)) {
case 1: //整治汇总表
ctx.body = await models.ReportRectify.findAndCountAll(findObj);
break;
case 2://每日汇总表
ctx.body = await models.ReportCollection.findAndCountAll(findObj);
break;
default: //整治汇总表+每日汇总表
const rectifies = await models.ReportRectify.findAndCountAll(findObj);
const collections = await models.ReportCollection.findAndCountAll(findObj);
ctx.body = {
"totalCount": rectifies.count + collections.count,
"totalRows": {
"rectify": rectifies,
"collection": collections
}
};
break;
}
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = { "message": "用户不存在!" }
}
} else {
ctx.status = 400;
ctx.body = { "message": "请传用户参数!" }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取审批报表信息失败" }
}
}
/**
* 上报排查整治汇总表
* query{
* userId:1,//上报用户
* }
* body {
* governDetailIds:'1,2' //排查整治汇总返回数据id字符串
* }
*/
async function operateGovernReport(ctx, next) {
try {
let { userId } = ctx.params;
const data = ctx.request.body;
const models = ctx.fs.dc.models;
if (data.governDetailIds && data.governDetailIds.length > 0) {
await models.ReportRectify.update({
userId: userId
}, { where: { id: { $in: data.governDetailIds.split(',') } } });
ctx.body = { "message": "上报排查整治汇总表成功" };
ctx.status = 200;
} else {
ctx.body = { "message": "上报排查整治汇总表参数有误" };
ctx.status = 400;
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "上报排查整治汇总表失败" }
}
}
module.exports = {
getDayReport,
getGovern,
getGovernDetail,
operateGovern,
getSecurityRiskList,
getHomeCount,
operateReport,
getApproveReportCollections,
operateGovernReport
};