Browse Source

(+)结构物布设图和点位布设 脚本和api

master
wuqun 2 years ago
parent
commit
17e0ee80c6
  1. 209
      api/app/lib/controllers/pointDeploy/index.js
  2. 44
      api/app/lib/models/project_graph.js
  3. 53
      api/app/lib/models/project_points_deploy.js
  4. 23
      api/app/lib/routes/pointDeploy/index.js
  5. 33
      script/1.0.5/schema/2.project_graph_point_deploy.sql

209
api/app/lib/controllers/pointDeploy/index.js

@ -0,0 +1,209 @@
'use strict';
async function findSingleGraph(ctx, next) {
let error = { name: 'FindSingleError', message: '查询单一数据失败' };
let rslt = null;
const { projectId } = ctx.params;
try {
rslt = await ctx.fs.dc.models.ProjectGraph.findOne({
where: { projectId: projectId }
});
error = null;
} catch (err) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${err}`);
}
if (error) {
ctx.status = 400;
ctx.body = error;
} else {
ctx.status = 200;
ctx.body = rslt;
}
}
async function createGraph(ctx, next) {
let error = { name: 'AddError', message: '添加数据失败' };
let graphId = null;
try {
const data = ctx.request.body;
let dataToSave = {
projectId: data.projectId,
graph: data.graph,
}
const t = await ctx.fs.dc.orm.transaction();
try {
let planarGraph = await ctx.fs.dc.models.ProjectGraph.create(dataToSave);
graphId = planarGraph.id;
await t.commit();
} catch (e) {
await t.rollback();
throw e;
}
error = null;
// 日志信息
ctx.fs.api = ctx.fs.api || {};
ctx.fs.api.actionParameter = JSON.stringify(data);
ctx.fs.api.actionParameterShow = `新增graphId:${graphId}`;
} catch (err) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${err}`);
}
if (error) {
ctx.status = 400;
ctx.body = error;
} else {
ctx.status = 200;
ctx.body = { id: graphId };
}
}
async function updateGraph(ctx, next) {
let error = { name: 'UpdateError', message: '修改数据失败' };
const { id } = ctx.params;
const data = ctx.request.body;
if (id) {
if (data && Object.keys(data).length) {
try {
const models = ctx.fs.dc.models;
let planarGraph = await models.ProjectGraph.findOne({ where: { id: id } });
const dataToSave = {};
if (planarGraph) {
const { projectId, graph } = data;
if (projectId && !(projectId == planarGraph.projectId))
dataToSave.projectId = projectId;
if (graph && !(graph == planarGraph.graph))
dataToSave.graph = graph;
}
dataToSave.id = planarGraph.id;
if (Object.keys(dataToSave).length) {
await models.ProjectGraph.update(dataToSave, { where: { id: planarGraph.id } });
}
error = null;
// 日志信息
ctx.fs.api = ctx.fs.api || {};
ctx.fs.api.actionParameter = JSON.stringify(data);
ctx.fs.api.actionParameterShow = `结构物平面图id:${data.id}`;
} catch (err) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${err}`);
}
}
} else {
error = { name: 'UpdateError', message: `不存在{id=${id}}的结构物平面图` };
}
if (error) {
ctx.status = 400;
ctx.body = error;
} else {
ctx.status = 200;
ctx.body = { message: "结构物平面图修改成功" };
}
}
async function delProjectGraph(ctx) {
try {
const { id } = ctx.params;
const models = ctx.fs.dc.models;
let info = await models.ProjectGraph.findOne({ where: { id: id } });
if (info) {
await models.ProjectPointsDeploy.destroy({ where: { graphId: id } });
await models.ProjectGraph.destroy({ where: { id } })
ctx.status = 204;
} else {
ctx.status = 400;
ctx.body = { message: '数据不存在' }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "删除结构物布设图失败"
}
}
}
async function getDeployPoints(ctx) {
try {
const pictureId = ctx.params.pictureId;
const models = ctx.fs.dc.models;
const heatmap = await models.ProjectGraph.findOne({ where: { id: pictureId } })
if (heatmap) {
let allPoints = await models.Point.findAll({
attributes: ['id', 'name'],
where: { projectId: heatmap.dataValues.projectId }
})
let setedPoints = await models.ProjectPointsDeploy.findAll({
where: { graphId: pictureId }
})
ctx.status = 200;
ctx.body = {
allPoints,
setedPoints
};
} else {
throw new Error('pictureId not found');
}
} catch (err) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${err}`);
ctx.status = 400;
ctx.body = {
name: 'FindError',
message: '获取结构物平面图测点布设失败'
}
}
}
async function setDeployPoints(ctx) {
const pictureId = ctx.params.pictureId;
const req = ctx.request.body;
const models = ctx.fs.dc.models;
const orm = ctx.fs.dc.orm;
try {
ctx.fs.api = ctx.fs.api || {};
ctx.fs.api.actionParameter = req;
ctx.fs.api.actionParameterShow = '结构物平面图测点部署: ' + JSON.stringify(req);
const t = await orm.transaction();
try {
await models.ProjectPointsDeploy.destroy({ where: { graphId: pictureId }, transaction: t });
const layout = req.spots.map((hotspot, index) => {
let msg = {
graphId: pictureId,
pointId: hotspot.pointId,
position: JSON.stringify(hotspot.position)
}
return msg;
});
await models.ProjectPointsDeploy.bulkCreate(layout, { transaction: t });
await t.commit();
} catch (e) {
await t.rollback();
throw e;
}
ctx.status = 200;
ctx.body = {
name: "CreateSuccess",
message: "结构物平面图测点部署成功"
};
} catch (err) {
ctx.fs.logger.error(err);
ctx.status = 400;
ctx.body = {
name: 'CreateError',
message: "结构物平面图测点部署失败"
}
}
}
module.exports = {
findSingleGraph,
createGraph,
updateGraph,
delProjectGraph,
getDeployPoints,
setDeployPoints
};

