Files
FT542-WMS/.trae/documents/创建并接入 in_stockin_detail_n 明细存储.md
2025-12-18 10:42:57 +08:00

105 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 目标
* 在 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 提交规范执行提交。