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