一、前言
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,重点人员信息查询就是信息时代变革中的产物之一。
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Node.js语言、express框架、B/S架构、Mysql数据库设计并实现了重点人员信息查询系统。系统主要包括用户、重点人员信息等功能模块。
本文首先介绍了重点人员信息查询系统技术的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,主要是功能测试、单元测试和性能测试。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。
二、开发环境
开发语言:nodejs
框架:Express
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:VS code/HBuilder X
浏览器:谷歌浏览器
三、系统功能效果
四、核心代码
import { Router } from 'express'
import { QueryTypes } from 'sequelize'
import toRes from '../lib/toRes'
import sequelize from '../models/sequelize'
import util from '../lib/util'
export default ({ config, db }) => {
let api = Router()
// 获取某表的某个字段列表接口
api.get('/option/:tableName/:columnName', async (req, res) => {
try {
const results = await sequelize.query(`SELECT ${req.params.columnName} FROM ${req.params.tableName}`, {
plain: false,
raw: true,
type: QueryTypes.SELECT
})
let result = []
if (results.length > 0) {
results.forEach(item => {
result.push(item[req.params.columnName])
})
}
toRes.record(res, 0, result)
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 获取某表的单行记录接口
api.get('/follow/:tableName/:columnName', async (req, res) => {
try {
toRes.record(res, 0, await sequelize.query(`SELECT * FROM ${req.params.tableName} WHERE ${req.params.columnName} = '${req.query.columnValue}'`, {
plain: true,
raw: true,
type: QueryTypes.SELECT
}))
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 修改某表的sfsh状态接口
api.get('/sh/:tableName', async (req, res) => {
try {
let sfsh = req.body.sfsh === '是' ? '否' : '是'
await sequelize.query(`UPDATE ${req.params.tableName} SET sfsh = ${sfsh} WHERE id = ${req.body.id}`)
toRes.session(res, 0, '编辑成功!')
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 获取需要提醒的记录数接口
api.get('/remind/:tableName/:columnName/:type', async (req, res) => {
try {
let sql = 'SELECT 0 AS count'
if (req.params.type == 1) {
if (req.query.remindstart) sql = `SELECT COUNT(*) AS count FROM ${req.params.tableName} WHERE ${req.params.columnName} >= ${req.query.remindstart}`
if (req.query.remindend) sql = `SELECT COUNT(*) AS count FROM ${req.params.tableName} WHERE ${req.params.columnName} <= ${req.query.remindend}`
}
if (req.params.type == 2) {
if (req.query.remindstart) {
let remindStart = util.getDateTimeFormat(0 - req.query.remindstart, "yyyy-MM-dd")
sql = `SELECT COUNT(*) AS count FROM ${req.params.tableName} WHERE ${req.params.columnName} >= '${remindStart}'`
}
if (req.query.remindend) {
let remindEnd = util.getDateTimeFormat(req.query.remindend, "yyyy-MM-dd")
sql = `SELECT COUNT(*) AS count FROM ${req.params.tableName} WHERE ${req.params.columnName} <= '${remindEnd}'`
}
}
const results = await sequelize.query(sql, {
plain: true,
raw: true,
type: QueryTypes.SELECT
})
toRes.count(res, 0, results.count)
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 计算规则接口
api.get('/cal/:tableName/:columnName', async (req, res) => {
try {
toRes.record(res, 0, await sequelize.query(`SELECT SUM(${req.params.columnName}) AS sum, MAX(${req.params.columnName}) AS max, MIN(${req.params.columnName}) AS min, AVG(${req.params.columnName}) AS avg FROM ${req.params.tableName}`, {
plain: true,
raw: true,
type: QueryTypes.SELECT
}))
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 类别统计接口
api.get('/group/:tableName/:columnName', async (req, res) => {
try {
toRes.record(res, 0, await sequelize.query(`SELECT COUNT(*) AS total, ${req.params.columnName} FROM ${req.params.tableName} GROUP BY ${req.params.columnName}`, {
plain: false,
raw: true,
type: QueryTypes.SELECT
}))
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 按值统计接口
api.get('/value/:tableName/:xColumnName/:yColumnName', async (req, res) => {
try {
toRes.record(res, 0, await sequelize.query(`SELECT ${req.params.xColumnName}, SUM(${req.params.yColumnName}) AS total FROM ${req.params.tableName} GROUP BY ${req.params.xColumnName} DESC`, {
plain: false,
raw: true,
type: QueryTypes.SELECT
}))
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
return api
}