Commit e2b4d6c6 authored by 李尚科's avatar 李尚科

add house tool

parent bcf7a71c
Pipeline #5938 passed with stage
in 2 seconds
'use strict'; 'use strict';
const Controller = require('egg').Controller; const Controller = require('egg').Controller;
const MAP_POINT_FUNCTION = {
used_house: 'getUsedHouseMapPoint',
new_house: 'getNewHouseMapPoint',
}
class ToolController extends Controller { class ToolController extends Controller {
...@@ -26,7 +22,7 @@ class ToolController extends Controller { ...@@ -26,7 +22,7 @@ class ToolController extends Controller {
let ret = []; let ret = [];
if (house_style === 'used_house') { if (house_style === 'used_house') {
ret = await ctx.service.house.tool.getUsedHouseMapPoint(area_code, level); ret = await ctx.service.house.tool.getUsedHouseMapPoint(area_code, level);
} else if(house_style === 'new_house'){ } else if (house_style === 'new_house') {
ret = await ctx.service.house.tool.getNewHouseMapPoint(area_code, level); ret = await ctx.service.house.tool.getNewHouseMapPoint(area_code, level);
} }
...@@ -64,6 +60,34 @@ class ToolController extends Controller { ...@@ -64,6 +60,34 @@ class ToolController extends Controller {
ctx.success({ results: ret }); ctx.success({ results: ret });
} }
//type类型;trend:房价指数;increase:房价涨跌 ;question: 购房问题
async getHousePriceFeature() {
const { ctx } = this;
const input_parmas = ctx.params;
const rule = {
type: { type: 'string', required: true },
area_code: { type: 'string', required: true },
}
ctx.validate(rule, input_parmas);
const type = input_parmas.type;
const area_code = input_parmas.area_code;
let ret = [];
if (type === 'trend') {
ret = await ctx.blockModel.HousePriceTrend.one({ where: { id: area_code } });
ret = ret.trend_json;
} else if (type === 'increase') {
ret = await ctx.blockModel.HousePriceIncrease.one({ where: { id: area_code } });
ret = ret.increase_json;
} else if (type === 'question') {
ret = await ctx.blockModel.HouseQuestion.one({ where: { id: area_code } });
ret = ret.question_json;
}
ctx.success(ret);
}
} }
module.exports = ToolController; module.exports = ToolController;
'use strict'; 'use strict';
module.exports = app => { module.exports = app => {
const { STRING, INTEGER } = app.Sequelize; const { STRING, INTEGER, FLOAT } = app.Sequelize;
const HouseInvestPlan = app.blockModel.define('house_invest_map', { const HouseInvestPlan = app.blockModel.define('house_invest_plan', {
id: { id: {
type: INTEGER, type: INTEGER,
allowNull: false, allowNull: false,
...@@ -10,24 +10,41 @@ module.exports = app => { ...@@ -10,24 +10,41 @@ module.exports = app => {
autoIncrement: true, autoIncrement: true,
}, },
alias: STRING, alias: STRING,
condition: STRING, // condition: STRING,
condition_min: FLOAT,
condition_max: FLOAT,
period: STRING, period: STRING,
items: STRING, items: {
type: STRING,
allowNull: true,
field: 'items',
get() {
const items = this.getDataValue('items');
if (items) {
try {
return JSON.parse(items);
} catch (error) {
return [];
}
}
return [];
},
},
status: INTEGER, status: INTEGER,
remark: STRING, remark: STRING,
valid: INTEGER, valid: INTEGER,
}, { }, {
timestamps: false, timestamps: false,
tableName: 'house_invest_map', tableName: 'house_invest_plan',
freezeTableName: true, freezeTableName: true,
}); });
HouseInvestPlan.one = async (data) => { HouseInvestPlan.one = async (data) => {
const attributes = data.attributes ? data.attributes : {}; const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {}; const where = data.where ? data.where : {};
return await HouseInvestPlan.findOne({ return await HouseInvestPlan.findOne({
attributes: attributes, attributes: attributes,
where : where, where: where,
}); });
} }
...@@ -37,7 +54,7 @@ module.exports = app => { ...@@ -37,7 +54,7 @@ module.exports = app => {
const where = data.where ? data.where : {}; const where = data.where ? data.where : {};
return await HouseInvestPlan.findAll({ return await HouseInvestPlan.findAll({
attributes: attributes, attributes: attributes,
where : where, where: where,
}); });
} }
...@@ -55,7 +72,7 @@ module.exports = app => { ...@@ -55,7 +72,7 @@ module.exports = app => {
attributes: attributes, attributes: attributes,
}; };
const { count, rows } = await HouseInvestPlan.findAndCountAll(condition); const { count, rows } = await HouseInvestPlan.findAndCountAll(condition);
return { page, count, rows }; return { page, count, rows };
} }
...@@ -64,11 +81,11 @@ module.exports = app => { ...@@ -64,11 +81,11 @@ module.exports = app => {
//返回promise对象实力 instance //返回promise对象实力 instance
const res = await HouseInvestPlan.create(data); const res = await HouseInvestPlan.create(data);
//从promise 实例中中获得需要的id号,id 必须是自增长,而且必须主键,否则返回null //从promise 实例中中获得需要的id号,id 必须是自增长,而且必须主键,否则返回null
return res.id; return res.id;
} catch(error) { } catch (error) {
ctx.status = 500; ctx.status = 500;
throw (error); throw (error);
} }
} }
HouseInvestPlan.edit = async (data) => { HouseInvestPlan.edit = async (data) => {
...@@ -76,7 +93,7 @@ module.exports = app => { ...@@ -76,7 +93,7 @@ module.exports = app => {
const params = data.params; const params = data.params;
HouseInvestPlan.update(params, { HouseInvestPlan.update(params, {
where: where where: where
}).catch( e => res.json({status: 500, error: e})); }).catch(e => res.json({ status: 500, error: e }));
} }
return HouseInvestPlan; return HouseInvestPlan;
......
'use strict';
module.exports = app => {
const { INTEGER, TEXT } = app.Sequelize;
const HousePriceIncrease = app.blockModel.define('house_price_increase', {
id: {
type: INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
increase_json: {
type: TEXT,
allowNull: true,
field: 'increase_json',
get() {
const increase_json = this.getDataValue('increase_json');
if (increase_json) {
try {
return JSON.parse(increase_json);
} catch (error) {
return [];
}
}
return [];
},
},
}, {
timestamps: false,
tableName: 'house_price_increase',
freezeTableName: true,
});
HousePriceIncrease.one = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HousePriceIncrease.findOne({
attributes: attributes,
where: where,
});
}
HousePriceIncrease.all = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HousePriceIncrease.findAll({
attributes: attributes,
where: where,
});
}
HousePriceIncrease.list = async (data = {}) => {
const limit = data.limit ? data.limit : 10;
const page = data.page ? data.page : 1;
const order = data.order ? data.order : [];
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
const condition = {
offset: (page - 1) * limit,
limit,
where: where,
order: order,
attributes: attributes,
};
const { count, rows } = await HousePriceIncrease.findAndCountAll(condition);
return { page, count, rows };
}
HousePriceIncrease.add = async (data) => {
try {
//返回promise对象实力 instance
const res = await HousePriceIncrease.create(data);
//从promise 实例中中获得需要的id号,id 必须是自增长,而且必须主键,否则返回null
return res.id;
} catch (error) {
ctx.status = 500;
throw (error);
}
}
HousePriceIncrease.edit = async (data) => {
const where = data.where;
const params = data.params;
HousePriceIncrease.update(params, {
where: where
}).catch(e => res.json({ status: 500, error: e }));
}
return HousePriceIncrease;
};
'use strict';
module.exports = app => {
const { INTEGER, TEXT } = app.Sequelize;
const HousePriceTrend = app.blockModel.define('house_price_trend', {
id: {
type: INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
trend_json: {
type: TEXT,
allowNull: true,
field: 'trend_json',
get() {
const trend_json = this.getDataValue('trend_json');
if (trend_json) {
try {
return JSON.parse(trend_json);
} catch (error) {
return [];
}
}
return [];
},
},
}, {
timestamps: false,
tableName: 'house_price_trend',
freezeTableName: true,
});
HousePriceTrend.one = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HousePriceTrend.findOne({
attributes: attributes,
where: where,
});
}
HousePriceTrend.all = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HousePriceTrend.findAll({
attributes: attributes,
where: where,
});
}
HousePriceTrend.list = async (data = {}) => {
const limit = data.limit ? data.limit : 10;
const page = data.page ? data.page : 1;
const order = data.order ? data.order : [];
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
const condition = {
offset: (page - 1) * limit,
limit,
where: where,
order: order,
attributes: attributes,
};
const { count, rows } = await HousePriceTrend.findAndCountAll(condition);
return { page, count, rows };
}
HousePriceTrend.add = async (data) => {
try {
//返回promise对象实力 instance
const res = await HousePriceTrend.create(data);
//从promise 实例中中获得需要的id号,id 必须是自增长,而且必须主键,否则返回null
return res.id;
} catch (error) {
ctx.status = 500;
throw (error);
}
}
HousePriceTrend.edit = async (data) => {
const where = data.where;
const params = data.params;
HousePriceTrend.update(params, {
where: where
}).catch(e => res.json({ status: 500, error: e }));
}
return HousePriceTrend;
};
'use strict';
module.exports = app => {
const { INTEGER, TEXT } = app.Sequelize;
const HouseQuestion = app.blockModel.define('house_question', {
id: {
type: INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
question_json: {
type: TEXT,
allowNull: true,
field: 'question_json',
get() {
const question_json = this.getDataValue('question_json');
if (question_json) {
try {
return JSON.parse(question_json);
} catch (error) {
return [];
}
}
return [];
},
},
}, {
timestamps: false,
tableName: 'house_question',
freezeTableName: true,
});
HouseQuestion.one = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HouseQuestion.findOne({
attributes: attributes,
where: where,
});
}
HouseQuestion.all = async (data) => {
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
return await HouseQuestion.findAll({
attributes: attributes,
where: where,
});
}
HouseQuestion.list = async (data = {}) => {
const limit = data.limit ? data.limit : 10;
const page = data.page ? data.page : 1;
const order = data.order ? data.order : [];
const attributes = data.attributes ? data.attributes : {};
const where = data.where ? data.where : {};
const condition = {
offset: (page - 1) * limit,
limit,
where: where,
order: order,
attributes: attributes,
};
const { count, rows } = await HouseQuestion.findAndCountAll(condition);
return { page, count, rows };
}
HouseQuestion.add = async (data) => {
try {
//返回promise对象实力 instance
const res = await HouseQuestion.create(data);
//从promise 实例中中获得需要的id号,id 必须是自增长,而且必须主键,否则返回null
return res.id;
} catch (error) {
ctx.status = 500;
throw (error);
}
}
HouseQuestion.edit = async (data) => {
const where = data.where;
const params = data.params;
HouseQuestion.update(params, {
where: where
}).catch(e => res.json({ status: 500, error: e }));
}
return HouseQuestion;
};
...@@ -4,8 +4,9 @@ module.exports = app => { ...@@ -4,8 +4,9 @@ module.exports = app => {
const router = app.router.namespace(app.config.projectRootPath + '/house'); const router = app.router.namespace(app.config.projectRootPath + '/house');
const loginAuth = app.middleware.loginAuth({ type: 'new' });//登录中间件 const loginAuth = app.middleware.loginAuth({ type: 'new' });//登录中间件
router.get('/tool/:city_code', 'house.tool.getMapPoint');//购房计划地图点位 router.get('/tool/:house_style/:area_code/:level', 'house.tool.getMapPoint');//购房计划地图点位
router.post('/tool/plan', 'house.tool.generateBuyHousePlan');//生成购房计划 router.post('/tool/plan', 'house.tool.generateBuyHousePlan');//生成购房计划
router.get('/tool/:type/:area_code', 'house.tool.getHousePriceFeature');//房价指数 涨跌
//租房 //租房
router.get('/rental_house/home', 'house.rentalHouse.home');//租房首页信息 router.get('/rental_house/home', 'house.rentalHouse.home');//租房首页信息
......
...@@ -74,11 +74,11 @@ class ToolService extends Service { ...@@ -74,11 +74,11 @@ class ToolService extends Service {
const balance = down_payment - invest_payment; const balance = down_payment - invest_payment;
let notice = ''; let notice = '';
let status = 0; let status = 0;
let plan = []; let invest_items = [];
if (balance < 0) { if (balance < 0) {
status = 2;//完全有能力买到房 status = 2;//完全有能力买到房
notice = '您的资金已满足本项目首付条件,还有更多项目在您预算范围内。一键预约,轻松看房!'; notice = '您的资金已满足本项目首付条件,还有更多项目在您预算范围内。一键预约,轻松看房!';
return { status, notice, plan }; return { status, notice, invest_items };
} }
const rate = balance / invest_payment; const rate = balance / invest_payment;
if (rate >= 0.5) { if (rate >= 0.5) {
...@@ -87,10 +87,13 @@ class ToolService extends Service { ...@@ -87,10 +87,13 @@ class ToolService extends Service {
} else { } else {
status = 1;//j加把劲还是有希望买到房 status = 1;//j加把劲还是有希望买到房
notice = '恭喜您!依据以上计划,您即将完成XXX项目首付款准备。您现阶段首付预算可以购买以下项目房源:'; notice = '恭喜您!依据以上计划,您即将完成XXX项目首付款准备。您现阶段首付预算可以购买以下项目房源:';
const invest_plans = await ctx.blockModel.HouseInvestPlan({ where: {} }); const invest_plans = await ctx.blockModel.HouseInvestPlan.one({ where: { condition_min: { $lt: rate }, condition_max: { $gte: rate }, status: 'online', valid: 1 } });
if (Object.keys(invest_plans).length !== 0 && invest_plans.items) {
invest_items = invest_plans.items;
}
} }
return { status, notice, plan }; return { status, notice, invest_items };
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment