同步项目文件
This commit is contained in:
208
今日计划.md
208
今日计划.md
@@ -1,208 +0,0 @@
|
|||||||
## **一、基本信息**
|
|
||||||
|
|
||||||
- **项目技术栈**:Vue2(前端) + SQL Server(数据库/存储过程)
|
|
||||||
- **开发日期**:2026-05-22
|
|
||||||
- **开发人员**:\[填写姓名]
|
|
||||||
- **任务总数**:2
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **二、任务一:存储过程 – 采购单历史价格曲线图数据**
|
|
||||||
|
|
||||||
### **2.1 需求描述**
|
|
||||||
|
|
||||||
编写/修改一个存储过程,统计指定采购单(或指定物料)的历史采购价格,返回用于前端绘制曲线图的数据结构(时间 + 价格)。
|
|
||||||
|
|
||||||
### **2.2 技术目标**
|
|
||||||
|
|
||||||
- 输入参数:`@MaterialID`(物料ID) 或 `@PurchaseOrderID`(采购单号)
|
|
||||||
- 输出数据集:`HistoryDate`(日期)、`UnitPrice`(单价)
|
|
||||||
- 按时间升序排列
|
|
||||||
|
|
||||||
### **2.3 存储过程实现(SQL Server)**
|
|
||||||
|
|
||||||
sql
|
|
||||||
|
|
||||||
```
|
|
||||||
CREATE OR ALTER PROC usp_GetPurchasePriceHistory
|
|
||||||
@MaterialID INT
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
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)**
|
|
||||||
|
|
||||||
javascript
|
|
||||||
|
|
||||||
```
|
|
||||||
// API 服务层
|
|
||||||
getPriceHistory(materialId) {
|
|
||||||
return axios.post('/api/getPriceHistory', { materialId });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 组件中使用
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### **2.5 曲线图组件建议**
|
|
||||||
|
|
||||||
- 使用 `echarts` 或 `chart.js`
|
|
||||||
- X轴:日期,Y轴:单价
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **三、任务二:员工组件 – 必填项改为选填项 + 存储过程修改**
|
|
||||||
|
|
||||||
### **3.1 需求描述**
|
|
||||||
|
|
||||||
员工信息组件中原有字段(如:手机号、备用邮箱等)为必填,现改为**选填**,并修改对应的**存储过程**以兼容空值写入/更新。
|
|
||||||
|
|
||||||
### **3.2 前端修改(Vue2)**
|
|
||||||
|
|
||||||
#### **3.2.1 表单校验规则调整**
|
|
||||||
|
|
||||||
javascript
|
|
||||||
|
|
||||||
```
|
|
||||||
// 原 rules
|
|
||||||
rules: {
|
|
||||||
phone: [{ required: true, message: '请填写手机号' }],
|
|
||||||
email: [{ required: true, message: '请填写邮箱' }]
|
|
||||||
}
|
|
||||||
|
|
||||||
// 改为选填(删除 required 或设为 false)
|
|
||||||
rules: {
|
|
||||||
phone: [{ required: false, message: '请填写手机号' }],
|
|
||||||
email: [{ required: false, message: '请填写邮箱' }]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### **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`
|
|
||||||
- 提交代码并备注今日工作计划完成
|
|
||||||
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
=====================================================
|
|
||||||
任务完成总结报告
|
|
||||||
=====================================================
|
|
||||||
生成日期: 2026-05-22
|
|
||||||
|
|
||||||
-----------------------------------------------------
|
|
||||||
一、采购合同历史单价查询功能
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
1. 精工车间 - 采购合同审核
|
|
||||||
文件: src/views/SeikoWorkshop/ProcurementContractAudit/index.vue
|
|
||||||
|
|
||||||
修改内容:
|
|
||||||
- 在操作列新增「历史单价」按钮(el-icon-data-line 图标)
|
|
||||||
- 新增历史单价弹窗,包含两部分:
|
|
||||||
① 明细表格:序号、采购合同号、采购件、采购日期、单价、供应商
|
|
||||||
② 统计表格:当前采购件、图号型号、物料编码、历史采购次数、平均单价、最低单价、最高单价、最近一次采购单价
|
|
||||||
- 调用存储过程: 采购管理_采购合同历史单价_查询
|
|
||||||
- 传入参数: 采购合同流水号
|
|
||||||
|
|
||||||
2. 采购管理 - 订单查询
|
|
||||||
文件: src/views/PurchasingManagement/OrderInquiry/index.vue
|
|
||||||
|
|
||||||
修改内容:
|
|
||||||
- 在操作列新增「历史单价」按钮
|
|
||||||
- 新增历史单价弹窗(表格形式,结构同上)
|
|
||||||
|
|
||||||
3. 采购管理 - 采购件查询
|
|
||||||
文件: src/views/PurchasingManagement/PurchasedPartsSearch/index.vue
|
|
||||||
|
|
||||||
修改内容:
|
|
||||||
- 在表格末尾新增固定右侧的操作列,包含「历史单价」按钮
|
|
||||||
- 新增历史单价弹窗(表格形式,结构同上)
|
|
||||||
|
|
||||||
-----------------------------------------------------
|
|
||||||
二、人员管理表单优化
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
文件: src/views/BasicData/PersonnelManagement/index.vue
|
|
||||||
|
|
||||||
修改内容:
|
|
||||||
- 将以下字段的必填验证从 required: true 改为 required: false:
|
|
||||||
- 出生日期 (Birthday)
|
|
||||||
- 身份证号 (IDcard)
|
|
||||||
- 学历 (Education)
|
|
||||||
- 家庭住址 (Address)
|
|
||||||
- 民族 (Nation)
|
|
||||||
|
|
||||||
-----------------------------------------------------
|
|
||||||
三、Git 提交记录
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
Commit 1: 历史单价功能及人员管理优化
|
|
||||||
- ProcurementContractAudit: 新增历史单价按钮及弹窗
|
|
||||||
- OrderInquiry: 新增历史单价按钮及弹窗
|
|
||||||
- PurchasedPartsSearch: 新增历史单价按钮及弹窗
|
|
||||||
- PersonnelManagement: 取消5个字段的必填验证
|
|
||||||
|
|
||||||
Commit 2-3: 同步本地仓库变更
|
|
||||||
- 清理旧构建包
|
|
||||||
- 更新配置文件
|
|
||||||
|
|
||||||
-----------------------------------------------------
|
|
||||||
四、技术实现要点
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
1. 弹窗设计:
|
|
||||||
- 使用 Element UI 的 el-dialog 组件
|
|
||||||
- 明细表格支持最大高度滚动
|
|
||||||
- 单价字段保留两位小数显示
|
|
||||||
|
|
||||||
2. 数据统计:
|
|
||||||
- 平均单价: 所有历史单价的平均值
|
|
||||||
- 最低/最高单价: 使用 Math.min/Math.max
|
|
||||||
- 最近单价: 取最后一条记录的单价
|
|
||||||
|
|
||||||
3. 代码复用:
|
|
||||||
- 三个采购相关页面使用相同的弹窗结构和方法逻辑
|
|
||||||
- 保持代码一致性和可维护性
|
|
||||||
|
|
||||||
-----------------------------------------------------
|
|
||||||
|
|
||||||
数据库问答整理汇报总结
|
|
||||||
================
|
|
||||||
|
|
||||||
一、用户需求概述
|
|
||||||
---------------
|
|
||||||
1. 根据提供的SQL查询语句(查询采购管理_采购合同明细_全部_查询视图),创建一个存储过程。
|
|
||||||
2. 该存储过程能够根据传入的“采购合同流水号”,查看同一物料的历史单价。
|
|
||||||
3. 询问在另一个存储过程(装配管理_三表_查询)中,哪个表是“C表”。
|
|
||||||
|
|
||||||
二、解决方案与结果
|
|
||||||
-----------------
|
|
||||||
【问题1】创建查看同一物料历史单价的存储过程
|
|
||||||
|
|
||||||
解决方案:
|
|
||||||
创建了存储过程 dbo.usp_GetMaterialPriceHistoryByContract
|
|
||||||
- 输入参数:@采购合同流水号 VARCHAR(100)
|
|
||||||
- 功能:根据传入的采购合同流水号,自动识别当前物料(通过物料编码、图号或型号、物料流水号),
|
|
||||||
查询该物料的所有历史采购记录,并按采购日期倒序排列。
|
|
||||||
- 输出:
|
|
||||||
① 历史采购明细(包含单价、供应商、采购日期等)
|
|
||||||
② 历史价格统计(平均单价、最高/最低单价、最近一次采购单价)
|
|
||||||
|
|
||||||
附加增强版:
|
|
||||||
还提供了带供应商筛选功能的存储过程版本,支持可选参数 @供应商筛选。
|
|
||||||
|
|
||||||
【问题2】识别“装配管理_三表_查询”存储过程中的C表
|
|
||||||
|
|
||||||
分析结果:
|
|
||||||
C表是指以下子查询部分:
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT
|
|
||||||
物料流水号,
|
|
||||||
SUM(实领数) AS 总数量
|
|
||||||
FROM dbo.车间装配管理_装配执行_临时领料明细
|
|
||||||
GROUP BY 物料流水号
|
|
||||||
) c ON a.物料流水号 = c.物料流水号
|
|
||||||
|
|
||||||
- 表别名:c
|
|
||||||
- 数据来源:车间装配管理_装配执行_临时领料明细
|
|
||||||
- 作用:统计全表(不区分组件流水号)中每个物料流水号的实领数总和
|
|
||||||
- 输出字段:全表明细数量总和
|
|
||||||
|
|
||||||
潜在问题说明:
|
|
||||||
C表仅统计“临时领料明细”一个来源,但主查询a表包含三个数据源(临时领料明细、基本件视图、标准件/外购件视图)。
|
|
||||||
如果其他两个来源的数据在临时领料明细中没有对应记录,则C表的总数量可能不完整。
|
|
||||||
建议如需全来源统计,应使用UNION ALL合并三个来源后再计算总和。
|
|
||||||
|
|
||||||
三、涉及的主要数据库对象
|
|
||||||
-----------------------
|
|
||||||
1. 视图:采购管理_采购合同明细_全部_查询视图
|
|
||||||
2. 表:车间装配管理_装配执行_临时领料明细
|
|
||||||
3. 视图:仓储管理_累计库存查询_视图
|
|
||||||
4. 视图:PDM_基本件_领料_视图
|
|
||||||
5. 视图:PDM_标准件和外购件_领料_视图
|
|
||||||
6. 视图:车间装配管理_领料单明细_视图
|
|
||||||
7. 表:库存管理_物料主文件_基本
|
|
||||||
8. 表:库存管理_外购件累计库存
|
|
||||||
|
|
||||||
四、关键技术点
|
|
||||||
-------------
|
|
||||||
- 使用存储过程封装业务逻辑
|
|
||||||
- 动态识别当前物料信息(物料编码、图号型号、物料流水号)
|
|
||||||
- 使用 ROW_NUMBER() 进行价格排序
|
|
||||||
- 使用 LEFT JOIN 关联多个数据源
|
|
||||||
- 使用 UNION ALL 合并多个查询结果
|
|
||||||
- 使用子查询进行聚合统计
|
|
||||||
- 统计历史价格(平均、最高、最低、最近)
|
|
||||||
|
|
||||||
五、存储过程代码清单
|
|
||||||
-------------------
|
|
||||||
1. usp_GetMaterialPriceHistoryByContract(基础版)
|
|
||||||
2. usp_GetMaterialPriceHistoryByContract_WithVendor(供应商筛选增强版)
|
|
||||||
3. 装配管理_三表_查询(分析对象,非新建)
|
|
||||||
|
|
||||||
六、建议与改进
|
|
||||||
-------------
|
|
||||||
- 建议在统计全表物料总数时,如果数据源不唯一,应合并所有来源后再汇总。
|
|
||||||
- 建议在存储过程中添加错误处理机制(如TRY...CATCH)。
|
|
||||||
- 建议对常用查询字段(如物料编码、采购合同流水号、组件流水号)建立索引以提高性能。
|
|
||||||
|
|
||||||
七、总结
|
|
||||||
-------
|
|
||||||
本次问答涵盖了SQL Server存储过程的创建、参数传递、多表关联、子查询、聚合统计等常用技术。
|
|
||||||
用户需求明确,解决方案能够满足查看历史单价和识别C表的需求,同时提供了优化建议以便后续维护和扩展。
|
|
||||||
|
|
||||||
=====================================================
|
|
||||||
结束
|
|
||||||
=====================================================
|
|
||||||
Reference in New Issue
Block a user