明树Git Lab

Commit d5a6c8d4 authored by zengfanpei's avatar zengfanpei

update: 通知

parent 0d8a2f3a
# 文件结构
### config
| 目录 | 注释 |
| --- | --- |
| config | 配置 |
| controller | 控制器 |
| cron | 定时任务 |
| db | 数据库初始化 |
| middlerware | 中间件 |
| module | 数据操作 |
| public | 公共文件 |
| router | 路由 |
| utils | 工具方法 |
### controller
### db
### middlerware
# 记录
### modules
```
1. 待完成excel导出
2. 农业投入品表的增删改查
```
### public
### router
### test
### utils
### server.js
1. 现阶段进展:20240822
a. 建表用户表、设备表(多种设备集成)、三张信息采集表(按设备种类对应采集表)
b. 定时任务获取 墒情设备列表、获取设备信息入库代码流程基本走通
c. 用户、角色、菜单权限(要看前端控制程度, 是否包含父子结构)
2. 未处理
a. 设备在线状态 接口获取到状态直接更新倒redis里面
b. 硬件返回信息 返回形式 有待细化
{
"tokenEx": 86400,
"tokenEx": 86400000000,
"dbURI": "mongodb://bridata:Mingshu20170706@47.94.146.184:27017/letian?authSource=admin",
"file": {
"storagePath": "public/avatar"
......
......@@ -18,7 +18,14 @@
"getAllDevice": "http://open.sennor.net:1881/getAllDevice",
"getInsectNewCollectionResult": "http://open.sennor.net:1881/getInsectNewCollectionResult",
"uploadCameraPhoto": "http://open.sennor.net:1881/uploadCameraPhoto",
"getPreventionToInsectName": "http://open.sennor.net:1881/getPreventionToInsectName"
"getPreventionToInsectName": "http://open.sennor.net:1881/getPreventionToInsectName",
"typeName": {
"1": "采集点",
"2": "气象站",
"3": "全景相机",
"4": "细节相机"
}
},
"cron": {
"getDeviceList": false,
......
async function list(req, res, next) {
try {
let userId = req.user._id;
let search = { del: 0, receiveUser: userId };
let page = req.body.page || 1;
let pageSize = req.body.pageSize || 10;
let skip = (page - 1) * pageSize;
const count = await DB.Notice.countDocuments(search);
let list = await DB.Notice.find(search).skip(skip).limit(pageSize).populate({path: "sendUser receiveUser"}).lean().exec();
res.sendData({count, list});
} catch (error) {
next(error)
}
}
async function getNotice(req, res, next) {
try {
let userId = req.user._id;
let ret = await DB.Notice.findOne({_id: req.body._id}).populate({path: "sendUser receiveUser"}).lean().exec();
await DB.Notice.updateOne({_id: req.body._id}, {read: true});
return ret;
} catch (error) {
next(error)
}
}
module.exports = {
list,
getNotice
}
\ No newline at end of file
......@@ -39,9 +39,10 @@ async function login(req, res, next) {
}
// 生成一个串 返回前端
let token = crypto.randomUUID();
user.token = token;
user.token = token.split('-').join("");
let userStr = JSON.stringify(user);
await ioRedis.set(`token:${token}`, userStr, 'EX', sysConfig.tokenEx);
console.log(userStr, "====")
await ioRedis.set(`token:${user.token}`, userStr, 'EX', sysConfig.tokenEx);
let ret = _.omit(user, ['password', 'salt']);
let menus = await userModule.getRoleMenus(ret.roles);
ret.menus = menus;
......
......@@ -33,6 +33,7 @@ const Menu = require('./models/systemMenu');
const Button = require('./models/systemButton');
const Depart = require('./models/systemDepart');
const File = require('./models/systemFile');
const Notice = require('./models/systemNotice');
const Land = require('./models/letianLand');
const AgrInRecord = require('./models/letianAgrInRecord');
......@@ -59,6 +60,7 @@ global.DB = {
Device,
Depart,
File,
Notice,
Land,
AgrInRecord,
......@@ -81,3 +83,4 @@ global.DB = {
......@@ -7,10 +7,12 @@ const moment = require('moment');
*/
const Noticechema = new Schema({
sendUser: {
type: mongoose.Types.ObjectId,
ref: "User"
},
receiveUser: {
type: mongoose.Types.ObjectId,
ref: "User"
},
content: String,
sendTime: {
......@@ -18,6 +20,11 @@ const Noticechema = new Schema({
default: Date.now,
get: v => moment(v).format("YYYY-MM-DD HH:mm:ss"),
},
read: {
type: Boolean,
default: false,
comment: "true 已读, false 未读"
},
......
......@@ -2,8 +2,10 @@ const Redis = require('ioredis');
const redis = new Redis({
host: "localhost",
port: 6379,
port: 6379,
host: "127.0.0.1",
password: "Mingshu20170706",
db: 0,
});
......
......@@ -6,25 +6,27 @@ const mongoose = require('mongoose');
module.exports = async (req, res, next) => {
req.reqId = new mongoose.Types.ObjectId();
/* 1. 处理token */
// if (!checkPath(req.path)) {
// if (!req.headers.Authorization) {
// next(createError(401));
// }
// const userStr = await ioRedis.get(`token:${req.headers.Authorization}`);
// if (userStr) {
// try {
// req.user = JSON.parse(userStr);
// // 刷新token时间
// await ioRedis.expire(`token:${req.headers.Authorization}`, sysConfig.tokenEx)
// } catch (error) {
// //解析有误
// next(createError(401));
// }
// } else {
// //过期
// next(createError(401));
// }
// }
if (!checkPath(req.path)) {
if (!req.headers.authorization) {
next(createError(401));
}
console.log(`token:${req.headers.authorization}`, "==")
const userStr = await ioRedis.get(`token:${req.headers.authorization}`);
console.log(userStr)
if (userStr) {
try {
req.user = JSON.parse(userStr);
// 刷新token时间
await ioRedis.expire(`token:${req.headers.authorization}`, sysConfig.tokenEx)
} catch (error) {
//解析有误
next(createError(401));
}
} else {
//过期
next(createError(401));
}
}
/* --------------3. 记录所有进来的日志,是否记录响应的值有待 */
requestLogModule.createRequestLog({
......
......@@ -4,6 +4,7 @@ const router = express.Router();
const userRouter = require('./userRouter');
const departRouter = require('./departRouter');
const menuRouter = require('./menuRouter');
const noticeRouter = require('./noticeRouter');
const fileRouter = require('./fileRouter');
......@@ -20,6 +21,7 @@ router.post('/init', initController.init); // 后续删除
router.use('/user', userRouter); // 用户 角色
router.use('/depart', departRouter); // 部门
router.use('/menu', menuRouter); //菜单 按钮
router.use('/notice', noticeRouter);
router.use('/file', fileRouter); // 文件
......
const express = require('express');
const router = express.Router();
const noticeController = require('../controller/noticeController');
router.post('/list', noticeController.list);
router.post('/info', noticeController.getNotice);
module.exports = router;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment