Compare commits

...

362 Commits

Author SHA1 Message Date
dengyinhuan 45c415e6c1 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 94d3a4c324 修复建设大屏bug 2 years ago
巴林闲侠 cc0881aafd Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 7368e27f53 构建失败修正 2 years ago
LUCAS 19efae5afa pdf预览注释 2 years ago
LUCAS ab6b495aaf RUN rm -rf package-lock.json->docker file 2 years ago
LUCAS 47b0c55ac0 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
LUCAS 50cb0e63c7 档案管理 2 years ago
LUCAS a56e56f478 档案管理 2 years ago
巴林闲侠 398015c39f Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 7bd8ad9634 宣传视频数据保护 2 years ago
xingyongchun e621405382 工程是否已完成展示 2 years ago
xingyongchun 535e7daa93 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan a8f1f1fd57 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 73e3219c88 修改建设大屏故障 2 years ago
wanyiwei 837b438510 *大屏新增层级中有null值的key判断 2 years ago
wanyiwei 3654c12808 *大屏运营图片不显示的问题修复 2 years ago
wanyiwei 63b867f9bc *大屏运营为null判断,条件过滤逻辑编辑 2 years ago
xingyongchun 2fceb76eac 桥梁编辑新增的问题 2 years ago
xingyongchun 5e915675a5 导出 2 years ago
巴林闲侠 3c10799b4c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 c4c103d98b /screen/cockpit 2 years ago
xingyongchun 734664351e 检测时间用时间组件 2 years ago
dengyinhuan 9a8c3b0c15 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 8b26cae36d 修改建设大屏故障 2 years ago
‘lijianhao’ db9977073b 图片路径修改 2 years ago
LUCAS 60499db2f2 档案管理 2 years ago
巴林闲侠 c5a4c8a87b Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 8005a09498 重新录入车辆数据 2 years ago
dengyinhuan 73a7cb170e Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan fd3031ccec 播放视频 2 years ago
wangyue 79723f615c 线条 2 years ago
wangyue 9c81764c3c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 3f398ea2ba 提交bug 2 years ago
dengyinhuan cbfe5f4aca 修改进入大屏的地址 2 years ago
wangyue 502b068d80 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 7a5b8b64a7 提交 2 years ago
wangyue aeff1fe588 路由修改 2 years ago
dengyinhuan d7e18bf92d 添加视频 2 years ago
巴林闲侠 8603d77a9d 七牛地址传递 2 years ago
dengyinhuan 7cf9d07f71 添加视频 2 years ago
wangyue 11da945165 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue ed7ab5a8d3 完成 2 years ago
巴林闲侠 ddfe115716 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 2bf256cba7 web 7niu 2 years ago
xingyongchun a0b7b88f00 工程一览新增编辑问题 2 years ago
wanyiwei 6aa5bcc4f1 *大屏运营公交车辆信息接口路线新增及条件过滤判断 2 years ago
wanyiwei 88d0deab3d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei 1267cb4f15 *大屏运营公交车辆信息接口路线新增及条件过滤判断 2 years ago
xingyongchun 7669b0483d 删除提示 2 years ago
‘lijianhao’ 94f9aceac4 图表样式微调 2 years ago
‘lijianhao’ 72de58596e loca引入 2 years ago
‘lijianhao’ b8d8ae6dba 新增用户姓名限制输入中文 2 years ago
巴林闲侠 7c7677dff7 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 eeead59378 接口数据 2 years ago
wangyue 06063067ea Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 755a333f7a 接口调用 2 years ago
xingyongchun 8c7ce3a108 运政管理 编辑无数据问题 2 years ago
xingyongchun 48ff508105 新增编辑优化 2 years ago
巴林闲侠 c23c647b62 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 7cb54cc3dd 获取apiroot 2 years ago
dengyinhuan 055080e6ed Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 3802e85012 去除log 2 years ago
‘lijianhao’ bbfbd67132 去除log 2 years ago
‘lijianhao’ cac56cfeb3 部门修改问题修复 2 years ago
巴林闲侠 d5819b603c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 6ac5abb48a 治超分页 2 years ago
xingyongchun 9af4c18b7d 整数输入效验 2 years ago
巴林闲侠 7a512059c8 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 0a1922a223 主题主题 2 years ago
‘lijianhao’ 33210217dc 新建部门带出上一次编辑数据修复 2 years ago
‘lijianhao’ bef19f2b66 养护道路设备数量数据排序 2 years ago
wangyue 2b15382355 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue f0558530d3 路政统计 2 years ago
巴林闲侠 51fc2c093c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 9898e690cf require('./routes').entry 2 years ago
wangyue 50eb042e00 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue a1dfeddb1a 提交鼠标移出事件 2 years ago
liujiangyong 59487a2fb9 细节优化 2 years ago
xingyongchun 4261209b40 新增白屏问题 2 years ago
巴林闲侠 34378129aa Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 681d9968c3 注释 businessRest 2 years ago
wangyue 5469d9df8f Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 49a0b5d74a 提交 2 years ago
wangyue 11279671ce 提交领导驾驶舱 2 years ago
dengyinhuan a3fe9bee43 修复管理大屏bug 2 years ago
dengyinhuan a810356b99 管理单位统一 2 years ago
wanyiwei a62bce91e8 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei ffa95765cd *大屏运营左侧条件过滤修改为只展示搜索的对应数据 2 years ago
xingyongchun a505f33556 功能完善 2 years ago
dengyinhuan b24fa5313b 管理大屏右侧降序 2 years ago
dengyinhuan 8c961ddab5 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan ef721b34f1 管理大屏右侧降序 2 years ago
wangyue 3919e2c358 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue b9302fdf98 提交代码 2 years ago
LUCAS c9978a218b 巡更轨迹查询 2 years ago
LUCAS f81f6c4487 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
xingyongchun 135bd2b9fe 删除和编辑 2 years ago
巴林闲侠 36d33f166b fix 车辆删除 2 years ago
巴林闲侠 1924a24821 文件导出组件 2 years ago
巴林闲侠 4ee9bbb59d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 6553a8b3eb 文件导出组件 2 years ago
liujiangyong 374cb489d8 更换图片 2 years ago
巴林闲侠 0ea300c47a Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 448e0d6dd4 数据导出接口 2 years ago
‘lijianhao’ 53c01f9ce9 大屏gis地图 2 years ago
dengyinhuan 07837acebb Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
liujiangyong 1c101fab1c 细节优化 2 years ago
dengyinhuan d85d489d69 管理大屏的优化 2 years ago
LUCAS 330796b33f Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
LUCAS 98ca3e7ba6 提交巡查 -默认gis轨迹 2 years ago
巴林闲侠 903ba414bc Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 f80d868998 better-xlsx 2 years ago
liujiangyong 7e87891186 数据筛选 2 years ago
巴林闲侠 a3113ed822 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 509db0a981 增加接口字段 2 years ago
wangyue 79328f495e Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue c6a3b352d6 提交样式 2 years ago
‘lijianhao’ 84720d7703 地图暂时注释 2 years ago
‘lijianhao’ 67cd215e85 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei 14ed57477d *大屏运营引入修改 2 years ago
‘lijianhao’ 740c518ee2 '' 2 years ago
wangyue 80e11974af Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue a561e62bd3 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 69c6dc1ff6 完善大屏 2 years ago
wangyue 163ce6c142 提交left.less的更改 2 years ago
LUCAS 385f017aea Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
LUCAS d06210d252 问题修改 2 years ago
liujiangyong f66bb27e57 我的上报&业主巡查上报 2 years ago
‘lijianhao’ 97b80c664f 表单限制调整 2 years ago
LUCAS c68cfd9bbc 巡更轨迹查询 -todo 2 years ago
dengyinhuan fd9c6a6516 给部分图表增加tooltip 2 years ago
liujiangyong 1791839a5d 修改密码样式 2 years ago
liujiangyong e2f055affa 修改密码功能 2 years ago
巴林闲侠 83b621cbc3 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 05f92069d3 文件下载综合 20% 2 years ago
LUCAS 77aecf970d 巡查/养护提交 2 years ago
巴林闲侠 917e7f7c7c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 8c12d57c68 标题 南昌县智慧交通监管系统 2 years ago
wanyiwei 186b48f9a0 *左侧暂无数据展示 2 years ago
‘lijianhao’ 41d2de202a 字段调整 2 years ago
巴林闲侠 db36d560eb Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 2d6690a5e8 关键字搜索 2 years ago
dengyinhuan 45b753ce6c 优化大屏样式 2 years ago
dengyinhuan 581063b525 大屏样式 2 years ago
‘lijianhao’ e421eaed16 地图渲染调整 2 years ago
‘lijianhao’ 78fefd2e70 地图销毁修改 2 years ago
liujiangyong 147f2ae0ba 道路路段和位置信息接入 2 years ago
wanyiwei 0c67f1faf1 *大屏运营右侧车辆视频监控样式微调 2 years ago
‘lijianhao’ d972ee6004 地图引入 2 years ago
wanyiwei ee0551cfa7 *大屏运营右侧车辆视频监控UI 2 years ago
巴林闲侠 f729866d7d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 ba5437ade4 养护初始数据 2 years ago
dengyinhuan f90c8e5392 优化大屏 2 years ago
巴林闲侠 70afe5d247 PIC 2 years ago
巴林闲侠 69fee194bb PIC 2 years ago
巴林闲侠 90477c1f1a PIC 2 years ago
巴林闲侠 0850f0a98d PIC 2 years ago
巴林闲侠 018fb2d9e3 PIC 2 years ago
巴林闲侠 3c82af3e2f PIC 2 years ago
巴林闲侠 4d77935026 del 图片 2 years ago
dengyinhuan e999050c8c 修复管理大屏故障 2 years ago
dengyinhuan 264cd7e5db 完善建设大屏 2 years ago
dengyinhuan 5ac83b0d0a Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan c0449de927 完善建设大屏 2 years ago
巴林闲侠 001cb7a1e1 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 4ae2855083 获取路段信息 2 years ago
dengyinhuan 7618549e83 添加跳转进入大屏 2 years ago
dengyinhuan fd5ef2748c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 91ad17e31e 调整名字 2 years ago
巴林闲侠 f37f48f04b Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 904152a32e 七牛参数 2 years ago
liujiangyong 59c0a30bba 巡查养护查看 2 years ago
xingyongchun 02851689ec Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
xingyongchun 23bbec827e 增加工程弹窗 2 years ago
xingyongchun 70033810a3 后台桥梁道路接入数据 2 years ago
巴林闲侠 bb27f44219 api 2 years ago
巴林闲侠 6a85786b54 picTest 2 years ago
巴林闲侠 a1005d2373 picTest 2 years ago
巴林闲侠 c26790b3b9 picTest 2 years ago
巴林闲侠 75cb284cd3 picTest 2 years ago
巴林闲侠 6b3c6afa1a picTest 2 years ago
巴林闲侠 18ea603b30 picTest 2 years ago
巴林闲侠 1fae6bf6ce picTest 2 years ago
巴林闲侠 60fb682510 picTest 2 years ago
巴林闲侠 179a0ca7e6 picTest 2 years ago
巴林闲侠 d449d67423 picTest 2 years ago
巴林闲侠 649b011f22 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 a53fa70a6d pic test 2 years ago
dengyinhuan d8bf8ab801 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 1551718468 调整管理大屏右侧的样式 2 years ago
巴林闲侠 20ab98f31d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 1190a615cb jenkinsfile 2 years ago
‘lijianhao’ e3eb74d73c 样式微调 2 years ago
wanyiwei ad37fad373 *大屏运营鼠标移入光标取消 2 years ago
巴林闲侠 51fe54c72f dockerfile 2 years ago
巴林闲侠 77b4ade296 dockerfile 2 years ago
巴林闲侠 42e87e1b95 jenkinsfile、数据脚本 2 years ago
‘lijianhao’ 6d693dd12d 样式调整 2 years ago
wanyiwei 364e67f32b Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei 700edca359 *大屏运营数据接入及条件过滤及部分样式 2 years ago
‘lijianhao’ 3188d2dd39 图表样式调整 2 years ago
dengyinhuan afd4ee8a4f 优化样式 2 years ago
wanyiwei 11e4540997 *大屏运营数据接入及条件过滤及部分样式 2 years ago
‘lijianhao’ c3768a25b9 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
‘lijianhao’ 451fa80126 数据接入 2 years ago
dengyinhuan a9b245052b Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 2630bab231 优化样式 2 years ago
liujiangyong def4e9985c 巡查上报 2 years ago
‘lijianhao’ 1a291b0800 数据接入 2 years ago
dengyinhuan c46cbe892e 增加图例 2 years ago
dengyinhuan 2dbb091e37 修复 2 years ago
dengyinhuan 5e478ea587 接入大屏建设部分的数据 2 years ago
‘lijianhao’ 100edfa85f webapi 2 years ago
‘lijianhao’ 9851ae4cd8 图表调整,数据接入 2 years ago
巴林闲侠 85ab237dfb 退出 2 years ago
巴林闲侠 6e90c13e2e Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 e879a4cadf 七牛宣传文件上传 2 years ago
‘lijianhao’ 5cffe7c57f 养护大屏部分数据接入 2 years ago
巴林闲侠 4de26fc797 FS_UNIAPP_API 2 years ago
巴林闲侠 4a1ae17597 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 da0f515841 GodTransRequest 2 years ago
dengyinhuan 057380bd61 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 7c38745c2d 调整建设大屏的样式 2 years ago
wangyue e7a01d52f7 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue c7e7cd4c98 提交领导驾驶舱 2 years ago
巴林闲侠 73e9698216 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 76a0b8d55b 补交代码 2 years ago
巴林闲侠 89b758d497 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 d2ebfcfeca 业户数据 2 years ago
dengyinhuan 075b1e6849 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan e0f91077a5 接入大屏管理的数据,还有建设大屏部分数据 2 years ago
liujiangyong 2ed26ba452 细节优化 2 years ago
liujiangyong 14083c32ec 接口接入 2 years ago
wanyiwei bbd7080ba3 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei ce1b8102d0 *input搜索框加入图片及部分样式修改 2 years ago
‘lijianhao’ b1e5447b6d 用户管理面包屑 2 years ago
wanyiwei 946ff7a620 *树形控件及input样式 2 years ago
liujiangyong 0d0d1e3095 查看页完善 2 years ago
wanyiwei d64cbccd15 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wanyiwei df698a5e17 comment 2 years ago
liujiangyong cebfb09b6c 巡查养护查看 2 years ago
dengyinhuan 5b623fd52f 管理大屏适配1280宽度屏幕 2 years ago
‘lijianhao’ db9cf77c0e 养护大屏-已绿化里程统计、养护完成情况 2 years ago
巴林闲侠 e76786587f Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 34906462b0 数据接口 2 years ago
LUCAS ae42a7fa65 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 6f15fb0fc9 增加建设大屏适配1280屏幕 2 years ago
LUCAS dc9d216c36 文件提交 2 years ago
‘lijianhao’ b124c2b2c1 养护大屏-可绿化里程统计调整 2 years ago
dengyinhuan 5e726d932c 建设大屏UI 2 years ago
dengyinhuan 1389350d3d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 0639073eac 建设和管理大屏模块UI 2 years ago
巴林闲侠 8633d60810 部门用户 2 years ago
巴林闲侠 85b96adc6c 道路数据 2 years ago
巴林闲侠 7f975b2f78 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 3d3bee962f 公交车辆数据 2 years ago
liujiangyong 8164437d5f “我的”页面 2 years ago
liujiangyong 4134c92daf 巡查养护页面完善 2 years ago
dengyinhuan 3a2d616526 修改module.js组件 2 years ago
wangyue fc3f2a929f Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue f166aa2919 领导驾驶舱提交代码 2 years ago
‘lijianhao’ 65cf2722ee '养护大屏调整' 2 years ago
dengyinhuan c6530c051c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 812dd001e9 修改管理大屏左侧的环形图的转向 2 years ago
liujiangyong fcea9240bb 巡查养护页面 2 years ago
xingyongchun b636525ff0 后台数据接入 2 years ago
巴林闲侠 67efe14df2 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 648e74178a 公交路线 2 years ago
wanyiwei 0bf01f4913 *登入页面布局优化 2 years ago
dengyinhuan d35c171831 管理的UI大屏开发 2 years ago
‘lijianhao’ 06c5b51278 '道路设施数量统计、各类附属设备数量统计' 2 years ago
巴林闲侠 311ec1143d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 dbc9dd6c75 治超 2 years ago
dengyinhuan a1fdbb4fc1 添加管理监测点图片 2 years ago
dengyinhuan 6a4bc00527 大屏管理右边的UI 2 years ago
‘lijianhao’ 6bbffa1134 '大屏-养护-道路养护周期统计UI' 2 years ago
dengyinhuan 64baffaaf3 添加治超详情图片 2 years ago
dengyinhuan 846c768d3b Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 1cc0523ca4 修改管理和养护的位置 2 years ago
wanyiwei 0203bb8270 *修改tab判断 2 years ago
dengyinhuan a09777a83c 微调建设样式 2 years ago
dengyinhuan a148aa486b 建设部分大屏部分 2 years ago
‘lijianhao’ d8bdf18989 '用户管理样式调整' 2 years ago
巴林闲侠 b538c96b01 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 778d0a2a1c 用户创建 2 years ago
‘lijianhao’ 5311604bd4 '大屏养护模块提交' 2 years ago
dengyinhuan 73e9cc21f3 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 41d9b2dd5e 建设部分大屏部分左右下角图表 2 years ago
巴林闲侠 ffb1e5ddb9 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 0f023177f7 工程数据 2 years ago
‘lijianhao’ d7b6926a80 '用户管理调整' 2 years ago
巴林闲侠 778a84086c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 cba621fd9e 巡查上报 2 years ago
‘lijianhao’ 98b09376d1 '用户管理完善' 2 years ago
巴林闲侠 7e6105a9dc Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 fd2faa9401 获取所有用户接口 2 years ago
wanyiwei 9c1d0acbff *养护管理及巡查管理表单样式 2 years ago
wanyiwei 0642533e97 *养护管理及巡查管理表单样式 2 years ago
巴林闲侠 853a9272cd Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 1c677c5529 数据录入脚本 2 years ago
liujiangyong ddc30afca6 首页样式 2 years ago
dengyinhuan 38d1f13b65 建设大屏部分模块 2 years ago
dengyinhuan 55aac653c7 增加各种状态公路边框图片 2 years ago
dengyinhuan c913b97f05 增加状态公路数量统计图片 2 years ago
dengyinhuan 237247375a Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan edea4c103b 增加宣传栏的文字标题背景图 2 years ago
巴林闲侠 fe837dbf2c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 b219b25af4 数据脚本 2 years ago
dengyinhuan 8a7dcaa866 添加宣传栏测试图片 2 years ago
dengyinhuan 308ece7306 增加图片 2 years ago
dengyinhuan 2a630e54ed 公共模块的高度调整 2 years ago
dengyinhuan c080f5026f 建设首页框架 2 years ago
xingyongchun ba5e7ee72c 大屏问题 2 years ago
dengyinhuan 7c61a4bc6d Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan f7289aaf0c 建设首页大屏 2 years ago
巴林闲侠 6babf2ffd8 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 575c6f0ce6 道路数据录入 2 years ago
‘lijianhao’ 272132bc43 '用户管理UI' 2 years ago
巴林闲侠 3dafc5de6a 数据脚本 2 years ago
xingyongchun e992725320 新增视频页面 2 years ago
xingyongchun 4f400d288a 后台管理页面添加 2 years ago
xingyongchun de61402e69 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 0136103753 道路数据 导入 30% 2 years ago
巴林闲侠 3f55d3cd8a 数据表模型 2 years ago
巴林闲侠 9fdac56907 api 删除非必要文件 2 years ago
巴林闲侠 dad36736a7 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 76057da15f sql 2 years ago
wangyue e6030bcfa4 上传 2 years ago
wangyue b299cd97c3 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 69e7f3b613 删除冗余,提交 2 years ago
dengyinhuan 509843c4dc 修改名字为四好公路 2 years ago
xingyongchun a7e98af03a Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
dengyinhuan 512b6c7d89 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue a74afb8f1d 文件 2 years ago
wangyue 68c13e99e7 文件上传 2 years ago
wangyue dacf49b409 文件上传 2 years ago
xingyongchun 59b24824de Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 96f29018fb Revert "test" 2 years ago
巴林闲侠 f9e3c5b980 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 2cef06a15c 回退至 787cfe34d8 2 years ago
wangyue 1190cc0d21 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 0c57a22797 头部样式完成 2 years ago
“liujiangyong” 7ab11bd50c Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
“liujiangyong” 787cfe34d8 test 2 years ago
xingyongchun 93e4203260 提交合并 2 years ago
wangyue 8ab4f5f2e5 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
wangyue 50714cbf29 公共组件图标样式修改 2 years ago
xingyongchun aa25bb3062 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
xingyongchun 092f1a8e0d 后台管理新增页面 2 years ago
dengyinhuan 88fb527346 改名为四好公路 2 years ago
wangyue 34413ac0b9 test 2 years ago
wangyue eee5aedfc5 test 2 years ago
巴林闲侠 c64a6bff75 注释 2 years ago
巴林闲侠 73b9260457 del node_modules 2 years ago
巴林闲侠 430cff484e ignore node_modules 2 years ago
巴林闲侠 9a0536d920 Merge branch 'dev' of https://gitea.anxinyun.cn/gao.zhiyuan/Highways4Good into dev 2 years ago
巴林闲侠 53b580750e 授权管理 2 years ago
巴林闲侠 6f4dcd76d0 授权管理 2 years ago
kong.bin 599145cdff 小程序模板 2 years ago
kong.bin 3c1c06ece2 test 2 years ago
巴林闲侠 c8e53475cf ignore 2 years ago
  1. 144
      .gitignore
  2. 11
      api/.vscode/launch.json
  3. 19
      api/Dockerfile
  4. 71
      api/app/lib/controllers/approval/index.js
  5. 65
      api/app/lib/controllers/auth/index.js
  6. 116
      api/app/lib/controllers/common/contants.js
  7. 63
      api/app/lib/controllers/common/index.js
  8. 82
      api/app/lib/controllers/data/bridge.js
  9. 155
      api/app/lib/controllers/data/bus.js
  10. 132
      api/app/lib/controllers/data/index.js
  11. 115
      api/app/lib/controllers/data/overspeed.js
  12. 85
      api/app/lib/controllers/data/project.js
  13. 77
      api/app/lib/controllers/data/publicity.js
  14. 173
      api/app/lib/controllers/data/road.js
  15. 50
      api/app/lib/controllers/data/road.json
  16. 239
      api/app/lib/controllers/data/vehicle.js
  17. 25
      api/app/lib/controllers/department/index.js
  18. 237
      api/app/lib/controllers/file/index.js
  19. 87
      api/app/lib/controllers/organization/authority.js
  20. 186
      api/app/lib/controllers/organization/department.js
  21. 150
      api/app/lib/controllers/organization/user.js
  22. 222
      api/app/lib/controllers/overview/building.js
  23. 52
      api/app/lib/controllers/overview/conserve.js
  24. 2
      api/app/lib/controllers/overview/index.js
  25. 81
      api/app/lib/controllers/overview/management.js
  26. 128
      api/app/lib/controllers/overview/operation.js
  27. 612
      api/app/lib/controllers/placeSecurityRecord/index.js
  28. 91
      api/app/lib/controllers/places/index.js
  29. 140
      api/app/lib/controllers/report/compile.js
  30. 173
      api/app/lib/controllers/report/config.js
  31. 199
      api/app/lib/controllers/report/index.js
  32. 342
      api/app/lib/controllers/statistic/index.js
  33. 483
      api/app/lib/controllers/wxReport/index.js
  34. 37
      api/app/lib/index.js
  35. 996
      api/app/lib/models/bridge.js
  36. 546
      api/app/lib/models/bus_car.js
  37. 256
      api/app/lib/models/bus_line.js
  38. 15
      api/app/lib/models/department.js
  39. 31
      api/app/lib/models/file-road.js
  40. 32
      api/app/lib/models/file-type.js
  41. 73
      api/app/lib/models/files.js
  42. 316
      api/app/lib/models/municipal_business.js
  43. 426
      api/app/lib/models/municipal_vehicle.js
  44. 206
      api/app/lib/models/overspeed.js
  45. 61
      api/app/lib/models/places.js
  46. 47
      api/app/lib/models/post.js
  47. 51
      api/app/lib/models/post_resource.js
  48. 136
      api/app/lib/models/project.js
  49. 56
      api/app/lib/models/publicity.js
  50. 34
      api/app/lib/models/region_type.js
  51. 176
      api/app/lib/models/report.js
  52. 88
      api/app/lib/models/report_collection.js
  53. 74
      api/app/lib/models/report_configition.js
  54. 69
      api/app/lib/models/report_countyCollect.js
  55. 82
      api/app/lib/models/report_downManage.js
  56. 115
      api/app/lib/models/report_rectify.js
  57. 33
      api/app/lib/models/report_type.js
  58. 44
      api/app/lib/models/resource.js
  59. 786
      api/app/lib/models/road.js
  60. 56
      api/app/lib/models/statistic.js
  61. 55
      api/app/lib/models/user.js
  62. 311
      api/app/lib/models/user_placeSecurityRecord.js
  63. 61
      api/app/lib/models/user_resource.js
  64. 3
      api/app/lib/models/user_token.js
  65. 13
      api/app/lib/routes/approval/index.js
  66. 19
      api/app/lib/routes/auth/index.js
  67. 9
      api/app/lib/routes/common/index.js
  68. 158
      api/app/lib/routes/data/index.js
  69. 13
      api/app/lib/routes/department/index.js
  70. 21
      api/app/lib/routes/file/index.js
  71. 28
      api/app/lib/routes/organization/authority.js
  72. 36
      api/app/lib/routes/organization/index.js
  73. 32
      api/app/lib/routes/organization/user.js
  74. 26
      api/app/lib/routes/overview/index.js
  75. 70
      api/app/lib/routes/placeSecurityRecord/index.js
  76. 30
      api/app/lib/routes/places/index.js
  77. 43
      api/app/lib/routes/report/index.js
  78. 28
      api/app/lib/routes/statistic/index.js
  79. 78
      api/app/lib/routes/wxReport/index.js
  80. 27
      api/config.js
  81. 3950
      api/log/development.log
  82. 9
      api/package.json
  83. 7
      api/sequelize-automate.config.js
  84. 77
      api/utils/xlsxDownload.js
  85. 4546
      api/yarn.lock
  86. 19
      jenkinsfile_api
  87. 19
      jenkinsfile_web
  88. 8
      scripts/0.0.1/data/1_update_user_dep_data.sql
  89. 9
      scripts/0.0.1/data/2_update_statistic_data.sql
  90. 17
      scripts/0.0.1/data/3_init_report_pic_data/.vscode/launch.json
  91. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/1-1.jpg
  92. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/1-2.jpg
  93. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/10-1.jpg
  94. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/11-1.jpg
  95. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/12-1.jpg
  96. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/13-1.jpg
  97. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/14-1.jpg
  98. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/15-1.jpg
  99. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/16-1.jpg
  100. BIN
      scripts/0.0.1/data/3_init_report_pic_data/data/pic/17-1.jpg

144
.gitignore

@ -0,0 +1,144 @@
# ---> Go
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# ---> Node
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
.env.production
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
*yarn.lock
*package-lock.json
*log/
*downloadFiles/
web/client/assets/color.less
package-lock.json
development.text

11
api/.vscode/launch.json

@ -13,9 +13,14 @@
"NODE_ENV": "development" "NODE_ENV": "development"
}, },
"args": [ "args": [
"-p 14000", "-p 4000",
"-f http://localhost:14000", "-f http://localhost:4000",
"-g postgres://postgres:123@10.8.30.32:5432/yinjiguanli", "-g postgres://postgres:123@10.8.30.32:5432/highways4good",
"--qnak XuDgkao6cL0HidoMAPnA5OB10Mc_Ew08mpIfRJK5",
"--qnsk yewcieZLzKZuDfig0wLZ9if9jKp2P_1jd3CMJPSa",
"--qnbkt dev-highways4good",
// "--qndmn http://resources.anxinyun.cn",
"--qndmn http://rfkimpwbb.hn-bkt.clouddn.com",
] ]
}, },
{ {

19
api/Dockerfile

@ -1,7 +1,4 @@
FROM repository.anxinyun.cn/devops/node:12-dev as builder
FROM repository.anxinyun.cn/base-images/nodejs12:20.10.12.2
MAINTAINER liuxinyi "liu.xinyi@free-sun.com.cn"
COPY . /var/app COPY . /var/app
@ -9,6 +6,16 @@ WORKDIR /var/app
EXPOSE 8080 EXPOSE 8080
CMD ["-g", "postgres://FashionAdmin:123456@iota-m1:5433/SmartRiver", "--qnak", "5XrM4wEB9YU6RQwT64sPzzE6cYFKZgssdP5Kj3uu", "--qnsk", "w6j2ixR_i-aelc6I7S3HotKIX-ukMzcKmDfH6-M5", "--qnbkt", "anxinyun-test", "--qndmn", "http://test.resources.anxinyun.cn"] RUN npm config set registry=http://10.8.30.22:7000
RUN echo "{\"time\":\"$BUILD_TIMESTAMP\",\"build\": \"$BUILD_NUMBER\",\"revision\": \"$SVN_REVISION_1\",\"URL\":\"$SVN_URL_1\"}" > version.json
RUN npm cache clean -f
RUN rm -rf package-lock.json
RUN npm install --registry http://10.8.30.22:7000
FROM registry.cn-hangzhou.aliyuncs.com/fs-devops/node:12
COPY --from=builder --chown=node /var/app /home/node/app
WORKDIR /home/node/app
ENTRYPOINT [ "node", "server.js" ] CMD ["node", "server.js"]

71
api/app/lib/controllers/approval/index.js

@ -1,71 +0,0 @@
'use strict';
/**
* 提交审批驳回修改
* body {
* action:1驳回修改 2审批通过
* userRegionType:提交用户所属区域级别3乡镇级2区县级
* userId:提交用户id
* rejectReasons:驳回意见
* correctiveAction:采取措施区县复核时提交内容
* punishment:实施处罚强制措施情况区县复核时提交内容
* }
*/
const moment = require('moment');
async function submitApproval (ctx) {
try {
const data = ctx.request.body;
const models = ctx.fs.dc.models;
let oldData = await models.UserPlaceSecurityRecord.findOne({ where: { id: data.id } })
if (oldData == null) {
ctx.status = 400;
ctx.body = { name: `message`, message: `该条填报数据不存在` };
} else {
if ((data.action == 1 || data.action == 2) && (data.userRegionType == 3 || data.userRegionType == 2)) {
let dataSave = {}
if (data.action == 1) {//驳回
dataSave = {
rejectManId: data.userId,
rejectReasons: data.rejectReasons,
type: false,//是否重新发起true默认false可以重新发起
rejectTime: moment()
}
if (data.userRegionType == 2) {//区县复核,14、15项可修改
dataSave.correctiveAction = data.correctiveAction;
dataSave.punishment = data.punishment;
}
} else {//通过
if (data.userRegionType == 3) {
dataSave = {
audit1ManId: data.userId,
audit1ManIdTime: moment().format()
}
} else {
dataSave = {//区县复核,14、15项可修改
correctiveAction: data.correctiveAction,
punishment: data.punishment,
audit2ManId: data.userId,
audit2ManIdTime: moment().format()
}
}
}
await models.UserPlaceSecurityRecord.update(dataSave, { where: { id: data.id } });
ctx.status = 200;
ctx.body = { name: `message`, message: `提交成功` };
} else {
ctx.status = 400;
ctx.body = { name: `message`, message: `提交数据有误` };
}
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": { name: `message`, message: `提交审批、驳回修改数据失败` }
}
}
}
module.exports = {
submitApproval
};

65
api/app/lib/controllers/auth/index.js

@ -4,7 +4,7 @@ const MD5 = require('crypto-js/md5');
const moment = require('moment'); const moment = require('moment');
const uuid = require('uuid'); const uuid = require('uuid');
async function login(ctx, next) { async function login (ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction(); const transaction = await ctx.fs.dc.orm.transaction();
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
@ -17,11 +17,7 @@ async function login(ctx, next) {
password: password, password: password,
delete: false, delete: false,
}, },
attributes: { exclude: ['password'] }, attributes: { exclude: ['password', 'delete'] },
include: [{
attributes: ["resourceId"],
model: models.UserResource
}]
}); });
if (!userRes) { if (!userRes) {
@ -43,8 +39,6 @@ async function login(ctx, next) {
let userRslt = Object.assign(userRes.dataValues, { let userRslt = Object.assign(userRes.dataValues, {
authorized: true, authorized: true,
token: token, token: token,
userResources: userRes.userResources.map(r => r.resourceId),
type: deptInfo.type
}); });
await models.UserToken.create({ await models.UserToken.create({
@ -71,7 +65,7 @@ async function login(ctx, next) {
* 微信小程序登录 * 微信小程序登录
* @@requires.body {phone-手机号, password-密码} ctx * @@requires.body {phone-手机号, password-密码} ctx
*/ */
async function wxLogin(ctx, next) { async function wxLogin (ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction(); const transaction = await ctx.fs.dc.orm.transaction();
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
@ -83,7 +77,7 @@ async function wxLogin(ctx, next) {
password: password, password: password,
delete: false, delete: false,
}, },
attributes: { exclude: ['password'] } attributes: { exclude: ['password', 'delete'] },
}); });
if (!userRes) { if (!userRes) {
ctx.status = 400; ctx.status = 400;
@ -93,27 +87,7 @@ async function wxLogin(ctx, next) {
ctx.body = { message: "该用户已被禁用" } ctx.body = { message: "该用户已被禁用" }
} else { } else {
const token = uuid.v4(); const token = uuid.v4();
//获取用户关注区域信息
const departmentRes = await models.Department.findOne({ where: { id: userRes.departmentId } });
let attentionRegion = departmentRes;
while (attentionRegion.dependence && attentionRegion.type != 1) {
const departmentParent = await models.Department.findOne({ where: { id: attentionRegion.dependence } });
attentionRegion = {
...departmentParent.dataValues,
nextRegin: attentionRegion
}
}
//获取用户权限信息
const resourceRes = await models.UserResource.findAll({
where: {
userId: userRes.id
},
include: [{
model: models.Resource,
attributes: ['code', 'name'],
}],
attributes: []
});
let userRslt = Object.assign({ let userRslt = Object.assign({
authorized: true, authorized: true,
token: token, token: token,
@ -127,9 +101,6 @@ async function wxLogin(ctx, next) {
ctx.status = 200; ctx.status = 200;
ctx.body = Object.assign({ ctx.body = Object.assign({
...userRslt, ...userRslt,
userRegionType: departmentRes.type,//1-市级,2-区县级,3-乡镇级,4-村级
attentionRegion: attentionRegion,
resources: resourceRes.map(r => r.resource)
}); });
} }
await transaction.commit(); await transaction.commit();
@ -143,7 +114,7 @@ async function wxLogin(ctx, next) {
} }
} }
async function logout(ctx) { async function logout (ctx) {
try { try {
const { token, code } = ctx.request.body; const { token, code } = ctx.request.body;
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
@ -164,32 +135,8 @@ async function logout(ctx) {
} }
} }
/**
* 微信小程序登出
* @request.body {token-用户登录Token} ctx
*/
async function wxLogout(ctx) {
try {
const { token } = ctx.request.body;
const models = ctx.fs.dc.models;
await models.UserToken.destroy({
where: {
token: token,
},
});
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "登出失败"
}
}
}
module.exports = { module.exports = {
login, login,
wxLogin, wxLogin,
logout, logout,
wxLogout
}; };

116
api/app/lib/controllers/common/contants.js

@ -1,116 +0,0 @@
function deepCompare(x, y) {
var i, l, leftChain, rightChain;
function compare2Objects(x, y) {
var p;
// remember that NaN === NaN returns false
// and isNaN(undefined) returns true
if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {
return true;
}
// Compare primitives and functions.
// Check if both arguments link to the same object.
// Especially useful on the step where we compare prototypes
if (x === y) {
return true;
}
// Works in case when functions are created in constructor.
// Comparing dates is a common scenario. Another built-ins?
// We can even handle functions passed across iframes
if ((typeof x === 'function' && typeof y === 'function') ||
(x instanceof Date && y instanceof Date) ||
(x instanceof RegExp && y instanceof RegExp) ||
(x instanceof String && y instanceof String) ||
(x instanceof Number && y instanceof Number)) {
return x.toString() === y.toString();
}
// At last checking prototypes as good as we can
if (!(x instanceof Object && y instanceof Object)) {
return false;
}
if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {
return false;
}
if (x.constructor !== y.constructor) {
return false;
}
if (x.prototype !== y.prototype) {
return false;
}
// Check for infinitive linking loops
if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {
return false;
}
// Quick checking of one object being a subset of another.
// todo: cache the structure of arguments[0] for performance
for (p in y) {
if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
return false;
} else if (typeof y[p] !== typeof x[p]) {
return false;
}
}
for (p in x) {
if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
return false;
} else if (typeof y[p] !== typeof x[p]) {
return false;
}
switch (typeof (x[p])) {
case 'object':
case 'function':
leftChain.push(x);
rightChain.push(y);
if (!compare2Objects(x[p], y[p])) {
return false;
}
leftChain.pop();
rightChain.pop();
break;
default:
if (x[p] !== y[p]) {
return false;
}
break;
}
}
return true;
}
if (arguments.length < 1) {
return true; //Die silently? Don't know how to handle such case, please help...
// throw "Need two or more arguments to compare";
}
for (i = 1, l = arguments.length; i < l; i++) {
leftChain = []; //Todo: this can be cached
rightChain = [];
if (!compare2Objects(arguments[0], arguments[i])) {
return false;
}
}
return true;
}
module.exports = {
deepCompare
}

63
api/app/lib/controllers/common/index.js

@ -1,63 +0,0 @@
//获取固化数据接口
async function getDataDictionary(ctx) {
try {
const models = ctx.fs.dc.models;
const { model } = ctx.params;
const { where, attributes, order } = ctx.query;
let findObj = {};
if (where) {
let whereJson = JSON.parse(where);
findObj.where = whereJson;
}
if (order) {
findObj.order = [JSON.parse(order)];
}
if (attributes) {
attributes = attributes.split(',');
}
let rslt = await models[model].findAll(findObj);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取数据字典失败"
}
}
}
//基础修改接口
async function putDataDictionary(ctx) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
let errMsg = "修改失败";
const { model } = ctx.params;
const { where, dataToSave } = ctx.request.body;
const oldData = await models[model].findOne({ where: where });
if (oldData) {
await models[model].update(dataToSave, { where: where, transaction });
} else {
errMsg = "未找到需要修改的数据";
ctx.throw(400)
}
ctx.status = 204;
await transaction.commit();
} catch (error) {
await transaction.rollback();
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": errMsg
}
}
}
module.exports = {
getDataDictionary,
putDataDictionary
};

82
api/app/lib/controllers/data/bridge.js

@ -0,0 +1,82 @@
'use strict';
async function bridgeGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { bridgeName } = ctx.query;
let findOption = {
where: {
},
order: [['id', 'DESC']]
}
if (bridgeName) {
findOption.where.bridgeName = {
$like: `%${bridgeName}%`
}
}
const roadRes = await models.Bridge.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function bridgeEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.bridgeId) {
await models.Bridge.create(data)
} else {
await models.Bridge.update(
data, {
where: {
id: data.bridgeId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function bridgeDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { bridgeId } = ctx.params;
await models.Bridge.destroy({
where: {
id: bridgeId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
bridgeGet, bridgeEdit, bridgeDel,
};

155
api/app/lib/controllers/data/bus.js

@ -0,0 +1,155 @@
'use strict';
async function lineGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { fleet } = ctx.query;
const findOption = {
order: [['id', 'DESC']],
where: {
},
}
if (fleet) {
findOption.where.fleet = { $like: `%${fleet}%` }
}
const roadRes = await models.BusLine.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function lineEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.lineId) {
await models.BusLine.create(data)
} else {
await models.BusLine.update(
data, {
where: {
id: data.lineId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function lineDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { lineId } = ctx.params;
await models.BusLine.destroy({
where: {
id: lineId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function carGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { fleet } = ctx.query;
const findOption = {
order: [['id', 'DESC']],
where: {
},
}
if (fleet) {
findOption.where.fleet = { $like: `%${fleet}%` }
}
const roadRes = await models.BusCar.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function carEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.carId) {
await models.BusCar.create(data)
} else {
await models.BusCar.update(
data, {
where: {
id: data.carId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function carDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { carId } = ctx.params;
await models.BusCar.destroy({
where: {
id: carId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
lineGet, lineEdit, lineDel,
carGet, carEdit, carDel,
};

132
api/app/lib/controllers/data/index.js

@ -0,0 +1,132 @@
'use strict';
const fs = require('fs');
const xlsxDownload = require('../../../../utils/xlsxDownload.js');
const moment = require('moment');
const request = require('superagent');
async function dataExport (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api
const { exp, ids, roadLevel, municipalType } = ctx.query;
if (!exp) {
throw '参数错误';
}
const modalList = [
{
n: '道路',
k: 'road',
tableName: 'Road',
},
{
n: '桥梁',
k: 'bridge',
tableName: 'Bridge'
},
{
n: '运政车辆',
k: 'vehicle',
tableName: 'MunicipalVehicle',
},
{
n: '运政业户',
k: 'business',
tableName: 'MunicipalBusiness',
},
{
n: '工程一览',
k: 'project',
tableName: 'Project',
},
{
n: '治超',
k: 'overspeed',
tableName: 'Overspeed',
},
{
n: '公交线路',
k: 'busLine',
tableName: 'BusLine',
},
{
n: '公交车辆',
k: 'busCar',
tableName: 'BusCar',
},
]
const modalOption = modalList.find(item => item.k == exp);
if (!modalOption) {
throw '参数错误';
}
let findOption = {
where: {}
}
if (ids) {
findOption.where.id = { $in: ids.split(',') }
}
if (roadLevel) {
findOption.where.level = roadLevel
}
if (municipalType) {
findOption.where.type = municipalType
}
const exportData = await models[modalOption.tableName].findAll(findOption)
const tableAttributes = models[modalOption.tableName].tableAttributes
let header = []
for (let k in tableAttributes) {
if (k != 'id' && tableAttributes[k].comment) {
header.push({
title: tableAttributes[k].comment || '-',
key: k,
index: tableAttributes[k].index,
})
}
}
header.sort((a, b) => { return a.index - b.index })
const fileName = `${modalOption.n}_${moment().format('YYYYMMDDHHmmss')}` + '.csv'
const filePath = await xlsxDownload.simpleExcelDown({ data: exportData, header, fileName: fileName })
const fileData = fs.readFileSync(filePath);
ctx.status = 200;
ctx.set('Content-Type', 'application/x-xls');
ctx.set('Content-disposition', 'attachment; filename=' + encodeURI(fileName));
ctx.body = fileData;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function godTrans (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api
const res = await request.get('https://report.amap.com/ajax/districtRank.do?linksType=1&cityCode=360100')
const data = JSON.parse(res.text)
const nanchang = data.find(item => item.name == '南昌县') || {}
ctx.status = 200
ctx.body = nanchang
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
dataExport,
godTrans
};

115
api/app/lib/controllers/data/overspeed.js

@ -0,0 +1,115 @@
'use strict';
const moment = require('moment')
async function overspeedGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { limit, page, nameOfInspectionPoint, licensePlate, numberOfAxles, overrunRateUpper, overrunRateFloor, testTime } = ctx.query
const sequelize = ctx.fs.dc.ORM;
let findOption = {
where: {
},
order: [['id', 'DESC']],
}
if (limit) {
findOption.limit = limit
}
if (page && limit) {
findOption.offset = page * limit
}
if (nameOfInspectionPoint || licensePlate) {
findOption.where['$or'] = {}
if (nameOfInspectionPoint) {
findOption.where['$or'].
nameOfInspectionPoint = { $like: `%${nameOfInspectionPoint}%` }
}
if (licensePlate) {
findOption.where['$or'].
licensePlate = { $like: `%${licensePlate}%` }
}
}
if (numberOfAxles) {
findOption.where.numberOfAxles = numberOfAxles
}
if (overrunRateUpper) {
findOption.where.overrunRate = {
$lte: overrunRateUpper
}
}
if (overrunRateFloor) {
findOption.where.overrunRate = {
$gte: overrunRateFloor
}
}
if (testTime) {
findOption.where.testTime = {
$between: [moment(testTime).startOf('day').format(), moment(testTime).endOf('day').format()]
}
}
const overspeedRes = await models.Overspeed.findAndCountAll(findOption)
ctx.status = 200;
ctx.body = overspeedRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function overspeedEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.overspeedId) {
await models.Overspeed.create(data)
} else {
await models.Overspeed.update(
data,
{
where: {
id: data.overspeedId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function overspeedDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { overspeedId } = ctx.params;
await models.Overspeed.destroy({
where: {
id: overspeedId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
overspeedGet, overspeedEdit, overspeedDel,
};

85
api/app/lib/controllers/data/project.js

@ -0,0 +1,85 @@
'use strict';
async function projectGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { type, entryName } = ctx.query;
let findOption = {
where: {
},
order: [['id', 'DESC']]
}
if (type) {
findOption.where.type = type
}
if (entryName) {
findOption.where.entryName = {
$like: `%${entryName}%`
}
}
const projectRes = await models.Project.findAll(findOption)
ctx.status = 200;
ctx.body = projectRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function projectEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.projectId) {
await models.Project.create(data)
} else {
await models.Project.update(
data, {
where: {
id: data.projectId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function projectDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { projectId } = ctx.params;
await models.Project.destroy({
where: {
id: projectId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
projectGet, projectEdit, projectDel,
};

77
api/app/lib/controllers/data/publicity.js

@ -0,0 +1,77 @@
'use strict';
async function publicityGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { enable } = ctx.query;
let findOption = {
where: {},
order: [['id', 'DESC']]
}
if (enable) {
findOption.where.enable = true
}
const roadRes = await models.Publicity.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function publicityEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.publicityId) {
await models.Publicity.create(data)
} else {
await models.Publicity.update(
data, {
where: {
id: data.publicityId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function publicityDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { publicityId } = ctx.params;
await models.Publicity.destroy({
where: {
id: publicityId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
publicityGet, publicityEdit, publicityDel,
};

173
api/app/lib/controllers/data/road.js

@ -0,0 +1,173 @@
'use strict';
const roadKeyMap = require('./road.json')
async function importIn (ctx) {
// 数据导入
try {
const models = ctx.fs.dc.models;
const { level, } = ctx.query;
const data = ctx.request.body;
const roadRes = await models.Road.findAll({
where: {
level
}
})
let preCreateArr = []
for (let d of data) {
if (roadRes.some(r => r.routeCode + r.sectionNo == d['路线代码'] + d['路段序号'])) {
//repeat
} else {
// await models.Road.create(d);
}
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function get (ctx) {
try {
const models = ctx.fs.dc.models;
const { level, road, sectionStart, sectionEnd } = ctx.query;
let findOption = {
where: {},
order: [['id', 'DESC']]
}
if (level) {
findOption.where.level = level
}
if (road || sectionStart || sectionEnd) {
findOption.where['$or'] = {}
if (road) {
findOption.where['$or'].
routeName = { $like: `%${road}%` }
}
if (sectionStart) {
findOption.where['$or'].
startingPlaceName = { $like: `%${sectionStart}%` }
}
if (sectionEnd) {
findOption.where['$or'].
stopPlaceName = { $like: `%${sectionEnd}%` }
}
}
const roadRes = await models.Road.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function getRoadSection (ctx) {
try {
const models = ctx.fs.dc.models;
const { level, road, sectionStart, sectionEnd } = ctx.query;
let findOption = {
where: {},
order: [['id', 'DESC']],
attributes: ['id', 'routeName', 'startingPlaceName', 'stopPlaceName']
}
if (level) {
findOption.where.level = level
}
if (road || sectionStart || sectionEnd) {
findOption.where['$or'] = {}
if (road) {
findOption.where['$or'].
routeName = { $like: `%${road}%` }
}
if (sectionStart) {
findOption.where['$or'].
startingPlaceName = { $like: `%${sectionStart}%` }
}
if (sectionEnd) {
findOption.where['$or'].
stopPlaceName = { $like: `%${sectionEnd}%` }
}
}
const roadRes = await models.Road.findAll(findOption)
ctx.status = 200;
ctx.body = roadRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function edit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.roadId) {
await models.Road.create(data)
} else {
await models.Road.update(
data, {
where: {
id: data.roadId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function del (ctx) {
try {
const models = ctx.fs.dc.models;
const { roadId } = ctx.params;
await models.Road.destroy({
where: {
id: roadId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
importIn,
getRoadSection,
get, edit, del,
};

50
api/app/lib/controllers/data/road.json

@ -0,0 +1,50 @@
{
"路线名称": "routeName",
"路线代码": "routeCode",
"路段序号": "sectionNo",
"乡镇编码": "townshipCode",
"起点地名": "startingPlaceName",
"起点桩号": "startStation",
"起点分界点类别": "categoryOfStartingPointAndDividingPoint",
"止点地名": "stopPlaceName",
"止点分界点类别": "categoryOfDeadCenterAndDividingPoint",
"止点桩号": "stopStation",
"路段类型": "sectionType",
"路段性质": "natureOfRoadSection",
"建成时间": "completionTime",
"GBM及文明样板路": "gBMAndCivilizedModelRoad",
"地貌": "landforms",
"收费性质": "natureOfCharges",
"涵洞数量": "numberOfCulverts",
"技术等级": "technicalLevel",
"路面类型": "pavementType",
"路面宽度": "pavementWidth",
"路基宽度": "subgradeWidth",
"车道特征": "laneCharacteristics",
"是否晴雨通车": "whetherItIsOpenToTrafficInSunnyOrRainyDays",
"设计时速": "designSpeedPerHour",
"是否城管路段": "urbanManagementSectionOrNot",
"管养单位": "managementAndMaintenanceUnit",
"路政管理单位": "roadAdministrationUnit",
"列养情况": "alimentation",
"列养资金来源": "sourceOfListedMaintenanceFunds",
"养护时间": "curingTime",
"可绿化里程": "greeningMileage",
"已绿化里程": "greeningMileaged",
"重复道路路段类型": "typeOfRepeatedRoadSection",
"重复路段序号": "serialNumberOfRepeatedSection",
"重复路段路线编码": "repeatedSectionRouteCode",
"填报单位": "reportingUnit",
"变更原因": "reasonForChange",
"变更时间": "changeTime",
"是否按干线公路管理接养": "whetherMaintenanceManagedHighway",
"备注": "remarks",
"上年路线编码": "routeCodeOfLastYear",
"上年路线名称": "routeNameOfLastYear",
"上年起点桩号": "startingStationOfLastYear",
"上年止点桩号": "lastYearsEndingPointStakeNumber",
"图形里程": "graphicMileage",
"桩号里程": "chainageMileage",
"所在区县": "districtcounty",
"所在地市": "locationCity"
}

239
api/app/lib/controllers/data/vehicle.js

@ -0,0 +1,239 @@
'use strict';
async function get (ctx) {
try {
const models = ctx.fs.dc.models;
const { type } = ctx.request.body;
const { name } = ctx.query;
let findOption = {
where: {
type
},
order: [['id', 'DESC']]
}
if (name) {
findOption.where.name = {
$like: `%${name}%`
}
}
const vehicleRes = await models.Statistic.findAll(findOption)
ctx.status = 200;
ctx.body = vehicleRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function edit (ctx) {
try {
const models = ctx.fs.dc.models;
const { id, name, count, type } = ctx.request.body;
if (!id) {
await models.Statistic.create({
name, count, type: type
})
} else {
await models.Statistic.update({
name, count, type: type
}, {
where: {
id: id
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function del (ctx) {
try {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
await models.Statistic.destroy({
where: {
id: id
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function specificGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { type } = ctx.query;
const { nameOfBusinessOwner } = ctx.query;
let findOption = {
where: {
type
},
order: [['id', 'DESC']]
}
if (nameOfBusinessOwner) {
findOption.where.nameOfBusinessOwner = {
$like: `%${nameOfBusinessOwner}%`
}
}
const vehicleRes = await models.MunicipalVehicle.findAll(findOption)
ctx.status = 200;
ctx.body = vehicleRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function specificEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.vehicleId) {
const vehicleRes = await models.MunicipalVehicle.create(data)
} else {
const vehicleRes = await models.MunicipalVehicle.update(data, {
where: {
id: data.vehicleId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function specificDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { vehicleId } = ctx.params;
const vehicleRes = await models.MunicipalVehicle.destroy({
where: {
id: vehicleId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function businessGet (ctx) {
try {
const models = ctx.fs.dc.models;
const { nameOfBusinessOwner } = ctx.query;
let findOption = {
where: {
},
order: [['id', 'DESC']]
}
if (nameOfBusinessOwner) {
findOption.where.nameOfBusinessOwner = {
$like: `%${nameOfBusinessOwner}%`
}
}
const businessRes = await models.MunicipalBusiness.findAll(findOption)
ctx.status = 200;
ctx.body = businessRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function businessEdit (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body;
if (!data.businessId) {
await models.MunicipalBusiness.create(data)
} else {
await models.MunicipalBusiness.update(data, {
where: {
id: data.businessId
}
})
}
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function businessDel (ctx) {
try {
const models = ctx.fs.dc.models;
const { businessId } = ctx.params;
await models.MunicipalBusiness.destroy({
where: {
id: businessId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
get, edit, del,
specificGet, specificEdit, specificDel,
businessGet, businessEdit, businessDel
};

25
api/app/lib/controllers/department/index.js

@ -1,25 +0,0 @@
'use strict';
//获取南昌市下所有区县
async function getCountiesList(ctx) {
try {
const models = ctx.fs.dc.models;
let rslt = await models.Department.findAll({
where: { type: 2 },
order: [['id', 'asc']],
});
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取南昌市下所有区县失败"
}
}
}
module.exports = {
getCountiesList,
};

237
api/app/lib/controllers/file/index.js

@ -0,0 +1,237 @@
'use strict';
const request = require('superagent');
const moment = require('moment');
async function createProjectDir(ctx, next) {
let error = { message: '新增项目目录失败' }, rs = null;
const { roadName } = ctx.query;
try {
const models = ctx.fs.dc.models;
rs = await models.FileRoad.create({
roadName
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = { message: '新增项目目录成功!', result: rs };
}
}
async function getFileDirs(ctx, next) {
let error = { message: '查询项目目录失败' }, rslt = null;
try {
const models = ctx.fs.dc.models;
rslt = await models.FileRoad.findAll({
// include: [{
// model: models.FileType
// }]
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = rslt;
}
}
async function delFileDir(ctx, next) {
let error = { message: '文件夹删除失败' };
let rslt = [], fileDirIds = [];
try {
const { id } = ctx.query, // type == parent / child
models = ctx.fs.dc.models;
const transaction = await ctx.fs.dc.orm.transaction();
await models.FileRoad.destroy({ where: { rId: id }, transaction })
await models.Files.destroy({ where: { roadId: id }, transaction })
await transaction.commit();
error = null;
} catch (err) {
await transaction.rollback();
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = { message: '文件夹删除成功' };
}
}
async function uploadFile(ctx, next) {
let error = { message: '文件上传失败' }, rslt = null;
const { typeId, userId, userName, fileSize, fileName, fileUrl, fileExt, roadId } = ctx.request.body
try {
const models = ctx.fs.dc.models;
rslt = await models.Files.create({
fId: typeId,
uploaderId: userId,
roadId,
createDate: moment().format('YYYY-MM-DD HH:mm:ss'),
fileSize,
fileName,
fileUrl,
fileExt,
uploaderName: userName,
isDelete: false
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = { message: '文件上传成功', rslt };
}
}
async function deleteFile(ctx, next) {
let error = { message: '文件删除失败' }, rslt = null;
const { id } = ctx.query;
try {
const models = ctx.fs.dc.models;
rslt = await models.Files.update({
isDelete: true
}, {
where: { id: id }
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = { message: '文件删除成功', rslt };
}
}
async function getFileList(ctx, next) {
let error = { message: '文件上传失败' }, rslt = { list: [], counter: 0, type: '' };
const { fId, limit, offset, searchTxt, roadId } = ctx.query;
let limit_ = limit, offset_ = offset;
if (limit == null || limit < 0) {
limit_ = 10;
}
if (offset == null || offset < 0) {
offset_ = 0;
}
try {
const models = ctx.fs.dc.models;
let queryOptions = { isDelete: false }
if (searchTxt && searchTxt.trim() != '') {
queryOptions.fileName = { $like: `%${searchTxt}%` }
}
if (fId) {
queryOptions.fId = fId
}
if (roadId) {
queryOptions.roadId = roadId
}
rslt.type = await models.FileType.findOne({
where: { fId }
})
rslt.list = await models.Files.findAll({
where: queryOptions,
offset: offset_,
limit: limit_,
order: [
['id', 'DESC']
]
})
rslt.counter = await models.Files.count({
where: queryOptions
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = rslt;
}
}
function updateStructDir(opts) {
return async function (ctx, next) {
let error = { message: '文件夹名称更新失败' };
const models = ctx.fs.dc.models;
const { id, name } = ctx.query;
try {
await models.FileRoad.update({ roadName: name }, {
where: {
id: id
},
})
error = null;
} catch (err) {
ctx.status = 500;
ctx.body = { detail: err, ...error };
}
if (error) {
ctx.status = 400;
ctx.body = { ...error };
} else {
ctx.status = 200;
ctx.body = { message: '文件夹名称更新成功' };
}
}
}
module.exports = {
uploadFile,
deleteFile,
getFileList,
createProjectDir,
delFileDir,
getFileDirs,
updateStructDir,
}

87
api/app/lib/controllers/organization/authority.js

@ -1,87 +0,0 @@
async function getResource(ctx, next) {
try {
const models = ctx.fs.dc.models;
const res = await models.Resource.findAll({
where: { parentResource: null },
include: [{
model: models.Resource,
}]
})
ctx.body = res;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "查询所有权限数据失败"
}
}
}
async function getUserResource(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.query;
const res = await models.UserResource.findAll({
where: { userId: userId },
include: [{
model: models.Resource,
}]
})
ctx.body = res;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "查询用户权限数据失败"
}
}
}
async function updateUserRes(ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const { userId, resCode } = ctx.request.body;
const res = await models.UserResource.findAll({
attributes: ["resourceId"],
raw: true,
where: { userId: userId }
})
const addRes = resCode.filter(r => !res.some(rr => rr.resourceId == r)).map(r => { return { userId: userId, resourceId: r } });
const delRes = res.filter(r => !resCode.includes(r.resourceId)).map(r => r.resourceId);
addRes.length && await models.UserResource.bulkCreate(addRes, { transaction: transaction });
delRes.length && await models.UserResource.destroy({
where: {
resourceId: { $in: delRes },
userId: userId
},
transaction: transaction
})
ctx.status = 204;
await transaction.commit();
} catch (error) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "更新用户权限数据失败"
}
}
}
module.exports = {
getResource,
getUserResource,
updateUserRes
};

186
api/app/lib/controllers/organization/department.js

@ -0,0 +1,186 @@
'use strict';
async function getdep (ctx) {
try {
const { fs: { api: { userInfo } } } = ctx
const models = ctx.fs.dc.models;
let depLevel0 = await models.Department.findAll({
order: [['id', 'asc']],
where: {
// id: userInfo.departmentId
dependence: null,
delete: false,
id: { $ne: 1 }
},
})
let depRslt = []
const getDep = async (d) => {
let subordinate = []
let depRes = await models.Department.findAll({
order: [['id', 'asc']],
where: {
dependence: d.id,
delete: false,
id: { $ne: 1 }
},
})
if (depRes.length)
for (let d of depRes) {
let dep = d.dataValues
dep.subordinate = await getDep(d.dataValues)
subordinate.push(dep)
}
return subordinate
}
for (let d of depLevel0) {
let dep0 = d.dataValues
dep0.subordinate = await getDep(d.dataValues)
depRslt.push(dep0)
}
ctx.status = 200;
ctx.body = depRslt
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {}
}
}
async function editDep (ctx) {
try {
const models = ctx.fs.dc.models;
const { depId, name, dependence } = ctx.request.body;
if (dependence) {
let dep = await models.Department.findOne({
where: {
id: dependence,
delete: false
},
})
if (!dep) {
throw "上级部门不存在"
}
}
if (depId) {
const repeatNameCount = await models.Department.count({
where: {
dependence: dependence || null,
name: name,
id: { $ne: depId },
}
})
if (repeatNameCount) {
throw "部门名称重复"
}
await models.Department.update({
name: name,
dependence: dependence || null,
}, {
where: {
id: depId
}
})
} else {
const repeatNameCount = await models.Department.count({
where: {
dependence: dependence || null,
name: name,
}
})
if (repeatNameCount) {
throw '部门名称重复'
}
await models.Department.create({
name: name,
delete: false,
dependence: dependence || null,
})
}
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function delDep (ctx) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const { depId } = ctx.params;
let depIds = []
let depLevel0 = await models.Department.findAll({
where: {
id: depId
},
})
const getDep = async (d) => {
let depRes = await models.Department.findAll({
where: {
dependence: d.id,
delete: false
},
})
if (depRes.length)
for (let d of depRes) {
depIds.push(d.dataValues.id)
await getDep(d.dataValues)
}
}
for (let d of depLevel0) {
depIds.push(d.id)
getDep(d.dataValues)
}
const undeleteUserCount = await models.User.count({
where: {
departmentId: {
$in: depIds
},
delete: false
}
})
if (undeleteUserCount) {
throw '该部门下有用户,不能删除'
}
await models.Department.update({
delete: true,
}, {
where: {
id: { $in: depIds },
},
transaction
})
await models.User.update({
delete: true,
}, {
where: {
departmentId: { $in: depIds },
},
transaction
})
await transaction.commit();
ctx.status = 204;
} catch (error) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
getdep, editDep, delDep,
};

150
api/app/lib/controllers/organization/user.js

@ -2,75 +2,38 @@
const Hex = require('crypto-js/enc-hex'); const Hex = require('crypto-js/enc-hex');
const MD5 = require('crypto-js/md5'); const MD5 = require('crypto-js/md5');
async function getDepMessage (ctx, next) { async function getUser (ctx, next) {
try { try {
const { fs: { api: { userInfo } } } = ctx
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { depId } = ctx.params
let depType1 = await models.Department.findAll({ const userRes = await models.User.findAll({
order: [['id', 'asc']],
// include: [{
// model: models.User,
// required: false,
// where: { delete: false },
// attributes: { exclude: ['password'] },
// }],
where: { where: {
// type: 1, departmentId: parseInt(depId),
id: userInfo.departmentId delete: false
}, },
}) attributes: { exclude: ['password', 'delete', 'username'] },
let depRslt = []
const getDep = async (d) => {
let subordinate = []
let depRes = await models.Department.findAll({
order: [['id', 'asc']], order: [['id', 'asc']],
// include: [{
// model: models.User,
// required: false,
// where: { delete: false },
// attributes: { exclude: ['password'] },
// }],
where: {
dependence: d.id
},
}) })
if (depRes.length)
for (let d of depRes) {
let dep = d.dataValues
dep.subordinate = await getDep(d.dataValues)
subordinate.push(dep)
}
return subordinate
}
for (let d of depType1) {
let dep_1 = d.dataValues
dep_1.subordinate = await getDep(d.dataValues)
depRslt.push(dep_1)
}
ctx.status = 200; ctx.status = 200;
ctx.body = depRslt ctx.body = userRes
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
"message": "获取部门信息失败" "message": "获取用户信息失败"
} }
} }
} }
async function getUser (ctx, next) { async function getUserAll (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { depId } = ctx.params
const userRes = await models.User.findAll({ const userRes = await models.User.findAll({
where: { where: {
departmentId: parseInt(depId),
delete: false delete: false
}, },
attributes: { exclude: ['password'] }, attributes: { exclude: ['password', 'delete', 'username'] },
order: [['id', 'asc']], order: [['id', 'asc']],
}) })
@ -80,39 +43,37 @@ async function getUser (ctx, next) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
"message": "获取用户信息失败" "message": "获取所有用户信息失败"
} }
} }
} }
async function creatUser (ctx, next) { async function creatUser (ctx, next) {
let errMsg = "新建用户失败"
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const data = ctx.request.body; const data = ctx.request.body;
let repeatUserNameCount = await models.User.count({ let repeatUserNameCount = await models.User.count({
where: { where: {
username: data.phone, phone: data.phone,
delete: false delete: false
} }
}) })
if (repeatUserNameCount) { if (repeatUserNameCount) {
errMsg = '已有当前用户名' throw '已有当前用户名'
throw errMsg
} }
await models.User.create({ await models.User.create({
name: data.name, name: data.name,
username: data.phone, // username: data.username,
password: Hex.stringify(MD5(data.password)), password: Hex.stringify(MD5(data.password)),
departmentId: data.departmentId, departmentId: data.departmentId,
email: data.email, email: data.email,
enable: data.enable, enable: data.enable,
delete: false, delete: false,
phone: data.phone, phone: data.phone,
post: data.post, remark: 'th',
}) })
ctx.status = 204; ctx.status = 204;
@ -120,7 +81,7 @@ async function creatUser (ctx, next) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
"message": errMsg message: typeof error == 'string' ? error : undefined
} }
} }
} }
@ -131,31 +92,31 @@ async function updateUser (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const data = ctx.request.body; const data = ctx.request.body;
const { id } = ctx.params; const { userId } = ctx.params;
let repeatUserNameCount = await models.User.count({ let repeatUserNameCount = await models.User.count({
where: { where: {
username: data.username phone: data.phone,
delete: false,
id: { $ne: userId }
} }
}) })
if (repeatUserNameCount) { if (repeatUserNameCount) {
errMsg = '已有当前用户名' throw '已有当前用户名'
throw errMsg
} }
await models.User.update({ await models.User.update({
name: data.name, name: data.name,
username: data.phone, // username: data.username,
departmentId: data.departmentId, departmentId: data.departmentId,
email: data.email, email: data.email,
enable: data.enable, enable: data.enable,
delete: false, delete: false,
phone: data.phone, phone: data.phone,
post: data.post,
}, { }, {
where: { where: {
id: id id: userId
} }
}); });
@ -164,7 +125,7 @@ async function updateUser (ctx, next) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
"message": errMsg message: typeof error == 'string' ? error : undefined
} }
} }
} }
@ -172,13 +133,13 @@ async function updateUser (ctx, next) {
async function deleteUser (ctx, next) { async function deleteUser (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { ids } = ctx.params; const { userIds } = ctx.params;
const userIds = ids.split(','); const userIds_ = userIds.split(',');
await models.User.update({ await models.User.update({
delete: true, delete: true,
}, { }, {
where: { where: {
id: { $in: userIds }, id: { $in: userIds_ },
} }
}); });
ctx.status = 204; ctx.status = 204;
@ -191,34 +152,29 @@ async function deleteUser (ctx, next) {
} }
} }
async function resetPwd (ctx, next) { // async function resetPwd (ctx, next) {
try { // try {
const models = ctx.fs.dc.models; // const models = ctx.fs.dc.models;
const { id } = ctx.params; // const { id } = ctx.params;
const data = ctx.request.body; // const data = ctx.request.body;
await models.User.update({ // await models.User.update({
password: Hex.stringify(MD5(data.password)), // password: Hex.stringify(MD5(data.password)),
}, { // }, {
where: { // where: {
id: id, // id: id,
} // }
}); // });
ctx.status = 204; // ctx.status = 204;
} catch (error) { // } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); // ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; // ctx.status = 400;
ctx.body = { // ctx.body = {
"message": "重置用户密码失败" // "message": "重置用户密码失败"
} // }
} // }
} // }
/** async function setPassword (ctx, next) {
* 修改用户密码
* @params {userId-用户Id} ctx
* @request.body {password-用户新密码} ctx
*/
async function updateUserPassword (ctx, next) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { userId } = ctx.params; const { userId } = ctx.params;
@ -254,11 +210,11 @@ async function updateUserPassword (ctx, next) {
module.exports = { module.exports = {
getDepMessage,
getUser, getUser,
getUserAll,
creatUser, creatUser,
updateUser, updateUser,
deleteUser, deleteUser,
resetPwd, // resetPwd,
updateUserPassword setPassword
} }

222
api/app/lib/controllers/overview/building.js

@ -0,0 +1,222 @@
'use strict';
const moment = require("moment");
const areaCode = {
"360121100000": "莲塘镇",
"360121101000": "向塘镇",
"360121102000": "三江镇",
"360121103000": "塘南镇",
"360121104000": "幽兰镇",
"360121105000": "蒋巷镇",
"360121106000": "武阳镇",
"360121107000": "冈上镇",
"360121108000": "广福镇",
"360121191000": "昌东镇",
"360121192000": "麻丘镇",
"360121200000": "泾口乡",
"360121201000": "南新乡",
"360121202000": "塔城乡",
"360121203000": "黄马乡",
"360121204000": "富山乡",
"360121205000": "东新乡",
"360121206000": "八一乡",
"360121403000": "小蓝经济开发区",
"360121471000": "银三角管理委员会",
"360121501000": "五星垦殖场",
"360121572000": "良种繁殖场",
}
async function roadState (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const roadRes = await models.Road.findAll({})
const projectRoadRes = await models.Project.findAll({
type: 'road',
})
const bridgeRes = await models.Bridge.findAll({})
let constructionYear = []
for (let i = 0; constructionYear.length < 4; i++) {
constructionYear.push(moment().subtract(i, 'year').format('YYYY'))
}
constructionYear.reverse()
const roadState = {
// 在建数量
buildingRoad: 0,
// 已建数量
buildedRoad: 0,
// 桥梁数量
bridgeCount: bridgeRes.length,
// 涵洞数量
culvertCount: 0,
// 施工统计
construction: constructionYear.map(year => {
return {
year,
count: 0,
}
}),
// 乡镇统计
townRoad: {
},
// 县乡村涵洞 个数
townCulvert: {
'县': 0,
'乡': 0,
'村': 0,
},
// 桥大小
bridgeSize: {
'大桥': 0,
'中桥': 0,
'小桥': 0,
},
// 类型统计
roadType: {
'县': 0,
'乡': 0,
'村': 0,
},
// 在建项目统计
townProject: {
},
// 等级统计
roadLevel: {
},
// 养护周期
curingPeriod: {
frequent: 0,
season: 0,
},
// 绿化里程
greenMileage: {
'县': {
canBeGreen: 0,
isGreen: 0,
},
'乡': {
canBeGreen: 0,
isGreen: 0,
},
'村': {
canBeGreen: 0,
isGreen: 0,
},
}
}
let roadCode = new Set()
for (let r of roadRes) {
roadCode.add(r.routeCode)
roadState.culvertCount += Number(r.numberOfCulverts) || 0;
// 建成年份
let buildYear = r.completionTime ? moment(r.completionTime).format('YYYY') : null
// 改建年份
let rebuildYear = r.reconstructionTime ? moment(r.reconstructionTime).format('YYYY') : null
let corBuildConstruction = roadState.construction.find(item => item.year === buildYear)
if (corBuildConstruction) {
corBuildConstruction.count += Number(r.chainageMileage) || 0
}
let corReBuildConstruction = roadState.construction.find(item => item.year === rebuildYear)
if (corReBuildConstruction) {
corReBuildConstruction.count += Number(r.chainageMileage) || 0
}
let townName = areaCode[r.townshipCode] || '其他'
if (roadState.townRoad[townName]) {
roadState.townRoad[townName].roadCode.add(r.routeCode)
roadState.townRoad[townName].mileage += Number(r.chainageMileage) || 0
} else {
roadState.townRoad[townName] = {
roadCode: new Set([r.routeCode]),
mileage: Number(r.chainageMileage) || 0,
}
}
roadState.roadType[r.level] = (roadState.roadType[r.level] || 0) + (Number(r.chainageMileage) || 0)
roadState.townCulvert[r.level] = (roadState.townCulvert[r.level] || 0) + (Number(r.numberOfCulverts) || 0)
if (roadState.roadLevel[r.technicalLevel]) {
roadState.roadLevel[r.technicalLevel] += 1
} else {
roadState.roadLevel[r.technicalLevel] = 1
}
if (r.curingTime) {
if (r.curingTime.indexOf('经常') > -1) {
roadState.curingPeriod.frequent += 1
} else if (r.curingTime.indexOf('季节') > -1) {
roadState.curingPeriod.season += 1
}
}
if (r.level && roadState.greenMileage[r.level]) {
roadState.greenMileage[r.level].canBeGreen += (Number(r.greeningMileage) || 0)
roadState.greenMileage[r.level].isGreen += (Number(r.greeningMileaged) || 0)
}
}
let corBuildConstruction2022 = roadState.construction.find(item => item.year == 2022)
for (let p of projectRoadRes) {
if (p.type == 'road') {
if (corBuildConstruction2022) {
corBuildConstruction2022.count += Number(p.projectMileage) || 0
}
if (p.done) {
roadState.buildedRoad += 1
} else {
roadState.buildingRoad += 1
}
}
if (p.buildUnit) {
let townName = p.buildUnit.replace('人民政府', '').replace('南昌县', '').replace('管委会', '')
if (roadState.townProject[townName]) {
roadState.townProject[townName] += 1
} else {
roadState.townProject[townName] = 1
}
}
}
for (let { dataValues: b } of bridgeRes) {
if (roadState.bridgeSize[b.bridgeClassification] || roadState.bridgeSize[b.bridgeClassification] == 0) {
roadState.bridgeSize[b.bridgeClassification] += 1
}
}
roadState.buildedRoad += roadCode.size
for (let t of Object.keys(roadState.townRoad)) {
roadState.townRoad[t].roadCount = roadState.townRoad[t].roadCode.size
delete roadState.townRoad[t].roadCode
}
ctx.status = 200
ctx.body = roadState
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
roadState,
};

52
api/app/lib/controllers/overview/conserve.js

@ -0,0 +1,52 @@
'use strict';
async function statistic (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const { projectType } = ctx.query;
let findOption = {
where: {
reportType: 'conserve',
},
attributes: ['id', 'road', 'time', 'projectType', 'projectType', 'roadSectionStart', 'roadSectionEnd'],
include: [{
model: models.User,
attributes: ['name']
}],
}
if (projectType) {
findOption.where.projectType = projectType;
}
const reportRes = await await models.Report.findAll(findOption)
const reportCount = await models.Report.count({
attributes: ['projectType'],
group: ['projectType'],
where: {
reportType: 'conserve',
},
})
ctx.status = 200
ctx.body = {
processed: reportRes.length,
reportCount: reportCount,
reportList: reportRes,
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
statistic,
};

2
api/app/lib/controllers/overview/index.js

@ -0,0 +1,2 @@
'use strict';

81
api/app/lib/controllers/overview/management.js

@ -0,0 +1,81 @@
'use strict';
async function overSpeedList (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const { limit } = ctx.query;
const overSpeedRes = await models.Overspeed.findAll({
attributes: ['id', 'licensePlate', 'overrunRate', 'deductPoints', 'fine', 'processingTime', 'testTime'],
order: [['testTime', 'DESC']],
limit: limit || 120,
where: {
processingTime: { $ne: null },
testTime: { $ne: null },
},
order: [['testTime', 'DESC']],
})
const overSpeedProcessedCount = await models.Overspeed.count({
where: {
processingTime: { $ne: null }
}
})
ctx.status = 200
ctx.body = {
processed: overSpeedProcessedCount,
overSpeedList: overSpeedRes,
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function overSpeedProcessed (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const overSpeedCountRes = await models.Overspeed.count({
attributes: ['nameOfInspectionPoint'],
group: ['nameOfInspectionPoint'],
})
const overSpeedCountProcessedRes = await models.Overspeed.count({
attributes: ['nameOfInspectionPoint'],
where: { processingTime: { $ne: null } },
group: ['nameOfInspectionPoint'],
})
let data = []
for (let c of overSpeedCountRes) {
const corProcessed = overSpeedCountProcessedRes.find(d => d.nameOfInspectionPoint == c.nameOfInspectionPoint)
if (corProcessed) {
data.push({
name: c.nameOfInspectionPoint,
processed: corProcessed.count,
total: c.count,
})
}
}
ctx.status = 200
ctx.body = data
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
overSpeedList,
overSpeedProcessed
};

128
api/app/lib/controllers/overview/operation.js

@ -0,0 +1,128 @@
'use strict';
async function busCarLevelList (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
let data = []
const busCarRes = await models.BusCar.findAll({
attributes: ['id', 'company', 'fleet', 'vehicleLicensePlateNumber', 'line'],
})
for (let c of busCarRes) {
const { company, fleet, vehicleLicensePlateNumber, line } = c
const corCompany = data.find(d => d.name === company)
if (!corCompany) {
data.push({
name: company || '--',
child: [{
name: fleet || '--',
child: [{
name: line || '--',
child: [{
id: c.id,
name: vehicleLicensePlateNumber,
}]
}]
}]
})
} else {
const corFleet = corCompany.child.find(d => d.name === fleet)
if (!corFleet) {
corCompany.child.push({
name: fleet || '--',
child: [{
name: line || '--',
child: [{
id: c.id,
name: vehicleLicensePlateNumber || '--',
}]
}]
})
} else {
const corLine = corFleet.child.find(d => d.name === line)
if (!corLine) {
corFleet.child.push({
name: line || '--',
child: [{
id: c.id,
name: vehicleLicensePlateNumber || '--',
}]
})
} else {
corLine.child.push({
id: c.id,
name: vehicleLicensePlateNumber || '--',
})
}
}
}
}
ctx.status = 200
ctx.body = data
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function vehicleStatistic (ctx) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.fs.api;
const taxiBusiness = await models.MunicipalBusiness.findAll({
where: {
type: '出租车'
},
attributes: ['id', 'nameOfBusinessOwner']
})
const hazardousGoodsBusiness = await models.MunicipalBusiness.findAll({
where: {
type: '危货'
},
attributes: ['id', 'nameOfBusinessOwner']
})
const passengerTransport = await models.Statistic.findOne({
where: {
type: 'vehicle'
}
})
const vehicleState = {
passengerTransport: passengerTransport ? passengerTransport.count : 0,
taxi: await models.MunicipalVehicle.count({
where: {
type: '出租车'
},
}),
hazardousGoods: await models.MunicipalVehicle.count({
where: {
type: '危货'
}
}),
bus: await models.BusCar.count(),
taxiBusiness: taxiBusiness,
hazardousGoodsBusiness: hazardousGoodsBusiness,
}
ctx.status = 200
ctx.body = vehicleState
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
module.exports = {
busCarLevelList,
vehicleStatistic,
};

612
api/app/lib/controllers/placeSecurityRecord/index.js

@ -1,612 +0,0 @@
'use strict';
const moment = require('moment');
/**
* 提交填报信息/保存填报草稿
* @requires.body {
* isDraft-是否草稿
* userId-用户id填报人
* placeName-场所id
* placeType-场所性质
* regionId-所属县/
* address-场所地址
* placeOwner-场所负责人
* phone-负责人手机号
* dimension-面积
* floors-多少层
* numberOfPeople-常住人数
* location-经纬度
* isEnable-是否为合用场所
* localtionDescribe-经纬度定位描述
* hiddenDangerItem12-12项隐患信息,格式[{
* itemIndex-隐患项序号,
* value-是否存在隐患,
* description-隐患具体信息描述,
* photos-隐患图片(多张图片以 , 隔开)"
* }],
* description-存在具体问题描述
* correctiveAction-采取整改措施
* punishment-实施处罚强制措施情况
* } ctx
*/
async function addPlaceSecurityRecord (ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const body = ctx.request.body;
let ifRightRegion = true;
if (body.regionId) {
//判断填报信息所属乡镇/区县是否存在
let region = await models.Department.findOne({ where: { id: body.regionId } });
if (!region) {
ifRightRegion = false;
}
}
if (ifRightRegion) {
let placeId = null;
if (body.placeName) {
//判断“场所名称”是否存在,不存在则“新建场所”
let place = await models.Places.findOne({ where: { name: body.placeName, userId: ctx.fs.api.userId } });
if (place) {
placeId = place.id
} else {
const newPlace = await models.Places.create({
name: body.placeName,
userId: ctx.fs.api.userId
}, { transaction: transaction });
placeId = newPlace.id;
}
}
//创建填报信息/填报草稿
const userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.create({
isDraft: body.isDraft,//是否草稿
userId: ctx.fs.api.userId,//用户id,填报人
time: moment(),//录入时间
placeId: placeId,//场所id
placeType: body.placeType,//场所性质
regionId: body.regionId,//所属县/区
address: body.address,//场所地址
placeOwner: body.placeOwner,//场所负责人
phone: body.phone,//负责人手机号
dimension: body.dimension,//面积
floors: body.floors,//多少层
numberOfPeople: body.numberOfPeople,//常住人数
location: body.location,//经纬度
isEnable: body.isEnable,//是否为合用场所
localtionDescribe: body.localtionDescribe,//经纬度定位描述
hiddenDangerItem12: body.hiddenDangerItem12,//12项隐患信息
description: body.description,//存在具体问题描述
correctiveAction: body.correctiveAction,//采取措施
type: true,//是否重新发起true默认false可以重新发起
punishment: body.punishment,//实施处罚,强制措施情况
departmentId: body.departmentId
}, { transaction: transaction });
ctx.body = {
id: userPlaceSecurityRecord.id,
"message": "新增填报信息成功"
};
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = {
"message": "所选地址不存在!"
}
}
await transaction.commit();
} catch (error) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "新增填报信息失败"
}
}
}
/**
* 编辑填报信息
* @param {id-填报信息ID} ctx
* @requires.body {
* isDraft-是否草稿
* userId-用户id填报人
* placeName-场所id
* placeType-场所性质
* regionId-所属县/
* address-场所地址
* placeOwner-场所负责人
* phone-负责人手机号
* dimension-面积
* floors-多少层
* numberOfPeople-常住人数
* location-经纬度
* isEnable-是否为合用场所
* localtionDescribe-经纬度定位描述
* hiddenDangerItem12-12项隐患信息,格式[{
* itemIndex-隐患项序号,
* value-是否存在隐患,
* description-隐患具体信息描述,
* photos-隐患图片(多张图片以 , 隔开)"
* }],
* description-存在具体问题描述
* correctiveAction-采取整改措施
* punishment-实施处罚强制措施情况
* } ctx
*/
async function editPlaceSecurityRecord (ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
//判断该填报信息是否存在
let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } });
if (userPlaceSecurityRecord) {
const body = ctx.request.body;
let ifRightRegion = true;
if (body.regionId) {
//判断填报信息所属乡镇/区县是否存在
let region = await models.Department.findOne({ where: { id: body.regionId } });
if (!region) {
ifRightRegion = false;
}
}
if (ifRightRegion) {
let placeId = null;
if (body.placeName) {
//判断“场所名称”是否存在,不存在则“新建场所”
let place = await models.Places.findOne({ where: { name: body.placeName, userId: ctx.fs.api.userId } });
if (place) {
placeId = place.id
} else {
const newPlace = await models.Places.create({
name: body.placeName,
userId: ctx.fs.api.userId
}, { transaction: transaction });
placeId = newPlace.id;
}
}
//修改填报信息
await models.UserPlaceSecurityRecord.update({
isDraft: body.isDraft,//是否草稿
userId: ctx.fs.api.userId,//用户id,填报人
time: moment(),//录入时间
placeId: placeId,//场所id
placeType: body.placeType,//场所性质
regionId: body.regionId,//所属县/区
address: body.address,//场所地址
placeOwner: body.placeOwner,//场所负责人
phone: body.phone,//负责人手机号
dimension: body.dimension,//面积
floors: body.floors,//多少层
numberOfPeople: body.numberOfPeople,//常住人数
location: body.location,//经纬度
isEnable: body.isEnable,//是否为合用场所
localtionDescribe: body.localtionDescribe,//经纬度定位描述
hiddenDangerItem12: body.hiddenDangerItem12,//12项隐患信息
description: body.description,//存在具体问题描述
correctiveAction: body.correctiveAction,//采取措施
punishment: body.punishment,//实施处罚,强制措施情况
departmentId: body.departmentId
}, { where: { id: id, }, transaction: transaction });
ctx.body = { "message": "修改填报信息成功" };
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = { "message": "所选地址不存在!" }
}
} else {
ctx.status = 400;
ctx.body = { "message": "该填报信息不存在!" }
}
await transaction.commit();
} catch (error) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "修改填报信息失败" }
}
}
/**
* 修改type字段
* @param {*} ctx
* @param {*} next
*/
async function updateType (ctx, next) {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
try {
await models.UserPlaceSecurityRecord.update({
type: true,//是否重新发起true默认false可以重新发起
}, { where: { id: id, } })
ctx.body = { "message": "修改信息成功" };
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "修改信息失败" }
}
}
/**
* 删除填报信息
* @param {id-填报信息ID} ctx
*/
async function deletePlaceSecurityRecord (ctx, next) {
const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
//判断该填报信息是否存在
let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } });
if (userPlaceSecurityRecord) {
await models.UserPlaceSecurityRecord.destroy({ where: { id: id }, transaction: transaction });
ctx.body = { "message": "删除填报信息成功" };
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = { "message": "该填报信息不存在!" }
}
await transaction.commit();
} catch (error) {
await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "删除填报信息失败" }
}
}
/**
* 根据填报信息ID查询填报信息
* @param {id-填报信息ID} ctx
*/
async function getPlaceSecurityRecordById (ctx, next) {
try {
const models = ctx.fs.dc.models;
const { id } = ctx.params;
//判断该填报信息是否存在
let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({ where: { id: id } });
if (userPlaceSecurityRecord) {
let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findOne({
where: { id: id },
include: [{
model: models.Places,
}, {
model: models.User,
as: 'user',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit1ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit2ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'rejectManUser',
attributes: ['id', 'name', 'username', 'phone']
}]
});
ctx.body = userPlaceSecurityRecord;
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = { "message": "该填报信息不存在!" }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "查询填报信息失败" }
}
}
/**
* 根据场所ID获取该场所最近用户填报信息
* @param {placeId-场所信息ID} ctx
*/
async function getRecentlyPlaceSecurityRecordByPlaceId (ctx, next) {
try {
const models = ctx.fs.dc.models;
const { placeId } = ctx.params;
//判断该场所信息是否存在
let place = await models.Places.findOne({ where: { id: placeId } });
if (place) {
let userPlaceSecurityRecord = await models.UserPlaceSecurityRecord.findAll({
where: { placeId: placeId, userId: place.userId },
include: [{
model: models.Places,
}],
limit: 1,
order: [["id", "desc"]],
});
ctx.status = 200;
ctx.body = userPlaceSecurityRecord.length ? userPlaceSecurityRecord[0] : null;
} else {
ctx.status = 400;
ctx.body = { "message": "该场所不存在!" }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取场所最近用户填报信息失败" }
}
}
/**
* 根据筛选条件获取用户填报信息
* @query {
* isDraft-是否草稿
* userId-用户ID
* timeRange-录入时间范围
* regionId-区域ID
* placeId-场所ID
* state-审批状态
* pageIndex-页码
* pageSize-页宽
* } ctx
*/
async function getPlaceSecurityRecords (ctx, next) {
try {
const models = ctx.fs.dc.models;
const { isDraft, userId, timeRange, regionId, placeId, state, pageIndex, pageSize } = ctx.query;
let whereCondition = {};
if (userId) {
let user = await models.User.findOne({ where: { id: userId } });
if (user) {
whereCondition.userId = userId;
} else {
ctx.status = 400;
ctx.body = { "message": "用户不存在!" }
return;
}
}
if (regionId) {
let region = await models.Department.findOne({ where: { id: regionId } });
if (region) {
whereCondition.regionId = regionId;
} else {
ctx.status = 400;
ctx.body = { "message": "区域不存在!" }
return;
}
}
if (placeId) {
let place = await models.Places.findOne({ where: { id: placeId } });
if (place) {
whereCondition.placeId = placeId;
} else {
ctx.status = 400;
ctx.body = { "message": "场所不存在!" };
return;
}
}
if (isDraft) { whereCondition.isDraft = isDraft; }
let times = timeRange;
if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') }
if (times && times.length > 0) {
const len = times.length;
whereCondition.time = {
$between: [
moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
};
}
switch (Number(state)) {
case 1: //待审批:未审核 或者 已审核+未复核
whereCondition.$or = [
{ '$audit1ManId$': null },
{ '$audit2ManId$': null }
];
whereCondition.rejectManId = null;
break;
case 2://已审批:已审批+已复核
whereCondition.audit1ManId = { $not: null };
whereCondition.audit2ManId = { $not: null };
break;
case 3: //驳回
whereCondition.rejectManId = { $not: null };
break;
default: break;
}
let findObj = {
where: whereCondition,
order: [["id", "desc"]],
include: [{
model: models.Places,
}, {
model: models.User,
as: 'user',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit1ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit2ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'rejectManUser',
attributes: ['id', 'name', 'username', 'phone']
}]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let userPlaceSecurityRecords = await models.UserPlaceSecurityRecord.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = userPlaceSecurityRecords;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取用户填报信息失败" }
}
}
/**
* 根据筛选条件获取用户审批填报信息
* @query {
* approveUserId-审批人ID
* timeRange-录入时间范围
* regionId-区域ID
* placeId-场所ID
* state-审批状态
* pageIndex-页码
* pageSize-页宽
* } ctx
*/
async function getApprovePlaceSecurityRecords (ctx, next) {
try {
const models = ctx.fs.dc.models;
const { approveUserId, timeRange, regionId, placeId, state, pageIndex, pageSize } = ctx.query;
let whereCondition = { isDraft: false };
if (approveUserId) {
let approveUser = await models.User.findOne({ where: { id: approveUserId } });
if (approveUser) {
//获取审批人管辖区域内所有用户ID(注:市级人员查看所有用户数据)
const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } });
if (departmentRes.dependence) {
let attentionRegionIds = [departmentRes.id];
let regionType = departmentRes.type;
while (attentionRegionIds.length && regionType && regionType < 4) {
const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } });
regionType = departmentChilds.length ? departmentChilds[0].type : null;
attentionRegionIds = departmentChilds.map(d => d.id);
}
let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] });
if (users.length) {
let userIds = users.map(u => u.id);
whereCondition.userId = { $in: userIds };
} else {
ctx.status = 200;
ctx.body = {
"count": 0,
"rows": []
}
return;
}
}
if (regionId) {
let region = await models.Department.findOne({ where: { id: regionId } });
if (region) {
whereCondition.regionId = regionId;
} else {
ctx.status = 400;
ctx.body = { "message": "区域不存在!" }
return;
}
}
if (placeId) {
let place = await models.Places.findOne({ where: { id: placeId } });
if (place) {
whereCondition.placeId = placeId;
} else {
ctx.status = 400;
ctx.body = { "message": "场所不存在!" };
return;
}
}
let times = timeRange;
if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') }
if (times && times.length > 0) {
const len = times.length;
whereCondition.time = {
$between: [
moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
};
}
switch (Number(state)) {
case 1: //待审批
if (departmentRes.type == 2) {
//区县待审:已审核+未复核
whereCondition.audit1ManId = { $not: null };
whereCondition.audit2ManId = null;
} else {
//乡镇待审:未审核+未复核
whereCondition.audit1ManId = null;
whereCondition.audit2ManId = null;
}
whereCondition.rejectManId = null;
break;
case 2://已审批:
if (departmentRes.type == 3) {
//乡镇已审:已审核
whereCondition.audit1ManId = { $not: null };
} else {
//区域已审:已审批+已复核
whereCondition.audit1ManId = { $not: null };
whereCondition.audit2ManId = { $not: null };
}
whereCondition.rejectManId = null;
break;
case 3: //驳回
whereCondition.rejectManId = { $not: null };
break;
default:
if (departmentRes.type == 2) {
//区县查看数据:去除未审核
whereCondition.audit1ManId = { $not: null };
}
break;
}
let findObj = {
where: whereCondition,
include: [{
model: models.Places,
}, {
model: models.User,
as: 'user',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit1ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'audit2ManUser',
attributes: ['id', 'name', 'username', 'phone']
}, {
model: models.User,
as: 'rejectManUser',
attributes: ['id', 'name', 'username', 'phone']
}],
order: [["id", "desc"]]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let userPlaceSecurityRecords = await models.UserPlaceSecurityRecord.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = userPlaceSecurityRecords;
} else {
ctx.status = 400;
ctx.body = { "message": "用户不存在!" }
}
} else {
ctx.status = 400;
ctx.body = { "message": "请传用户参数!" }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取用户填报信息失败" }
}
}
module.exports = {
addPlaceSecurityRecord,
editPlaceSecurityRecord,
deletePlaceSecurityRecord,
getPlaceSecurityRecordById,
getRecentlyPlaceSecurityRecordByPlaceId,
getPlaceSecurityRecords,
getApprovePlaceSecurityRecords,
updateType
};

91
api/app/lib/controllers/places/index.js

@ -1,91 +0,0 @@
'use strict';
/**
* 根据用户ID获取该用户创建的所有场所信息
* @param {userId-用户ID} ctx
*/
async function getPlacesByUserId(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { userId } = ctx.params;
let places = await models.Places.findAll({ where: { userId: userId }, attributes: ['id', 'name'] });
ctx.status = 200;
ctx.body = places;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "查询用户场所信息失败" }
}
}
/**
* 根据审批用户ID获取该审批用户范围内填报人创建的场所信息
* @param {approveUserId-审批用户ID} ctx
*/
async function getPlacesByApproveUserId(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { approveUserId } = ctx.params;
let approveUser = await models.User.findOne({ where: { id: approveUserId } });
if (approveUser) {
let whereCondition = {};
//获取审批人管辖区域内所有用户ID
const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } });
if (departmentRes.dependence) {
let regionType = departmentRes.type;
if (regionType == 4) {
whereCondition.userId = approveUserId;
} else {
let attentionRegionIds = [departmentRes.id];
while (attentionRegionIds.length && regionType && regionType < 4) {
const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } });
regionType = departmentChilds.length ? departmentChilds[0].type : null;
attentionRegionIds = departmentChilds.map(d => d.id);
}
let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] });
if (users.length) {
let userIds = users.map(u => u.id);
whereCondition.userId = { $in: userIds };
} else {
ctx.status = 200;
ctx.body = [];
return;
}
}
}
let places = await models.Places.findAll({ where: whereCondition, attributes: ['id', 'name'] });
ctx.status = 200;
ctx.body = places;
} 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 getAllPlaces(ctx, next) {
try {
const models = ctx.fs.dc.models;
let places = await models.Places.findAll();
ctx.status = 200;
ctx.body = places;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取场所信息失败" }
}
}
module.exports = {
getPlacesByUserId,
getPlacesByApproveUserId,
getAllPlaces
};

140
api/app/lib/controllers/report/compile.js

@ -1,140 +0,0 @@
const moment = require('moment')
async function getReportRectify(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { fs: { api: { userInfo } } } = ctx
const { startTime, endTime } = ctx.query
// 查找自己所属的区县数据 type == 2
let userDepRes = await models.Department.findOne({
order: [['id', 'asc']],
where: {
id: userInfo.departmentId
},
})
let depRes = []
if (userDepRes.dataValues.type == 1) {
depRes = await models.Department.findAll({
where: {
type: 2,
}
})
} else if (userDepRes.dataValues.type == 2) {
depRes = [userDepRes]
}
let rectifyReportList = []
let calDay = moment(startTime).startOf('day')
let endDay = moment(endTime).endOf('day')
let today = moment().endOf('day')
while (calDay.isBefore(endDay) && calDay.isBefore(today)) {
let curDay_ = calDay.clone();
for (let d of depRes) {
let reportCount = await models.ReportRectify.count({
where: {
regionId: d.dataValues.id,
userId:{$not:null},
dateTime: {
$between: [
curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
})
let detailCount = await models.ReportRectify.count({
where: {
regionId: d.dataValues.id,
dateTime: {
$between: [
curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
})
if (detailCount > 0)
rectifyReportList.push({
day: calDay.format('YYYY-MM-DD'),
region: d.dataValues.name,
name: d.dataValues.name + '合用场所安全隐患排查整治汇总表',
reportBool: reportCount > 0,
depId: d.id,
})
}
calDay.add(1, 'day')
}
ctx.body = rectifyReportList;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取合用场所安全隐患排查整治汇总表列表失败"
}
}
}
async function getReportRectifyDetail(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { day, depId } = ctx.query
let searchDay = moment(day)
let reportRes = await models.ReportRectify.findAll({
where: {
regionId: depId,
dateTime: {
$between: [
searchDay.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
searchDay.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
})
ctx.body = reportRes;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取合用场所安全隐患排查整治汇总表详情失败"
}
}
}
async function compileReportRectifyDetail(ctx, next) {
const t = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body
for (let d of data) {
await models.ReportRectify.update(d, {
transaction: t,
where: {
id: d.id
}
})
}
await t.commit();
ctx.status = 204;
} catch (error) {
await t.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "保存合用场所安全隐患排查整治汇总表详情失败"
}
}
}
module.exports = {
getReportRectify,
getReportRectifyDetail,
compileReportRectifyDetail,
};

173
api/app/lib/controllers/report/config.js

@ -1,173 +0,0 @@
async function getAreas (ctx, next) {
try {
const { fs: { api: { userInfo } } } = ctx
const models = ctx.fs.dc.models;
let userDepRes = await models.Department.findOne({
order: [['id', 'asc']],
where: {
id: userInfo.departmentId
},
})
let rslt = []
if (userDepRes) {
if (userDepRes.dataValues.type == 1) {
rslt = await models.Department.findAll({
order: [['id', 'asc']],
where: {
type: 2
}
})
} else if (userDepRes.dataValues.type == 2) {
rslt = [userDepRes.dataValues]
}
}
ctx.body = rslt;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "查询区域数据失败"
}
}
}
async function addReportConfig (ctx) {
let errMsg = "添加报表配置失败"
try {
const data = ctx.request.body
const models = ctx.fs.dc.models;
const repeatRes = await models.ReportConfigition.find({
where: {
regionId: data.regionId,
reportTypeId: data.reportTypeId,
excuteTime: data.excuteTime,
}
})
if (repeatRes) {
errMsg = '已有相同配置信息';
throw errMsg
}
const res = await models.ReportConfigition.create(data)
ctx.body = res;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": errMsg
}
}
}
async function getReportConfig (ctx) {
try {
const { fs: { api: { userInfo } } } = ctx
const models = ctx.fs.dc.models;
// 查找自己所属的区县数据 type == 2
let userDepRes = await models.Department.findOne({
order: [['id', 'asc']],
where: {
id: userInfo.departmentId
},
})
let depRes = []
if (userDepRes.dataValues.type == 1) {
depRes = await models.Department.findAll({
where: {
type: 2,
}
})
} else if (userDepRes.dataValues.type == 2) {
depRes = [userDepRes]
}
const res = await models.ReportConfigition.findAll({
where: {
regionId: { $in: depRes.map(d => d.dataValues.id) }
}
})
ctx.body = res;
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取报表配置失败"
}
}
}
async function editReportConfig (ctx) {
try {
const models = ctx.fs.dc.models;
const data = ctx.request.body
const { reportId } = ctx.params
const repeatRes = await models.ReportConfigition.find({
where: {
id: { $ne: parseInt(reportId) },
regionId: data.regionId,
reportTypeId: data.reportTypeId,
excuteTime: data.excuteTime,
}
})
if (repeatRes) {
errMsg = '已有相同配置信息';
throw errMsg
}
await models.ReportConfigition.update(data, {
where: {
id: parseInt(reportId)
}
})
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "编辑报表配置失败"
}
}
}
async function delReportConfig (ctx) {
try {
const models = ctx.fs.dc.models;
const { reportId } = ctx.params
await models.ReportConfigition.destroy({
where: {
id: parseInt(reportId)
}
})
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "删除报表配置失败"
}
}
}
module.exports = {
getAreas,
addReportConfig,
getReportConfig,
editReportConfig,
delReportConfig,
};

199
api/app/lib/controllers/report/index.js

@ -1,87 +1,184 @@
const moment = require('moment'); 'use strict';
async function getReportList (ctx, next) { const { QueryTypes } = require('sequelize');
async function reportList(ctx) {
try { try {
const { fs: { api: { userInfo } } } = ctx
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { creatTime, reportName, regionName, limit, offset } = ctx.query; const { limit, page, startTime, endTime, keyword, userId, reportType, isTop } = ctx.query
let findOption = {
where: {
let where = { },
$and: { attributes: ['id', 'road', 'time', 'projectType', 'roadSectionStart', 'roadSectionEnd', 'reportType', 'content', 'longitude', 'latitude'],
reportName: { $notLike: '%填报信息导出%' } include: [{
model: models.User,
attributes: ['name']
}],
} }
}; if (limit) {
if (creatTime) { findOption.limit = limit
where.creatTime = {
$gte: moment(creatTime[0]).format('YYYY-MM-DD HH:mm:ss'),
$lte: moment(creatTime[1]).format('YYYY-MM-DD HH:mm:ss')
} }
if (page && limit) {
findOption.offset = page * limit
} }
if (startTime && endTime) {
if (reportName) { findOption.where = {
where.reportName = { time: {
$iLike: `%${reportName}%` '$between': [startTime, endTime]
}
}
}
if (keyword) {
findOption.where.road = {
'$like': `%${keyword}%`
} }
} }
if (userId) {
findOption.where.userId = userId
}
if (reportType) {
findOption.where.reportType = reportType
}
let reportRes = null;
if (regionName && regionName != -1) { if (isTop) {
where.regionId = regionName const sqlStr = 'select * from (SELECT R.*, "row_number"() OVER(PARTITION BY R.user_id ORDER BY R."time" DESC) AS NEWINDEX FROM report AS R ) AS NR WHERE NEWINDEX = 1'
const sequelize = ctx.fs.dc.orm;
reportRes = await sequelize.query(sqlStr, { type: QueryTypes.SELECT });
} else { } else {
let userDepRes = await models.Department.findOne({ reportRes = await models.Report.findAll(findOption)
order: [['id', 'asc']], }
ctx.status = 200;
ctx.body = reportRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function reportPosition(ctx) {
try {
const models = ctx.fs.dc.models;
const { startTime, endTime, userId, reportType } = ctx.query
const sequelize = ctx.fs.dc.ORM;
let findMxTimeOption = {
attributes: [
'userId',
[sequelize.fn('MAX', sequelize.col('time')), 'maxTime'],
],
where: { where: {
id: userInfo.departmentId
}, },
}) group: ['report.user_id'],
}
let userDep = [] if (startTime && endTime) {
if (userDepRes) { findMxTimeOption.where = {
if (userDepRes.dataValues.type == 1) { time: {
userDep = await models.Department.findAll({ '$between': [startTime, endTime]
order: [['id', 'asc']], }
}
}
if (userId) {
findMxTimeOption.where.userId = userId
}
if (reportType) {
findMxTimeOption.where.reportType = reportType
}
const reportMaxTimeRes = await models.Report.findAll(findMxTimeOption)
const timeArr = reportMaxTimeRes.map(item => item.dataValues.maxTime)
const reportRes = await models.Report.findAll({
where: { where: {
type: 2 time: { '$in': timeArr }
} }
}) })
} else if (userDepRes.dataValues.type == 2) { ctx.status = 200;
userDep = [userDepRes] ctx.body = reportRes
} } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
} }
where.regionId = { $in: userDep.map(u => u.dataValues.id) }
} }
}
let findObj = { async function reportDetail(ctx) {
include: [{ try {
model: models.ReportType, const models = ctx.fs.dc.models;
attributes: ['name'] const { reportId } = ctx.params
}, {
model: models.Department,
attributes: ['name']
}],
where: where,
order: [['creatTime', 'desc']],
};
if (Number(limit) > 0 && Number(offset) >= 0) { const reportRes = await models.Report.findOne({
findObj.limit = Number(limit); where: {
findObj.offset = Number(offset); id: reportId
} }
})
const res = await models.ReportDownManage.findAndCountAll(findObj)
ctx.body = res;
ctx.status = 200; ctx.status = 200;
ctx.body = reportRes
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
async function createReport(ctx) {
try {
const { userId } = ctx.fs.api
const models = ctx.fs.dc.models;
const data = ctx.request.body;
await models.Report.create({
...data,
userId,
time: new Date(),
})
ctx.status = 204
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
"message": "查询报表数据失败" message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function deleteReport(ctx) {
try {
const models = ctx.fs.dc.models;
const { reportId } = ctx.params;
await models.Report.destroy({
where: {
id: reportId
}
})
ctx.status = 204
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
message: typeof error == 'string' ? error : undefined
}
}
}
// TODO 小程序填写道路名称的时候的道路筛选 是一起都返回 还是不断传关键字搜索返回
module.exports = { module.exports = {
getReportList, reportList,
reportPosition,
reportDetail, createReport, deleteReport,
}; };

342
api/app/lib/controllers/statistic/index.js

@ -1,342 +0,0 @@
const moment = require('moment');
const { QueryTypes } = require('sequelize');
async function reportDailyStatistic (ctx, next) {
const rslt = {
added: 0, //今日新增
checked: 0, //今日已审填报
unChecked: 0, //未审填报
danger_place: 0, //隐患场所总数
history: 0, //历史填报
date: {}
};
try {
const models = ctx.fs.dc.models;
const curDay_ = moment();
const sequelize = ctx.fs.dc.orm;
rslt.added = await models.UserPlaceSecurityRecord.count({
where: {
time: {
$between: [
curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
})
rslt.unChecked = await models.UserPlaceSecurityRecord.count({
where: {
$or: [
{
audit2ManId: { $eq: null },
rejectManId: { $eq: null },
},
// {
// audit2ManId: { $ne: null },
// rejectManId: { $eq: null },
// },
{
audit1ManId: { $eq: null },
rejectManId: { $eq: null },
}
]
}
});
rslt.checked = await models.UserPlaceSecurityRecord.count({
where: {
$or: [
{
audit2ManId: { $ne: null },
audit2ManIdTime: {
$between: [
curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
},
{
rejectManId: { $ne: null },
rejectTime: {
$between: [
curDay_.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
curDay_.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
]
}
});
const list = await sequelize.query(`SELECT count(*) AS "count" FROM "user_placeSecurityRecord" AS "userPlaceSecurityRecord"
WHERE ("userPlaceSecurityRecord"."correctiveAction" IS NOT NULL AND "userPlaceSecurityRecord"."punishment" IS NOT NULL) AND "audit2ManId" IS NOT NULL GROUP BY "placeId";`, { type: QueryTypes.SELECT })
rslt.danger_place = list.length;
rslt.history = await models.UserPlaceSecurityRecord.count();
// seven days data
const startDay = moment().startOf('day');
for (let d = 1; d <= 7; d++) {
const START_DAY = moment(startDay).add(-d, 'day');
const date = START_DAY.format('YYYY-MM-DD');
const num = await models.UserPlaceSecurityRecord.count({
where: {
time: {
$between: [
START_DAY.startOf('day').format('YYYY-MM-DD HH:mm:ss'),
START_DAY.endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
})
rslt.date[date] = num;
}
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取数据中台数据失败"
}
}
}
async function reportAreaStatistic (ctx, next) {
let rslt = [], relationRegion = {};
try {
const { startDate, endDate } = ctx.query;
const models = ctx.fs.dc.models;
const sequelize = ctx.fs.dc.orm;
const list = await sequelize.query(`select "regionId", count("regionId") from "user_placeSecurityRecord" WHERE "time" BETWEEN '${moment(startDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND '${moment(endDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND "hiddenDangerItem12" IS NOT NULL GROUP BY "regionId" `, { type: QueryTypes.SELECT })
// let regionIds = []
// list.map(item => {
// if (item.regionId && item.regionId != '') {
// regionIds.push(item.regionId);
// }
// });
// const depts = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department" WHERE "department"."id" IN (${regionIds.toString()});`, { type: QueryTypes.SELECT });
const deptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department";`, { type: QueryTypes.SELECT });
const quArea = deptRelation.filter(f => f.type == 2);
quArea.map(item => {
relationRegion[item.id] = {};
const xiang = deptRelation.filter(f => f.type == 3 && f.dependence == item.id).map(item => item.id);
const cun = deptRelation.filter(f => f.type == 4 && xiang.some(ss => ss == f.dependence)).map(item => item.id);
relationRegion[item.id]['regionIds'] = [item.id, ...xiang, ...cun];
relationRegion[item.id]['name'] = item.name;
})
Object.keys(relationRegion).map(key => {
const { regionIds, name } = relationRegion[key];
let data = list.filter(item => regionIds.some(id => id == item.regionId))
let obj = {};
obj['name'] = name;
obj['count'] = 0;
obj['regionId'] = key;
data.map(item => {
obj['count'] += Number(item.count)
})
rslt.push(obj)
})
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取数据中台数据失败"
}
}
}
async function dangerAreaQuery (ctx, next) {
const { userId } = ctx.fs.api
let rslt = { rows: [], count: 0, ids: [] }, relationRegion = {};
try {
const { startDate, endDate, placeType, regionId, placeName, offset = 0, limit = 20 } = ctx.query;
const models = ctx.fs.dc.models;
const sequelize = ctx.fs.dc.orm;
let options = {
audit2ManId: { $ne: null },
}, places = [], dep4Ids = [];
if (startDate && endDate) {
options.time = {
$between: [
moment(startDate).startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment(endDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
}
if (placeName) {
places = await models.Places.findAll({
where: {
name: { $like: `%${placeName}%` }
}
})
options.placeId = {
$in: places.map(item => item.id)
}
} else {
places = await models.Places.findAll()
}
if (regionId && regionId != -1) {
let idList = [];
const curDeptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" WHERE "id" in (${regionId});`, { type: QueryTypes.SELECT });
const type = curDeptRelation[0].type
if (type != 1) {
const deptRelation = await sequelize.query(`SELECT "id", "name", "type", "dependence" FROM "department" AS "department";`, { type: QueryTypes.SELECT });
const quArea = deptRelation.filter(f => f.type == 2);
quArea.map(item => {
relationRegion[item.id] = {};
deptRelation.filter(f => f.type == 3 && f.dependence == item.id).map(x => {
relationRegion[item.id][x.id] = deptRelation.filter(f => f.type == 4 && x.id == f.dependence).map(cun => cun.id);
});
})
if (type == 2) {
const quList = [regionId];
const xiangList = Object.keys(relationRegion[regionId])
let cunList = xiangList.map(key => {
return relationRegion[regionId][key]
})
idList = quList.concat(xiangList).concat(cunList.flat(Infinity))
options.regionId = { $in: idList };
}
if (type == 3) {
Object.keys(relationRegion).map(quKey => {
Object.keys(relationRegion[quKey]).map(xiangKey => {
if (xiangKey == regionId) {
const xiangList = [xiangKey];
const cunList = relationRegion[quKey][xiangKey]
idList = xiangList.concat(cunList);
}
})
})
dep4Ids = idList
}
if (type == 4) {
const curUser = await models.User.findOne({ where: { id: userId } })
const corUserDepId = curUser.departmentId
const corUseUserDepRes = await models.Department.findOne({ where: { id: corUserDepId } })
if(corUseUserDepRes.type < 4){
dep4Ids = [regionId]
} else {
options.userId = userId
}
// idList = [regionId]
// options.userId = userId
}
// options.departmentId = { $in: idList };
}
}
if (placeType != null && placeType != -1) {
if (placeType == 0) {
options = Object.assign({}, options, {
$or: [
{
correctiveAction: { $ne: null },
},
{
punishment: { $ne: null },
}
]
})
}
if (placeType == 1)
options = Object.assign({}, options, {
$or: [
{
correctiveAction: { $eq: null },
},
{
punishment: { $eq: null },
}
],
hiddenDangerItem12: {
$ne: null
}
})
if (placeType == 2)
options.hiddenDangerItem12 = {
$eq: null
}
}
let findOption = {
where: options,
offset: offset,
limit: limit,
order: [['time', 'DESC']],
}
if (dep4Ids.length) {
findOption.include = [{
required: true,
model: models.User,
as: 'user',
where: {
departmentId: { $in: dep4Ids }
}
}]
}
const list = await models.UserPlaceSecurityRecord.findAll(findOption)
for (let item of list) {
const { name } = places.filter(p => p.id == item.placeId)[0] || {};
const checkAreaName = await sequelize.query(`SELECT "dpt"."name" FROM "department" as "dpt" WHERE "dpt"."id" in (SELECT "department_id" FROM "user" WHERE "id" = ${item.userId} );`, { type: QueryTypes.SELECT })
const checkUser = await sequelize.query(`SELECT "name", "phone" FROM "user" WHERE "id" = ${item.userId}`, { type: QueryTypes.SELECT })
rslt.rows.push(Object.assign({}, item.dataValues, { placeName: name, checkAreaName: (checkAreaName[0] || {}).name || '', checkUserName: (checkUser[0] || {}).name || '', checkUserPhone: (checkUser[0] || {}).phone }))
}
delete findOption.offset
delete findOption.limit
delete findOption.order
findOption.attributes = ['id']
const dataAll = await models.UserPlaceSecurityRecord.findAll(
findOption
// {
// attributes: ['id'],
// where: options,
// }
);
rslt.count = dataAll.length;
rslt.ids = dataAll.map(item => item.dataValues.id);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取数据中台数据失败"
}
}
}
module.exports = {
reportDailyStatistic,
reportAreaStatistic,
dangerAreaQuery,
}

483
api/app/lib/controllers/wxReport/index.js

@ -1,483 +0,0 @@
'use strict';
const moment = require('moment');
//获取每日汇总
async function getDayReport(ctx) {
try {
const { date, areaId } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let rslt = await models.ReportCollection.findAll({
where: {
dateTime: {
$between: range
},
regionId: areaId
},
include: [{
required: true,
model: models.User,
attributes: ['name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['name']
}]
});
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取全市每日汇总表失败"
}
}
}
//获取排查整治汇总表
async function getGovern(ctx) {
try {
const { date, areaId } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let rslt = await models.ReportRectify.findAndCountAll({
where: {
dateTime: {
$between: range
},
regionId: areaId
},
include: [{
required: true,
model: models.User,
attributes: ['id', 'name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['id', 'name']
}],
limit: 1
});
ctx.status = 200;
let obj = { count: 0 }
if (rslt.count > 0) {
obj.area = rslt.rows[0].department;
obj.dateTime = rslt.rows[0].dateTime;
obj.count = rslt.count;
obj.user = rslt.rows[0].user;
obj.isAudit = rslt.rows[0].isAudit
}
ctx.body = obj;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取排查整治汇总表失败"
}
}
}
//获取排查整治汇总详情
async function getGovernDetail(ctx) {
try {
const { name, date, areaId, pageSize, pageIndex } = ctx.query;
const models = ctx.fs.dc.models;
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
let whereObj = {
dateTime: {
$between: range
},
regionId: areaId
};
if (name) {
whereObj.name = { $like: `%${name}%` }
}
let findObj = {
where: whereObj,
include: [{
required: true,
model: models.User,
attributes: ['id', 'name', 'username', 'phone']
}, {
required: false,
model: models.Department,
attributes: ['id', 'name']
}],
order: [['dateTime', 'desc']]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let rslt = await models.ReportRectify.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取排查整治汇总详情失败"
}
}
}
/**
* 确认整治汇总场所数据
* body {
* governDetailIds:'1,2'
* }
*/
async function operateGovern(ctx, next) {
try {
const data = ctx.request.body;
const models = ctx.fs.dc.models;
if (data.governDetailIds && data.governDetailIds.length > 0) {
await models.ReportRectify.update({
isAudit: true
}, { where: { id: { $in: data.governDetailIds.split(',') } } });
ctx.body = { "message": "确认整治汇总下场所数据成功" };
ctx.status = 200;
} else {
ctx.body = { "message": "确认参数有误" };
ctx.status = 400;
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "确认整治汇总下场所数据失败" }
}
}
//获取安全隐患排查详细数据列表
async function getSecurityRiskList(ctx) {
try {
const { name, date, areaId, pageSize, pageIndex } = ctx.query;
const models = ctx.fs.dc.models;
let whereObj = {};
let wheres = {
audit1ManId: { $not: null },
audit2ManId: { $not: null }
}
if (areaId) {
wheres.regionId = areaId;
}
if (name)
whereObj = { name: { $like: `%${name}%` } }
let findObj = {
attributes: ['id', 'time', 'placeId', 'userId'],
where:
// time: {
// $between: range
// },
// regionId: areaId,
// audit1ManId: { $not: null },
// audit2ManId: { $not: null }
wheres
,
include: [{
required: true,
model: models.Places,
attributes: ['id', 'name'],
where: whereObj
}, {
required: true,
model: models.User,
as: 'user',
attributes: ['id', 'name', 'username', 'phone']
}],
order: [['time', 'desc']]
};
if (date) {
let range = [moment(date).startOf('day').format("YYYY-MM-DD HH:mm:ss"), moment(date).endOf('day').format("YYYY-MM-DD HH:mm:ss")]
findObj.where.time = {
$between: range
}
}
if (areaId) {
findObj.where.regionId = areaId
}
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
let rslt = await models.UserPlaceSecurityRecord.findAndCountAll(findObj);
ctx.status = 200;
ctx.body = rslt;
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取安全隐患排查详细数据列表失败"
}
}
}
//获取待处理数量
async function getHomeCount(ctx) {
try {
let { userId, departmentId, userRegionType } = ctx.params;
const models = ctx.fs.dc.models;
const departmentRes = await models.Department.findOne({ where: { id: departmentId } });
if (userRegionType != 2 && userRegionType != 3 && !departmentRes) {
ctx.body = { "message": "请求参数有误" };
ctx.status = 400;
} else {
//获取当前用户数据范围管辖区域内所有用户ID
let attentionRegionIds = [departmentRes.id];
let regionType = departmentRes.type;
while (attentionRegionIds.length && regionType && regionType < 4) {
const departmentChilds = await models.Department.findAll({ where: { dependence: { $in: attentionRegionIds } } });
regionType = departmentChilds.length ? departmentChilds[0].type : null;
attentionRegionIds = departmentChilds.map(d => d.id);
}
let users = await models.User.findAll({ where: { departmentId: { $in: attentionRegionIds } }, attributes: ['id'] });
let userIds = users.map(u => u.id);
let rslt = { recordCount: 0, reportCount: null }
if (userIds.length) {
let whereObj = {
userId: { $in: userIds },
rejectManId: null,
isDraft: false
}
if (userRegionType == 3) {
whereObj.audit1ManId = null;
} else {
whereObj.audit1ManId = { $not: null };
whereObj.audit2ManId = null;
}
let recordCount = await models.UserPlaceSecurityRecord.count({
where: whereObj
});
rslt.recordCount = recordCount;
if (userRegionType == 2) {
let reportCount = await models.ReportCollection.count({
where: {
userId: null,
regionId: departmentId
}
});
let reportRectify = await models.ReportRectify.findAll({
where: {
userId: null,
regionId: departmentId
}
});
let dateArr = [];
reportRectify.map(r => {
let date = moment(r.dateTime).format("YYYY-MM-DD");
if (!dateArr.includes(date)) {
dateArr.push(date)
}
})
rslt.reportCount = reportCount + dateArr.length;
}
}
ctx.status = 200;
ctx.body = rslt;
}
} catch (error) {
console.log(error)
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
"message": "获取待处理数量失败"
}
}
}
//每日汇总表上报
async function operateReport(ctx, next) {
try {
let { id, userId } = ctx.params;
const models = ctx.fs.dc.models;
await models.ReportCollection.update({
userId: userId
}, { where: { id: id } });
ctx.body = { "message": "每日汇总表上报成功" };
ctx.status = 200;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "每日汇总表上报失败" }
}
}
/**
* 根据筛选条件获取用户审核报表信息
* @query {
* approveUserId-审批人ID
* reportType-报表类型(1-整治汇总表,2-每日汇总表,null-整治汇总表+每日汇总表)
* timeRange-时间范围
* regionId-区域ID
* state-审批状态
* pageIndex-页码
* pageSize-页宽
* } ctx
*/
async function getApproveReportCollections(ctx, next) {
try {
const models = ctx.fs.dc.models;
const { approveUserId, reportType, timeRange, regionId, state, pageIndex, pageSize } = ctx.query;
let whereCondition = {};
if (approveUserId) {
let approveUser = await models.User.findOne({ where: { id: approveUserId } });
if (approveUser) {
//市级用户可以看到所有报表数据
const departmentRes = await models.Department.findOne({ where: { id: approveUser.departmentId } });
if (departmentRes.dependence) {
if (departmentRes.type = 2) {
//区县人员只能看见自己区县下的报表信息
whereCondition.regionId = departmentRes.id;
} else {
//其它层级无报表信息
ctx.status = 200;
ctx.body = {
"count": 0,
"rows": []
};
return;
}
}
if (regionId) {
let region = await models.Department.findOne({ where: { id: regionId } });
if (region) {
if (whereCondition.regionId && whereCondition.regionId != regionId) {
//区县人员只能看见自己区县下的报表信息
ctx.status = 200;
ctx.body = {
"count": 0,
"rows": []
};
return;
} else {
whereCondition.regionId = regionId;
}
} else {
ctx.status = 400;
ctx.body = { "message": "区域不存在!" }
return;
}
}
let times = timeRange;
if (timeRange && timeRange.indexOf(',')) { times = timeRange.split(',') }
if (times && times.length > 0) {
const len = times.length;
whereCondition.dateTime = {
$between: [
moment(times[0]).startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment(times[len - 1]).endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
};
}
switch (Number(state)) {
case 1: //待审批:无审核人员
whereCondition.userId = null;
break;
case 2://已审批:有审核人员
whereCondition.userId = { $not: null };
break;
default: break;
}
let findObj = {
where: whereCondition,
order: [["id", "desc"]],
include: [{
model: models.User,
attributes: ['name', 'username', 'phone']
}, {
model: models.Department,
attributes: ['id', 'name']
}]
};
if (Number(pageSize) > 0 && Number(pageIndex) >= 0) {
findObj.limit = Number(pageSize);
findObj.offset = Number(pageIndex) * Number(pageSize);
}
switch (Number(reportType)) {
case 1: //整治汇总表
ctx.body = await models.ReportRectify.findAndCountAll(findObj);
break;
case 2://每日汇总表
ctx.body = await models.ReportCollection.findAndCountAll(findObj);
break;
default: //整治汇总表+每日汇总表
const rectifies = await models.ReportRectify.findAndCountAll(findObj);
const collections = await models.ReportCollection.findAndCountAll(findObj);
ctx.body = {
"totalCount": rectifies.count + collections.count,
"totalRows": {
"rectify": rectifies,
"collection": collections
}
};
break;
}
ctx.status = 200;
} else {
ctx.status = 400;
ctx.body = { "message": "用户不存在!" }
}
} else {
ctx.status = 400;
ctx.body = { "message": "请传用户参数!" }
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "获取审批报表信息失败" }
}
}
/**
* 上报排查整治汇总表
* query{
* userId:1,//上报用户
* }
* body {
* governDetailIds:'1,2' //排查整治汇总返回数据id字符串
* }
*/
async function operateGovernReport(ctx, next) {
try {
let { userId } = ctx.params;
const data = ctx.request.body;
const models = ctx.fs.dc.models;
if (data.governDetailIds && data.governDetailIds.length > 0) {
await models.ReportRectify.update({
userId: userId
}, { where: { id: { $in: data.governDetailIds.split(',') } } });
ctx.body = { "message": "上报排查整治汇总表成功" };
ctx.status = 200;
} else {
ctx.body = { "message": "上报排查整治汇总表参数有误" };
ctx.status = 400;
}
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = { "message": "上报排查整治汇总表失败" }
}
}
module.exports = {
getDayReport,
getGovern,
getGovernDetail,
operateGovern,
getSecurityRiskList,
getHomeCount,
operateReport,
getApproveReportCollections,
operateGovernReport
};

37
api/app/lib/index.js

@ -1,9 +1,11 @@
'use strict'; 'use strict';
const routes = require('./routes'); const routes = require('./routes');
const fs = require('fs');
const path = require('path');
const authenticator = require('./middlewares/authenticator'); const authenticator = require('./middlewares/authenticator');
// const apiLog = require('./middlewares/api-log'); // const apiLog = require('./middlewares/api-log');
const businessRest = require('./middlewares/business-rest'); // const businessRest = require('./middlewares/business-rest');
module.exports.entry = function (app, router, opts) { module.exports.entry = function (app, router, opts) {
app.fs.logger.log('info', '[FS-AUTH]', 'Inject auth and api mv into router.'); app.fs.logger.log('info', '[FS-AUTH]', 'Inject auth and api mv into router.');
@ -13,24 +15,29 @@ module.exports.entry = function (app, router, opts) {
app.fs.api.logAttr = app.fs.api.logAttr || {}; app.fs.api.logAttr = app.fs.api.logAttr || {};
router.use(authenticator(app, opts)); router.use(authenticator(app, opts));
router.use(businessRest(app, router, opts)); // router.use(businessRest(app, router, opts));
// router.use(apiLog(app, opts)); // router.use(apiLog(app, opts));
router = routes(app, router, opts); router = routes(app, router, opts);
}; };
module.exports.models = function (dc) { // dc = { orm: Sequelize对象, ORM: Sequelize, models: {} } module.exports.models = function (dc) { // dc = { orm: Sequelize对象, ORM: Sequelize, models: {} }
require('./models/user')(dc); fs.readdirSync(path.join(__dirname, '/models')).forEach((filename) => {
require('./models/user_token')(dc); require(`./models/${filename}`)(dc)
require('./models/department')(dc); });
require('./models/resource')(dc);
require('./models/user_resource')(dc); const { User, Department, Report, FileType, Road, Files, FileRoad } = dc.models;
require('./models/places')(dc); // 定义外键
require('./models/user_placeSecurityRecord')(dc); User.belongsTo(Department, { foreignKey: 'departmentId', targetKey: 'id' });
require('./models/report_type')(dc); Department.hasMany(User, { foreignKey: 'departmentId', sourceKey: 'id' });
require('./models/report_downManage')(dc);
require('./models/department')(dc); // 定义外键
require('./models/report_configition')(dc); Report.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
require('./models/report_collection')(dc); User.hasMany(Report, { foreignKey: 'userId', sourceKey: 'id' });
require('./models/report_rectify')(dc);
Files.belongsTo(FileType, { foreignKey: 'fId', targetKey: 'fId' });
FileType.hasMany(Files, { foreignKey: 'fId', targetKey: 'fId' });
// Files.belongsTo(Road, { foreignKey: 'roadId', targetKey: 'id' });
// Road.hasMany(Files, { foreignKey: 'roadId', targetKey: 'id' });
}; };

996
api/app/lib/models/bridge.js

@ -0,0 +1,996 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Bridge = sequelize.define("bridge", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "bridge_id_uindex"
},
bridgeCode: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁代码",
primaryKey: false,
field: "bridge_code",
autoIncrement: false
},
bridgeName: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁名称",
primaryKey: false,
field: "bridge_name",
autoIncrement: false
},
centralStation: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "中心桩号",
primaryKey: false,
field: "central_station",
autoIncrement: false
},
crossingFigureType: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨越地物类型",
primaryKey: false,
field: "crossing_figure_type",
autoIncrement: false
},
crossingFigureName: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨越地物名称",
primaryKey: false,
field: "crossing_figure_name",
autoIncrement: false
},
natureOfCharges: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收费性质",
primaryKey: false,
field: "nature_of_charges",
autoIncrement: false
},
rampCode: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "匝道编码",
primaryKey: false,
field: "ramp_code",
autoIncrement: false
},
sectionType: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路段类型",
primaryKey: false,
field: "section_type",
autoIncrement: false
},
crossingFigureType1: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨越地物类型1",
primaryKey: false,
field: "crossing_figure_type_1",
autoIncrement: false
},
crossingFigureName1: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨越地物名称1",
primaryKey: false,
field: "crossing_figure_name_1",
autoIncrement: false
},
originalBridgeCode: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原桥梁代码",
primaryKey: false,
field: "original_bridge_code",
autoIncrement: false
},
whetherWideRoadAndNarrowBridge: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否宽路窄桥",
primaryKey: false,
field: "whether_wide_road_and_narrow_bridge",
autoIncrement: false
},
isItInTheDirectoryOfLongAndLongBridges: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否在长大桥梁目录中",
primaryKey: false,
field: "is_it_in_the_directory_of_long_and_long_bridges",
autoIncrement: false
},
whetherItIsACrossProvincialBridge: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否跨省桥梁",
primaryKey: false,
field: "whether_it_is_a_cross_provincial_bridge",
autoIncrement: false
},
interworkingType: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "互通类型",
primaryKey: false,
field: "interworking_type",
autoIncrement: false
},
interworkingForm: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "互通形式",
primaryKey: false,
field: "interworking_form",
autoIncrement: false
},
interworkingAndCrossoverMode: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "互通交叉方式",
primaryKey: false,
field: "interworking_and_crossover_mode",
autoIncrement: false
},
bridgeClassification: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁分类",
primaryKey: false,
field: "bridge_classification",
autoIncrement: false
},
totalLengthOfBridge: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁全长",
primaryKey: false,
field: "total_length_of_bridge",
autoIncrement: false
},
totalSpanLength: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径总长",
primaryKey: false,
field: "total_span_length",
autoIncrement: false
},
mainSpanOfMainBridge: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "主桥主跨",
primaryKey: false,
field: "main_span_of_main_bridge",
autoIncrement: false
},
numberOfMainBridgeHoles: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "主桥孔数",
primaryKey: false,
field: "number_of_main_bridge_holes",
autoIncrement: false
},
spanCombination: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合",
primaryKey: false,
field: "span_combination",
autoIncrement: false
},
bridgeProperties: {
index: 25,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁性质",
primaryKey: false,
field: "bridge_properties",
autoIncrement: false
},
designLoadClass: {
index: 26,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "设计荷载等级",
primaryKey: false,
field: "design_load_class",
autoIncrement: false
},
superstructure: {
index: 27,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上部结构",
primaryKey: false,
field: "superstructure",
autoIncrement: false
},
superstructureMaterials: {
index: 28,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上部结构材料",
primaryKey: false,
field: "superstructure_materials",
autoIncrement: false
},
bridgeDeckPavementType: {
index: 29,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥面铺装类型",
primaryKey: false,
field: "bridge_deck_pavement_type",
autoIncrement: false
},
bridgeDeckWidth: {
index: 30,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥面宽",
primaryKey: false,
field: "bridge_deck_width",
autoIncrement: false
},
clearWidthOfBridgeDeck: {
index: 31,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥面净宽",
primaryKey: false,
field: "clear_width_of_bridge_deck",
autoIncrement: false
},
clearanceUnderBridge: {
index: 32,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥下净空",
primaryKey: false,
field: "clearance_under_bridge",
autoIncrement: false
},
seismicGrade: {
index: 33,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "抗震等级",
primaryKey: false,
field: "seismic_grade",
autoIncrement: false
},
navigationClass: {
index: 34,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "通航等级",
primaryKey: false,
field: "navigation_class",
autoIncrement: false
},
abutmentType: {
index: 35,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥台类型",
primaryKey: false,
field: "abutment_type",
autoIncrement: false
},
pierType: {
index: 36,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥墩类型",
primaryKey: false,
field: "pier_type",
autoIncrement: false
},
typesOfPierAndAbutmentAntiCollisionFacilities: {
index: 37,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "墩台防撞设施类型",
primaryKey: false,
field: "types_of_pier_and_abutment_anti_collision_facilities",
autoIncrement: false
},
expansionJointType: {
index: 38,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "伸缩缝类型",
primaryKey: false,
field: "expansion_joint_type",
autoIncrement: false
},
supportType: {
index: 39,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "支座类型",
primaryKey: false,
field: "support_type",
autoIncrement: false
},
characteristicsOfCurvedSlope: {
index: 40,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "弯坡斜特征",
primaryKey: false,
field: "characteristics_of_curved_slope",
autoIncrement: false
},
bridgeHeight: {
index: 41,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桥梁高度",
primaryKey: false,
field: "bridge_height",
autoIncrement: false
},
sidewalkWidth: {
index: 42,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "人行道宽度",
primaryKey: false,
field: "sidewalk_width",
autoIncrement: false
},
constructionUnit: {
index: 43,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建设单位",
primaryKey: false,
field: "construction_unit",
autoIncrement: false
},
completionTime: {
index: 44,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建成时间",
primaryKey: false,
field: "completion_time",
autoIncrement: false
},
openingDate: {
index: 45,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "通车日期",
primaryKey: false,
field: "opening_date",
autoIncrement: false
},
reconstructionTime: {
index: 46,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改建时间",
primaryKey: false,
field: "reconstruction_time",
autoIncrement: false
},
totalCost: {
index: 47,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "总造价",
primaryKey: false,
field: "total_cost",
autoIncrement: false
},
nameOfDesignUnit: {
index: 48,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "设计单位名称",
primaryKey: false,
field: "name_of_design_unit",
autoIncrement: false
},
nameOfConstructionUnit: {
index: 49,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "施工单位名称",
primaryKey: false,
field: "name_of_construction_unit",
autoIncrement: false
},
nameOfSupervisionUnit: {
index: 50,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "监理单位名称",
primaryKey: false,
field: "name_of_supervision_unit",
autoIncrement: false
},
natureOfConstruction: {
index: 51,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建设性质",
primaryKey: false,
field: "nature_of_construction",
autoIncrement: false
},
evaluationDate: {
index: 52,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "评定日期",
primaryKey: false,
field: "evaluation_date",
autoIncrement: false
},
technicalConditionEvaluation: {
index: 53,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "技术状况评定",
primaryKey: false,
field: "technical_condition_evaluation",
autoIncrement: false
},
assessmentUnit: {
index: 54,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "评定单位",
primaryKey: false,
field: "assessment_unit",
autoIncrement: false
},
locationOfMajorDiseases: {
index: 55,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "主要病害位置",
primaryKey: false,
field: "location_of_major_diseases",
autoIncrement: false
},
diseaseDescription: {
index: 56,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "病害描述",
primaryKey: false,
field: "disease_description",
autoIncrement: false
},
takeControlMeasures: {
index: 57,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "采取管制措施",
primaryKey: false,
field: "take_control_measures",
autoIncrement: false
},
dateOfLastPeriodicInspection: {
index: 58,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "最近定期检查日期",
primaryKey: false,
field: "date_of_last_periodic_inspection",
autoIncrement: false
},
natureOfManagementAndMaintenanceUnit: {
index: 59,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "管养单位性质",
primaryKey: false,
field: "nature_of_management_and_maintenance_unit",
autoIncrement: false
},
managementAndMaintenanceUnit: {
index: 60,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "管养单位",
primaryKey: false,
field: "management_and_maintenance_unit",
autoIncrement: false
},
supervisionUnit: {
index: 61,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "监管单位",
primaryKey: false,
field: "supervision_unit",
autoIncrement: false
},
reconstructionConstructionUnit: {
index: 62,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改造施工单位",
primaryKey: false,
field: "reconstruction_construction_unit",
autoIncrement: false
},
whetherItIsASubsidyProjectOfTheMinistry: {
index: 63,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否部补助项目",
primaryKey: false,
field: "whether_it_is_a_subsidy_project_of_the_ministry",
autoIncrement: false
},
engineeringProperties: {
index: 64,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "工程性质",
primaryKey: false,
field: "engineering_properties",
autoIncrement: false
},
reconstructionPart: {
index: 65,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改造部位",
primaryKey: false,
field: "reconstruction_part",
autoIncrement: false
},
modificationCompletionDate: {
index: 66,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改造完工日期",
primaryKey: false,
field: "modification_completion_date",
autoIncrement: false
},
year1: {
index: 67,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年份1",
primaryKey: false,
field: "year_1",
autoIncrement: false
},
spanCombination1: {
index: 68,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合1",
primaryKey: false,
field: "span_combination_1",
autoIncrement: false
},
investment1: {
index: 69,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资1",
primaryKey: false,
field: "investment_1",
autoIncrement: false
},
year2: {
index: 70,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年份2",
primaryKey: false,
field: "year_2",
autoIncrement: false
},
spanCombination2: {
index: 71,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合2",
primaryKey: false,
field: "span_combination_2",
autoIncrement: false
},
investment2: {
index: 72,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资2",
primaryKey: false,
field: "investment_2",
autoIncrement: false
},
year3: {
index: 73,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年份3",
primaryKey: false,
field: "year_3",
autoIncrement: false
},
spanCombination3: {
index: 74,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合3",
primaryKey: false,
field: "span_combination_3",
autoIncrement: false
},
investment3: {
index: 75,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资3",
primaryKey: false,
field: "investment_3",
autoIncrement: false
},
year4: {
index: 76,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年份4",
primaryKey: false,
field: "year_4",
autoIncrement: false
},
spanCombination4: {
index: 77,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合4",
primaryKey: false,
field: "span_combination_4",
autoIncrement: false
},
investment4: {
index: 78,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资4",
primaryKey: false,
field: "investment_4",
autoIncrement: false
},
year5: {
index: 79,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年份5",
primaryKey: false,
field: "year_5",
autoIncrement: false
},
spanCombination5: {
index: 80,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "跨径组合5",
primaryKey: false,
field: "span_combination_5",
autoIncrement: false
},
investment5: {
index: 81,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资5",
primaryKey: false,
field: "investment_5",
autoIncrement: false
},
plannedFundCategory: {
index: 82,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划资金类别",
primaryKey: false,
field: "planned_fund_category",
autoIncrement: false
},
plannedYear: {
index: 83,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划年度",
primaryKey: false,
field: "planned_year",
autoIncrement: false
},
planDocumentNo: {
index: 84,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划文号",
primaryKey: false,
field: "plan_document_no",
autoIncrement: false
},
planItemUniqueCode: {
index: 85,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目唯一编码",
primaryKey: false,
field: "plan_item_unique_code",
autoIncrement: false
},
plannedProjectType: {
index: 86,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目类型",
primaryKey: false,
field: "planned_project_type",
autoIncrement: false
},
planProjectName: {
index: 87,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目名称",
primaryKey: false,
field: "plan_project_name",
autoIncrement: false
},
completionStatus: {
index: 88,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工情况",
primaryKey: false,
field: "completion_status",
autoIncrement: false
},
yearOfCompletion: {
index: 89,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工年度",
primaryKey: false,
field: "year_of_completion",
autoIncrement: false
},
reasonForChange: {
index: 90,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变更原因",
primaryKey: false,
field: "reason_for_change",
autoIncrement: false
},
changeTime: {
index: 91,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变更时间",
primaryKey: false,
field: "change_time",
autoIncrement: false
},
reportingUnit: {
index: 92,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "填报单位",
primaryKey: false,
field: "reporting_unit",
autoIncrement: false
},
remarks: {
index: 93,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "备注",
primaryKey: false,
field: "remarks",
autoIncrement: false
},
whetherOverpassBridge: {
index: 94,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否跨线桥",
primaryKey: false,
field: "whether_overpass_bridge",
autoIncrement: false
},
offLineBridgeOrNot: {
index: 95,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否线外桥",
primaryKey: false,
field: "off_line_bridge_or_not",
autoIncrement: false
},
whetherDangerousBridgeReconstruction: {
index: 96,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否危桥改造",
primaryKey: false,
field: "whether_dangerous_bridge_reconstruction",
autoIncrement: false
},
districtcounty: {
index: 97,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所在区县",
primaryKey: false,
field: "districtcounty",
autoIncrement: false
},
locationCity: {
index: 98,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所在地市",
primaryKey: false,
field: "location_city",
autoIncrement: false
}
}, {
tableName: "bridge",
comment: "",
indexes: []
});
dc.models.Bridge = Bridge;
return Bridge;
};

546
api/app/lib/models/bus_car.js

@ -0,0 +1,546 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const BusCar = sequelize.define("busCar", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "bus_car_id_uindex"
},
company: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属公司",
primaryKey: false,
field: "company",
autoIncrement: false
},
fleet: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属车队",
primaryKey: false,
field: "fleet",
autoIncrement: false
},
line: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属线路",
primaryKey: false,
field: "line",
autoIncrement: false
},
vehicleNumber: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆编号",
primaryKey: false,
field: "vehicle_number",
autoIncrement: false
},
vehicleLicensePlateNumber: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆牌照号",
primaryKey: false,
field: "vehicle_license_plate_number",
autoIncrement: false
},
operationCategory: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运营类别",
primaryKey: false,
field: "operation_category",
autoIncrement: false
},
serviceLife: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "已使用年限",
primaryKey: false,
field: "service_life",
autoIncrement: false
},
engineModel: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机型号",
primaryKey: false,
field: "engine_model",
autoIncrement: false
},
vehicleModel: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆型号",
primaryKey: false,
field: "vehicle_model",
autoIncrement: false
},
vehicleCategory: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆类别",
primaryKey: false,
field: "vehicle_category",
autoIncrement: false
},
vehicleStatus: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆状态",
primaryKey: false,
field: "vehicle_status",
autoIncrement: false
},
dateOfEntry: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "入户日期",
primaryKey: false,
field: "date_of_entry",
autoIncrement: false
},
purchaseDate: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "购进日期",
primaryKey: false,
field: "purchase_date",
autoIncrement: false
},
energyConsumptionType: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "能耗类型",
primaryKey: false,
field: "energy_consumption_type",
autoIncrement: false
},
numberOfStandardUnits: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "标台数",
primaryKey: false,
field: "number_of_standard_units",
autoIncrement: false
},
maintenanceUnit: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "维保单位",
primaryKey: false,
field: "maintenance_unit",
autoIncrement: false
},
vehicleType: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆类型",
primaryKey: false,
field: "vehicle_type",
autoIncrement: false
},
brandAndModel: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "厂牌型号",
primaryKey: false,
field: "brand_and_model",
autoIncrement: false
},
manufacturer: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "生产厂家",
primaryKey: false,
field: "manufacturer",
autoIncrement: false
},
drivingLicenseNo: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "行驶证编号",
primaryKey: false,
field: "driving_license_no",
autoIncrement: false
},
engineNumber: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机编号",
primaryKey: false,
field: "engine_number",
autoIncrement: false
},
mainEnergyConsumption: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "主能耗",
primaryKey: false,
field: "main_energy_consumption",
autoIncrement: false
},
secondaryEnergyConsumption: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "副能耗",
primaryKey: false,
field: "secondary_energy_consumption",
autoIncrement: false
},
emissionStandard: {
index: 25,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "排放标准",
primaryKey: false,
field: "emission_standard",
autoIncrement: false
},
startDate: {
index: 26,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "启用日期",
primaryKey: false,
field: "start_date",
autoIncrement: false
},
lastTransferDate: {
index: 27,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "最近一次调动日期",
primaryKey: false,
field: "last_transfer_date",
autoIncrement: false
},
conductor: {
index: 28,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车长",
primaryKey: false,
field: "conductor",
autoIncrement: false
},
vehicleWidth: {
index: 29,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车宽",
primaryKey: false,
field: "vehicle_width",
autoIncrement: false
},
carHeight: {
index: 30,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车高",
primaryKey: false,
field: "car_height",
autoIncrement: false
},
approvedPassengerCapacity: {
index: 31,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "核定载客数",
primaryKey: false,
field: "approved_passenger_capacity",
autoIncrement: false
},
vehicleIdentificationNumber: {
index: 32,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆识别号",
primaryKey: false,
field: "vehicle_identification_number",
autoIncrement: false
},
gearboxBrand: {
index: 33,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变速箱品牌",
primaryKey: false,
field: "gearbox_brand",
autoIncrement: false
},
manualCarWashingFee: {
index: 34,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "人工洗车费",
primaryKey: false,
field: "manual_car_washing_fee",
autoIncrement: false
},
laborCost: {
index: 35,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "劳务费",
primaryKey: false,
field: "labor_cost",
autoIncrement: false
},
curbWeight: {
index: 36,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "整备质量",
primaryKey: false,
field: "curb_weight",
autoIncrement: false
},
totalMass: {
index: 37,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "总质量",
primaryKey: false,
field: "total_mass",
autoIncrement: false
},
airConditioningTemperature: {
index: 38,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "空调温度",
primaryKey: false,
field: "air_conditioning_temperature",
autoIncrement: false
},
airConditionedCarOrNot: {
index: 39,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否空调车",
primaryKey: false,
field: "air_conditioned_car_or_not",
autoIncrement: false
},
turnOnTheAirConditioningTemperature: {
index: 40,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开空调温度",
primaryKey: false,
field: "turn_on_the_air_conditioning_temperature",
autoIncrement: false
},
power: {
index: 41,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "功率",
primaryKey: false,
field: "power",
autoIncrement: false
},
transmission: {
index: 42,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变速器",
primaryKey: false,
field: "transmission",
autoIncrement: false
},
seatingCapacity: {
index: 43,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "座位数",
primaryKey: false,
field: "seating_capacity",
autoIncrement: false
},
airConditioningBrand: {
index: 44,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "空调品牌",
primaryKey: false,
field: "air_conditioning_brand",
autoIncrement: false
},
seatType: {
index: 45,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "座椅类型",
primaryKey: false,
field: "seat_type",
autoIncrement: false
},
tireSpecifications: {
index: 46,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "轮胎规格",
primaryKey: false,
field: "tire_specifications",
autoIncrement: false
},
roadTransportCertificateNo: {
index: 47,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "道路运输证号",
primaryKey: false,
field: "road_transport_certificate_no",
autoIncrement: false
},
parkingPoint: {
index: 48,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "停放点",
primaryKey: false,
field: "parking_point",
autoIncrement: false
},
carWashingType: {
index: 49,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "洗车类型",
primaryKey: false,
field: "car_washing_type",
autoIncrement: false
},
maintenanceFreeWheelEnd: {
index: 50,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "免维护轮端",
primaryKey: false,
field: "maintenance_free_wheel_end",
autoIncrement: false
},
firstGuaranteeDate: {
index: 51,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "首保日期",
primaryKey: false,
field: "first_guarantee_date",
autoIncrement: false
},
dateOfRenovation: {
index: 52,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "整修日期",
primaryKey: false,
field: "date_of_renovation",
autoIncrement: false
},
motorVehicleOwner: {
index: 53,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "机动车所有人",
primaryKey: false,
field: "motor_vehicle_owner",
autoIncrement: false
}
}, {
tableName: "bus_car",
comment: "",
indexes: []
});
dc.models.BusCar = BusCar;
return BusCar;
};

