# erp-next **Repository Path**: plightfield/erp-next ## Basic Information - **Project Name**: erp-next - **Description**: 简化的 erp 项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-03 - **Last Updated**: 2023-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ERP 系统 Enterprise Resource Plan 企业资源计划 公司管理后台 70% 商品 SKU: 商品的概念 iPhone 14 显示价格,是最低的 spu 商品 SPU:具体的商品 iPhone 14 pro max 黑色 256g 可以入库 事务性问题 a 给 b 转账 10 块:a-10 -> b+10 假设 b+10 出错,a 绝不能 -10,必须回退 事务:操作要么全部执行,要么全部不执行 最终一致性 1. 操作之前,数据全部深复制一份 2. 进行操作 3. 如果操作不出错,发送请求提交 4. 如果操作错误,替换复制的数据 安全库存 1000 货,安全库存 20%,当只剩下 200 货,不允许下单 订单状态:已下单,配货中,运输中,已收件,已确认,已评价,退货中,已退货,已退款,换货中,已换货 BPMN 流程引擎 # websocket http 请求:常用 Promise 模拟,只发送一次,只接收一次,如果不是这种情况,需要用原生/回调/流 来模拟 1 次会话,发送一次之后,无法再次发送 1 次会话,多次发送请求:长连接,双工(你能说,我也能说)会话 —— websocket `const ws = new WebSocket('ws://origin:port/path?xxx=1')` `ws.onOpen(()=>{ ws.on('message',cb);ws.send() })` 聊天室 ws 地址:`ws://localhost:3000/chatroom/ws?\_id=聊天室id` 数据结构:`{user,data}` data:"\_\_heartbeat\_\_","\_\_close\_\_","正常的聊天信息" 返回的数据:`{_id: string;roomId: string;user: User;content: string;}{}[]` # 自动生成结构 在 `back/controllers` 下新建文件,比如 **entity.js** 写入代码: ```javascript const { app } = require("../index"); const { mapCRUD } = require("../utils"); mapCRUD( "entity", app, // 数据中不可以冲突的属性 "name", // 用以提供模糊查询的属性 ["name"] ); ``` 可以生成以下接口: 1. get /entitys , 查询字符串:current=1&pageSize=10&all= 如果 all 不是 '',则会将所有数据查询出来 还可以传入模糊查询的数据 2. get /entity , 查询字符串:\_id=xxx 通过 id 查询单个数据 3. put /entity,json body: 新数据 新增一条记录 4. post /entity,json body: 修改数据 修改一条记录 5. delete /entitys,查询字符串:ids=id1,id2,id3 删除多条记录 ## 运行 `cd back` `npm install` react: `cd front` `npm install` vue: `cd front-vue` `npm install`