新增入库单据管理页面

This commit is contained in:
zgw
2025-12-18 10:42:57 +08:00
parent bbe7b8a021
commit abf21af5a8
34 changed files with 3753 additions and 78 deletions

View File

@@ -0,0 +1,104 @@
## 目标
* 在 SQL Server 新增表 `in_stockin_detail_n`,用于存储 ERP 返回的入库产品明细(Cols/Rows)。
* 以实体、Mapper、Service 的方式接入到现有 WMS 代码,并在 `ToErpServiceImpl#getInStock` 中解析 JSON 后落库。
* 字段覆盖现有 ERP 索引映射,支持来源、创建/更新时间等审计信息。
## 数据表设计(SQL Server)
* 表名:`in_stockin_detail_n`
* 关键字段:
* stockin\_detail\_id (入库单主键,插入时,主单对应有几条子单,在主单ID后拼接“-”子单条数)
* stockin\_id 主单ID 与主单ID保持一致
* `erp_detail_id`(ERP入库明细ID,对应 Rows\[0])
* `product_name` nvarchar(200)(Rows\[1])
* `product_model` nvarchar(200)(Rows\[2],型号)
* `unit` nvarchar(50)(Rows\[3])
* `unit_price` decimal(18,6)(Rows\[4])
* `aux_unit` nvarchar(50) 或 int(Rows\[5],与现有实现保持兼容;建议 nvarchar 以避免字典耦合)
* `attr1` nvarchar(100)(Rows\[6])
* `attr2` nvarchar(100)(Rows\[7])
* `quantity` decimal(18,6)(Rows\[9])
* `in_quantity` decimal(18,6)(Rows\[10])
* `aux_quantity` decimal(18,6)(Rows\[11])
* `total_price` decimal(18,6)(Rows\[12])
* `cost_unit_price` decimal(18,6)(Rows\[13])
* `cost_total_price` decimal(18,6)(Rows\[14])
* `accounting_cost_total` decimal(18,6)(Rows\[15])
* `accounting_quantity` decimal(18,6)(Rows\[16])
* `accounting_status` int(Rows\[17])
* `batch_no` nvarchar(100)(Rows\[18])
* `serial_no` nvarchar(100)(Rows\[19])
* `production_date` datetime2(3)(Rows\[20])
* `expiry_date` datetime2(3)(Rows\[21])
* `arrival_date` datetime2(3)(Rows\[22])
* `remark` nvarchar(255)(Rows\[23])
* `custom1`..`custom6` nvarchar(255)(Rows\[24]..Rows\[29])
* `stevedore` nvarchar(100)(Rows\[30],装卸工)
* `create_time` datetime2(3) 默认 `SYSDATETIME()`
* `update_time` datetime2(3) 可在更新时写入 `SYSDATETIME()`
* 约束:`detail_id` 主键;如需防重复插入,可使用 `detail_id + production_date` 唯一索引(按您确认)。
## Java 代码接入
* 新增实体 `com.ruoyi.system.domain.InStockinDetailN`
* 字段与表结构一一对应,类型与上面一致;保留必要的 `@Excel` 注解,遵循现有风格。
* 继承 `BaseEntity`,复用 `createTime`、`updateTime` 字段。
* 新增 Mapper 接口 `com.ruoyi.system.mapper.InStockinDetailNMapper`
* 方法:`insertInStockinDetailN`、`updateInStockinDetailN`、`selectByDetailId`、`batchInsert(List<...>)`、`selectByDetailIdAndDate`(防重复)。
* 新增 XML `mapper/system/InStockinDetailNMapper.xml`
* 定义 `resultMap` 与列映射;提供 `insert`、`update`、`select`、`batchInsert`(`foreach`)语句,时间字段默认使用 `SYSDATETIME()`。
* 新增 Service `IInStockinDetailNService` 与实现 `InStockinDetailNServiceImpl`
* 封装批量写入与防重复逻辑(按 `detail_id` 或当天 `create_time` 过滤)。
## 解析与入库逻辑
* 在 `ToErpServiceImpl#getInStock` 中:
* 从 `row.get(15)`(产品明细 JSON)解析出 `Rows` 列表。
* 按上面索引映射生成 `InStockinDetailN` 对象,填充 `order_src='ERP'`、`create_time=当前时间`。
* 通过 `selectByDetailIdAndDate(detail_id, today)` 判断是否已存在,未存在则插入,已存在忽略。
* 将 `stockin_guid` 关联为当前主单 `newStockin.getStockinGuid()`(若可获得)。
## 索引映射校验
* 结合已有 `ErpInStockinDetail` 的使用位置(`ToErpServiceImpl#AddStockinDetailByErpStockinDetail`),确保以下关键位一致:
* `id`→Rows\[0]、`spare1`(产品名称)→Rows\[1]、`spare2`(产品编号/型号)→Rows\[2]
* 数量→Rows\[9]、批号→Rows\[17]、序列号→Rows\[18]、生产/有效/到货日期→Rows\[19]/\[20]/\[21]
* 如您确认 `Clos` 与 `Rows` 存在偏移或后续附加列,我们将按您提供的最终结构调整表与映射。
## 验证与回归
* 本地运行 `getInStock`,抓取一次 ERP 返回;在控制台输出解析计数与首条样例,以确认列位。
* 手工查询:`SELECT TOP 10 * FROM in_stockin_detail_n ORDER BY create_time DESC;`
* 回归检查:对 `in_stockin_n` 与新表之间的 `stockin_guid` 关联是否正确。
## 提交约定
* 在实现时,所有 Java 代码将补充详细中文注释,解释每一步改动原因与映射关系。
* 不自动创建 `.md` 或 `.sql` 文件;如您需要,我们可生成对应 SQL 文件并在您确认后执行。
* 仅在您确认后进行代码与数据库变更,并按您要求的 Git 提交规范执行提交。