256
api/app/lib/models/bus_line.js

@ -0,0 +1,256 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const BusLine = sequelize.define("busLine", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "bus_line_id_uindex"
},
company: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "公司",
primaryKey: false,
field: "company",
autoIncrement: false
},
fleet: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车队",
primaryKey: false,
field: "fleet",
autoIncrement: false
},
carCaptain: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车队长",
primaryKey: false,
field: "car_captain",
autoIncrement: false
},
assistantCarCaptain: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "副车队长",
primaryKey: false,
field: "assistant_car_captain",
autoIncrement: false
},
officeLocation: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "办公地点",
primaryKey: false,
field: "office_location",
autoIncrement: false
},
lineName: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路名称",
primaryKey: false,
field: "line_name",
autoIncrement: false
},
lineType: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路类型",
primaryKey: false,
field: "line_type",
autoIncrement: false
},
lineDivision: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "线路划分",
primaryKey: false,
field: "line_division",
autoIncrement: false
},
gpsNumber: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "GPS编号",
primaryKey: false,
field: "gps_number",
autoIncrement: false
},
startingPointEndPoint: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "起点终点",
primaryKey: false,
field: "starting_point_end_point",
autoIncrement: false
},
numberOfVehicles: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆数",
primaryKey: false,
field: "number_of_vehicles",
autoIncrement: false
},
totalKilometers: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "全程公里数",
primaryKey: false,
field: "total_kilometers",
autoIncrement: false
},
ticketPrice: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "票价",
primaryKey: false,
field: "ticket_price",
autoIncrement: false
},
openingTime: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开通时间",
primaryKey: false,
field: "opening_time",
autoIncrement: false
},
runningTime: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运行时间",
primaryKey: false,
field: "running_time",
autoIncrement: false
},
openingTimeSummer: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开班时间夏令",
primaryKey: false,
field: "opening_time_summer",
autoIncrement: false
},
shiftClosingTimeSummer: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收班时间夏令",
primaryKey: false,
field: "shift_closing_time_summer",
autoIncrement: false
},
openingTimeWinter: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "开班时间冬令",
primaryKey: false,
field: "opening_time_winter",
autoIncrement: false
},
shiftClosingTimeWinter: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收班时间冬令",
primaryKey: false,
field: "shift_closing_time_winter",
autoIncrement: false
},
uplinkOfStationsAlongTheWay: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "沿途站点上行",
primaryKey: false,
field: "uplink_of_stations_along_the_way",
autoIncrement: false
},
downlinkOfStationsAlongTheWay: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "沿途站点下行",
primaryKey: false,
field: "downlink_of_stations_along_the_way",
autoIncrement: false
},
area: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属区域",
primaryKey: false,
field: "area",
autoIncrement: false
},
remarks: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "备注",
primaryKey: false,
field: "remarks",
autoIncrement: false
}
}, {
tableName: "bus_line",
comment: "",
indexes: []
});
dc.models.BusLine = BusLine;
return BusLine;
};

