政务数据资源中心(Government data Resource center) 03专项3期主要建设内容
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.
 
 
 
 

208 lines
7.2 KiB

'use strict';
const request = require("superagent");
const cheerio = require('cheerio');
function addAffordableHousing(opts) {
return async function (ctx, next) {
const models = ctx.fs.dc.models;
let errMsg = { message: '新增住房信息失败' }
try {
const { houseValue, personValue } = ctx.request.body;
const arr = personValue.map(p => ({ ...houseValue, ...p }));
await models.AffordableHousing.bulkCreate(arr);
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = errMsg
}
}
}
function getPersonAge(opts) {
return async function (ctx, next) {
const models = ctx.fs.dc.models;
let errMsg = { message: '获取租户年龄分布失败' }
try {
let age17 = 0, age18 = 0, age29 = 0, age41 = 0, age66 = 0, age85 = 0
// 17岁以下 18-28岁 29-40岁 41-65岁 66-85岁 85岁以上
age17 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $lte: 17 } } });
age18 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $between: [18, 28] } } });
age29 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $between: [29, 40] } } });
age41 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $between: [41, 65] } } });
age66 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $between: [66, 85] } } });
age85 = await models.AffordableHousing.count({ where: { houseStatus: false, personAge: { $gte: 86 } } });
ctx.status = 200;
ctx.body = {
age17, age18, age29, age41, age66, age85
};
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = errMsg
}
}
}
function getHomePerson(opts) {
return async function (ctx, next) {
const models = ctx.fs.dc.models;
let errMsg = { message: '获取租户家庭人口统计失败' }
try {
const home = await models.AffordableHousing.count({
attributes: [
'house_id', // 分组的字段
],
group: ['house_id'], // 分组的字段
where: {
houseStatus: false
}
});
ctx.status = 200;
ctx.body = {
home
};
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = errMsg
}
}
}
function getHomeInfo(opts) {
return async function (ctx, next) {
const models = ctx.fs.dc.models;
let errMsg = { message: '获取社区房屋统计信息' }
try {
let communitys = await models.AffordableHousing.findAll({
attributes: [
'houseCommunity', // 分组的字段
],
group: ['houseCommunity'], // 分组的字段
where: {
houseStatus: false,
}
});
let communityInUse = []
for (let i = 0; i < communitys.length; i++) {
let arr = await models.AffordableHousing.findAll({
attributes: [
'house_id', // 分组的字段
],
group: ['house_id'], // 分组的字段
where: {
houseStatus: false,
houseCommunity: communitys[i].houseCommunity
}
})
communityInUse.push({
"houseCommunity": communitys[i].houseCommunity,
"count": arr.length
})
}
//安社区分类-社区空置套数
let communityUnUse = await models.AffordableHousing.count({
attributes: [
'houseCommunity', // 分组的字段
],
group: ['houseCommunity'], // 分组的字段
where: {
houseStatus: true
}
});
//租赁套数
let inuse = 0;
let useHomes = await models.AffordableHousing.count({
attributes: [
'house_id', // 分组的字段
],
group: ['house_id'], // 分组的字段
where: {
houseStatus: false
}
});
inuse = useHomes.length;
//空置套数
const unuse = await models.AffordableHousing.count({
where: {
houseStatus: true
}
});
let communityPersons = await models.AffordableHousing.count({
attributes: [
'person_community', // 分组的字段
],
group: ['person_community'], // 分组的字段
where: {
houseStatus: false
}
});
ctx.status = 200;
ctx.body = {
inuse: inuse, //租赁中套数
unuse: unuse, //空置套数
communityInUse,
communityUnUse,
communityPersons
};
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = errMsg
}
}
}
function getFgjvNotice(opts) {
return async function (ctx, next) {
let errMsg = { message: '获取房管局通知失败' }
try {
let rslt = [];
const res = await request.get('https://www.nc.gov.cn/ncszf/fgjv/2021_nav_list.shtml');
const $ = cheerio.load(res.text);
$('div.pageList-line ul').children('li').each(function (i, elem) {
if (i >= 5) return false;
let obj = {};
const a = $(this).find('a');
obj.title = a.text();
obj.time = $(this).find('span').text();
obj.link = 'https://www.nc.gov.cn' + a.attr('href');
rslt.push(obj);
});
const promistArr = rslt.map(obj => request.get(obj.link));
const detailRes = await Promise.all(promistArr);
for (let i = 0; i < rslt.length; i++) {
const detail$ = cheerio.load(detailRes[i].text);
const temp = detail$('ucapcontent').text().trim().substring(0, 50).replace(/\n/g, "");
rslt[i].detail = temp;
}
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = errMsg
}
}
}
module.exports = {
addAffordableHousing,
getPersonAge,
getHomePerson,
getHomeInfo,
getFgjvNotice
}