4.6 KiB
目标
-
在 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_namenvarchar(200)(Rows[1])product_modelnvarchar(200)(Rows[2],型号)unitnvarchar(50)(Rows[3])unit_pricedecimal(18,6)(Rows[4])aux_unitnvarchar(50) 或 int(Rows[5],与现有实现保持兼容;建议 nvarchar 以避免字典耦合)attr1nvarchar(100)(Rows[6])attr2nvarchar(100)(Rows[7])quantitydecimal(18,6)(Rows[9])in_quantitydecimal(18,6)(Rows[10])aux_quantitydecimal(18,6)(Rows[11])total_pricedecimal(18,6)(Rows[12])cost_unit_pricedecimal(18,6)(Rows[13])cost_total_pricedecimal(18,6)(Rows[14])accounting_cost_totaldecimal(18,6)(Rows[15])accounting_quantitydecimal(18,6)(Rows[16])accounting_statusint(Rows[17])batch_nonvarchar(100)(Rows[18])serial_nonvarchar(100)(Rows[19])production_datedatetime2(3)(Rows[20])expiry_datedatetime2(3)(Rows[21])arrival_datedatetime2(3)(Rows[22])remarknvarchar(255)(Rows[23])custom1..custom6nvarchar(255)(Rows[24]..Rows[29])stevedorenvarchar(100)(Rows[30],装卸工)create_timedatetime2(3) 默认SYSDATETIME()update_timedatetime2(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 提交规范执行提交。