15
api/app/lib/models/department.js

@ -28,18 +28,18 @@ module.exports = dc => {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "上级部门/从属", comment: null,
primaryKey: false, primaryKey: false,
field: "dependence", field: "dependence",
autoIncrement: false autoIncrement: false
}, },
type: { delete: {
type: DataTypes.INTEGER, type: DataTypes.BOOLEAN,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
comment: "市1,区县2,乡镇3,村4", comment: null,
primaryKey: false, primaryKey: false,
field: "type", field: "delete",
autoIncrement: false autoIncrement: false
} }
}, { }, {
@ -48,10 +48,5 @@ module.exports = dc => {
indexes: [] indexes: []
}); });
dc.models.Department = Department; dc.models.Department = Department;
const User = dc.models.User;
User.belongsTo(Department, { foreignKey: 'departmentId', targetKey: 'id' });
Department.hasMany(User, { foreignKey: 'departmentId', sourceKey: 'id' });
return Department; return Department;
}; };

31
api/app/lib/models/file-road.js

@ -0,0 +1,31 @@
'use strict';
module.exports = function (dc) {
const FileRoad = dc.orm.define(
'fileRoad',
{
rId: {
field: 'id',
type: dc.ORM.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
roadName: {
field: 'road_name',
type: dc.ORM.STRING,
},
originalData: {
field: 'original_data',
type: dc.ORM.STRING,
},
},
{
tableName: 'file_road'
}
);
dc.models.FileRoad = FileRoad;
return FileRoad;
};

32
api/app/lib/models/file-type.js

@ -0,0 +1,32 @@
'use strict';
module.exports = function (dc) {
const FileType = dc.orm.define(
'fileType',
{
fId: {
field: 'id',
type: dc.ORM.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
fileType: {
field: 'file_type',
type: dc.ORM.STRING,
},
rId: {
field: 'file_road',
type: dc.ORM.INTEGER,
allowNull: false
},
},
{
tableName: 'file_type'
}
);
dc.models.FileType = FileType;
return FileType;
};

73
api/app/lib/models/files.js

@ -0,0 +1,73 @@
'use strict';
module.exports = function (dc) {
const Files = dc.orm.define(
'files',
{
id: {
field: 'id',
type: dc.ORM.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
fId: {
field: 'file_type',
type: dc.ORM.INTEGER
},
roadId: {
field: 'road_id',
type: dc.ORM.INTEGER
},
uploaderId: {
field: 'uploader_id',
type: dc.ORM.INTEGER
},
uploaderName: {
field: 'uploader_name',
type: dc.ORM.INTEGER
},
startDate: {
field: 'start_date',
type: dc.ORM.DATE,
},
endDate: {
field: 'end_date',
type: dc.ORM.DATE,
},
createDate: {
field: 'create_date',
type: dc.ORM.DATE,
},
fileSize: {
field: 'file_size',
type: dc.ORM.INTEGER,
},
fileName: {
field: 'file_name',
type: dc.ORM.STRING,
},
fileUrl: {
field: 'file_url',
type: dc.ORM.STRING,
},
fileExt: {
field: 'file_ext',
type: dc.ORM.STRING,
},
isDelete: {
field: 'is_delete',
type: dc.ORM.BOOLEAN,
},
},
{
tableName: 'files'
}
);
dc.models.Files = Files;
return Files;
};

316
api/app/lib/models/municipal_business.js

@ -0,0 +1,316 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const MunicipalBusiness = sequelize.define("municipalBusiness", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "municipal_business_id_uindex"
},
nameOfBusinessOwner: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "业户名称",
primaryKey: false,
field: "name_of_business_owner",
autoIncrement: false
},
productName: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "品名",
primaryKey: false,
field: "product_name",
autoIncrement: false
},
creditSocialCode: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "信用社会代码",
primaryKey: false,
field: "credit_social_code",
autoIncrement: false
},
administrativeDivision: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "行政区划",
primaryKey: false,
field: "administrative_division",
autoIncrement: false
},
economicNature: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经济性质",
primaryKey: false,
field: "economic_nature",
autoIncrement: false
},
address: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "地址",
primaryKey: false,
field: "address",
autoIncrement: false
},
contactNumber: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "联系电话",
primaryKey: false,
field: "contact_number",
autoIncrement: false
},
email: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "电子邮箱",
primaryKey: false,
field: "email",
autoIncrement: false
},
legalRepresentative: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "法定代表人",
primaryKey: false,
field: "legal_representative",
autoIncrement: false
},
typeOfLegalPersonCertificate: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "法人证件类型",
primaryKey: false,
field: "type_of_legal_person_certificate",
autoIncrement: false
},
natureOfTransportation: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运输性质",
primaryKey: false,
field: "nature_of_transportation",
autoIncrement: false
},
legalPersonCertificateNumber: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "法人证件号码",
primaryKey: false,
field: "legal_person_certificate_number",
autoIncrement: false
},
telephoneNumberOfLegalRepresentative: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "法定代表人电话",
primaryKey: false,
field: "telephone_number_of_legal_representative",
autoIncrement: false
},
nameOfThePersonInChargeOfTheBusiness: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营业户负责人姓名",
primaryKey: false,
field: "name_of_the_person_in_charge_of_the_business",
autoIncrement: false
},
telephoneNumberOfThePersonInChargeOfTheBusiness: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营业户负责人电话号码",
primaryKey: false,
field: "telephone_number_of_the_person_in_charge_of_the_business",
autoIncrement: false
},
handledBy: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经办人",
primaryKey: false,
field: "handled_by",
autoIncrement: false
},
phoneNumberOfHandler: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经办人电话",
primaryKey: false,
field: "phone_number_of_handler",
autoIncrement: false
},
natureOfBusiness: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营范围",
primaryKey: false,
field: "nature_of_business",
autoIncrement: false
},
businessStatus: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营状态",
primaryKey: false,
field: "business_status",
autoIncrement: false
},
businessLicenseNo: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营许可证号",
primaryKey: false,
field: "business_license_no",
autoIncrement: false
},
fromTheExpiryDate: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "有效期起",
primaryKey: false,
field: "from_the_expiry_date",
autoIncrement: false
},
expiryDate: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "有效期止",
primaryKey: false,
field: "expiry_date",
autoIncrement: false
},
issuingAuthority: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发证机构",
primaryKey: false,
field: "issuing_authority",
autoIncrement: false
},
dateOfIssuance: {
index: 25,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "核发日期",
primaryKey: false,
field: "date_of_issuance",
autoIncrement: false
},
licenseCategory: {
index: 26,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "证照类别",
primaryKey: false,
field: "license_category",
autoIncrement: false
},
licenseIssuanceType: {
index: 27,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "证照发放类型",
primaryKey: false,
field: "license_issuance_type",
autoIncrement: false
},
numberOfSharedVehicles: {
index: 28,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "共有车辆数",
primaryKey: false,
field: "number_of_shared_vehicles",
autoIncrement: false
},
creationDate: {
index: 29,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "创建日期",
primaryKey: false,
field: "creation_date",
autoIncrement: false
},
type: {
index: 30,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "类型 出租车/危货",
primaryKey: false,
field: "type",
autoIncrement: false
}
}, {
tableName: "municipal_business",
comment: "",
indexes: []
});
dc.models.MunicipalBusiness = MunicipalBusiness;
return MunicipalBusiness;
};

