105 lines
4.6 KiB
Markdown
105 lines
4.6 KiB
Markdown
## 目标
|
||
|
||
* 在 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 提交规范执行提交。
|
||
|