5 changed files with 362 additions and 0 deletions
			
			
		@ -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 | 
				
			||||
 | 
					}; | 
				
			||||
@ -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; | 
				
			||||
 | 
					}; | 
				
			||||
@ -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; | 
				
			||||
 | 
					}; | 
				
			||||
@ -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); | 
				
			||||
 | 
					}; | 
				
			||||
@ -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…
					
					
				
		Reference in new issue