chore: 同步本地仓库变更

This commit is contained in:
Developer
2026-05-22 15:37:02 +08:00
parent f6802d9893
commit db6a51eab5
10 changed files with 177 additions and 781 deletions

View File

@@ -1,148 +1,208 @@
# 今日工作计划与部署文档
## **一、基本信息**
## 1. 工作概述
- **项目技术栈**Vue2前端 + SQL Server数据库/存储过程)
- **开发日期**2026-05-22
- **开发人员**\[填写姓名]
- **任务总数**2
本文档记录了今日开发与运维任务包括PLM数据上传、采购到货入库单生成逻辑、生产计划功能更新及生产环境部署。重点涉及数据库表结构变更、存储过程更新及上线后的Bug跟踪。
***
## 2. 任务清单
## **二、任务一:存储过程 采购单历史价格曲线图数据**
| 序号 | 任务名称 | 状态 | 优先级 | 预计耗时 | 负责人 |
| -- | -------------- | ---- | --- | ---- | --- |
| 1 | PLM文档上传 | 进行中 | 高 | 1.5h | 开发组 |
| 2 | 采购到货生成入库单 | 待开始 | 高 | 2h | 开发组 |
| 3 | 生产计划功能更新(含数据库) | 待开始 | 高 | 2.5h | 开发组 |
| 4 | 生产环境部署 | 待开始 | 紧急 | 1h | 运维组 |
| 5 | 上线后Bug监控与修复 | 持续执行 | 高 | 持续 | 全体 |
### **2.1 需求描述**
## 3. 详细任务说明
编写/修改一个存储过程,统计指定采购单(或指定物料)的历史采购价格,返回用于前端绘制曲线图的数据结构(时间 + 价格)。
### 3.1 PLM文档上传
### **2.2 技术目标**
- **目标**将PLM系统中的设计文档、BOM表等同步至生产系统。
- **操作**
- 使用PLM接口批量拉取最新文档。
- 校验文档完整性并存储至文件服务器。
- 更新文档索引至数据库`plm_docs`表。
- **验证标准**上传成功率≥99%,文档可预览。
- 输入参数:`@MaterialID`物料ID 或 `@PurchaseOrderID`(采购单号)
- 输出数据集:`HistoryDate`(日期)、`UnitPrice`(单价)
- 按时间升序排列
### 3.2 采购到货生成入库单
- **业务逻辑**:根据采购订单的到货通知单,自动生成仓库入库单。
- **操作**
- 读取采购到货记录表`purchase_arrival`
- 校验数量、批次号、质检状态。
- 调用存储过程`sp_generate_inbound_order`生成入库单。
- **数据库变更**:无新增表,但需验证触发器`trg_after_arrival`是否正常。
### 3.3 生产计划功能更新(含数据库变更)
此任务包含应用程序代码更新及数据库结构/存储过程变更,需按顺序执行。
#### 3.3.1 数据库变更脚本
**表结构变更**
```sql
-- 添加字段用于计划优先级
ALTER TABLE production_plan ADD priority_level TINYINT DEFAULT 3 CHECK (priority_level BETWEEN 1 AND 5);
-- 新增索引以提高查询效率
CREATE INDEX idx_plan_status_priority ON production_plan(plan_status, priority_level);
-- 增加历史日志表
CREATE TABLE production_plan_log (
log_id INT PRIMARY KEY IDENTITY(1,1),
plan_id INT NOT NULL,
action_type VARCHAR(20),
change_time DATETIME DEFAULT GETDATE()
);
```
**存储过程更新**
### **2.3 存储过程实现SQL Server**
sql
```
-- 更新生产计划状态存储过程,增加优先级处理
CREATE OR ALTER PROCEDURE sp_update_plan_status
@plan_id INT,
@new_status VARCHAR(20)
CREATE OR ALTER PROC usp_GetPurchasePriceHistory
@MaterialID INT
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION;
UPDATE production_plan
SET plan_status = @new_status,
last_modified = GETDATE()
WHERE plan_id = @plan_id;
-- 记录日志
INSERT INTO production_plan_log (plan_id, action_type)
VALUES (@plan_id, 'STATUS_CHANGE_TO_' + @new_status);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK;
THROW;
END CATCH
END;
SET NOCOUNT ON;
SELECT
CONVERT(DATE, po.OrderDate) AS HistoryDate,
pod.UnitPrice
FROM PurchaseOrderDetail pod
INNER JOIN PurchaseOrder po ON pod.PurchaseOrderID = po.PurchaseOrderID
WHERE pod.MaterialID = @MaterialID
AND pod.UnitPrice IS NOT NULL
AND po.OrderDate IS NOT NULL
GROUP BY CONVERT(DATE, po.OrderDate), pod.UnitPrice
ORDER BY HistoryDate ASC;
END
```
**执行顺序**
### **2.4 前端调用示例Vue2 + axios**
1. 备份现有数据库(生产计划相关表)。
2. 执行`ALTER TABLE`语句。
3. 执行`CREATE TABLE`语句。
4. 执行`CREATE OR ALTER PROCEDURE`语句。
5. 验证索引创建。
javascript
#### **3.3.2 应用程序更新**
```
// API 服务层
getPriceHistory(materialId) {
return axios.post('/api/getPriceHistory', { materialId });
}
- 生产计划列表页增加“优先级”筛选和排序。
- 计划详情页支持修改优先级(权限控制)。
- 调用`sp_update_plan_status`替代原有直接UPDATE语句。
// 组件中使用
async loadChartData() {
const res = await getPriceHistory(this.selectedMaterialId);
const chartData = {
dates: res.data.map(item => item.HistoryDate),
prices: res.data.map(item => item.UnitPrice)
};
this.renderLineChart(chartData);
}
```
### **3.4 生产环境部署**
### **2.5 曲线图组件建议**
**部署步骤**
- 使用 `echarts` 或 `chart.js`
- X轴日期Y轴单价
1. 停止生产计划相关服务。
2. 备份当前生产数据库和生产计划模块代码。
3. 执行数据库变更脚本见3.3.1)。
4. 部署新的后端API和前端页面。
5. 启动服务,执行冒烟测试(创建计划、变更状态、优先级过滤)。
6. 通知业务部门恢复使用。
***
**回滚计划**
## **三、任务二:员工组件 必填项改为选填项 + 存储过程修改**
- 若部署后30分钟内出现严重错误执行数据库回滚脚本恢复备份表及存储过程并回退至上一版本代码。
### **3.1 需求描述**
### **3.5 上线后Bug监控与修复**
员工信息组件中原有字段(如:手机号、备用邮箱等)为必填,现改为**选填**,并修改对应的**存储过程**以兼容空值写入/更新。
- **监控指标**
- 生产计划保存接口错误率 > 5%
- 入库单生成超时 > 3秒
- PLM上传失败率 > 1%
- **响应机制**
- 普通Bug2小时内修复记录至JIRA。
- 严重Bug导致数据错误或流程中断立即回滚相关变更事后分析。
### **3.2 前端修改Vue2**
## **4. 注意事项**
#### **3.2.1 表单校验规则调整**
- 所有数据库变更是不可逆的,务必提前全量备份。
- 生产计划优先级字段`priority_level`默认值为3需通知前端做UI提示。
- 存储过程更新后需同步更新ORM实体映射如有
- 采购入库单生成依赖质检结果,若存在未质检记录,系统应跳过并记录错误日志。
javascript
## **5. 验收与完成标准**
```
// 原 rules
rules: {
phone: [{ required: true, message: '请填写手机号' }],
email: [{ required: true, message: '请填写邮箱' }]
}
- PLM上传完成文件可访问。
- 成功根据3笔以上到货数据生成入库单。
- 生产计划数据库变更执行成功,索引有效。
- 生产计划前端能正确展示并修改优先级。
- 上线后2小时无P0/P1级Bug。
// 改为选填(删除 required 或设为 false
rules: {
phone: [{ required: false, message: '请填写手机号' }],
email: [{ required: false, message: '请填写邮箱' }]
}
```
<br />
#### **3.2.2 必填标识(星号)移除**
vue
```
<el-form-item label="手机号" prop="phone">
<!-- 原 <span class="required-star">*</span> 移除或条件显示 -->
</el-form-item>
```
### **3.3 后端存储过程修改SQL Server**
#### **3.3.1 原存储过程(假设示例)**
sql
```
CREATE PROC usp_InsertEmployee
@Name NVARCHAR(50),
@Phone VARCHAR(20),
@Email VARCHAR(100)
AS
BEGIN
INSERT INTO Employee (Name, Phone, Email)
VALUES (@Name, @Phone, @Email);
END
```
#### **3.3.2 修改后(支持选填字段)**
sql
```
ALTER PROC usp_InsertEmployee
@Name NVARCHAR(50),
@Phone VARCHAR(20) = NULL, -- 允许为空
@Email VARCHAR(100) = NULL -- 允许为空
AS
BEGIN
INSERT INTO Employee (Name, Phone, Email)
VALUES (@Name, @Phone, @Email);
END
```
> 注:`ALTER PROC` 需确认参数名、顺序与原存储过程一致。
### **3.4 数据库表字段允许 NULL**
确保 `Phone``Email` 字段已设置为 `NULL`(若此前为 `NOT NULL` 需执行改表语句):
sql
```
ALTER TABLE Employee ALTER COLUMN Phone VARCHAR(20) NULL;
ALTER TABLE Employee ALTER COLUMN Email VARCHAR(100) NULL;
```
***
## **四、测试要点**
**任务**
**测试项**
**预期结果**
曲线图
输入有效物料ID
返回正确的时间-价格序列
曲线图
输入无历史价格的物料
返回空数据集,前端提示无数据
员工组件
手机号、邮箱不填写提交
可成功提交,数据库对应字段为 NULL
员工组件
原有必填逻辑(如姓名)
仍保持必填
***
## **五、部署与回滚注意事项**
- **存储过程**:先备份原存储过程(`DROP` 前先 `CREATE` 备份脚本)
- **前端**:仅移除校验规则,不涉及路由或组件结构大改
- **数据库字段**`ALTER COLUMN NULL` 操作不可逆,建议先在测试库执行
***
## **六、完成确认Checklist**
- 存储过程 `usp_GetPurchasePriceHistory` 已创建/修改并通过测试
- 前端曲线图可正常展示历史价格
- 员工组件校验规则已改为选填
- 员工组件对应存储过程已支持 `NULL`
- 数据库字段已允许 `NULL`
- 提交代码并备注今日工作计划完成