426
api/app/lib/models/municipal_vehicle.js

@ -0,0 +1,426 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const MunicipalVehicle = sequelize.define("municipalVehicle", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "municipal_vehicle_id_uindex"
},
nameOfBusinessOwner: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "业户名称",
primaryKey: false,
field: "name_of_business_owner",
autoIncrement: false
},
productName: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "品名",
primaryKey: false,
field: "product_name",
autoIncrement: false
},
vehicleRegistry: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车籍地",
primaryKey: false,
field: "vehicle_registry",
autoIncrement: false
},
licensePlateNumber: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车牌号",
primaryKey: false,
field: "license_plate_number",
autoIncrement: false
},
fuelType: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "燃料类型",
primaryKey: false,
field: "fuel_type",
autoIncrement: false
},
address: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "住址",
primaryKey: false,
field: "address",
autoIncrement: false
},
economicNature: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经济性质",
primaryKey: false,
field: "economic_nature",
autoIncrement: false
},
approvedPassengerCapacity: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "核定载客位数",
primaryKey: false,
field: "approved_passenger_capacity",
autoIncrement: false
},
approvedLoadMass: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "核定载质量",
primaryKey: false,
field: "approved_load_mass",
autoIncrement: false
},
numberOfVehicleAxles: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆车轴数",
primaryKey: false,
field: "number_of_vehicle_axles",
autoIncrement: false
},
vehicleBrand: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆厂牌",
primaryKey: false,
field: "vehicle_brand",
autoIncrement: false
},
natureOfBusiness: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营范围",
primaryKey: false,
field: "nature_of_business",
autoIncrement: false
},
vehicleOperationStatus: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆营运状态",
primaryKey: false,
field: "vehicle_operation_status",
autoIncrement: false
},
busTypeAndClass: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "客车类型与等级",
primaryKey: false,
field: "bus_type_and_class",
autoIncrement: false
},
annualReviewResults: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "年审结果",
primaryKey: false,
field: "annual_review_results",
autoIncrement: false
},
dateOfThisAnnualReview: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "本次年审日期",
primaryKey: false,
field: "date_of_this_annual_review",
autoIncrement: false
},
dateOfNextAnnualReview: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "下次年审日期",
primaryKey: false,
field: "date_of_next_annual_review",
autoIncrement: false
},
dateOfRegistration: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "注册登记日期",
primaryKey: false,
field: "date_of_registration",
autoIncrement: false
},
sourceOfTransportationCapacity: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "运力来源",
primaryKey: false,
field: "source_of_transportation_capacity",
autoIncrement: false
},
fromTheExpiryDate: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "有效期起",
primaryKey: false,
field: "from_the_expiry_date",
autoIncrement: false
},
expiryDate: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "有效期止",
primaryKey: false,
field: "expiry_date",
autoIncrement: false
},
engineDisplacement: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机排量",
primaryKey: false,
field: "engine_displacement",
autoIncrement: false
},
engineNumber: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "发动机号",
primaryKey: false,
field: "engine_number",
autoIncrement: false
},
vehicleEnginePower: {
index: 25,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆发动机功率",
primaryKey: false,
field: "vehicle_engine_power",
autoIncrement: false
},
businessLicenseNo: {
index: 26,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营许可证号",
primaryKey: false,
field: "business_license_no",
autoIncrement: false
},
licensePlateColor: {
index: 27,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车牌颜色",
primaryKey: false,
field: "license_plate_color",
autoIncrement: false
},
totalVehicleMass: {
index: 28,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆总质量",
primaryKey: false,
field: "total_vehicle_mass",
autoIncrement: false
},
totalQuasiTractionMassOfVehicle: {
index: 29,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆准牵引总质量",
primaryKey: false,
field: "total_quasi_traction_mass_of_vehicle",
autoIncrement: false
},
roadTransportCertificateNo: {
index: 30,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "道路运输证号",
primaryKey: false,
field: "road_transport_certificate_no",
autoIncrement: false
},
vehicleHeight: {
index: 31,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆车高",
primaryKey: false,
field: "vehicle_height",
autoIncrement: false
},
vehicleConductor: {
index: 32,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆车长",
primaryKey: false,
field: "vehicle_conductor",
autoIncrement: false
},
vehicleWidth: {
index: 33,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆车宽",
primaryKey: false,
field: "vehicle_width",
autoIncrement: false
},
vehicleType: {
index: 34,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆类型",
primaryKey: false,
field: "vehicle_type",
autoIncrement: false
},
vehicleTypeWithDrivingLicense: {
index: 35,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "行驶证车辆类型",
primaryKey: false,
field: "vehicle_type_with_driving_license",
autoIncrement: false
},
vehicleWheelbase: {
index: 36,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车辆轴距",
primaryKey: false,
field: "vehicle_wheelbase",
autoIncrement: false
},
ratingDate: {
index: 37,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "等级评定日期",
primaryKey: false,
field: "rating_date",
autoIncrement: false
},
technicalEvaluationGrade: {
index: 38,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "技术评定等级",
primaryKey: false,
field: "technical_evaluation_grade",
autoIncrement: false
},
nextRatingDate: {
index: 39,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "下次等级评定日期",
primaryKey: false,
field: "next_rating_date",
autoIncrement: false
},
creationDate: {
index: 40,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "创建日期",
primaryKey: false,
field: "creation_date",
autoIncrement: false
},
type: {
index: 41,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "类型 出租车/危货",
primaryKey: false,
field: "type",
autoIncrement: false
}
}, {
tableName: "municipal_vehicle",
comment: "",
indexes: []
});
dc.models.MunicipalVehicle = MunicipalVehicle;
return MunicipalVehicle;
};