44
api/app/lib/models/project_graph.js

@ -0,0 +1,44 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ProjectGraph = sequelize.define("projectGraph", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "project_graph_id_uindex"
},
projectId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "project_id",
autoIncrement: false
},
graph: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "graph",
autoIncrement: false
}
}, {
tableName: "project_graph",
comment: "",
indexes: []
});
dc.models.ProjectGraph = ProjectGraph;
return ProjectGraph;
};

53
api/app/lib/models/project_points_deploy.js

@ -0,0 +1,53 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ProjectPointsDeploy = sequelize.define("projectPointsDeploy", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "project_points_deploy_id_uindex"
},
pointId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "point_id",
autoIncrement: false
},
graphId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "graph_id",
autoIncrement: false
},
position: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "position",
autoIncrement: false
}
}, {
tableName: "project_points_deploy",
comment: "",
indexes: []
});
dc.models.ProjectPointsDeploy = ProjectPointsDeploy;
return ProjectPointsDeploy;
};

23
api/app/lib/routes/pointDeploy/index.js

@ -0,0 +1,23 @@
'use strict';
const pointDeploy = require('../../controllers/pointDeploy');
module.exports = function (app, router, opts) {
app.fs.api.logAttr['GET/project/:projectId/planarGraph'] = { content: '获取结构物平面图数据', visible: false };
router.get('/project/:projectId/planarGraph', pointDeploy.findSingleGraph);
app.fs.api.logAttr['POST/planarGraph/add'] = { content: '新增结构物平面图', visible: true };
router.post('/planarGraph/add', pointDeploy.createGraph);
app.fs.api.logAttr['PUT/planarGraph/:id/modify'] = { content: '修改结构物平面图', visible: true };
router.post('/planarGraph/:id/modify', pointDeploy.updateGraph);
app.fs.api.logAttr['DEL/project/graph/:id'] = { content: '删除结构物布设图', visible: false };
router.del('/project/graph/:id', pointDeploy.delProjectGraph);
app.fs.api.logAttr['GET/picture/:pictureId/deploy/points'] = { content: '获取点位布设信息', visible: false };
router.get('/picture/:pictureId/deploy/points', pointDeploy.getDeployPoints);
app.fs.api.logAttr['POST/set/picture/:pictureId/deploy/points'] = { content: '点位布设', visible: true };
router.post('/set/picture/:pictureId/deploy/points', pointDeploy.setDeployPoints);
};

33
script/1.0.5/schema/2.project_graph_point_deploy.sql

@ -0,0 +1,33 @@
/*结构物布设图表*/
create table project_graph
(
id serial not null,
project_id int not null,
graph varchar(255) not null
);
create unique index project_graph_id_uindex
on project_graph (id);
alter table project_graph
add constraint project_graph_pk
primary key (id);
/*点位布设表*/
create table project_points_deploy
(
id serial not null,
point_id int not null,
graph_id int not null,
position varchar(1000) not null
);
create unique index project_points_deploy_id_uindex
on project_points_deploy (id);
alter table project_points_deploy
add constraint project_points_deploy_pk
primary key (id);
Loading…
Cancel
Save