明树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", "dbURI": "mongodb://bridata:Mingshu20170706@47.94.146.184:27017/letian?authSource=admin",
"file": { "file": {
"storagePath": "public/avatar" "storagePath": "public/avatar"
......
...@@ -18,7 +18,14 @@ ...@@ -18,7 +18,14 @@
"getAllDevice": "http://open.sennor.net:1881/getAllDevice", "getAllDevice": "http://open.sennor.net:1881/getAllDevice",
"getInsectNewCollectionResult": "http://open.sennor.net:1881/getInsectNewCollectionResult", "getInsectNewCollectionResult": "http://open.sennor.net:1881/getInsectNewCollectionResult",
"uploadCameraPhoto": "http://open.sennor.net:1881/uploadCameraPhoto", "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": { "cron": {
"getDeviceList": false, "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) { ...@@ -39,9 +39,10 @@ async function login(req, res, next) {
} }
// 生成一个串 返回前端 // 生成一个串 返回前端
let token = crypto.randomUUID(); let token = crypto.randomUUID();
user.token = token; user.token = token.split('-').join("");
let userStr = JSON.stringify(user); 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 ret = _.omit(user, ['password', 'salt']);
let menus = await userModule.getRoleMenus(ret.roles); let menus = await userModule.getRoleMenus(ret.roles);
ret.menus = menus; ret.menus = menus;
......
...@@ -33,6 +33,7 @@ const Menu = require('./models/systemMenu'); ...@@ -33,6 +33,7 @@ const Menu = require('./models/systemMenu');
const Button = require('./models/systemButton'); const Button = require('./models/systemButton');
const Depart = require('./models/systemDepart'); const Depart = require('./models/systemDepart');
const File = require('./models/systemFile'); const File = require('./models/systemFile');
const Notice = require('./models/systemNotice');
const Land = require('./models/letianLand'); const Land = require('./models/letianLand');
const AgrInRecord = require('./models/letianAgrInRecord'); const AgrInRecord = require('./models/letianAgrInRecord');
...@@ -59,6 +60,7 @@ global.DB = { ...@@ -59,6 +60,7 @@ global.DB = {
Device, Device,
Depart, Depart,
File, File,
Notice,
Land, Land,
AgrInRecord, AgrInRecord,
...@@ -81,3 +83,4 @@ global.DB = { ...@@ -81,3 +83,4 @@ global.DB = {
...@@ -7,10 +7,12 @@ const moment = require('moment'); ...@@ -7,10 +7,12 @@ const moment = require('moment');
*/ */
const Noticechema = new Schema({ const Noticechema = new Schema({
sendUser: { sendUser: {
type: mongoose.Types.ObjectId,
ref: "User"
}, },
receiveUser: { receiveUser: {
type: mongoose.Types.ObjectId,
ref: "User"
}, },
content: String, content: String,
sendTime: { sendTime: {
...@@ -18,6 +20,11 @@ const Noticechema = new Schema({ ...@@ -18,6 +20,11 @@ const Noticechema = new Schema({
default: Date.now, default: Date.now,
get: v => moment(v).format("YYYY-MM-DD HH:mm:ss"), 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'); ...@@ -2,8 +2,10 @@ const Redis = require('ioredis');
const redis = new Redis({ 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'); ...@@ -6,25 +6,27 @@ const mongoose = require('mongoose');
module.exports = async (req, res, next) => { module.exports = async (req, res, next) => {
req.reqId = new mongoose.Types.ObjectId(); req.reqId = new mongoose.Types.ObjectId();
/* 1. 处理token */ /* 1. 处理token */
// if (!checkPath(req.path)) { if (!checkPath(req.path)) {
// if (!req.headers.Authorization) { if (!req.headers.authorization) {
// next(createError(401)); next(createError(401));
// } }
// const userStr = await ioRedis.get(`token:${req.headers.Authorization}`); console.log(`token:${req.headers.authorization}`, "==")
// if (userStr) { const userStr = await ioRedis.get(`token:${req.headers.authorization}`);
// try { console.log(userStr)
// req.user = JSON.parse(userStr); if (userStr) {
// // 刷新token时间 try {
// await ioRedis.expire(`token:${req.headers.Authorization}`, sysConfig.tokenEx) req.user = JSON.parse(userStr);
// } catch (error) { // 刷新token时间
// //解析有误 await ioRedis.expire(`token:${req.headers.authorization}`, sysConfig.tokenEx)
// next(createError(401)); } catch (error) {
// } //解析有误
// } else { next(createError(401));
// //过期 }
// next(createError(401)); } else {
// } //过期
// } next(createError(401));
}
}
/* --------------3. 记录所有进来的日志,是否记录响应的值有待 */ /* --------------3. 记录所有进来的日志,是否记录响应的值有待 */
requestLogModule.createRequestLog({ requestLogModule.createRequestLog({
......
...@@ -4,6 +4,7 @@ const router = express.Router(); ...@@ -4,6 +4,7 @@ const router = express.Router();
const userRouter = require('./userRouter'); const userRouter = require('./userRouter');
const departRouter = require('./departRouter'); const departRouter = require('./departRouter');
const menuRouter = require('./menuRouter'); const menuRouter = require('./menuRouter');
const noticeRouter = require('./noticeRouter');
const fileRouter = require('./fileRouter'); const fileRouter = require('./fileRouter');
...@@ -20,6 +21,7 @@ router.post('/init', initController.init); // 后续删除 ...@@ -20,6 +21,7 @@ router.post('/init', initController.init); // 后续删除
router.use('/user', userRouter); // 用户 角色 router.use('/user', userRouter); // 用户 角色
router.use('/depart', departRouter); // 部门 router.use('/depart', departRouter); // 部门
router.use('/menu', menuRouter); //菜单 按钮 router.use('/menu', menuRouter); //菜单 按钮
router.use('/notice', noticeRouter);
router.use('/file', fileRouter); // 文件 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