206
api/app/lib/models/overspeed.js

@ -0,0 +1,206 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Overspeed = sequelize.define("overspeed", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "overspeed_id_uindex"
},
districtcounty: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "区/县",
primaryKey: false,
field: "districtcounty",
autoIncrement: false
},
nameOfInspectionPoint: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "检测点名称",
primaryKey: false,
field: "name_of_inspection_point",
autoIncrement: false
},
licensePlate: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车牌号码",
primaryKey: false,
field: "license_plate",
autoIncrement: false
},
numberOfAxles: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车轴数",
primaryKey: false,
field: "number_of_axles",
autoIncrement: false
},
overrunRate: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "超限率",
primaryKey: false,
field: "overrun_rate",
autoIncrement: false
},
overrunWeight: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "超限重量",
primaryKey: false,
field: "overrun_weight",
autoIncrement: false
},
grossVehicleWeight: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车货总重",
primaryKey: false,
field: "gross_vehicle_weight",
autoIncrement: false
},
vehicleCargoWeightLimit: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车货限重",
primaryKey: false,
field: "vehicle_cargo_weight_limit",
autoIncrement: false
},
testTime: {
index: 10,
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: "检测时间",
primaryKey: false,
field: "test_time",
autoIncrement: false
},
nameOfBusinessOwner: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营业户名称",
primaryKey: false,
field: "name_of_business_owner",
autoIncrement: false
},
businessAddress: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经营业户地址",
primaryKey: false,
field: "business_address",
autoIncrement: false
},
notifier: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "通知人",
primaryKey: false,
field: "notifier",
autoIncrement: false
},
notificationMethod: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "通知方式",
primaryKey: false,
field: "notification_method",
autoIncrement: false
},
notificationResults: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "通知结果",
primaryKey: false,
field: "notification_results",
autoIncrement: false
},
processingTime: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "处理时间",
primaryKey: false,
field: "processing_time",
autoIncrement: false
},
deductPoints: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "扣分",
primaryKey: false,
field: "deduct_points",
autoIncrement: false
},
fine: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "罚款",
primaryKey: false,
field: "fine",
autoIncrement: false
},
remarks: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "备注",
primaryKey: false,
field: "remarks",
autoIncrement: false
}
}, {
tableName: "overspeed",
comment: "",
indexes: []
});
dc.models.Overspeed = Overspeed;
return Overspeed;
};

61
api/app/lib/models/places.js

@ -1,61 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Places = sequelize.define("places", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "places_id_uindex"
},
name: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "场所名称",
primaryKey: false,
field: "name",
autoIncrement: false
},
describe: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "描述",
primaryKey: false,
field: "describe",
autoIncrement: false
},
userId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "userId",
autoIncrement: false,
references: {
key: "id",
model: "user"
}
},
}, {
tableName: "places",
comment: "",
indexes: []
});
dc.models.Places = Places;
const User = dc.models.User;
Places.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
User.hasMany(Places, { foreignKey: 'userId', sourceKey: 'id' });
return Places;
};

47
api/app/lib/models/post.js

@ -1,47 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Post = sequelize.define("post", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "post_id_uindex"
},
name: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "name",
autoIncrement: false
},
departmentId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "department_id",
autoIncrement: false,
references: {
key: "id",
model: "department"
}
}
}, {
tableName: "post",
comment: "",
indexes: []
});
dc.models.Post = Post;
return Post;
};

51
api/app/lib/models/post_resource.js

@ -1,51 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const PostResource = sequelize.define("postResource", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "post_resource_id_uindex"
},
postId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "post_id",
autoIncrement: false,
references: {
key: "id",
model: "post"
}
},
resource: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "resource",
autoIncrement: false,
references: {
key: "code",
model: "resource"
}
}
}, {
tableName: "post_resource",
comment: "",
indexes: []
});
dc.models.PostResource = PostResource;
return PostResource;
};

136
api/app/lib/models/project.js

@ -0,0 +1,136 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Project = sequelize.define("project", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "project_id_uindex"
},
entryName: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "项目名称",
primaryKey: false,
field: "entry_name",
autoIncrement: false
},
projectMileage: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "工程里程",
primaryKey: false,
field: "project_mileage",
autoIncrement: false
},
investment: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "投资",
primaryKey: false,
field: "investment",
autoIncrement: false
},
buildUnit: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建设单位",
primaryKey: false,
field: "build_unit",
autoIncrement: false
},
constructionControlUnit: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "监理单位",
primaryKey: false,
field: "construction_control_unit",
autoIncrement: false
},
designUnit: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "设计单位",
primaryKey: false,
field: "design_unit",
autoIncrement: false
},
constructionUnit: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "施工单位",
primaryKey: false,
field: "construction_unit",
autoIncrement: false
},
supervisorAndSupervisor: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "监督负责人及监督人员",
primaryKey: false,
field: "supervisor_and_supervisor",
autoIncrement: false
},
projectProgress: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "项目进展情况",
primaryKey: false,
field: "project_progress",
autoIncrement: false
},
done: {
index: 11,
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "done",
autoIncrement: false
},
type: {
index: 12,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "类型 道路:road / 桥梁:bridge",
primaryKey: false,
field: "type",
autoIncrement: false
}
}, {
tableName: "project",
comment: "",
indexes: []
});
dc.models.Project = Project;
return Project;
};

56
api/app/lib/models/publicity.js

@ -0,0 +1,56 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Publicity = sequelize.define("publicity", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "publicity_id_uindex"
},
name: {
index: 2,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "name",
autoIncrement: false
},
video: {
index: 3,
type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "video",
autoIncrement: false
},
enable: {
index: 4,
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true,
comment: null,
primaryKey: false,
field: "enable",
autoIncrement: false
}
}, {
tableName: "publicity",
comment: "",
indexes: []
});
dc.models.Publicity = Publicity;
return Publicity;
};

34
api/app/lib/models/region_type.js

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

176
api/app/lib/models/report.js

@ -0,0 +1,176 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Report = sequelize.define("report", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "report_id_uindex"
},
reportType: {
index: 2,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "上报类型 巡查:patrol / 养护:conserve",
primaryKey: false,
field: "report_type",
autoIncrement: false
},
projectType: {
index: 3,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "工程类型 道路:road / 桥梁:birdge / 涵洞:culvert",
primaryKey: false,
field: "project_type",
autoIncrement: false
},
road: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "road",
autoIncrement: false
},
roadSectionStart: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "road_section_start",
autoIncrement: false
},
roadSectionEnd: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "road_section_end",
autoIncrement: false
},
longitude: {
index: 7,
type: DataTypes.DOUBLE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "longitude",
autoIncrement: false
},
latitude: {
index: 8,
type: DataTypes.DOUBLE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "latitude",
autoIncrement: false
},
content: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "content",
autoIncrement: false
},
scenePic: {
index: 10,
type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "scene_pic",
autoIncrement: false
},
conserveBeforePic: {
index: 11,
type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "conserve_before_pic",
autoIncrement: false
},
conserveUnderwayPic: {
index: 12,
type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "conserve_underway_pic",
autoIncrement: false
},
conserveAfterPic: {
index: 13,
type: DataTypes.ARRAY(DataTypes.STRING),
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "conserve_after_pic",
autoIncrement: false
},
userId: {
index: 14,
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "user_id",
autoIncrement: false
},
time: {
index: 15,
type: DataTypes.DATE,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "time",
autoIncrement: false
},
address: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "address",
autoIncrement: false
},
}, {
tableName: "report",
comment: "",
indexes: []
});
dc.models.Report = Report;
return Report;
};

88
api/app/lib/models/report_collection.js

@ -1,88 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportCollection = sequelize.define("reportCollection", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "report_collection_id_uindex"
},
regionId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "县区(id)",
primaryKey: false,
field: "regionId",
autoIncrement: false
},
dateTime: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "dateTime",
autoIncrement: false
},
placeCount: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "场所总数",
primaryKey: false,
field: "placeCount",
autoIncrement: false
},
hiddenDangerCount: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "排查隐患总数",
primaryKey: false,
field: "hiddenDangerCount",
autoIncrement: false
},
hiddenDangerItem12Count: {
type: DataTypes.JSON,
allowNull: true,
defaultValue: null,
comment: "排查隐患详细类目 1-12 项 总数",
primaryKey: false,
field: "hiddenDangerItem12Count",
autoIncrement: false
},
userId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "填报人(县区联络员)",
primaryKey: false,
field: "userId",
autoIncrement: false
}
}, {
tableName: "report_collection",
comment: "",
indexes: []
});
dc.models.ReportCollection = ReportCollection;
const User = dc.models.User;
ReportCollection.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
User.hasMany(ReportCollection, { foreignKey: 'userId', sourceKey: 'id' });
const Department = dc.models.Department;
ReportCollection.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' });
Department.hasMany(ReportCollection, { foreignKey: 'regionId', sourceKey: 'id' });
return ReportCollection;
};

74
api/app/lib/models/report_configition.js

@ -1,74 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportConfigition = sequelize.define("reportConfigition", {
reportName: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "报表名称",
primaryKey: false,
field: "reportName",
autoIncrement: false
},
regionId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "区域id",
primaryKey: false,
field: "regionId",
autoIncrement: false
},
reportTypeId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "报表类型",
primaryKey: false,
field: "reportTypeId",
autoIncrement: false,
references: {
key: "id",
model: "reportType"
}
},
excuteTime: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "生成时间 cron表达式",
primaryKey: false,
field: "excuteTime",
autoIncrement: false
},
isEnable: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: null,
comment: "启用状态",
primaryKey: false,
field: "isEnable",
autoIncrement: false
},
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: "序号",
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "report_configition_id_uindex"
}
}, {
tableName: "report_configition",
comment: "",
indexes: []
});
dc.models.ReportConfigition = ReportConfigition;
return ReportConfigition;
};

69
api/app/lib/models/report_countyCollect.js

@ -1,69 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportCountyCollect = sequelize.define("reportCountyCollect", {
id: {
type: DataTypes.BIGINT,
allowNull: true,
defaultValue: null,
comment: "序号",
primaryKey: false,
field: "id",
autoIncrement: false
},
name: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "名称",
primaryKey: false,
field: "name",
autoIncrement: false
},
address: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "地址",
primaryKey: false,
field: "address",
autoIncrement: false
},
hiddenDanger: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "排查发现隐患",
primaryKey: false,
field: "hiddenDanger",
autoIncrement: false
},
correctiveAction: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "采取措施",
primaryKey: false,
field: "correctiveAction",
autoIncrement: false
},
punishment: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "实施处罚,强制措施情况",
primaryKey: false,
field: "punishment",
autoIncrement: false
}
}, {
tableName: "report_countyCollect",
comment: "",
indexes: []
});
dc.models.ReportCountyCollect = ReportCountyCollect;
return ReportCountyCollect;
};

82
api/app/lib/models/report_downManage.js

@ -1,82 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportDownManage = sequelize.define("reportDownManage", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: "nextval(\"report_downManage_id_seq\"::regclass)",
comment: null,
primaryKey: true,
field: "id",
autoIncrement: false,
unique: "report_downmanage_id_uindex"
},
reportName: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "报表名称",
primaryKey: false,
field: "reportName",
autoIncrement: false
},
regionId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: "区域id",
primaryKey: false,
field: "regionId",
autoIncrement: false,
references: {
key: "id",
model: "department"
}
},
reportTypeId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: "报表类型id\n1.整治表\n2.汇总表",
primaryKey: false,
field: "reportTypeId",
autoIncrement: false,
references: {
key: "id",
model: "reportType"
}
},
filePath: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "文件路径",
primaryKey: false,
field: "filePath",
autoIncrement: false,
},
creatTime: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "creatTime",
autoIncrement: false
}
}, {
tableName: "report_downManage",
comment: "",
indexes: []
});
dc.models.ReportDownManage = ReportDownManage;
const { ReportType, Department } = dc.models;
ReportDownManage.belongsTo(ReportType, { foreignKey: 'reportTypeId', targetKey: 'id' });
ReportDownManage.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' });
return ReportDownManage;
};

115
api/app/lib/models/report_rectify.js

@ -1,115 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportRectify = sequelize.define("reportRectify", {
id: {
type: DataTypes.BIGINT,
allowNull: true,
defaultValue: "nextval(\"report_countyCollect_id_seq\"::regclass)",
comment: "序号",
primaryKey: true,
field: "id",
autoIncrement: false,
unique: "report_countycollect_id_uindex"
},
regionId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "县区(id)",
primaryKey: false,
field: "regionId",
autoIncrement: false
},
dateTime: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "dateTime",
autoIncrement: false
},
name: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "名称",
primaryKey: false,
field: "name",
autoIncrement: false
},
address: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "地址",
primaryKey: false,
field: "address",
autoIncrement: false
},
hiddenDanger: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "排查发现隐患",
primaryKey: false,
field: "hiddenDanger",
autoIncrement: false
},
correctiveAction: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "采取措施",
primaryKey: false,
field: "correctiveAction",
autoIncrement: false
},
punishment: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "实施处罚,强制措施情况",
primaryKey: false,
field: "punishment",
autoIncrement: false
},
userId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "web端上报",
primaryKey: false,
field: "userId",
autoIncrement: false
},
isAudit: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: null,
comment: "市级 确认审核",
primaryKey: false,
field: "isAudit",
autoIncrement: false
},
}, {
tableName: "report_rectify",
comment: "",
indexes: []
});
dc.models.ReportRectify = ReportRectify;
const User = dc.models.User;
ReportRectify.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
User.hasMany(ReportRectify, { foreignKey: 'userId', sourceKey: 'id' });
const Department = dc.models.Department;
ReportRectify.belongsTo(Department, { foreignKey: 'regionId', targetKey: 'id' });
Department.hasMany(ReportRectify, { foreignKey: 'regionId', sourceKey: 'id' });
return ReportRectify;
};

