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

4.6 KiB
Raw Permalink Blame History

目标

  • 在 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 提交规范执行提交。