chore: 同步本地仓库变更
This commit is contained in:
292
今日计划.md
292
今日计划.md
@@ -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%
|
||||
- **响应机制**:
|
||||
- 普通Bug:2小时内修复,记录至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`
|
||||
- 提交代码并备注今日工作计划完成
|
||||
|
||||
|
||||
Reference in New Issue
Block a user