33
api/app/lib/models/report_type.js

@ -1,33 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const ReportType = sequelize.define("reportType", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: false
},
name: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "name",
autoIncrement: false
}
}, {
tableName: "report_type",
comment: "",
indexes: []
});
dc.models.ReportType = ReportType;
return ReportType;
};

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

@ -1,44 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Resource = sequelize.define("resource", {
code: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "code",
autoIncrement: false,
unique: "resource_code_uindex"
},
name: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "name",
autoIncrement: false,
unique: "resource_name_uindex"
},
parentResource: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "parent_resource",
autoIncrement: false
}
}, {
tableName: "resource",
comment: "",
indexes: []
});
dc.models.Resource = Resource;
return Resource;
};

786
api/app/lib/models/road.js

@ -0,0 +1,786 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Road = sequelize.define("road", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "road_id_uindex"
},
routeName: {
index: 2,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路线名称",
primaryKey: false,
field: "route_name",
autoIncrement: false
},
routeCode: {
index: 3,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路线代码",
primaryKey: false,
field: "route_code",
autoIncrement: false
},
sectionNo: {
index: 4,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路段序号",
primaryKey: false,
field: "section_no",
autoIncrement: false
},
townshipCode: {
index: 5,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "乡镇编码",
primaryKey: false,
field: "township_code",
autoIncrement: false
},
startingPlaceName: {
index: 6,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "起点地名",
primaryKey: false,
field: "starting_place_name",
autoIncrement: false
},
startStation: {
index: 7,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "起点桩号",
primaryKey: false,
field: "start_station",
autoIncrement: false
},
categoryOfStartingPointAndDividingPoint: {
index: 8,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "起点分界点类别",
primaryKey: false,
field: "category_of_starting_point_and_dividing_point",
autoIncrement: false
},
stopPlaceName: {
index: 9,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "止点地名",
primaryKey: false,
field: "stop_place_name",
autoIncrement: false
},
categoryOfDeadCenterAndDividingPoint: {
index: 10,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "止点分界点类别",
primaryKey: false,
field: "category_of_dead_center_and_dividing_point",
autoIncrement: false
},
stopStation: {
index: 11,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "止点桩号",
primaryKey: false,
field: "stop_station",
autoIncrement: false
},
sectionType: {
index: 12,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路段类型",
primaryKey: false,
field: "section_type",
autoIncrement: false
},
routeCodeBeforeRoadNetworkAdjustment: {
index: 13,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路网调整前路线编码",
primaryKey: false,
field: "route_code_before_road_network_adjustment",
autoIncrement: false
},
serialNumberOfOriginalSection: {
index: 14,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段序号",
primaryKey: false,
field: "serial_number_of_original_section",
autoIncrement: false
},
startingStakeNumberOfTheOriginalRoadSection: {
index: 15,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段起点桩号",
primaryKey: false,
field: "starting_stake_number_of_the_original_road_section",
autoIncrement: false
},
endingPointStakeNoOfTheOriginalRoadSection: {
index: 16,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "原路段止点桩号",
primaryKey: false,
field: "ending_point_stake_no_of_the_original_road_section",
autoIncrement: false
},
routeLevel: {
index: 17,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路线等级",
primaryKey: false,
field: "route_level",
autoIncrement: false
},
natureOfRoadSection: {
index: 18,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路段性质",
primaryKey: false,
field: "nature_of_road_section",
autoIncrement: false
},
completionTime: {
index: 19,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建成时间",
primaryKey: false,
field: "completion_time",
autoIncrement: false
},
reconstructionTime: {
index: 20,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "改建时间",
primaryKey: false,
field: "reconstruction_time",
autoIncrement: false
},
natureOfConstruction: {
index: 21,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "建设性质",
primaryKey: false,
field: "nature_of_construction",
autoIncrement: false
},
gbmAndCivilizedModelRoad: {
index: 22,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "GBM及文明样板路",
primaryKey: false,
field: "gbm_and_civilized_model_road",
autoIncrement: false
},
landforms: {
index: 23,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "地貌",
primaryKey: false,
field: "landforms",
autoIncrement: false
},
natureOfCharges: {
index: 24,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "收费性质",
primaryKey: false,
field: "nature_of_charges",
autoIncrement: false
},
tollStation: {
index: 25,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所属收费站",
primaryKey: false,
field: "toll_station",
autoIncrement: false
},
numberOfCulverts: {
index: 26,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "涵洞数量",
primaryKey: false,
field: "number_of_culverts",
autoIncrement: false
},
technicalLevel: {
index: 27,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "技术等级",
primaryKey: false,
field: "technical_level",
autoIncrement: false
},
pavementType: {
index: 28,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路面类型",
primaryKey: false,
field: "pavement_type",
autoIncrement: false
},
pavementWidth: {
index: 29,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路面宽度",
primaryKey: false,
field: "pavement_width",
autoIncrement: false
},
subgradeWidth: {
index: 30,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路基宽度",
primaryKey: false,
field: "subgrade_width",
autoIncrement: false
},
laneCharacteristics: {
index: 31,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "车道特征",
primaryKey: false,
field: "lane_characteristics",
autoIncrement: false
},
whetherItIsOpenToTrafficInSunnyOrRainyDays: {
index: 32,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否晴雨通车",
primaryKey: false,
field: "whether_it_is_open_to_traffic_in_sunny_or_rainy_days",
autoIncrement: false
},
designSpeedPerHour: {
index: 33,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "设计时速",
primaryKey: false,
field: "design_speed_per_hour",
autoIncrement: false
},
urbanManagementSectionOrNot: {
index: 34,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否城管路段",
primaryKey: false,
field: "urban_management_section_or_not",
autoIncrement: false
},
managementAndMaintenanceUnit: {
index: 35,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "管养单位",
primaryKey: false,
field: "management_and_maintenance_unit",
autoIncrement: false
},
roadAdministrationUnit: {
index: 36,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "路政管理单位",
primaryKey: false,
field: "road_administration_unit",
autoIncrement: false
},
alimentation: {
index: 37,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "列养情况",
primaryKey: false,
field: "alimentation",
autoIncrement: false
},
sourceOfListedMaintenanceFunds: {
index: 38,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "列养资金来源",
primaryKey: false,
field: "source_of_listed_maintenance_funds",
autoIncrement: false
},
curingTime: {
index: 39,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "养护时间",
primaryKey: false,
field: "curing_time",
autoIncrement: false
},
greeningMileage: {
index: 40,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "可绿化里程",
primaryKey: false,
field: "greening_mileage",
autoIncrement: false
},
greeningMileaged: {
index: 41,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "已绿化里程",
primaryKey: false,
field: "greening_mileaged",
autoIncrement: false
},
typeOfRepeatedRoadSection: {
index: 42,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "重复道路路段类型",
primaryKey: false,
field: "type_of_repeated_road_section",
autoIncrement: false
},
serialNumberOfRepeatedSection: {
index: 43,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "重复路段序号",
primaryKey: false,
field: "serial_number_of_repeated_section",
autoIncrement: false
},
repeatedSectionRouteCode: {
index: 44,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "重复路段路线编码",
primaryKey: false,
field: "repeated_section_route_code",
autoIncrement: false
},
plannedFundCategory: {
index: 45,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划资金类别",
primaryKey: false,
field: "planned_fund_category",
autoIncrement: false
},
plannedYear: {
index: 46,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划年度",
primaryKey: false,
field: "planned_year",
autoIncrement: false
},
planDocumentNo: {
index: 47,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划文号",
primaryKey: false,
field: "plan_document_no",
autoIncrement: false
},
planItemUniqueCode: {
index: 48,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目唯一编码",
primaryKey: false,
field: "plan_item_unique_code",
autoIncrement: false
},
plannedProjectRouteCode: {
index: 49,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目路线编码",
primaryKey: false,
field: "planned_project_route_code",
autoIncrement: false
},
planProjectName: {
index: 50,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目名称",
primaryKey: false,
field: "plan_project_name",
autoIncrement: false
},
plannedProjectType: {
index: 51,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目类型",
primaryKey: false,
field: "planned_project_type",
autoIncrement: false
},
completionStatus: {
index: 52,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工情况",
primaryKey: false,
field: "completion_status",
autoIncrement: false
},
yearOfCompletion: {
index: 53,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工年度",
primaryKey: false,
field: "year_of_completion",
autoIncrement: false
},
plannedFundCategoryOne: {
index: 54,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划资金类别_1",
primaryKey: false,
field: "planned_fund_category__one",
autoIncrement: false
},
plannedYearOne: {
index: 55,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划年度_1",
primaryKey: false,
field: "planned_year__one",
autoIncrement: false
},
planDocumentNoOne: {
index: 56,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划文号_1",
primaryKey: false,
field: "plan_document_no__one",
autoIncrement: false
},
planItemUniqueCodeOne: {
index: 57,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目唯一编码_1",
primaryKey: false,
field: "plan_item_unique_code__one",
autoIncrement: false
},
planProjectNameOne: {
index: 58,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "计划项目名称_1",
primaryKey: false,
field: "plan_project_name__one",
autoIncrement: false
},
completionStatusOne: {
index: 59,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工情况_1",
primaryKey: false,
field: "completion_status__one",
autoIncrement: false
},
yearOfCompletionOne: {
index: 60,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "完工年度_1",
primaryKey: false,
field: "year_of_completion__one",
autoIncrement: false
},
stationRange: {
index: 61,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桩号范围",
primaryKey: false,
field: "station_range",
autoIncrement: false
},
reportingUnit: {
index: 62,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "填报单位",
primaryKey: false,
field: "reporting_unit",
autoIncrement: false
},
reasonForChange: {
index: 63,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变更原因",
primaryKey: false,
field: "reason_for_change",
autoIncrement: false
},
changeTime: {
index: 64,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "变更时间",
primaryKey: false,
field: "change_time",
autoIncrement: false
},
lastRepairAndMaintenanceYear: {
index: 65,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "最近一次修复养护年度",
primaryKey: false,
field: "last_repair_and_maintenance_year",
autoIncrement: false
},
whetherMaintenanceManagedHighway: {
index: 66,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "是否按干线公路管理接养",
primaryKey: false,
field: "whether_maintenance_managed_highway",
autoIncrement: false
},
remarks: {
index: 67,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "备注",
primaryKey: false,
field: "remarks",
autoIncrement: false
},
routeCodeOfLastYear: {
index: 68,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上年路线编码",
primaryKey: false,
field: "route_code_of_last_year",
autoIncrement: false
},
routeNameOfLastYear: {
index: 69,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上年路线名称",
primaryKey: false,
field: "route_name_of_last_year",
autoIncrement: false
},
startingStationOfLastYear: {
index: 70,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上年起点桩号",
primaryKey: false,
field: "starting_station_of_last_year",
autoIncrement: false
},
lastYearsEndingPointStakeNumber: {
index: 71,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "上年止点桩号",
primaryKey: false,
field: "last_years_ending_point_stake_number",
autoIncrement: false
},
graphicMileage: {
index: 72,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "图形里程",
primaryKey: false,
field: "graphic_mileage",
autoIncrement: false
},
chainageMileage: {
index: 73,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "桩号里程",
primaryKey: false,
field: "chainage_mileage",
autoIncrement: false
},
districtcounty: {
index: 74,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所在区县",
primaryKey: false,
field: "districtcounty",
autoIncrement: false
},
locationCity: {
index: 75,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "所在地市",
primaryKey: false,
field: "location_city",
autoIncrement: false
},
level: {
index: 76,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "level",
autoIncrement: false
},
surfaceThickness: {
index: 77,
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "面层厚度",
primaryKey: false,
field: "surface_thickness",
autoIncrement: false
}
}, {
tableName: "road",
comment: "",
indexes: []
});
dc.models.Road = Road;
return Road;
};

56
api/app/lib/models/statistic.js

@ -0,0 +1,56 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const Statistic = sequelize.define("statistic", {
id: {
index: 1,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "vehicle_id_uindex"
},
name: {
index: 2,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "name",
autoIncrement: false
},
count: {
index: 3,
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: "0",
comment: null,
primaryKey: false,
field: "count",
autoIncrement: false
},
type: {
index: 4,
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "type",
autoIncrement: false
}
}, {
tableName: "statistic",
comment: "",
indexes: []
});
dc.models.Statistic = Statistic;
return Statistic;
};

55
api/app/lib/models/user.js

@ -12,8 +12,7 @@ module.exports = dc => {
comment: null, comment: null,
primaryKey: true, primaryKey: true,
field: "id", field: "id",
autoIncrement: true, autoIncrement: true
unique: "user_id_uindex"
}, },
name: { name: {
type: DataTypes.STRING, type: DataTypes.STRING,
@ -26,9 +25,9 @@ module.exports = dc => {
}, },
username: { username: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "用户名 账号", comment: null,
primaryKey: false, primaryKey: false,
field: "username", field: "username",
autoIncrement: false autoIncrement: false
@ -46,54 +45,54 @@ module.exports = dc => {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
comment: "部门id",
primaryKey: false,
field: "department_id",
autoIncrement: false
},
email: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null, comment: null,
primaryKey: false, primaryKey: false,
field: "email", field: "department_id",
autoIncrement: false autoIncrement: false
}, },
enable: { delete: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
allowNull: false, allowNull: false,
defaultValue: null, defaultValue: null,
comment: "启用状态", comment: null,
primaryKey: false, primaryKey: false,
field: "enable", field: "delete",
autoIncrement: false autoIncrement: false
}, },
delete: { remark: {
type: DataTypes.BOOLEAN, type: DataTypes.STRING,
allowNull: false, allowNull: true,
defaultValue: null, defaultValue: "th",
comment: null, comment: null,
primaryKey: false, primaryKey: false,
field: "delete", field: "remark",
autoIncrement: false autoIncrement: false
}, },
phone: { phone: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "手机号(小程序使用手机号登录)", comment: null,
primaryKey: false, primaryKey: false,
field: "phone", field: "phone",
autoIncrement: false autoIncrement: false
}, },
post: { email: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
defaultValue: null, defaultValue: null,
comment: "职位", comment: null,
primaryKey: false, primaryKey: false,
field: "post", field: "email",
autoIncrement: false
},
enable: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "enable",
autoIncrement: false autoIncrement: false
} }
}, { }, {
@ -102,7 +101,5 @@ module.exports = dc => {
indexes: [] indexes: []
}); });
dc.models.User = User; dc.models.User = User;
return User; return User;
}; };

311
api/app/lib/models/user_placeSecurityRecord.js

@ -1,311 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const UserPlaceSecurityRecord = sequelize.define("userPlaceSecurityRecord", {
id: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: null,
comment: "id",
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "user_placesecurityrecord_id_uindex"
},
time: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: "录入时间",
primaryKey: false,
field: "time",
autoIncrement: false
},
placeId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "场所id",
primaryKey: false,
field: "placeId",
autoIncrement: false,
references: {
key: "id",
model: "places"
}
},
hiddenDangerItem12: {
type: DataTypes.JSON,
allowNull: true,
defaultValue: null,
comment: "12项隐患信息",
primaryKey: false,
field: "hiddenDangerItem12",
autoIncrement: false
},
description: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "存在具体问题描述",
primaryKey: false,
field: "description",
autoIncrement: false
},
audit1ManId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "乡镇人审核",
primaryKey: false,
field: "audit1ManId",
autoIncrement: false,
references: {
key: "id",
model: "user"
}
},
audit2ManId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "区县人复核",
primaryKey: false,
field: "audit2ManId",
autoIncrement: false,
references: {
key: "id",
model: "user"
}
},
regionId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "所属县/区",
primaryKey: false,
field: "regionId",
autoIncrement: false,
references: {
key: "id",
model: "department"
}
},
userId: {
type: DataTypes.BIGINT,
allowNull: true,
defaultValue: null,
comment: "用户id,填报人",
primaryKey: false,
field: "userId",
autoIncrement: false
},
placeType: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "场所性质",
primaryKey: false,
field: "placeType",
autoIncrement: false
},
address: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "场所地址",
primaryKey: false,
field: "address",
autoIncrement: false
},
phone: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: "负责人手机号",
primaryKey: false,
field: "phone",
autoIncrement: false
},
dimension: {
type: DataTypes.REAL,
allowNull: true,
defaultValue: null,
comment: "面积",
primaryKey: false,
field: "dimension",
autoIncrement: false
},
floors: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "多少层",
primaryKey: false,
field: "floors",
autoIncrement: false
},
numberOfPeople: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "常住人数",
primaryKey: false,
field: "numberOfPeople",
autoIncrement: false
},
location: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经纬度",
primaryKey: false,
field: "location",
autoIncrement: false
},
isEnable: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: null,
comment: "是否为合用场所",
primaryKey: false,
field: "isEnable",
autoIncrement: false
},
rejectManId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
comment: "驳回人",
primaryKey: false,
field: "rejectManId",
autoIncrement: false,
references: {
key: "id",
model: "user"
}
},
rejectReasons: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "驳回意见",
primaryKey: false,
field: "rejectReasons",
autoIncrement: false
},
isDraft: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: null,
comment: "是否草稿",
primaryKey: false,
field: "isDraft",
autoIncrement: false
},
placeOwner: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "场所负责人",
primaryKey: false,
field: "placeOwner",
autoIncrement: false
},
localtionDescribe: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "经纬度定位描述",
primaryKey: false,
field: "localtionDescribe",
autoIncrement: false
},
correctiveAction: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "采取措施",
primaryKey: false,
field: "correctiveAction",
autoIncrement: false
},
type: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: null,
comment: "是否重新发起",
primaryKey: false,
field: "type",
autoIncrement: false
},
punishment: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: "实施处罚,强制措施情况",
primaryKey: false,
field: "punishment",
autoIncrement: false
},
audit1ManIdTime: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: "乡镇人审核时间",
primaryKey: false,
field: "audit1ManIdTime",
autoIncrement: false
},
audit2ManIdTime: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: "区县人复核时间",
primaryKey: false,
field: "audit2ManIdTime",
autoIncrement: false
},
rejectTime: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: "驳回日期",
primaryKey: false,
field: "rejectTime",
autoIncrement: false
},
departmentId: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
primaryKey: false,
field: "department_id",
autoIncrement: false,
},
}, {
tableName: "user_placeSecurityRecord",
comment: "",
indexes: []
});
dc.models.UserPlaceSecurityRecord = UserPlaceSecurityRecord;
const Places = dc.models.Places;
UserPlaceSecurityRecord.belongsTo(Places, { foreignKey: 'placeId', targetKey: 'id' });
Places.hasMany(UserPlaceSecurityRecord, { foreignKey: 'placeId', sourceKey: 'id' });
const User = dc.models.User;
UserPlaceSecurityRecord.belongsTo(User, { as: 'user', foreignKey: 'userId', targetKey: 'id' });
User.hasMany(UserPlaceSecurityRecord, { foreignKey: 'userId', sourceKey: 'id' });
UserPlaceSecurityRecord.belongsTo(User, { as: 'audit1ManUser', foreignKey: 'audit1ManId', targetKey: 'id' });
UserPlaceSecurityRecord.belongsTo(User, { as: 'audit2ManUser', foreignKey: 'audit2ManId', targetKey: 'id' });
UserPlaceSecurityRecord.belongsTo(User, { as: 'rejectManUser', foreignKey: 'rejectManId', targetKey: 'id' });
return UserPlaceSecurityRecord;
};

61
api/app/lib/models/user_resource.js

@ -1,61 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const UserResource = sequelize.define("userResource", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true,
unique: "post_resource_id_uindex"
},
userId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "user_id",
autoIncrement: false,
references: {
key: "id",
model: "post"
}
},
resourceId: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "resource",
autoIncrement: false,
references: {
key: "code",
model: "resource"
}
}
}, {
tableName: "user_resource",
comment: "",
indexes: []
});
dc.models.UserResource = UserResource;
const User = dc.models.User;
UserResource.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
User.hasMany(UserResource, { foreignKey: 'userId', sourceKey: 'id' });
const Resource = dc.models.Resource;
UserResource.belongsTo(Resource, { foreignKey: 'resourceId', targetKey: 'code' });
Resource.hasMany(UserResource, { foreignKey: 'resourceId', sourceKey: 'code' });
Resource.hasMany(Resource, { foreignKey: 'parentResource', sourceKey: 'code' });
return UserResource;
};

3
api/app/lib/models/user_token.js

@ -12,8 +12,7 @@ module.exports = dc => {
comment: null, comment: null,
primaryKey: true, primaryKey: true,
field: "token", field: "token",
autoIncrement: false, autoIncrement: false
unique: "user_token_token_uindex"
}, },
userInfo: { userInfo: {
type: DataTypes.JSONB, type: DataTypes.JSONB,

13
api/app/lib/routes/approval/index.js

@ -1,13 +0,0 @@
'use strict';
const Approval = require('../../controllers/approval/index');
module.exports = function (app, router, opts) {
/**
* @api {POST} approval/submit 提交审批驳回修改.
* @apiVersion 1.0.0
* @apiGroup Approval
*/
app.fs.api.logAttr['GET/approval/submit'] = { content: '提交审批、驳回修改', visible: true };
router.post('/approval/submit', Approval.submitApproval);
};

19
api/app/lib/routes/auth/index.js

@ -3,30 +3,13 @@
const auth = require('../../controllers/auth'); const auth = require('../../controllers/auth');
module.exports = function (app, router, opts) { module.exports = function (app, router, opts) {
/**
* @api {Post} login 登录.
* @apiVersion 1.0.0
* @apiGroup Auth
*/
app.fs.api.logAttr['POST/login'] = { content: '登录', visible: true }; app.fs.api.logAttr['POST/login'] = { content: '登录', visible: true };
router.post('/login', auth.login); router.post('/login', auth.login);
/**
* @api {POST} wxLogin 微信小程序登录.使用手机号密码登录
* @apiVersion 1.0.0
* @apiGroup Auth
*/
app.fs.api.logAttr['POST/wxLogin'] = { content: '微信小程序登录', visible: true }; app.fs.api.logAttr['POST/wxLogin'] = { content: '微信小程序登录', visible: true };
router.post('/wxLogin', auth.wxLogin); router.post('/wxLogin', auth.wxLogin);
app.fs.api.logAttr['PUT/logout'] = { content: '登出', visible: false }; app.fs.api.logAttr['PUT/logout'] = { content: '登出', visible: false };
router.put('/logout', auth.logout); router.put('/logout', auth.logout);
/**
* @api {PUT} wxLogout 微信小程序登出
* @apiVersion 1.0.0
* @apiGroup Auth
*/
app.fs.api.logAttr['PUT/wxLogout'] = { content: '登出', visible: false };
router.put('/wxLogout', auth.wxLogout);
}; };

9
api/app/lib/routes/common/index.js

@ -1,9 +0,0 @@
'use strict';
const common = require('../../controllers/common');
module.exports = function (app, router, opts) {
router.get('/data-dictionary/:model', common.getDataDictionary);
router.put('/data-dictionary/:model', common.putDataDictionary);
};

158
api/app/lib/routes/data/index.js

@ -0,0 +1,158 @@
'use strict';
const vehicle = require('../../controllers/data/vehicle');
const road = require('../../controllers/data/road');
const bridge = require('../../controllers/data/bridge');
const project = require('../../controllers/data/project');
const overspeed = require('../../controllers/data/overspeed');
const bus = require('../../controllers/data/bus');
const publicity = require('../../controllers/data/publicity');
const dataIndex = require('../../controllers/data/index');
module.exports = function (app, router, opts) {
// 数据导出
app.fs.api.logAttr['GET/data/export'] = { content: '导出数据', visible: true };
router.get('/data/export', dataIndex.dataExport);
// god 交通
app.fs.api.logAttr['GET/data/god_trans'] = { content: '获取高德交通数据', visible: true };
router.get('/data/god_trans', dataIndex.godTrans);
// 运政
//客运车
async function setVehicleType (ctx, next) {
ctx.request.body = {
...(ctx.request.body || {}),
type: 'vehicle'
}
await next()
}
app.fs.api.logAttr['GET/vehicle'] = { content: '获取运政列表', visible: true };
router.get('/vehicle', setVehicleType, vehicle.get);
app.fs.api.logAttr['PUT/vehicle'] = { content: '编辑运政数据', visible: true };
router.put('/vehicle', setVehicleType, vehicle.edit);
app.fs.api.logAttr['DEL/vehicle/:id'] = { content: '删除运政数据', visible: false };
router.del('/vehicle/:id', setVehicleType, vehicle.del);
// 路政
async function setRoadManageType (ctx, next) {
ctx.request.body = {
...(ctx.request.body || {}),
type: 'road_manage'
}
await next()
}
app.fs.api.logAttr['GET/road_manage'] = { content: '获取路政列表', visible: true };
router.get('/road_manage', setRoadManageType, vehicle.get);
app.fs.api.logAttr['PUT/road_manage'] = { content: '编辑路政数据', visible: true };
router.put('/road_manage', setRoadManageType, vehicle.edit);
app.fs.api.logAttr['DEL/road_manage/:id'] = { content: '删除路政数据', visible: false };
router.del('/road_manage/:id', setRoadManageType, vehicle.del);
// 出租/危货
app.fs.api.logAttr['GET/vehicle/specific'] = { content: '获取具体车辆列表', visible: true };
router.get('/vehicle/specific', vehicle.specificGet);
app.fs.api.logAttr['PUT/vehicle/specific'] = { content: '编辑具体车辆数据', visible: true };
router.put('/vehicle/specific', vehicle.specificEdit);
app.fs.api.logAttr['DEL/vehicle/:vehicleId/specific'] = { content: '删除具体车辆数据', visible: false };
router.del('/vehicle/:vehicleId/specific', vehicle.specificDel);
// 业户
app.fs.api.logAttr['GET/vehicle/business'] = { content: '获取业户列表', visible: true };
router.get('/vehicle/business', vehicle.businessGet);
app.fs.api.logAttr['PUT/vehicle/business'] = { content: '编辑业户数据', visible: true };
router.put('/vehicle/business', vehicle.businessEdit);
app.fs.api.logAttr['DEL/vehicle/business/:businessId'] = { content: '删除业户数据', visible: false };
router.del('/vehicle/business/:businessId', vehicle.businessDel);
// 运政 END
// 道路
app.fs.api.logAttr['POST/road/import'] = { content: '导入道路数据', visible: true };
router.post('/road/import', road.importIn);
app.fs.api.logAttr['GET/road'] = { content: '获取道路数据', visible: true };
router.get('/road', road.get);
app.fs.api.logAttr['GET/road/section'] = { content: '获取道路路段数据', visible: true };
router.get('/road/section', road.getRoadSection);
app.fs.api.logAttr['put/road'] = { content: '编辑道路数据', visible: true };
router.put('/road', road.edit);
app.fs.api.logAttr['DEL/road/:roadId'] = { content: '删除道路数据', visible: false };
router.del('/road/:roadId', road.del);
// 道路 END
// 桥梁
app.fs.api.logAttr['GET/bridge'] = { content: '获取桥梁数据', visible: true };
router.get('/bridge', bridge.bridgeGet);
app.fs.api.logAttr['PUT/bridge'] = { content: '编辑桥梁数据', visible: true };
router.put('/bridge', bridge.bridgeEdit);
app.fs.api.logAttr['DEL/bridge/:bridgeId'] = { content: '删除桥梁数据', visible: false };
router.del('/bridge/:bridgeId', bridge.bridgeDel);
// 桥梁 END
// project
app.fs.api.logAttr['GET/project'] = { content: '获取工程数据', visible: true };
router.get('/project', project.projectGet);
app.fs.api.logAttr['PUT/project'] = { content: '编辑工程数据', visible: true };
router.put('/project', project.projectEdit);
app.fs.api.logAttr['DEL/project/:projectId'] = { content: '删除工程数据', visible: false };
router.del('/project/:projectId', project.projectDel);
// project END
//overspeed
app.fs.api.logAttr['GET/overspeed'] = { content: '获取治超数据', visible: true };
router.get('/overspeed', overspeed.overspeedGet);
app.fs.api.logAttr['PUT/overspeed'] = { content: '编辑治超数据', visible: true };
router.put('/overspeed', overspeed.overspeedEdit);
app.fs.api.logAttr['DEL/overspeed/:overspeedId'] = { content: '删除治超数据', visible: false };
router.del('/overspeed/:overspeedId', overspeed.overspeedDel);
//overspeed END
//bus
app.fs.api.logAttr['GET/bus/line'] = { content: '获取公交路线数据', visible: true };
router.get('/bus/line', bus.lineGet);
app.fs.api.logAttr['PUT/bus/line'] = { content: '编辑公交路线数据', visible: true };
router.put('/bus/line', bus.lineEdit);
app.fs.api.logAttr['DEL/bus/line/:lineId'] = { content: '删除公交路线数据', visible: false };
router.del('/bus/line/:lineId', bus.lineDel);
app.fs.api.logAttr['GET/bus/car'] = { content: '获取公交车辆数据', visible: true };
router.get('/bus/car', bus.carGet);
app.fs.api.logAttr['PUT/bus/car'] = { content: '编辑公交车辆数据', visible: true };
router.put('/bus/car', bus.carEdit);
app.fs.api.logAttr['DEL/bus/car/:carId'] = { content: '删除公交车辆数据', visible: false };
router.del('/bus/car/:carId', bus.carDel);
//bus END
//publicity
app.fs.api.logAttr['GET/publicity'] = { content: '获取宣传数据', visible: true };
router.get('/publicity', publicity.publicityGet);
app.fs.api.logAttr['PUT/publicity'] = { content: '编辑宣传数据', visible: true };
router.put('/publicity', publicity.publicityEdit);
app.fs.api.logAttr['DEL/publicity/:publicityId'] = { content: '删除宣传数据', visible: false };
router.del('/publicity/:publicityId', publicity.publicityDel);
//publicity END
};

13
api/app/lib/routes/department/index.js

@ -1,13 +0,0 @@
'use strict';
const Department = require('../../controllers/department/index');
module.exports = function (app, router, opts) {
/**
* @api {GET} counties/list 获取南昌市下所有区县.
* @apiVersion 1.0.0
* @apiGroup Department
*/
app.fs.api.logAttr['GET/counties/list'] = { content: '获取南昌市下所有区县', visible: true };
router.get('/counties/list', Department.getCountiesList);
};

21
api/app/lib/routes/file/index.js

@ -0,0 +1,21 @@
'use strict';
const pan = require('../../controllers/file');
module.exports = function (app, router, opts, panCode) {
router.get('/create/struct/dir', pan.createProjectDir);
router.get('/get/file/dirs', pan.getFileDirs);
router.get('/netdisk-files/dir/delete', pan.delFileDir);
router.get('/netdisk-files/struct/dir/update', pan.updateStructDir(opts))
router.post('/netdisk-files/upload', pan.uploadFile);
router.get('/netdisk-files/delete', pan.deleteFile);
router.get('/netdisk-files/query', pan.getFileList);
};

28
api/app/lib/routes/organization/authority.js

@ -1,28 +0,0 @@
'use strict';
const Authority = require('../../controllers/organization/authority');
module.exports = function (app, router, opts) {
/**
* @api {GET} resource 查询所有权限码.
* @apiVersion 1.0.0
* @apiGroup Org
*/
app.fs.api.logAttr['GET/resource'] = { content: '查询所有权限码', visible: true };
router.get('resource', Authority.getResource);
/**
* @api {GET} user/resource 查询用户权限.
* @apiVersion 1.0.0
* @apiGroup Org
*/
app.fs.api.logAttr['GET/user/resource'] = { content: '查询用户权限', visible: true };
router.get('user/resource', Authority.getUserResource);
/**
* @api {POST} user/resource 更新用户权限.
* @apiVersion 1.0.0
* @apiGroup Org
*/
app.fs.api.logAttr['POST/user/resource'] = { content: '更新用户权限', visible: true };
router.post('user/resource', Authority.updateUserRes);
};

36
api/app/lib/routes/organization/index.js

@ -0,0 +1,36 @@
'use strict';
const Department = require('../../controllers/organization/department')
const user = require('../../controllers/organization/user');
module.exports = function (app, router, opts) {
app.fs.api.logAttr['GET/department'] = { content: '获取部门列表', visible: false };
router.get('/department', Department.getdep);
app.fs.api.logAttr['PUT/department'] = { content: '编辑部门信息', visible: false };
router.put('/department', Department.editDep);
app.fs.api.logAttr['DEL/department/:depId'] = { content: '删除部门信息', visible: false };
router.del('/department/:depId', Department.delDep);
app.fs.api.logAttr['GET/user'] = { content: '获取所有用户信息', visible: false };
router.get('/user', user.getUserAll);
app.fs.api.logAttr['GET/department/:depId/user'] = { content: '获取部门下用户信息', visible: false };
router.get('/department/:depId/user', user.getUser);
app.fs.api.logAttr['POST/department/user'] = { content: '创建部门下用户信息', visible: false };
router.post('/department/user', user.creatUser);
app.fs.api.logAttr['PUT/department/user/:userId'] = { content: '修改部门下用户信息', visible: false };
router.put('/department/user/:userId', user.updateUser);
app.fs.api.logAttr['DEL/department/user/:userIds'] = { content: '删除部门下用户信息', visible: false };
router.del('/department/user/:userIds', user.deleteUser);
// app.fs.api.logAttr['PUT/department/user/:userId/resetPwd'] = { content: '重置用户密码', visible: false };
// router.put('/department/user/:userId/resetPwd', user.resetPwd);
app.fs.api.logAttr['PUT/department/user/:userId/password'] = { content: '修改用户密码', visible: false };
router.put('/department/user/:userId/password', user.setPassword);
};

32
api/app/lib/routes/organization/user.js

@ -1,32 +0,0 @@
'use strict';
const user = require('../../controllers/organization/user');
module.exports = function (app, router, opts) {
app.fs.api.logAttr['GET/organization/department'] = { content: '获取部门信息', visible: false };
router.get('/organization/department', user.getDepMessage);
app.fs.api.logAttr['GET/organization/department/:depId/user'] = { content: '获取部门下用户信息', visible: false };
router.get('/organization/department/:depId/user', user.getUser);
app.fs.api.logAttr['POST/organization/department/user'] = { content: '创建部门下用户信息', visible: false };
router.post('/organization/department/user', user.creatUser);
app.fs.api.logAttr['PUT/organization/department/user/:id'] = { content: '修改部门下用户信息', visible: false };
router.put('/organization/department/user/:id', user.updateUser);
app.fs.api.logAttr['DEL/organization/department/user/:ids'] = { content: '删除部门下用户信息', visible: false };
router.del('/organization/department/user/:ids', user.deleteUser);
app.fs.api.logAttr['PUT/organization/department/user/resetPwd/:id'] = { content: '重置用户密码', visible: false };
router.put('/organization/department/user/resetPwd/:id', user.resetPwd);
/**
* @api {PUT} user/password/:id 修改用户密码
* @apiVersion 1.0.0
* @apiGroup Organization
*/
app.fs.api.logAttr['PUT/user/password/:userId'] = { content: '修改用户密码', visible: false };
router.put('/user/password/:userId', user.updateUserPassword);
};

26
api/app/lib/routes/overview/index.js

@ -0,0 +1,26 @@
'use strict';
const operation = require('../../controllers/overview/operation');
const management = require('../../controllers/overview/management');
const build = require('../../controllers/overview/building');
const conserve = require('../../controllers/overview/conserve');
module.exports = function (app, router, opts) {
app.fs.api.logAttr['GET/operation/car_level'] = { content: '获取公交车辆层级信息', visible: false };
router.get('/operation/car_level', operation.busCarLevelList);
app.fs.api.logAttr['GET/manage/overspeed'] = { content: '获取治超详情列', visible: false };
router.get('/manage/overspeed', management.overSpeedList);
app.fs.api.logAttr['GET/manage/overspeed/processed'] = { content: '获取治超监测点处理数据', visible: false };
router.get('/manage/overspeed/processed', management.overSpeedProcessed);
app.fs.api.logAttr['GET/build/road_state'] = { content: '获取道路统计', visible: false };
router.get('/build/road_state', build.roadState);
app.fs.api.logAttr['GET/conserve/statistic'] = { content: '获取道路养护统计及列表', visible: false };
router.get('/conserve/statistic', conserve.statistic);
app.fs.api.logAttr['GET/transportation/statistic'] = { content: '获取运政统计', visible: false };
router.get('/transportation/statistic', operation.vehicleStatistic);
}

70
api/app/lib/routes/placeSecurityRecord/index.js

@ -1,70 +0,0 @@
'use strict';
const placeSecurityRecord = require('../../controllers/placeSecurityRecord');
module.exports = function (app, router, opts) {
/**
* @api {POST} /add/placeSecurityRecord 提交填报信息/保存填报草稿.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['POST/add/placeSecurityRecord'] = { content: '提交填报信息/保存填报草稿', visible: true };
router.post('/add/placeSecurityRecord', placeSecurityRecord.addPlaceSecurityRecord);
/**
* @api {PUT} /placeSecurityRecord/:id 编辑填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['PUT/placeSecurityRecord/:id'] = { content: '编辑填报信息', visible: true };
router.put('/placeSecurityRecord/:id', placeSecurityRecord.editPlaceSecurityRecord);
/**
* @api {PUT} /placeSecurityRecord/:id 修改type字段
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['PUT/updateType/:id'] = { content: '修改type字段', visible: true };
router.put('/updateType/:id', placeSecurityRecord.updateType);
/**
* @api {DELETE} /placeSecurityRecord/:id 删除填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['DELETE/placeSecurityRecord/:id'] = { content: '删除填报信息', visible: true };
router.del('/placeSecurityRecord/:id', placeSecurityRecord.deletePlaceSecurityRecord);
/**
* @api {GET} /placeSecurityRecord/:id 根据填报信息ID查询填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['GET/placeSecurityRecord/:id'] = { content: '根据填报信息ID查询填报信息', visible: true };
router.get('/placeSecurityRecord/:id', placeSecurityRecord.getPlaceSecurityRecordById);
/**
* @api {GET} /recently/placeSecurityRecord/:placeId 根据场所ID获取该场所最近用户填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['GET/recently/placeSecurityRecord/:placeId'] = { content: '根据场所ID获取该场所最近用户填报信息', visible: true };
router.get('/recently/placeSecurityRecord/:placeId', placeSecurityRecord.getRecentlyPlaceSecurityRecordByPlaceId);
/**
* @api {GET} /placeSecurityRecords 根据筛选条件获取用户填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['GET/placeSecurityRecords'] = { content: '根据筛选条件获取用户填报信息', visible: true };
router.get('/placeSecurityRecords', placeSecurityRecord.getPlaceSecurityRecords);
/**
* @api {GET} /approve/placeSecurityRecords 根据筛选条件获取用户审批填报信息.
* @apiVersion 1.0.0
* @apiGroup placeSecurityRecord
*/
app.fs.api.logAttr['GET/approve/placeSecurityRecords'] = { content: '根据筛选条件获取用户审批填报信息', visible: true };
router.get('/approve/placeSecurityRecords', placeSecurityRecord.getApprovePlaceSecurityRecords);
};

30
api/app/lib/routes/places/index.js

@ -1,30 +0,0 @@
'use strict';
const places = require('../../controllers/places');
module.exports = function (app, router, opts) {
/**
* @api {GET} /user/places/:userId 根据用户ID获取该用户创建的所有场所信息.
* @apiVersion 1.0.0
* @apiGroup places
*/
app.fs.api.logAttr['GET/user/places/:userId'] = { content: '根据用户ID获取该用户创建的所有场所信息', visible: true };
router.get('/user/places/:userId', places.getPlacesByUserId);
/**
* @api {GET} /approveUser/places/:approveUserId 根据审批用户ID获取该审批用户范围内填报人创建的场所信息.
* @apiVersion 1.0.0
* @apiGroup places
*/
app.fs.api.logAttr['GET/approveUser/places/:approveUserId'] = { content: '根据审批用户ID获取该审批用户范围内填报人创建的场所信息', visible: true };
router.get('/approveUser/places/:approveUserId', places.getPlacesByApproveUserId);
/**
* @api {GET} /all/places 获取所有场所信息.
* @apiVersion 1.0.0
* @apiGroup places
*/
app.fs.api.logAttr['GET/all/places'] = { content: '获取所有场所信息', visible: true };
router.get('/all/places', places.getAllPlaces);
};

43
api/app/lib/routes/report/index.js

@ -1,41 +1,20 @@
'use strict'; 'use strict';
const report = require('../../controllers/report'); const report = require('../../controllers/report');
const reportConfig = require('../../controllers/report/config')
const reportRectify = require('../../controllers/report/compile')
module.exports = function (app, router, opts) { module.exports = function (app, router, opts) {
/** app.fs.api.logAttr['GET/report/list'] = { content: '获取上报列表', visible: false };
* @api {GET} report 报表. router.get('/report/list', report.reportList);
* @apiVersion 1.0.0
* @apiGroup report
*/
app.fs.api.logAttr['GET/report/list'] = { content: '报表下载列表', visible: true };
router.get('/report/list', report.getReportList);
// 报表配置 app.fs.api.logAttr['GET/report/position'] = { content: '获取最新上报位置', visible: false };
app.fs.api.logAttr['GET/allAreas'] = { content: '获取全部区域', visible: true }; router.get('/report/position', report.reportPosition);
router.get('/allAreas', reportConfig.getAreas);
app.fs.api.logAttr['POST/report/config'] = { content: '添加报表配置', visible: true }; app.fs.api.logAttr['GET/report/:reportId/detail'] = { content: '获取上报详情', visible: false };
router.post('/report/config', reportConfig.addReportConfig); router.get('/report/:reportId//detail', report.reportDetail);
app.fs.api.logAttr['GET/report/config'] = { content: '获取报表配置', visible: true }; app.fs.api.logAttr['POST/report'] = { content: '创建上报', visible: false };
router.get('/report/config', reportConfig.getReportConfig); router.post('/report', report.createReport);
app.fs.api.logAttr['PUT/report/:reportId/config'] = { content: '编辑报表配置', visible: true }; app.fs.api.logAttr['DEL/report/:reportId'] = { content: '删除上报', visible: false };
router.put('/report/:reportId/config', reportConfig.editReportConfig); router.del('/report/:reportId', report.deleteReport);
}
app.fs.api.logAttr['DEL/report/:reportId/config'] = { content: '删除报表配置', visible: true };
router.del('/report/:reportId/config', reportConfig.delReportConfig);
// 报表编辑
app.fs.api.logAttr['GET/report/rectify'] = { content: '获取合用场所安全隐患排查整治汇总表', visible: true };
router.get('/report/rectify', reportRectify.getReportRectify);
app.fs.api.logAttr['GET/report/rectify/detail'] = { content: '获取合用场所安全隐患排查整治汇总表详情', visible: true };
router.get('/report/rectify/detail', reportRectify.getReportRectifyDetail);
app.fs.api.logAttr['POST/report/rectify/detail'] = { content: '保存合用场所安全隐患排查整治汇总表编辑信息', visible: true };
router.post('/report/rectify/detail', reportRectify.compileReportRectifyDetail);
};

28
api/app/lib/routes/statistic/index.js

@ -1,28 +0,0 @@
'use strict';
const statistic = require('../../controllers/statistic')
module.exports = function (app, router, opts) {
/**
* @api {GET} getGovern 获取数据中台.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/daily/report/data/statistic'] = { content: '获取数据中台', visible: true };
router.get('/daily/report/data/statistic', statistic.reportDailyStatistic);
/**
* @api {GET} getGovern 获取数据中台地区填报数量.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/daily/report/area/statistic'] = { content: '获取数据中台地区填报数量', visible: true };
router.get('/daily/report/area/statistic', statistic.reportAreaStatistic);
/**
* @api {GET} getGovern 获取填报管理数据.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/report/management/statistic'] = { content: '获取填报管理数据', visible: true };
router.get('/report/management/statistic', statistic.dangerAreaQuery);
}

78
api/app/lib/routes/wxReport/index.js

@ -1,78 +0,0 @@
'use strict';
const wxReport = require('../../controllers/wxReport/index');
module.exports = function (app, router, opts) {
/*******************首页-市级***************************/
/**
* @api {GET} getDayReport 获取每日汇总.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/getDayReport'] = { content: '获取每日汇总', visible: true };
router.get('/getDayReport', wxReport.getDayReport);
/**
* @api {GET} getGovern 获取排查整治汇总.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/getGovern'] = { content: '获取排查整治汇总', visible: true };
router.get('/getGovern', wxReport.getGovern);
/**
* @api {GET} getGovernDetail 获取排查整治汇总详情.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/getGovernDetail'] = { content: '获取排查整治汇总详情', visible: true };
router.get('/getGovernDetail', wxReport.getGovernDetail);
/**
* @api {PUT} /operateGovern 确认整治汇总场所数据.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['PUT/operateGovern'] = { content: '确认整治汇总场所数据', visible: true };
router.put('/operateGovern', wxReport.operateGovern);
/**
* @api {GET} getSecurityRiskList 获取安全隐患排查详细数据列表.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/getSecurityRiskList'] = { content: '获取安全隐患排查详细数据列表', visible: true };
router.get('/getSecurityRiskList', wxReport.getSecurityRiskList);
/**
* @api {GET} /getHomeCount/:userId/:departmentId/:userRegionType 获取待处理数量.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/getHomeCount/:userId/:departmentId/:userRegionType'] = { content: '获取待处理数量', visible: true };
router.get('/getHomeCount/:userId/:departmentId/:userRegionType', wxReport.getHomeCount);
/**
* @api {PUT} /operateReport/:id/:userId 每日汇总表上报.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['PUT/operateReport/:id/:userId'] = { content: '每日汇总表上报', visible: true };
router.put('/operateReport/:id/:userId', wxReport.operateReport);
/**
* @api {GET} /approve/reportCollections 根据筛选条件获取用户审核报表信息.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['GET/approve/reportCollections'] = { content: '根据筛选条件获取用户审核报表信息', visible: true };
router.get('/approve/reportCollections', wxReport.getApproveReportCollections);
/**
* @api {PUT} /operateGovernReport/:userId 上报排查整治汇总表.
* @apiVersion 1.0.0
* @apiGroup wxReport
*/
app.fs.api.logAttr['PUT/operateGovernReport/:userId'] = { content: '上报排查整治汇总表', visible: true };
router.put('/operateGovernReport/:userId', wxReport.operateGovernReport);
}

27
api/config.js

@ -11,11 +11,22 @@ const dev = process.env.NODE_ENV == 'development';
args.option(['p', 'port'], '启动端口'); args.option(['p', 'port'], '启动端口');
args.option(['g', 'pg'], 'postgre服务URL'); args.option(['g', 'pg'], 'postgre服务URL');
args.option(['f', 'fileHost'], '文件中心本地化存储: WebApi 服务器地址(必填), 该服务器提供文件上传Web服务'); args.option(['f', 'fileHost'], '文件中心本地化存储: WebApi 服务器地址(必填), 该服务器提供文件上传Web服务');
// 七牛云存储参数
args.option('qnak', 'qiniuAccessKey');
args.option('qnsk', 'qiniuSecretKey');
args.option('qnbkt', 'qiniuBucket');
args.option('qndmn', 'qiniuDomain');
//
const flags = args.parse(process.argv); const flags = args.parse(process.argv);
const FS_UNIAPP_DB = process.env.FS_UNIAPP_DB || flags.pg; const FS_UNIAPP_DB = process.env.FS_UNIAPP_DB || flags.pg;
const FS_UNIAPP_FC_LOCAL_SVR_ORIGIN = process.env.FS_UNIAPP_FC_LOCAL_SVR_ORIGIN || flags.fileHost; // const LOCAL_SVR_ORIGIN = process.env.LOCAL_SVR_ORIGIN || flags.fileHost;
const QINIU_DOMAIN_QNDMN_RESOURCE = process.env.ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURC || flags.qndmn;
const QINIU_BUCKET_RESOURCE = process.env.ANXINCLOUD_QINIU_BUCKET_RESOURCE || flags.qnbkt;
const QINIU_AK = process.env.ANXINCLOUD_QINIU_ACCESSKEY || flags.qnak;
const QINIU_SK = process.env.ANXINCLOUD_QINIU_SECRETKEY || flags.qnsk;
if (!FS_UNIAPP_DB) { if (!FS_UNIAPP_DB) {
console.log('缺少启动参数,异常退出'); console.log('缺少启动参数,异常退出');
@ -30,10 +41,16 @@ const product = {
{ {
entry: require('@fs/attachment').entry, entry: require('@fs/attachment').entry,
opts: { opts: {
local: { // local: {
origin: FS_UNIAPP_FC_LOCAL_SVR_ORIGIN || `http://localhost:${flags.port || 8080}`, // origin: LOCAL_SVR_ORIGIN || `http://localhost:${flags.port || 8080}`,
rootPath: 'static', // rootPath: 'static',
childPath: 'upload', // childPath: 'upload',
// },
qiniu: {
domain: QINIU_DOMAIN_QNDMN_RESOURCE,
bucket: QINIU_BUCKET_RESOURCE,
accessKey: QINIU_AK,
secretKey: QINIU_SK
}, },
maxSize: 104857600, // 100M maxSize: 104857600, // 100M
} }

3950
api/log/development.log

File diff suppressed because it is too large

9
api/package.json

@ -5,7 +5,7 @@
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"test": "set DEBUG=true&&\"node_modules/.bin/mocha\" --harmony --reporter spec app/test/*.test.js", "test": "set DEBUG=true&&\"node_modules/.bin/mocha\" --harmony --reporter spec app/test/*.test.js",
"start": "set NODE_ENV=development&&node server -p 14000 -g postgres://postgres:123@10.8.30.32:5432/yinjiguanli -f http://localhost:14000", "start": "set NODE_ENV=development&&node server -p 4000 -g postgres://postgres:123@10.8.30.32:5432/highways4good -f http://localhost:14000",
"start:linux": "export NODE_ENV=development&&node server -p 4000 -g postgres://FashionAdmin:123456@10.8.30.39:5432/pm1", "start:linux": "export NODE_ENV=development&&node server -p 4000 -g postgres://FashionAdmin:123456@10.8.30.39:5432/pm1",
"automate": "sequelize-automate -c sequelize-automate.config.js" "automate": "sequelize-automate -c sequelize-automate.config.js"
}, },
@ -17,6 +17,7 @@
"archiver": "3.0.0", "archiver": "3.0.0",
"args": "^3.0.7", "args": "^3.0.7",
"async-busboy": "^0.7.0", "async-busboy": "^0.7.0",
"better-xlsx": "^0.7.6",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"file-saver": "^2.0.2", "file-saver": "^2.0.2",
"fs-web-server-scaffold": "^2.0.2", "fs-web-server-scaffold": "^2.0.2",
@ -24,6 +25,7 @@
"kafka-node": "^2.2.3", "kafka-node": "^2.2.3",
"koa-convert": "^1.2.0", "koa-convert": "^1.2.0",
"koa-proxy": "^0.9.0", "koa-proxy": "^0.9.0",
"koa2-swagger-ui": "^5.3.0",
"md5-node": "^1.0.1", "md5-node": "^1.0.1",
"moment": "^2.24.0", "moment": "^2.24.0",
"path": "^0.12.7", "path": "^0.12.7",
@ -33,10 +35,9 @@
"request": "^2.88.2", "request": "^2.88.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"superagent": "^3.5.2", "superagent": "^3.5.2",
"swagger-jsdoc": "^6.1.0",
"uuid": "^3.3.2", "uuid": "^3.3.2",
"xlsx": "^0.16.9", "xlsx": "^0.16.9"
"koa2-swagger-ui": "^5.3.0",
"swagger-jsdoc": "^6.1.0"
}, },
"devDependencies": { "devDependencies": {
"mocha": "^6.0.2" "mocha": "^6.0.2"

7
api/sequelize-automate.config.js

@ -1,7 +1,7 @@
module.exports = { module.exports = {
// 数据库配置 与 sequelize 相同 // 数据库配置 与 sequelize 相同
dbOptions: { dbOptions: {
database: 'yinjiguanli', database: 'highways4good',
username: 'postgres', username: 'postgres',
password: '123', password: '123',
dialect: 'postgres', dialect: 'postgres',
@ -18,6 +18,7 @@ module.exports = {
timestamps: false, timestamps: false,
}, },
}, },
// !!! 所有 model 都有自定义脚本所不能生成的内容 执行此脚本需谨慎
options: { options: {
type: 'freesun', // 指定 models 代码风格 type: 'freesun', // 指定 models 代码风格
camelCase: true, // Models 文件中代码是否使用驼峰命名 camelCase: true, // Models 文件中代码是否使用驼峰命名
@ -26,8 +27,8 @@ module.exports = {
dir: './app/lib/models', // 指定输出 models 文件的目录 dir: './app/lib/models', // 指定输出 models 文件的目录
typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义 typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义
emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir` emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir`
tables: ['user_placeSecurityRecord', 'places'], // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性 tables: null, // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性
skipTables: ['user'], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性 skipTables: [], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性
tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中 tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中
ignorePrefix: [], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面 ignorePrefix: [], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面
attrLength: false, // 在生成模型的字段中 是否生成 如 var(128)这种格式,公司一般使用 String ,则配置为 false attrLength: false, // 在生成模型的字段中 是否生成 如 var(128)这种格式,公司一般使用 String ,则配置为 false

77
api/utils/xlsxDownload.js

@ -0,0 +1,77 @@
'use strict';
const fs = require('fs');
const xlsx = require('better-xlsx');
const path = require('path')
const moment = require('moment')
//递归创建目录 同步方法
async function makeDir (dir) {
if (!fs.existsSync(dir)) {
makeDir(path.dirname(dir))
fs.mkdirSync(dir, function (err) {
if (err) {
throw err
}
});
}
}
async function simpleExcelDown ({ data = [], header = [], fileName = moment().format('YYYY-MM-DD HH:mm:ss') } = {}) {
const fileDirPath = path.join(__dirname, `../../downloadFiles`)
makeDir(fileDirPath)
const file = new xlsx.File();
const sheet_1 = file.addSheet('sheet_1');
// header
const headerStyle = new xlsx.Style();
headerStyle.align.h = 'center';
headerStyle.align.v = 'center';
headerStyle.border.right = 'thin';
headerStyle.border.rightColor = '#000000';
headerStyle.border.bottom = 'thin';
headerStyle.border.bottomColor = '#000000';
const headerRow = sheet_1.addRow();
const indexCell = headerRow.addCell();
indexCell.value = '序号'
indexCell.style = headerStyle
for (let h of header) {
const cell = headerRow.addCell();
cell.value = h.title;
cell.style = headerStyle
}
// data
const style = new xlsx.Style();
style.align.h = 'left';
style.align.v = 'center';
style.border.right = 'thin';
style.border.rightColor = '#000000';
style.border.bottom = 'thin';
style.border.bottomColor = '#000000';
for (let i = 0; i < data.length; i++) {
const row = sheet_1.addRow();
const indexCell = row.addCell();
indexCell.value = i + 1
indexCell.style = headerStyle
for (let h of header) {
const cell = row.addCell();
cell.value = data[i][h.key];
cell.style = style
}
}
const savePath = path.join(fileDirPath, fileName)
await new Promise(function (resolve, reject) {
file.saveAs()
.pipe(fs.createWriteStream(savePath))
.on('finish', () => {
resolve()
});
})
return savePath
}
module.exports = {
simpleExcelDown
}

4546
api/yarn.lock

File diff suppressed because it is too large

19
jenkinsfile_api

@ -0,0 +1,19 @@
pipeline {
agent {
node{
label 'jnlp-slave'
}
}
stages {
stage('Highways4Good Api ......') {
steps {
sh 'switch-auth.sh anxinyun'
buildName "#${BUILD_NUMBER} ~/fs-cloud/${JOB_NAME}:${IMAGE_VERSION}"
buildDescription "registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./api'
sh 'docker push registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
}
}
}
}

19
jenkinsfile_web

@ -0,0 +1,19 @@
pipeline {
agent {
node{
label 'jnlp-slave'
}
}
stages {
stage('Highways4Good Web......') {
steps {
sh 'switch-auth.sh anxinyun'
buildName "#${BUILD_NUMBER} ~/fs-cloud/${JOB_NAME}:${IMAGE_VERSION}"
buildDescription "registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}"
sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION} ./web'
sh 'docker push registry.cn-hangzhou.aliyuncs.com/${CLOUD}/${JOB_NAME}:${IMAGE_VERSION}'
}
}
}
}

8
scripts/0.0.1/data/1_update_user_dep_data.sql

@ -0,0 +1,8 @@
-- ----------------------------
-- Records of DEP
-- ----------------------------
INSERT INTO "department" VALUES (1, '默认部门', NULL, false);
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO "user" VALUES (1, '管理员', 'SuperAdmin', 'e10adc3949ba59abbe56e057f20f883e', 1, 'f', NULL, 'SuperAdmin', NULL, TRUE);

9
scripts/0.0.1/data/2_update_statistic_data.sql

@ -0,0 +1,9 @@
INSERT INTO statistic (name, count, type) values ('客运车', 0, 'vehicle');
INSERT INTO statistic (name, count, type) values ('标线', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('人行道', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('标志牌', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('防护栏', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('检查井', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('雨水口', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('路牌名', 0, 'road_manage');
INSERT INTO statistic (name, count, type) values ('养护责任牌', 0, 'road_manage');

17
scripts/0.0.1/data/3_init_report_pic_data/.vscode/launch.json

@ -0,0 +1,17 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.js"
}
]
}

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/1-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/1-2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/10-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/11-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/12-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/13-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/14-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/15-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/16-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 KiB

BIN
scripts/0.0.1/data/3_init_report_pic_data/data/pic/17-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save