SMT-ERP 项目初始提交
This commit is contained in:
88
smtERP-boot/docs/asset_management.md
Normal file
88
smtERP-boot/docs/asset_management.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# 资产管理模块
|
||||
|
||||
## 原 n2tpm 盘点接口兼容
|
||||
|
||||
当前服务保留自身 `/apis` 上下文,并提供原盘点协议的以下 POST 接口:
|
||||
|
||||
- `/apis/n2tpm/webmvc/Inventory/Login`
|
||||
- `/apis/n2tpm/webmvc/Inventory/GetInventory`
|
||||
- `/apis/n2tpm/webmvc/Inventory/GetInventoryDetail`
|
||||
- `/apis/n2tpm/webmvc/Inventory/SaveDeviceInventoryInfo`
|
||||
- `/apis/n2tpm/webmvc/Inventory/AccepteOrHandoverDocForInventory`
|
||||
- `/apis/n2tpm/webmvc/Inventory/UploadPicture`
|
||||
- `/apis/n2tpm/webmvc/Inventory/GetDevice`
|
||||
|
||||
接口请求字段、响应中的业务字段及 `code/msg/data` 包装与原项目一致。若外部设备必须继续访问
|
||||
`/n2tpm/webmvc/Inventory/**`,请在网关将该路径转发到本服务的
|
||||
`/apis/n2tpm/webmvc/Inventory/**`,无需修改前端和现有 `/apis` 接口。
|
||||
|
||||
## 部署
|
||||
|
||||
1. 执行 `src/main/resources/db/migration/V20260918__asset_management.sql`。
|
||||
2. 重启后端并重新登录前端,使动态菜单和角色权限重新加载。
|
||||
3. 管理员菜单中会出现“资产管理”,包含“资产台账”“设备台账”“资产盘点”。
|
||||
|
||||
## 盘点流程
|
||||
|
||||
盘点状态依次为:草稿(DRAFT)→ 盘点中(IN_PROGRESS)→ 待审核(PENDING_AUDIT)→ 已完成(COMPLETED)→ 已关结(CLOSED)。
|
||||
|
||||
创建盘点单时会把当前资产/设备台账固化为盘点快照。盘点支持按明细操作,也支持输入或扫描资产、设备编号定位明细。实盘数量和账面数量不一致时会自动判断盘盈或盘亏;部门、地点变化时会判断为异常,也可人工指定结果。
|
||||
|
||||
## 协同服务接口
|
||||
|
||||
推荐接口:
|
||||
|
||||
```http
|
||||
POST /apis/assetInventory/collaboration/create
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"externalRequestId": "外部系统唯一请求号",
|
||||
"planName": "月度设备盘点",
|
||||
"scopeType": "DEVICE",
|
||||
"deadline": "2026-09-30 18:00:00",
|
||||
"remark": "由协同服务创建"
|
||||
}
|
||||
```
|
||||
|
||||
`externalRequestId` 是租户内幂等键,外部服务重试时会返回原盘点单,不会重复建单。接口沿用系统登录会话和租户隔离机制。
|
||||
|
||||
为兼容参考工程中的调用路径,同时保留:
|
||||
|
||||
```http
|
||||
POST /apis/tpmDouble/cteatePdTasks
|
||||
```
|
||||
|
||||
该兼容接口固定以全部设备台账创建盘点任务,可选传入 `externalRequestId`、`planName`、`deadline` 和 `remark`。
|
||||
|
||||
### 外部服务回传单项盘点结果
|
||||
|
||||
推荐使用:
|
||||
|
||||
```http
|
||||
POST /apis/assetInventory/collaboration/record
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
为兼容原设备项目的调用路径,同时支持:
|
||||
|
||||
```http
|
||||
POST /apis/deviceInventory/doDevicePlan
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
按盘点单号和设备编码回传示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"inventoryNo": "PD20260918131230171",
|
||||
"deviceSn": "QC-SPI-01",
|
||||
"remark": "外部采集服务确认设备在位"
|
||||
}
|
||||
```
|
||||
|
||||
也可以传 `inventoryId` 与 `detailId`,或者使用 `targetCode`、`deviceCode`、`assetCode` 作为对象编码。回传成功后,明细由“未盘点”更新为“已盘点”,主单自动进入“盘点中”并刷新已盘数量。重复回传同一明细按幂等成功处理,不会重复计数。若外部系统能够判断差异,可将 `inventoryStatus` 传为 `NORMAL`、`SURPLUS`、`SHORTAGE` 或 `ABNORMAL`。
|
||||
|
||||
接口沿用本系统认证与租户隔离,外部服务调用时需携带有效登录令牌或会话。
|
||||
45
smtERP-boot/docs/create_customer_tables.sql
Normal file
45
smtERP-boot/docs/create_customer_tables.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
-- 客户分类表
|
||||
CREATE TABLE IF NOT EXISTS `tbl_customer_category` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`category_name` varchar(100) DEFAULT NULL COMMENT '分类名称',
|
||||
`parent_id` bigint(20) DEFAULT 0 COMMENT '父分类ID,0表示顶级',
|
||||
`level` int(11) DEFAULT 1 COMMENT '层级',
|
||||
`sort` varchar(20) DEFAULT NULL COMMENT '排序',
|
||||
`description` varchar(500) DEFAULT NULL COMMENT '描述',
|
||||
`enabled` tinyint(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`creator` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户分类表';
|
||||
|
||||
-- 客户联系人表
|
||||
CREATE TABLE IF NOT EXISTS `tbl_customer_contact` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`customer_id` bigint(20) NOT NULL COMMENT '客户ID',
|
||||
`contact_name` varchar(50) DEFAULT NULL COMMENT '联系人姓名',
|
||||
`position` varchar(50) DEFAULT NULL COMMENT '岗位(采购、财务等)',
|
||||
`phone` varchar(30) DEFAULT NULL COMMENT '手机号',
|
||||
`telephone` varchar(30) DEFAULT NULL COMMENT '座机',
|
||||
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
|
||||
`wechat` varchar(50) DEFAULT NULL COMMENT '微信',
|
||||
`qq` varchar(30) DEFAULT NULL COMMENT 'QQ',
|
||||
`is_primary` tinyint(1) DEFAULT 0 COMMENT '是否主要联系人',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`creator` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_customer_id` (`customer_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户联系人表';
|
||||
|
||||
-- 给 tbl_supplier 添加分类字段
|
||||
ALTER TABLE `tbl_supplier` ADD COLUMN `category_id` bigint(20) DEFAULT NULL COMMENT '客户分类ID' AFTER `type`;
|
||||
ALTER TABLE `tbl_supplier` ADD INDEX `idx_category_id` (`category_id`);
|
||||
60
smtERP-boot/docs/customer_category_contact.sql
Normal file
60
smtERP-boot/docs/customer_category_contact.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
-- 客户分类表 - 支持多级分类
|
||||
DROP TABLE IF EXISTS `jsh_customer_category`;
|
||||
CREATE TABLE `jsh_customer_category` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`category_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名称',
|
||||
`parent_id` bigint(20) DEFAULT 0 COMMENT '父级ID,0表示顶级分类',
|
||||
`level` int(11) DEFAULT 1 COMMENT '层级,从1开始',
|
||||
`sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '排序',
|
||||
`description` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述',
|
||||
`enabled` bit(1) DEFAULT b'1' COMMENT '启用状态',
|
||||
`creator` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_parent_id`(`parent_id`) USING BTREE,
|
||||
INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '客户分类表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 客户联系人表 - 支持多个联系人
|
||||
DROP TABLE IF EXISTS `jsh_customer_contact`;
|
||||
CREATE TABLE `jsh_customer_contact` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`customer_id` bigint(20) NOT NULL COMMENT '客户ID',
|
||||
`contact_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系人姓名',
|
||||
`position` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '岗位/职位',
|
||||
`phone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码',
|
||||
`telephone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系电话',
|
||||
`email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电子邮箱',
|
||||
`wechat` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '微信号',
|
||||
`qq` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'QQ号',
|
||||
`is_primary` bit(1) DEFAULT b'0' COMMENT '是否主要联系人,0否,1是',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
|
||||
`creator` bigint(20) DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_customer_id`(`customer_id`) USING BTREE,
|
||||
INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '客户联系人表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- 为供应商表(jsh_supplier)添加分类ID字段
|
||||
ALTER TABLE `jsh_supplier` ADD COLUMN `category_id` bigint(20) DEFAULT NULL COMMENT '客户分类ID' AFTER `type`;
|
||||
ALTER TABLE `jsh_supplier` ADD INDEX `idx_category_id`(`category_id`) USING BTREE;
|
||||
|
||||
-- 插入示例数据:客户分类
|
||||
INSERT INTO `jsh_customer_category` VALUES
|
||||
(1, '企业客户', 0, 1, '1', '大型企业、中小企业等', b'1', 63, 63, '0', NOW(), NOW()),
|
||||
(2, '个人客户', 0, 1, '2', '个人消费者', b'1', 63, 63, '0', NOW(), NOW()),
|
||||
(3, '政府机构', 0, 1, '3', '政府部门、事业单位', b'1', 63, 63, '0', NOW(), NOW()),
|
||||
(4, '大型企业', 1, 2, '1', '大型企业客户', b'1', 63, 63, '0', NOW(), NOW()),
|
||||
(5, '中小企业', 1, 2, '2', '中小型企业客户', b'1', 63, 63, '0', NOW(), NOW());
|
||||
|
||||
-- 插入示例数据:客户联系人(假设客户ID为58的客户1)
|
||||
INSERT INTO `jsh_customer_contact` VALUES
|
||||
(1, 58, '张三', '采购经理', '13800138001', '', 'zhangsan@example.com', '', '', b'1', '主要负责采购事务', 63, 63, '0', NOW(), NOW()),
|
||||
(2, 58, '李四', '财务主管', '13800138002', '', 'lisi@example.com', '', '', b'0', '负责财务结算', 63, 63, '0', NOW(), NOW());
|
||||
89
smtERP-boot/docs/security-review-remediation-20261012.md
Normal file
89
smtERP-boot/docs/security-review-remediation-20261012.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# 2026-10-12 代码审查修复及上线说明
|
||||
|
||||
本次以不改变正常业务计算、单据状态流转和原有数据为原则。认证变化已获调用方同步调整的确认。没有连接生产数据库、轮换真实凭据或发布服务。
|
||||
|
||||
## 审查项处理结果
|
||||
|
||||
| 审查项 | 本次处理 | 兼容性与剩余事项 |
|
||||
| --- | --- | --- |
|
||||
| C1 明文凭据 | application.yml 的数据库用户名、数据库密码、Redis 密码改为外部注入;生成器配置移除默认用户名及密码 | 部署前配置环境变量;已泄露的真实口令仍须由部署人员轮换,Git 历史中的旧值没有清除 |
|
||||
| C2 LIKE 注入 | 4 个 Mapper、14 处表达式改为 `concat('%', #{参数}, '%')` | 保留模糊搜索、中文、单引号和 `%` / `_` 通配符语义,不对合法搜索词做截断或删字符 |
|
||||
| C3 匿名同步 | 两个 sync 接口仅接受独立 API Key 或已有 ERP 登录会话 | 外部调用方必须增加请求头,未配置密钥不允许匿名通过 |
|
||||
| C3 旧盘点 | Login 返回独立短期 token;盘点业务接口要求认证;校验 USER_ID 和当前身份、盘点单所属盘点人;沿用登录失败限流 | 保留原大写字段和响应包装,增加 TOKEN 字段;禁止伪造他人身份与跨盘点人操作 |
|
||||
| C3 白名单 | 移除匿名 tenantClean;白名单前缀加路径边界;同步路径精确匹配 | 静态 Excel 模板仅精确 GET 公开,保留原 `<a>` / `window.open` 下载;模板不含业务数据 |
|
||||
| C4 eval | WebSocket 使用 JSON.parse;菜单占位符使用显式映射 | 非 JSON 消息会被忽略;未知菜单表达式原样保留且不执行,见下文支持列表 |
|
||||
| H1 MD5/弱默认密码 | 完成入口核对及迁移设计,尚未改动存储与登录协议 | 现有库 password 为 varchar(50),不能直接存 BCrypt;详见迁移步骤。此风险尚未关闭 |
|
||||
| H2 排序/Example | 保留已存在的 4 处字段及方向白名单,新增真实 MyBatis BoundSql 回归;分页排序加强为字段/方向语法校验 | Example 条件由内部方法构造,未发现 Controller 接收外部 Example;不机械替换生成器 `${criterion.condition}` |
|
||||
| H3 公告 XSS | 使用 DOMPurify 3.4.16 在展示时净化 HTML | 保留普通 HTML 排版;历史记录不改写;后端存储端的富文本策略需覆盖其他消费者后再实施 |
|
||||
| H4 老依赖 | JDBC 关闭 allowMultiQueries;新增 DOMPurify;修复 Java 11 测试工具兼容 | Mapper 静态检查未发现分号批量语句;Spring Boot、axios、jQuery、fastjson 大版本升级仍需专项回归,未宣称已消除所有依赖漏洞 |
|
||||
| H5 会话/插件 | Redis 会话有效期支持配置,默认沿用原 259200 秒 | 报告中的 servlet 36000 秒不是实际 ERP token 有效期;插件安装原本就校验管理员,不是普通登录用户可安装 |
|
||||
| M1 异常 | HTTP 关闭失败记录日志、保留 POST 异常原因;日期格式试探仅捕获 ParseException;盘点内部错误记录日志而不向客户端暴露堆栈 | 日期格式依次尝试是合理流程,全部失败仍按原逻辑抛出业务错误;不改日期解析宽松程度 |
|
||||
| M2 API 权限 | 补齐本次同步与盘点入口及盘点身份/数据归属校验 | 全系统按钮权限到 API 权限的映射尚未实施,需要单独梳理角色、租户、共享数据和插件接口 |
|
||||
| M3 测试 | 新增认证、盘点权限、SQL、前端 XSS/eval 回归;移除 Maven 跳过测试编译配置;升级测试插件和测试 mock 工具以支持 Java 11 | 不使用真实数据库和 Redis,不等同于完整业务验收 |
|
||||
| L1/L2 | printStackTrace 改结构化日志;保持局部 SimpleDateFormat | 局部实例无共享线程安全问题;替换日期 API 可能改变宽松解析、时区等行为,本次不做无必要重构 |
|
||||
|
||||
## 部署前配置
|
||||
|
||||
使用服务管理器、容器配置或配置中心注入:
|
||||
|
||||
| 变量 | 用途 | 默认 |
|
||||
| --- | --- | --- |
|
||||
| DB_USERNAME | 数据库账号 | 无,必填 |
|
||||
| DB_PASSWORD | 数据库密码 | 无,必填 |
|
||||
| REDIS_PASSWORD | Redis 密码 | 无,必填;无密码的 Redis 显式配置为空 |
|
||||
| SYNC_API_KEY | 外部入库同步专用密钥 | 空;空值时仅 ERP 会话可以调用 sync |
|
||||
| INVENTORY_TOKEN_TTL_SECONDS | 旧盘点 token 绝对有效期 | 3600 秒;最低 60 秒 |
|
||||
| ERP_SESSION_TIMEOUT_SECONDS | ERP Redis 会话滑动有效期 | 259200 秒,与原值一致;最低 60 秒 |
|
||||
|
||||
也可继续通过外部 Spring 配置覆盖 `spring.datasource.*` / `spring.redis.*`。不要把真实凭据重新写入仓库。MyBatis Generator 的 `${DB_USERNAME}` / `${DB_PASSWORD}` 是 Java 系统属性替换,运行生成器时需由本地构建配置提供这两个系统属性,不能假定它会自动读取同名环境变量。
|
||||
|
||||
生产数据库/Redis 凭据轮换应与服务配置更新一起安排,确认连接成功后撤销旧凭据;本次没有自行操作线上账号。同步请求和登录请求须经 HTTPS 或受保护的内部连接,不能在访问日志中记录认证头。
|
||||
|
||||
## 同步调用方改造
|
||||
|
||||
两个地址保持不变:
|
||||
|
||||
- `POST /apis/smtInbound/sync`
|
||||
- `POST /apis/headquartersInbound/sync`
|
||||
|
||||
请求体和成功返回结构不变,增加 `X-Sync-Api-Key: <SYNC_API_KEY>`。密钥仅允许上述两个 POST 接口,不赋予其他接口权限。已有 `X-Access-Token` ERP 会话仍可调用。未提供认证、密钥错误或密钥未配置时返回 HTTP 401。
|
||||
|
||||
静态下载 `/apis/smtInbound/template`、`/apis/headquartersInbound/template` 保持匿名 GET;其他方法以及名称相似的路径不放行。`tenantClean` 现在必须登录,相关插件调用方需要携带原 ERP 会话头。
|
||||
|
||||
## 旧盘点客户端改造
|
||||
|
||||
1. 原样 POST `/apis/n2tpm/webmvc/Inventory/Login` 或 `/apis/webmvc/Inventory/Login`,继续传 USER_NAME、PASSWORD。没有 context path 的部署同样支持这两个路径。
|
||||
2. 成功响应仍是 `{code, msg, data}`;`data.RESULT`、`data.USER_ID`、`data.DATA_AUTH` 保留,新增 `data.TOKEN`。
|
||||
3. 后续所有查询、保存、接单、上传请求增加 `X-Inventory-Token: <data.TOKEN>`。HTTP 401 时重新登录,不能只凭 USER_ID 重试。
|
||||
4. USER_ID 必须是当前登录用户;盘点单必须分配给该用户;批量 DATA 中每条操作都校验。管理员如需代盘,应先通过原 ERP 分配流程调整盘点人,不能伪造 USER_ID。
|
||||
5. token 使用独立 Redis 命名空间并绝对过期,读取不会续期,不能当作 ERP 的 X-Access-Token 使用。也支持使用已有 ERP 会话调用盘点接口;同时提供两个头时优先验证盘点 token,避免身份混淆。
|
||||
6. 用户被停用/删除后,即使 token 未到期,业务服务也会拒绝操作。错误密码沿用现有 ERP 的账号限流策略。
|
||||
|
||||
## 菜单 URL 兼容范围
|
||||
|
||||
支持 `{{ window._CONFIG.domianURL }}`、其单/双引号方括号形式,以及 `window.location.origin`、`window.location.host`、`window.location.protocol`。普通菜单 URL 不变。其他自定义表达式不执行,需在核实数据库菜单配置后将确实需要的非敏感值增加到 `menuUrl.js` 的显式映射。
|
||||
|
||||
公告展示依赖 [DOMPurify 官方发行版](https://github.com/cure53/DOMPurify/releases/tag/3.4.16)。当前使用 HTML profile,SVG/MathML/脚本等内容不保留。现有项目忽略 package-lock.json,本次遵循仓库规则,新增依赖在 package.json 中固定版本。
|
||||
|
||||
## H1:口令迁移实施顺序(尚未执行)
|
||||
|
||||
1. 先在预发布验证并扩展 password 至至少 varchar(100),增加算法标识或采用带算法前缀的存储格式;增加 must_change_password 标记。备份用户表,禁止批量覆盖旧口令。
|
||||
2. 当前网页在登录、注册、改密时发送 MD5,旧盘点发送明文后由服务端转 MD5,微信绑定也用 SQL 等值比较密码。必须把验证集中到同一密码服务,覆盖所有入口和密码写入路径,不能只改 insertUser。
|
||||
3. 过渡期可在服务端对旧协议的 MD5 凭据做 BCrypt,并在成功验证旧记录时有条件升级存储;明确这只改善数据库泄露风险,网络中的 MD5 仍是可重放凭据,必须配合 HTTPS。不得把 BCrypt 值写回仍按 MD5 等值比较的旧程序。
|
||||
4. 新协议传原始密码并由服务端 BCrypt/Argon2 校验;使用明确协议版本区分,不根据密码是否“看起来像 MD5”猜测。提供兼容期,统计旧客户端后再停用旧协议。
|
||||
5. 新建/重置用户使用单次临时随机密码或管理员指定强密码,返回一次并强制首次改密。先补管理界面的交付流程,避免用户创建成功却无法得知初始密码。旧弱口令账号的会话限制和强制改密需要前后端一起实现。
|
||||
6. 回归:旧账号、新账号、改密、重置、停用、限流、默认密码提醒、注册、微信绑定/登录、旧盘点,以及并发登录时的条件升级。升级后回滚代码必须继续能验证新哈希,不能直接回滚到只支持 MD5 的旧包。
|
||||
|
||||
## H4/M2 后续专项范围(尚未执行)
|
||||
|
||||
- 框架升级先验证插件框架 2.2.1、MyBatis 扩展、Redis、Swagger 与目标 Spring/JDK 的兼容矩阵,再选择受支持目标版本,不在这次安全补丁中跨代替换依赖。
|
||||
- axios/jQuery 升级需要覆盖拦截器、错误对象、上传下载、请求取消,以及打印、图片预览等依赖插件;fastjson 迁移需要验证实体绑定、日期/数值和插件序列化。
|
||||
- API 权限按现有菜单/按钮建立“HTTP 方法 + 路由 + 操作权限”映射,再覆盖管理员、普通用户、租户和插件接口的正反用例;不要直接把前端菜单可见性当成完整数据授权。
|
||||
|
||||
## 验证方式及边界
|
||||
|
||||
本地验证:后端 23 个测试通过;前端 3 组安全回归通过;生产构建成功退出。前端构建仍提示资源体积超限及 sass-loader 缺失,这些警告未在本次安全修复中处理。修改文件通过 UTF-8、BOM/替换字符和 `git diff --check` 检查。
|
||||
|
||||
后端运行 `mvn -B test`;前端运行 `npm run test:security` 和 `npm run build`。后端测试使用真实 MyBatis XML 生成 SQL,验证 14 个 LIKE 参数不进入 SQL 文本、正常排序继续生效、注入排序不生效;认证与盘点用例使用 mock,不连接外部服务。
|
||||
|
||||
上线前仍需在预发布环境完成:正常 ERP 登录、入库同步、新/旧盘点登录、本人盘点单接收和保存、图片上传、查询排序、模板下载、公告展示、插件管理员操作。自测通过不能保证所有业务完全无影响,尤其是外部客户端与数据库中的自定义菜单配置。
|
||||
6145
smtERP-boot/docs/smt-erp-init-data.sql
Normal file
6145
smtERP-boot/docs/smt-erp-init-data.sql
Normal file
File diff suppressed because one or more lines are too long
13
smtERP-boot/docs/sql_update_permission_management.sql
Normal file
13
smtERP-boot/docs/sql_update_permission_management.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
-- 为“角色管理”菜单增加“权限管理”按钮权限(按钮编号 8)
|
||||
-- 当前项目 Mapper 使用 tbl_function;如部署库仍使用旧表名 jsh_function,请替换表名后执行。
|
||||
UPDATE `tbl_function`
|
||||
SET `push_btn` = CASE
|
||||
WHEN `push_btn` IS NULL OR `push_btn` = '' THEN '8'
|
||||
WHEN FIND_IN_SET('8', `push_btn`) = 0 THEN CONCAT(`push_btn`, ',8')
|
||||
ELSE `push_btn`
|
||||
END
|
||||
WHERE `number` = '000102'
|
||||
AND IFNULL(`delete_flag`, '0') != '1';
|
||||
|
||||
-- 执行后使用 admin 登录,在“角色管理 -> 分配按钮”中,
|
||||
-- 给需要管理全部菜单的角色勾选“权限管理”。
|
||||
221
smtERP-boot/docs/sql_update_production.sql
Normal file
221
smtERP-boot/docs/sql_update_production.sql
Normal file
@@ -0,0 +1,221 @@
|
||||
-- ----------------------------
|
||||
-- 生产管理模块建表脚本(P0)
|
||||
-- 执行方式:在 MySQL 8.0 中执行本脚本
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- 1、包装BOM主表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_pack_bom`;
|
||||
CREATE TABLE `jsh_pack_bom` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`bom_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方案编号',
|
||||
`bom_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方案名称',
|
||||
`product_material_id` bigint(0) NULL DEFAULT NULL COMMENT '待包装产品商品id',
|
||||
`product_material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '待包装产品扩展id',
|
||||
`product_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '待包装产品多属性',
|
||||
`output_material_id` bigint(0) NULL DEFAULT NULL COMMENT '成品SKU商品id',
|
||||
`output_material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '成品扩展id',
|
||||
`output_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成品多属性',
|
||||
`output_number` decimal(24, 6) NULL DEFAULT NULL COMMENT '单位待包装产品产出成品数量',
|
||||
`version` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'V1' COMMENT '版本',
|
||||
`enabled` bit(1) NULL DEFAULT b'1' COMMENT '启用状态',
|
||||
`remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `product_material_id`(`product_material_id`) USING BTREE,
|
||||
INDEX `output_material_id`(`output_material_id`) USING BTREE,
|
||||
INDEX `tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '包装BOM主表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 2、包装BOM包材明细表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_pack_bom_item`;
|
||||
CREATE TABLE `jsh_pack_bom_item` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`bom_id` bigint(0) NOT NULL COMMENT '包装BOM id',
|
||||
`material_id` bigint(0) NOT NULL COMMENT '包材商品id',
|
||||
`material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '商品扩展id',
|
||||
`material_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性',
|
||||
`unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单位',
|
||||
`quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '用量(每产出1单位成品所需包材数量)',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `bom_id`(`bom_id`) USING BTREE,
|
||||
INDEX `material_id`(`material_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '包装BOM包材明细表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 3、生产工单主表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_order`;
|
||||
CREATE TABLE `jsh_production_order` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`order_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工单号',
|
||||
`source_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源类型(销售订单/手工备货)',
|
||||
`source_id` bigint(0) NULL DEFAULT NULL COMMENT '来源单据id(销售订单depot_head.id)',
|
||||
`source_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源单据号(销售订单号)',
|
||||
`product_material_id` bigint(0) NULL DEFAULT NULL COMMENT '待包装产品商品id',
|
||||
`product_material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '待包装产品扩展id',
|
||||
`product_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '待包装产品多属性',
|
||||
`bom_id` bigint(0) NULL DEFAULT NULL COMMENT '包装BOM id',
|
||||
`output_material_id` bigint(0) NULL DEFAULT NULL COMMENT '成品SKU商品id',
|
||||
`output_material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '成品扩展id',
|
||||
`output_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成品多属性',
|
||||
`order_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '工单数量(待包装产品)',
|
||||
`output_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '预计成品数量',
|
||||
`finished_quantity` decimal(24, 6) NULL DEFAULT 0.000000 COMMENT '已完工良品数',
|
||||
`plan_start_date` datetime(0) NULL DEFAULT NULL COMMENT '计划开工日期',
|
||||
`plan_end_date` datetime(0) NULL DEFAULT NULL COMMENT '计划完工日期',
|
||||
`actual_start_date` datetime(0) NULL DEFAULT NULL COMMENT '实际开工日期',
|
||||
`actual_end_date` datetime(0) NULL DEFAULT NULL COMMENT '实际完工日期',
|
||||
`priority` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '优先级,0普通、1紧急',
|
||||
`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态,0已创建、1已下达、2生产中、3已完工、4已关闭',
|
||||
`audit_by` bigint(0) NULL DEFAULT NULL COMMENT '审批人',
|
||||
`audit_time` datetime(0) NULL DEFAULT NULL COMMENT '审批时间',
|
||||
`release_by` bigint(0) NULL DEFAULT NULL COMMENT '下达人',
|
||||
`release_time` datetime(0) NULL DEFAULT NULL COMMENT '下达时间',
|
||||
`close_reason` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关闭原因',
|
||||
`remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `order_number`(`order_number`) USING BTREE,
|
||||
INDEX `source_number`(`source_number`) USING BTREE,
|
||||
INDEX `status`(`status`) USING BTREE,
|
||||
INDEX `tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '生产工单主表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 4、工单操作日志表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_order_log`;
|
||||
CREATE TABLE `jsh_production_order_log` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`order_id` bigint(0) NULL DEFAULT NULL COMMENT '工单id',
|
||||
`order_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工单号',
|
||||
`operation_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作类型(创建/修改/审批下达/开工/生成领料/发料/完工/关闭等)',
|
||||
`operation_desc` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作描述',
|
||||
`operator` bigint(0) NULL DEFAULT NULL COMMENT '操作人',
|
||||
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `order_id`(`order_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '工单操作日志表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 5、生产领料单主表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_requisition`;
|
||||
CREATE TABLE `jsh_production_requisition` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`requisition_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '领料单号',
|
||||
`order_id` bigint(0) NULL DEFAULT NULL COMMENT '工单id',
|
||||
`order_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工单号',
|
||||
`depot_id` bigint(0) NULL DEFAULT NULL COMMENT '发料仓库id',
|
||||
`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态,0待确认、1已发料、2已驳回',
|
||||
`confirm_by` bigint(0) NULL DEFAULT NULL COMMENT '确认人',
|
||||
`confirm_time` datetime(0) NULL DEFAULT NULL COMMENT '确认时间',
|
||||
`remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `requisition_number`(`requisition_number`) USING BTREE,
|
||||
INDEX `order_id`(`order_id`) USING BTREE,
|
||||
INDEX `status`(`status`) USING BTREE,
|
||||
INDEX `tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '生产领料单主表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 6、生产领料单明细表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_requisition_item`;
|
||||
CREATE TABLE `jsh_production_requisition_item` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`requisition_id` bigint(0) NOT NULL COMMENT '领料单id',
|
||||
`depot_id` bigint(0) NULL DEFAULT NULL COMMENT '发料仓库id',
|
||||
`material_id` bigint(0) NOT NULL COMMENT '物料商品id',
|
||||
`material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '商品扩展id',
|
||||
`material_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性',
|
||||
`unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单位',
|
||||
`required_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '申请数量(BOM定额)',
|
||||
`issued_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '实发数量',
|
||||
`unit_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '参考单价',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `requisition_id`(`requisition_id`) USING BTREE,
|
||||
INDEX `depot_id`(`depot_id`) USING BTREE,
|
||||
INDEX `material_id`(`material_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '生产领料单明细表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 7、完工报告主表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_report`;
|
||||
CREATE TABLE `jsh_production_report` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`report_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告号',
|
||||
`order_id` bigint(0) NULL DEFAULT NULL COMMENT '工单id',
|
||||
`order_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工单号',
|
||||
`finished_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '实际良品数',
|
||||
`defect_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '不良品数',
|
||||
`qualified_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '质检结果,0未检、1合格、2不合格',
|
||||
`depot_id` bigint(0) NULL DEFAULT NULL COMMENT '入库仓库id',
|
||||
`in_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生产入库单号',
|
||||
`audit_status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '审核状态,0待审核、1已审核、2已驳回',
|
||||
`audit_by` bigint(0) NULL DEFAULT NULL COMMENT '审核人',
|
||||
`audit_time` datetime(0) NULL DEFAULT NULL COMMENT '审核时间',
|
||||
`report_by` bigint(0) NULL DEFAULT NULL COMMENT '报工人',
|
||||
`report_date` datetime(0) NULL DEFAULT NULL COMMENT '报工日期',
|
||||
`remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `report_number`(`report_number`) USING BTREE,
|
||||
INDEX `order_id`(`order_id`) USING BTREE,
|
||||
INDEX `audit_status`(`audit_status`) USING BTREE,
|
||||
INDEX `tenant_id`(`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '完工报告主表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 8、完工报告物料消耗明细表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `jsh_production_report_item`;
|
||||
CREATE TABLE `jsh_production_report_item` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`report_id` bigint(0) NOT NULL COMMENT '完工报告id',
|
||||
`material_id` bigint(0) NOT NULL COMMENT '物料商品id',
|
||||
`material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '商品扩展id',
|
||||
`material_sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性',
|
||||
`unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单位',
|
||||
`consumption_quantity` decimal(24, 6) NULL DEFAULT NULL COMMENT '实际消耗数量',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
|
||||
`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `report_id`(`report_id`) USING BTREE,
|
||||
INDEX `material_id`(`material_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '完工报告物料消耗明细表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- 9、生产管理菜单(jsh_function)
|
||||
-- ----------------------------
|
||||
INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('0901', '生产管理', '0', '/production', '/layouts/TabLayout', b'0', '0480', b'1', '电脑版', '', 'cluster', '0');
|
||||
INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('090101', '包装方案', '0901', '/production/pack_bom', '/production/PackBomList', b'0', '0481', b'1', '电脑版', '1,2,3', 'profile', '0');
|
||||
INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('090102', '生产工单', '0901', '/production/order', '/production/OrderList', b'0', '0482', b'1', '电脑版', '1,2,3', 'profile', '0');
|
||||
INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('090103', '领料管理', '0901', '/production/requisition', '/production/RequisitionList', b'0', '0483', b'1', '电脑版', '1,2,3', 'profile', '0');
|
||||
INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('090104', '完工报工', '0901', '/production/report', '/production/ReportList', b'0', '0484', b'1', '电脑版', '1,2,3', 'profile', '0');
|
||||
Reference in New Issue
Block a user