diff --git a/app/cms/api/index.js b/app/cms/api/index.js new file mode 100644 index 0000000..792867b --- /dev/null +++ b/app/cms/api/index.js @@ -0,0 +1,16 @@ +'use strict'; + +module.exports = { + doc : "默认页面", + path : "cms/index/", + method : ["get", "post"], + middleware: [], + params : { + "age": "int?" + }, + return : {}, + fun : async (ctx, app) => { + const User = await app.table("User").where(where).findAll() + ctx.body = {res} + } +} diff --git a/app/cms/controller/index.js b/app/cms/controller/index.js deleted file mode 100644 index 9d604e7..0000000 --- a/app/cms/controller/index.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -module.exports = { - doc : "默认页面", - path : "cms/index/", - method : ["get", "post"], - middleware: [], - params : { - "age": "int?" - }, - return : {}, - fun: async (ctx, app) => { - console.log(ctx.request.body); - // app.err.ParameterException() - // app.event.emit('test.event2') - // const User = await app.table("User").where(where).findAll() - // const User = await app.table("User").time(["2022-04-9", "2022-04-10"]).findAll() - // const User = await app.table("User").where(where).findOrCreate(data) - // const {count, rows} = await app.table("User").where(where).findAndCountAll() - // const User = await app.table("User").save(data) - // const res = { - // // "创建单个数据" : await app.table("User").data({uid: "6666"}).save(), - // "查询单个数据" : await app.table("User").where({id: 2}).find(), - // "查询单个数据,不存在就创建" : await app.table("User").where({id: 999}).data({uid: "6666"}).findOrCreate(), - // "查询所有数据" : await app.table("User").where({uid: "6666"}).findAll(), - // "查询所有数据(时间区间)" : await app.table("User").time(['2022-04-09', '2022-04-10']).findAll(), - // "查询所有数据(当月数据)" : await app.table("User").time('month').findAll(), - // "查询所有数据(30分钟内的数据)": await app.table("User").time(30).findAll(), - // "查询所有数据(分页)" : await app.table("User").where({uid: "6666"}).page(1).limit(1).findAll(), - // "查询所有数据+总行数(分页)" : await app.table("User").where({uid: "6666"}).page(1).limit(1).findAndCountAll(), - // } - - /* - await app.setTransaction() // 设置事务 - await app.table("User").data({uid: "6666"}).save() - await app.table("User").where({id: 2}).find() - await app.table("User").data({uid: "6666"}).save() - await app.table("User").where({id: 2}).find() - await app.commitTransaction() //提交事务,如果设置了事务不提交,任务不会执行 - */ - - // await app.table("User").where({id: 1032}).data({age: 1}).setInc() // 字段值+1 - // await app.table("User").where({id: 1032}).data({age: 2}).setInc() // 字段值+2 - // const {res, value} = await app.table("User").where({id: 1032}).data({age: 2}).setDec(0) // 字段值-2,不能低于0,如果低于0返回false - // const {res, value} = await app.table("User").where({id: 1032}).data({age: 2}).setDec(0,10) // 字段值-2,不能低于0,如果低于0设置为10 - // const {res, value} = await app.table("User").where({id: 1032}).data({age: 2}).setInc(20, 10) // 字段值+2,不能大于20,如果大于20设置为10 - // const res = await app.table("User").count() // 统计 - // const res = await app.table("User").data("age").sum() // 求和 - // const res = await app.table("User").data("age").max() // 查询最大值 - // const res = await app.table("User").data("age").min() // 查询最小值 - - const res = await app.jsonTasks([ - {"table": "User", "where": {id: 999}, "find": "", "as": "user_data"},//as 设置结果别名 - // { - // "table" : "UserInfo", - // "data" : { - // "phone": "13126000000", - // "uid": "$as.user_data.id",//根据别名 user_data 返回的结果中的id值作为数据保存 - // }, "save": "" - // }, - { - "as": "user_info", - "table" : "UserInfo", - "where" : { - "uid": "$as.user_data.id",//根据别名 user_data 返回的结果中的id值作为条件查询 - }, "find": "" - }, - - // {"table": "User", "data": "age", "min": ""}, - // { - // "as": "user_list", "jsonTasks": [ //整个任务设置别名 - // {"setTransaction": ""}, // 开始事务 - // {"table": "User", "data": "age", "sum": ""}, - // {"table": "User", "data": "age", "max": ""}, - // {"table": "User", "data": "age", "min": ""}, - // {"commitTransaction": ""}, //提交事务 - // ] - // }, - ]) - - - ctx.body = {res} - } -} diff --git a/app/cms/schedule/cms_test.js b/app/cms/schedule/cms_test.js new file mode 100644 index 0000000..d214c95 --- /dev/null +++ b/app/cms/schedule/cms_test.js @@ -0,0 +1,12 @@ +'use strict'; +// 定时任务 +module.exports = { + time: { + cron: '0/5 * * * * ?', + // every: 2000, + // limit: 100, + }, + fun: (app) => { + console.log("test",new Date()); + } +} diff --git a/app/cms/schedule/test2.js b/app/cms/schedule/test2.js new file mode 100644 index 0000000..9fff7e8 --- /dev/null +++ b/app/cms/schedule/test2.js @@ -0,0 +1,12 @@ +'use strict'; +// 定时任务 +module.exports = { + time: { + cron: '0/5 * * * * ?', + // every: 2000, + // limit: 100, + }, + fun: (app) => { + console.log("test2",new Date()); + } +} diff --git a/schedule/定时任务 b/app/cms/schedule/定时任务 similarity index 100% rename from schedule/定时任务 rename to app/cms/schedule/定时任务 diff --git a/app/controller/控制器 b/app/controller/控制器 deleted file mode 100644 index e69de29..0000000 diff --git a/extend/api/config.js b/extend/api/config.js new file mode 100644 index 0000000..729794f --- /dev/null +++ b/extend/api/config.js @@ -0,0 +1,3 @@ +module.exports = { + path:"app/*/api/*.js" +} diff --git a/extend/api/index.js b/extend/api/index.js new file mode 100644 index 0000000..7554886 --- /dev/null +++ b/extend/api/index.js @@ -0,0 +1,13 @@ +/** + * 加载api路由 + * 加载app/api目录下的文件到路由 + */ +const config = require("./config") +module.exports = async (app) => { + let list = await app.load(config.path) + list.forEach(item => { + app.use(async (ctx, next) => { + return await item.res.fun(ctx, next) + }) + }) +} diff --git a/extend/bullmq/config.js b/extend/bullmq/config.js new file mode 100644 index 0000000..562c5bc --- /dev/null +++ b/extend/bullmq/config.js @@ -0,0 +1,10 @@ +module.exports = { + path:"app/*/schedule/*.js", + bullmq:{ + port: 6379, // Redis port + host: "192.168.1.26", // Redis host + // username: "", // needs Redis >= 6 + password: "9715115286", + db: 0, // Defaults to 0 + }, +} diff --git a/extend/bullmq/index.js b/extend/bullmq/index.js new file mode 100644 index 0000000..4a89836 --- /dev/null +++ b/extend/bullmq/index.js @@ -0,0 +1,38 @@ +/** + * 分布式定时任务 + * 加载schedule文件夹下的任务 + * https://blog.pincman.com/archives/18/ + * https://docs.bullmq.io + * + */ +const config = require("./config") +// const schedule = require("./schedule") +const mq = require("./queue") +module.exports = async (app) => { + app.mq = mq + + + const queueName = "boobam_schedule" + const queue = mq.Queue(queueName); + mq.QueueScheduler(queueName);//处理延时任务 + await queue.obliterate();//清空所有定时任务 + const list = await app.load(config.path) + //等待所有插件载入完成后,启动Worker + app.willReadyList.push(async () => { + for (let el of list) { + mq.Worker(queueName, async job => { + if (job.name===el.parse.name){ + el.res.fun(app) + } + }); + await queue.add(el.parse.name,{},{ + repeat: el.res.time, + }) + } + }) + +} + + + + diff --git a/extend/bullmq/queue.js b/extend/bullmq/queue.js new file mode 100644 index 0000000..6730588 --- /dev/null +++ b/extend/bullmq/queue.js @@ -0,0 +1,9 @@ +const {Queue, QueueScheduler, Worker,QueueEvents} = require("bullmq") +const config = require("./config") +module.exports = { + Queue: (name) => new Queue(name, {connection: config.bullmq}), + QueueScheduler: (name) => new QueueScheduler(name, {connection: config.bullmq}), + QueueEvents: (name) => new QueueEvents(name, {connection: config.bullmq}), + Worker: (name, ops) => new Worker(name, ops, {connection: config.bullmq}), + Job: (ops) => new Job(ops, {connection: config.bullmq}), +} diff --git a/extend/mysql/index.js b/extend/mysql/index.js index e5ab0b8..ebfbdf6 100644 --- a/extend/mysql/index.js +++ b/extend/mysql/index.js @@ -42,7 +42,7 @@ module.exports = async (app) => { const api = new Api(sequelize, sequelize.models) app.db = api // console.log(api); - console.log(await app.db.table("User").find()); + // console.log(await app.db.table("User").find()); //等待所有插件载入完成后,自动更新数据库字段 //把所有模型的md5值存入到redis里面去,哪个文件的md5有变动就更新哪个表的字段. diff --git a/extend/redis/index.js b/extend/redis/index.js index 3ee10d6..003525c 100644 --- a/extend/redis/index.js +++ b/extend/redis/index.js @@ -10,5 +10,6 @@ const Redis = require("ioredis"); module.exports = async (app) => { const redis = new Redis(config); app.redis = redis + app.Redis = Redis } diff --git a/extend/socket.io/index.js b/extend/socket.io/index.js index de8e3f6..6a846f1 100644 --- a/extend/socket.io/index.js +++ b/extend/socket.io/index.js @@ -14,7 +14,13 @@ module.exports = async (app) => { app.io = io //默认命名空间 io.on('connection', socket => { - socket.emit('open', "id:"+socket.id+"连接成功!");//通知客户端已连接 + //通知客户端已连接 + socket.emit('open', { + msg:"ok", + data:{ + id:socket.id + } + }); console.log('连接=>',"id:"+socket.id); //监听disconnect事件 socket.on('disconnect', (eventName, callback) => { diff --git a/package.json b/package.json index 6df1de9..f02b25c 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "ajv": "^8.11.0", "babel-loader": "^8.2.3", "bamboo_smf": "^1.0.5", + "bullmq": "^1.85.1", "clean-webpack-plugin": "^4.0.0", "cross-env": "^7.0.3", "glob": "^8.0.1", diff --git a/schedule/pbm.js b/schedule/pbm.js deleted file mode 100644 index b9c3e74..0000000 --- a/schedule/pbm.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; -// 定时任务 -module.exports = [ - { - name : "", - time : "*/3 * * * * *", - run : true,//系统启动时立即执行一次 - schedule: (app) => { - // console.log('每3秒我执行一次' + app.utils.VERSION) - } - }, -] diff --git a/schedule/test.js b/schedule/test.js deleted file mode 100644 index 172f5c7..0000000 --- a/schedule/test.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; -// 监听事件 -module.exports = { - time : "*/3 * * * * *", - run : true,//系统启动时立即执行一次 - schedule: (app) => { - // console.log('每3秒我执行一次' + app.utils.VERSION) - } -} diff --git a/sqlite/database.sqlite b/sqlite/database.sqlite deleted file mode 100644 index 87824de..0000000 Binary files a/sqlite/database.sqlite and /dev/null differ diff --git a/sqlite/model/MysqlMD5.js b/sqlite/model/MysqlMD5.js deleted file mode 100644 index 7a5b60a..0000000 --- a/sqlite/model/MysqlMD5.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - doc : "mysql模型文件的m5记录", - model: { - fileName: {type: "STRING", comment: '文件名称'}, - md5 : {type: "TEXT", comment: 'md5记录'}, - } -} diff --git a/sqlite/model/PermissionsDatabase.js b/sqlite/model/PermissionsDatabase.js deleted file mode 100644 index 2a6cae2..0000000 --- a/sqlite/model/PermissionsDatabase.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - doc : "数据权限表(只在默认api生效)", - model: { - code : {type: "STRING", comment: '角色代码'}, - table: {type: "STRING", comment: '表名'}, - key : {type: "STRING", comment: '表字段'}, - crud: { - type : "ENUM", comment: 'crud权限', - values: [ - "C", // 创建 - "R", // 读取 - "U", // 更新 - "D", // 删除 - ] - }, - value: { - type : "ENUM", comment: '状态', - values: [ - 0, // 禁止 - 1, //通行 - ], - defaultValue: 0, - }, - } -} diff --git a/sqlite/model/PermissionsElement.js b/sqlite/model/PermissionsElement.js deleted file mode 100644 index 8f2d20c..0000000 --- a/sqlite/model/PermissionsElement.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - doc : "页面元素是否显示权限表", - model: { - code : {type: "STRING", comment: '角色代码'}, - key : {type: "STRING", comment: '元素id', unique: true}, - value: { - type : "ENUM", comment: '状态', - values : [ - //注意,一般页面元素会很多,默认是显示状态 - 0, // 通行 - 1, //禁止 - ], - defaultValue: 0, - }, - } -} diff --git a/sqlite/model/PermissionsPage.js b/sqlite/model/PermissionsPage.js deleted file mode 100644 index 9757461..0000000 --- a/sqlite/model/PermissionsPage.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - doc : "页面权限表", - model: { - code : {type: "STRING", comment: '角色代码'}, - key : {type: "STRING", comment: '页面标识,一般是页面url',unique: true}, - value: { - type : "ENUM", comment: '状态', - values: [ - 0, // 禁止 - 1, //通行 - ], - defaultValue: 0, - }, - } -} diff --git a/sqlite/model/Role.js b/sqlite/model/Role.js deleted file mode 100644 index 4fd8656..0000000 --- a/sqlite/model/Role.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - doc : "角色", - model: { - cname: {type: "STRING", comment: '角色别名'}, - code : {type: "STRING", comment: '角色代码'}, - super: { - type : "ENUM", comment: '是否为超级管理员(不校验权限)', - values : [ - 0, // api地址 - 1, //url地址 - ], - defaultValue: 0, - }, - doc : {type: "TEXT", comment: '说明'}, - } -} diff --git a/sqlite/model/Rout.js b/sqlite/model/Rout.js deleted file mode 100644 index dc82ca9..0000000 --- a/sqlite/model/Rout.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - doc : "路由表表", - model: { - name: {type: "STRING", comment: '路由名称'}, - key : {type: "STRING", comment: '路由标识,一般是路由url或页面url'}, - type: { - type : "ENUM", comment: '字段类型', - values: [ - 'api', // api地址 - 'url', //url地址 - ] - }, - } -} diff --git a/sqlite/model/Setting.js b/sqlite/model/Setting.js deleted file mode 100644 index 3d9068e..0000000 --- a/sqlite/model/Setting.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - doc : "系统设置", - model: { - title: {type: "STRING", comment: '字段标题'}, - doc : {type: "TEXT", comment: '字段说明'}, - type : { - type : "ENUM", comment: '字段类型', - values: [ - 'int', // 整数 - 'string', //字符串 - 'json', // json - 'rich' // 富文本 - ], - defaultValue: 'string', - }, - code : {type: "STRING", comment: '字段code'}, - value: {type: "TEXT", comment: '值'}, - } -}