From abf21af5a85bd08d729057ed5a3b9f73d16b9545 Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Thu, 18 Dec 2025 10:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=A5=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../修复打印两页问题并完善打印模板.md | 53 ++ ...创建并接入 in_stockin_detail_n 明细存储.md | 104 ++++ ...�藏打印、选择物料并编辑子单,生成单号与默认来源.md | 61 ++ ...ockin_n_finish 与 in_stockin_detail_n_finish.md | 55 ++ .../api/controller/ToErpApiController.java | 5 + .../api/domain/erp/ErpInStockinNResponse.java | 39 ++ .../com/ruoyi/api/service/IToErpService.java | 1 + .../api/service/impl/ToErpServiceImpl.java | 161 +++++- .../service/impl/MydoJobServiceImpl.java | 4 +- .../InStockinDetailNController.java | 104 ++++ .../InStockinDetailNFinishController.java | 104 ++++ .../InStockinNFinishController.java | 104 ++++ .../ruoyi/system/domain/InStockinDetailN.java | 534 ++++++++++++++++++ .../system/domain/InStockinDetailNFinish.java | 521 +++++++++++++++++ .../ruoyi/system/domain/InStockinNFinish.java | 401 +++++++++++++ .../mapper/InStockinDetailNFinishMapper.java | 64 +++ .../system/mapper/InStockinDetailNMapper.java | 64 +++ .../system/mapper/InStockinNFinishMapper.java | 63 +++ .../IInStockinDetailNFinishService.java | 61 ++ .../service/IInStockinDetailNService.java | 61 ++ .../service/IInStockinNFinishService.java | 61 ++ .../InStockinDetailNFinishServiceImpl.java | 96 ++++ .../impl/InStockinDetailNServiceImpl.java | 96 ++++ .../impl/InStockinNFinishServiceImpl.java | 96 ++++ .../src/main/resources/application.yml | 2 +- .../system/InStockinDetailNFinishMapper.xml | 228 ++++++++ .../mapper/system/InStockinDetailNMapper.xml | 236 ++++++++ .../mapper/system/InStockinNFinishMapper.xml | 188 ++++++ .../resources/sql/in_stockin_detail_n.sql | 40 ++ .../common/enums/StockInCompleteStatus.java | 31 + ruoyi-ui/src/api/in/stockIn.js | 2 +- ruoyi-ui/src/api/system/inStockinDetailN.js | 41 ++ .../src/views/in/stockIn/add/index_new.vue | 140 ++--- sql/update_in_stockin_n_20251217.sql | 10 + 34 files changed, 3753 insertions(+), 78 deletions(-) create mode 100644 .trae/documents/修复打印两页问题并完善打印模板.md create mode 100644 .trae/documents/创建并接入 in_stockin_detail_n 明细存储.md create mode 100644 .trae/documents/在入库单新增中隐藏打印、选择物料并编辑子单,生成单号与默认来源.md create mode 100644 .trae/documents/新增完成表 in_stockin_n_finish 与 in_stockin_detail_n_finish.md create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/domain/erp/ErpInStockinNResponse.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNFinishController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNFinishController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailNFinish.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNFinish.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNFinishMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinNFinishMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNFinishService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNFinishService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNFinishServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNFinishServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNFinishMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/system/InStockinNFinishMapper.xml create mode 100644 ruoyi-admin/src/main/resources/sql/in_stockin_detail_n.sql create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/StockInCompleteStatus.java create mode 100644 ruoyi-ui/src/api/system/inStockinDetailN.js create mode 100644 sql/update_in_stockin_n_20251217.sql diff --git a/.trae/documents/修复打印两页问题并完善打印模板.md b/.trae/documents/修复打印两页问题并完善打印模板.md new file mode 100644 index 0000000..e1b674f --- /dev/null +++ b/.trae/documents/修复打印两页问题并完善打印模板.md @@ -0,0 +1,53 @@ +## 问题判断 +- 仅勾选一条子单仍打印两页,典型原因是分页规则对最后一页也生效或伪类匹配异常导致空白页。 +- `:last-child` 在存在空白文本节点/注释节点的情况下可能失效,导致最后一个实际页面元素仍应用分页。 +- 也可能存在重复数据(同一个 `stockinDetailId` 被选中两次),引发两页输出。 + +## 修复与优化方案 +### 1. 明确分页控制(按索引条件渲染) +- 将分页控制从 CSS 伪类改为模板条件,避免 `:last-child` 因节点影响而失效: +- 模板改为: +```vue + +``` + +### 2. 去重与防重复打印 +- 在 `printDetailQRCodes` 中对 `detailSelections` 去重,确保同一子单只打印一次: +```js +const map = new Map() +this.printData = [] +for (const row of this.detailSelections) { + const key = row.stockinDetailId + if (key && !map.has(key)) { + map.set(key, true) + this.printData.push(row) + } +} +``` + +### 3. 保证单页不被拆分 +- 保留并强化:`.print-page { page-break-inside: avoid; }`,防止卡片高度导致跨页拆分。 +- 控制卡片外层高度与内边距不超过 A4 可打印区域(当前 720px 宽 + 常规内容高度安全)。 + +### 4. 打印触发时机与副本数 +- 维持 `this.$nextTick(() => setTimeout(() => this.$refs.easyPrint2.print(), 100))`,避免多次触发。 +- 如仍出现两页,追加保护:打印前记录 `printData.length` 与内容,控制仅当 `length >= 1` 才触发一次。 + +## 代码变更摘要 +- 更新模板:将分页规则改为基于索引的内联样式条件。 +- 更新方法:`printDetailQRCodes` 增加去重逻辑与空数组保护。 +- 保留样式:`page-break-inside: avoid`;移除或忽略 `:last-child` 分页伪类。 + +## 验证步骤 +- 勾选 1 条子单打印,预览应仅 1 页。 +- 勾选 2 条子单打印,预览应为 2 页且无末尾空白页。 +- 检查不同浏览器(Chromium/Edge)表现一致性。 + +请确认按此方案实施,我将立即更新代码并验证。 \ No newline at end of file diff --git a/.trae/documents/创建并接入 in_stockin_detail_n 明细存储.md b/.trae/documents/创建并接入 in_stockin_detail_n 明细存储.md new file mode 100644 index 0000000..b2c6fd3 --- /dev/null +++ b/.trae/documents/创建并接入 in_stockin_detail_n 明细存储.md @@ -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 提交规范执行提交。 + diff --git a/.trae/documents/在入库单新增中隐藏打印、选择物料并编辑子单,生成单号与默认来源.md b/.trae/documents/在入库单新增中隐藏打印、选择物料并编辑子单,生成单号与默认来源.md new file mode 100644 index 0000000..692abb3 --- /dev/null +++ b/.trae/documents/在入库单新增中隐藏打印、选择物料并编辑子单,生成单号与默认来源.md @@ -0,0 +1,61 @@ +## 目标 +- 在 `InStockIn` 页面满足 5 项需求: + 1. 点击“单据新增”时,打开弹框隐藏“打印入库条码”按钮 + 2. 弹框内新增“选择物料”按钮,打开第二个弹框显示物料列表,选择后将物料加入子单明细 + 3. 子单明细中的“计划数量”和“入库数量”可编辑 + 4. 新增时自动生成 `stockinId`:`RK` + 当前毫秒时间戳 + 5. 提交时 `orderSrc` 默认赋值为“自建单” + +## 技术实现 +- 页面文件:`ruoyi-ui/src/views/system/inStockIn/index.vue` +- 参考实现:`ruoyi-ui/src/views/in/stockIn/add/index_new.vue` 的“添加物料”与“选择物料”弹框逻辑 + +## 详细改动 +### 新增状态标识 +- 在 `data()` 中新增:`isAddMode: false` +- 用于区分“新增”与“编辑/查看”,控制按钮显示与表格可编辑 + +### 隐藏打印按钮 +- 对话框底部的打印按钮(`printDetailQRCodes`)改为:`v-if="!isAddMode"` +- 点击“单据新增”时将 `isAddMode = true`,从而隐藏打印按钮 + +### 选择物料入口 +- 在“子单信息”卡片标题区域新增一个按钮:`选择物料` +- 按钮事件 `openProductSelector()` 打开二级弹框 + +### 物料选择弹框 +- 复用 `index_new.vue` 的模式: + - 引入 API:`import { listBasProduct } from "@/api/bas/BasProduct"` + - 在 `data()` 中新增:`productSelectVisible, productOptions, selectedProducts, productTotal, queryProductParams, productLoading` + - 弹框内容包含搜索表单、物料表格(带选择)、分页与“确定/取消” + - 事件:`getProductList()、resetProductQuery()、handleProductSelectionChange()、confirmSelectProduct()` + +### 子单明细数据与可编辑列 +- 子单明细列表数据源仍使用 `inStockinDetailNList` +- 在“新增”模式下,`confirmSelectProduct()` 将选中的物料映射并 `push` 到 `inStockinDetailNList`: + - 字段映射示例:`productName、productModel(来自 productId 或 spec)、unit、quantity(默认 1)、inQuantity(默认 0)` +- 在子单表格中为 `quantity` 与 `inQuantity` 列增加模板:`` 与 ``,并用 `v-if="isAddMode"` 控制仅在新增时可编辑 + +### 自动生成主单号 +- 在 `handleAdd()`: + - `this.reset()` 后设置:`this.form.stockinId = 'RK' + Date.now()` + - `this.isAddMode = true; this.open = true; this.isView = false; this.title = '添加入库单据管理'` +- 由于 `watch('form.stockinId')` 会尝试拉取子单,新增生成的主单号在后端不存在,列表将为空,此时通过物料选择填充本地子单明细 + +### 提交默认来源 +- 在 `submitForm()` 里,在发起 `addInStockIn(this.form)` 前设置:`this.form.orderSrc = '自建单'` +- 编辑场景保持原逻辑不变;新增成功后 `isAddMode` 复位为 `false` + +## 校验与兼容 +- 行内“修改/删除”按钮逻辑保持现有条件控制;新增模式下仅本地操作子单明细 +- 不影响历史单据查询与打印 +- 若后端需要接收子单明细,一并在后续迭代中按后端接口扩展(当前仅前端本地编辑) + +## 代码触点 +- 模板:对话框底部按钮处、子单卡片标题区新增按钮、子单表格新增可编辑列 +- 脚本:新增 `isAddMode` 标识、导入 `listBasProduct`、新增弹框及方法、在 `handleAdd()` 和 `submitForm()` 中按要求赋值 + +## 期望交互 +- 点击“新增”→ 弹框打开且不显示打印按钮;自动生成主单号 +- 点“选择物料”→ 打开物料选择弹框,勾选并确定→ 子单明细填充,可编辑数量 +- 点“确定”提交→ 主单 `orderSrc` 自动为“自建单” \ No newline at end of file diff --git a/.trae/documents/新增完成表 in_stockin_n_finish 与 in_stockin_detail_n_finish.md b/.trae/documents/新增完成表 in_stockin_n_finish 与 in_stockin_detail_n_finish.md new file mode 100644 index 0000000..887d878 --- /dev/null +++ b/.trae/documents/新增完成表 in_stockin_n_finish 与 in_stockin_detail_n_finish.md @@ -0,0 +1,55 @@ +## 目标 +- 为 `in_stockin_n_finish` 和 `in_stockin_detail_n_finish` 两张“完成/归档表”新增后端代码(Mapper 接口 + MyBatis XML + Service 接口与实现)。 +- 字段结构与现有 `in_stockin_n`、`in_stockin_detail_n` 完全一致,仅更换表名与命名空间。 + +## 范围 +- 复用现有领域模型:直接复用 `InStockinN` 与 `InStockinDetailN` 两个实体类,不新增冗余实体。 +- 新增 Mapper 接口与 XML:Finish 版本分别指向 `_finish` 表名。 +- 新增 Service 接口与实现:提供基本 CRUD 与“从原表批量归档到 finish 表”的能力。 +- 不改动现有 Controller(如需页面展示 Finish 列表,可后续扩展)。 + +## 技术方案 +- MyBatis:在 `mapper/system` 目录新增两个 XML 文件,`resultMap` 的 `type` 仍然使用现有实体类;`select`/`insert`/`update`/`delete` 语句的 `from`/`into` 指向 `_finish` 表。 +- Mapper 接口:在 `com.ruoyi.system.mapper` 新增 `InStockinNFinishMapper`、`InStockinDetailNFinishMapper`,方法签名与现有 Mapper 保持一致(命名不同)。 +- Service:在 `com.ruoyi.system.service` 新增 `IInStockinNFinishService`、`IInStockinDetailNFinishService`;在 `com.ruoyi.system.service.impl` 新增对应实现类,注入 Finish Mapper 完成操作。 + +## 文件清单 +- `ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinNFinishMapper.java` +- `ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNFinishMapper.java` +- `ruoyi-admin/src/main/resources/mapper/system/InStockinNFinishMapper.xml` +- `ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNFinishMapper.xml` +- `ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNFinishService.java` +- `ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNFinishService.java` +- `ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNFinishServiceImpl.java` +- `ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNFinishServiceImpl.java` + +## 方法签名(示例) +- InStockinNFinishMapper / Service: + - `InStockinN selectByStockinGuid(String stockinGuid)` + - `List selectList(InStockinN query)` + - `int insert(InStockinN row)` / `int update(InStockinN row)` / `int deleteByStockinGuid(String stockinGuid)` + - `int batchArchiveFromSource(String date)`(可选:将当日数据从源表复制到 finish 表) +- InStockinDetailNFinishMapper / Service: + - `InStockinDetailN selectByStockinDetailId(String stockinDetailId)` + - `List selectListByStockinGuid(String stockinGuid)` + - `int insert(InStockinDetailN row)` / `int update(InStockinDetailN row)` / `int deleteByStockinDetailId(String stockinDetailId)` + - `int batchArchiveByStockinGuid(String stockinGuid)`(从源明细表按主单 guid 复制到 finish 表) + +## 归档流程(可在 Service 中提供便捷方法) +- 主单:`archiveStockinNByGuid(stockinGuid)` + - 从 `in_stockin_n` 查询主单,存在则插入/更新到 `in_stockin_n_finish` +- 子单:`archiveStockinDetailNByGuid(stockinGuid)` + - 从 `in_stockin_detail_n` 批量查询 `stockin_guid=...` 的子单,批量插入到 `in_stockin_detail_n_finish` +- 幂等:`insert` 使用 `stockin_guid` 或 `stockin_detail_id` 作为唯一约束进行“存在则更新”的 upsert 逻辑(与现有 XML 风格保持一致)。 + +## 校验与验证 +- 本地运行现有入库拉取逻辑,手工触发一次归档方法,验证两张 finish 表插入成功。 +- 使用已有前端页面查询与导出功能验证数据一致性(如果后续增加 Controller,将绑定至 `/system/inStockInFinish` 与 `/system/inStockInDetailFinish`)。 + +## 不改动项 +- 不修改实体字段与现有源表 Mapper/Service;Finish 仅新增并依赖现有结构。 +- 不自动生成 SQL DDL(如需要我可根据现有表结构快速给出 `_finish` 建表 SQL)。 + +## 实施说明 +- 所有新增 Java/XML 文件将包含详细中文注释,解释与源表的字段一致性、使用场景与幂等处理原因。 +- 完成后不进行 Git 提交,等待您提供提交说明/提交人/提交时间/提交备注后再执行。 \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java index 1bee8b9..4e531a5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ToErpApiController.java @@ -61,4 +61,9 @@ public class ToErpApiController { public AjaxResult qqq() { return toErpService.getErpStockinList(); } + + @RequestMapping("/getInStock") + public AjaxResult getInStock(){ + return toErpService.getInStock(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/erp/ErpInStockinNResponse.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/erp/ErpInStockinNResponse.java new file mode 100644 index 0000000..fdc5840 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/erp/ErpInStockinNResponse.java @@ -0,0 +1,39 @@ +package com.ruoyi.api.domain.erp; + +import cn.hutool.core.annotation.Alias; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ErpInStockinNResponse { + @Alias("Page") + private Page page; + @Alias("Cols") + private List cols; + @Alias("Rows") + private List> rows; + @Alias("Code") + private Integer code; + @Alias("Msg") + private String msg; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Page { + @Alias("RecordCount") + private int recordCount; + @Alias("PageSize") + private int pageSize; + @Alias("PageIndex") + private int pageIndex; + @Alias("PageCount") + private int pageCount; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java index 8f20a33..f168a0b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IToErpService.java @@ -40,4 +40,5 @@ public interface IToErpService { void AddStockinDetailByErpStockinDetail(ErpInStockinDetail erpInStockinetail); + AjaxResult getInStock(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java index 4294820..393923e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java @@ -46,6 +46,12 @@ import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService; import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.service.IBasStockService; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.domain.InStockinN; +import com.ruoyi.system.domain.InStockinNQueryRequest; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.common.enums.StockInCompleteStatus; +import com.ruoyi.system.service.IInStockinNService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -493,15 +499,12 @@ public class ToErpServiceImpl implements IToErpService { log.info("请求异常:响应信息为空!检查请求内容!"); return null; } - //------处理响应信息 ErpStockinResponse res = JSONUtil.toBean(response, ErpStockinResponse.class); for (List list : res.getRows()) { - //【入库id】校验单据是否存在 String kuin = Convert.toStr(list.get(1)); ErpInStockin erpInStockin = new ErpInStockin(); - //获取入库主单参数 erpInStockin.setTitle(Convert.toStr(list.get(0)));//主题 erpInStockin.setKuin(kuin);//入库id @@ -524,22 +527,17 @@ public class ToErpServiceImpl implements IToErpService { erpInStockin.setSysIcusIInheritIdIidI415(Convert.toStr(list.get(18)));//车号 String id = erpInStockin.getRkbh() + "_" + erpInStockin.getKuin(); erpInStockin.setStockinGuid(id);//guid - //------校验单据是否已经在表中 - 新增/更新 if (ObjUtil.isNotNull(erpInStockinService.selectErpInStockinByKuin(kuin))) { erpInStockinService.updateErpInStockin(erpInStockin); }else{ erpInStockinService.insertErpInStockin(erpInStockin); } - //------更新wms主单 AddStockinByErpStockin(erpInStockin); - //=================================================================== 明细 ===================================================================== - //------根据主单【kuinlist】字段获取子单信息 if (erpStockinParam.getNeedList() == 1) { - //------获取子单明细 JSONObject jsonObject = JSONUtil.parseObj(erpInStockin.getKuinList()); jsonObject.get("rows"); @@ -700,5 +698,152 @@ public class ToErpServiceImpl implements IToErpService { } + @Autowired + private IInStockinNService inStockinNService; + + @Autowired + private com.ruoyi.system.service.IInStockinDetailNService inStockinDetailNService; + + @Autowired + private ObjectMapper objectMapper; + + //获取入库单据 + + public AjaxResult getInStock(){ + //创建请求体 + InStockinNQueryRequest inStockinNQueryRequest = new InStockinNQueryRequest(); + inStockinNQueryRequest.setComplete1(0);//查找未执行的单据 + inStockinNQueryRequest.setSort1(0); + // 设置日期范围为当天 + String today = DateUtil.today(); +// inStockinNQueryRequest.setDate3Start(today + " 00:00:00"); +// inStockinNQueryRequest.setDate3End(today + " 23:59:59"); + inStockinNQueryRequest.setDate3Start("2025-11-03" + " 00:00:00"); + inStockinNQueryRequest.setDate3End("2025-11-03" + " 23:59:59"); + inStockinNQueryRequest.setDate5Start("2025-11-03" + " 00:00:00"); + inStockinNQueryRequest.setDate5End("2025-11-03" + " 23:59:59"); + inStockinNQueryRequest.setTitle("打冷"); + inStockinNQueryRequest.setNeedList(1); + inStockinNQueryRequest.setPageIndex(1); + inStockinNQueryRequest.setPageSize(0); + String jsonStr = ""; + try { + jsonStr = objectMapper.writeValueAsString(inStockinNQueryRequest); + } catch (Exception e) { + log.error("JSON序列化失败", e); + return AjaxResult.error("JSON序列化失败"); + } + // 获取ERP数据 + String body = HttpRequest.post(getStockinListUrl).header(TOKEN_KEY, login()).body(jsonStr).execute().body(); + // 解析响应 + ErpInStockinNResponse response = JSONUtil.toBean(body, ErpInStockinNResponse.class); + if (response != null && response.getRows() != null) { + List> rows = response.getRows(); + for (List row : rows) { + // 0: 入库主题, 1: 入库id, 2: 入库状态, 3: 申请人, 4: 申请日期, 5: 确认日期, 6: 审批人, 7: 审批意见, + // 8: 入库备注, 9: 关联其他单据id, 10: 添加时间, 11: 库管id, 12: 入库类别, 13: 入库编号, + // 14: 审批状态, 15: 产品明细, 16: 客户名称, 17: 磅单编号, 18: 入库车号 + String erpStockInId = Convert.toStr(row.get(13)); // 入库id + // 检查本地是否存在 + InStockinN existing = inStockinNService.selectInStockinNByStockinIdAndDate(erpStockInId, "2025-11-03"); + if (existing == null) { + // 不存在则插入 + String stockinId = "RK" + DateUtil.format(DateUtil.date(), "yyyyMMddHHmmssSSS"); + InStockinN newStockin = new InStockinN(); + newStockin.setStockinGuid(UUID.randomUUID().toString()); + newStockin.setStockinId(stockinId); + newStockin.setStatus(1);//未执行 + newStockin.setSubject(Convert.toStr(row.get(0))); + newStockin.setErpStockinId(erpStockInId); + newStockin.setErpStatus(row.get(2).toString()); // 假设状态映射需要转换 + newStockin.setApplicant(Convert.toStr(row.get(3))); + newStockin.setApplyDate(Convert.toStr(row.get(4))); + newStockin.setConfirmDate(Convert.toStr(row.get(5))); + newStockin.setApprover(Convert.toStr(row.get(6))); + newStockin.setApprovalComment(Convert.toStr(row.get(7))); + newStockin.setRemark(Convert.toStr(row.get(8))); + newStockin.setRelatedDocId(Convert.toStr(row.get(9))); + newStockin.setCreatedAt(Convert.toStr(row.get(10))); + newStockin.setKeeperId(Convert.toLong(row.get(11))); + newStockin.setCategory(Convert.toStr(row.get(12))); + newStockin.setEntryCode(Convert.toStr(row.get(1))); + newStockin.setApprovalStatus(Convert.toLong(row.get(14))); + newStockin.setProductDetails(Convert.toStr(row.get(15))); + newStockin.setCustomerName(Convert.toStr(row.get(16))); + newStockin.setWeighbillNo(Convert.toStr(row.get(17))); + newStockin.setVehicleNo(Convert.toStr(row.get(18))); + newStockin.setOrderSrc("ERP"); + try { + java.math.BigDecimal orderSum = new java.math.BigDecimal("0"); + cn.hutool.json.JSONObject detailsObjForSum = JSONUtil.parseObj(newStockin.getProductDetails()); + cn.hutool.json.JSONArray detailRowsForSum = detailsObjForSum.getJSONArray("Rows"); + if (detailRowsForSum != null) { + for (int si = 0; si < detailRowsForSum.size(); si++) { + cn.hutool.json.JSONArray sd = detailRowsForSum.getJSONArray(si); + orderSum = orderSum.add(Convert.toBigDecimal(sd.get(9))); + } + } + newStockin.setOrderNum(orderSum); + } catch (Exception ignore) { + } + + inStockinNService.insertInStockinN(newStockin); + // 解析并落库产品明细(Rows) + try { + JSONObject detailsObj = JSONUtil.parseObj(newStockin.getProductDetails()); + JSONArray detailRows = detailsObj.getJSONArray("Rows"); + if (detailRows != null) { + for (int i = 0; i < detailRows.size(); i++) { + JSONArray d = detailRows.getJSONArray(i); + Long erpDetailId = Convert.toLong(d.get(0)); + String stockinDetailId = newStockin.getStockinId() + "-" + (i + 1); + InStockinDetailN detail = new InStockinDetailN(); + detail.setStockinDetailId(stockinDetailId); + detail.setErpDetailId(erpDetailId); + detail.setStockinGuid(newStockin.getStockinGuid()); + detail.setStockinId(newStockin.getStockinId()); + detail.setProductName(Convert.toStr(d.get(1))); + detail.setProductModel(Convert.toStr(d.get(2))); + detail.setUnit(Convert.toStr(d.get(3))); + detail.setUnitPrice(Convert.toBigDecimal(d.get(5))); + detail.setAuxUnit(Convert.toStr(d.get(6))); + detail.setAttr1(Convert.toStr(d.get(7))); + detail.setAttr2(Convert.toStr(d.get(8))); + detail.setQuantity(Convert.toBigDecimal(d.get(9))); + detail.setInQuantity(Convert.toBigDecimal(d.get(10))); + detail.setAuxQuantity(Convert.toBigDecimal(d.get(11))); + detail.setTotalPrice(Convert.toBigDecimal(d.get(12))); + detail.setCostUnitPrice(Convert.toBigDecimal(d.get(13))); + detail.setCostTotalPrice(Convert.toBigDecimal(d.get(14))); + detail.setAccountingCostTotal(Convert.toBigDecimal(d.get(15))); + detail.setAccountingQuantity(Convert.toBigDecimal(d.get(16))); + detail.setAccountingStatus(Long.valueOf(Convert.toInt(d.get(17)))); + detail.setBatchNo(Convert.toStr(d.get(18))); + detail.setSerialNo(Convert.toStr(d.get(19))); + detail.setProductionDate(Convert.toStr(d.get(20))); + detail.setExpiryDate(Convert.toStr(d.get(21))); + detail.setArrivalDate(Convert.toStr(d.get(22))); + detail.setRemark(Convert.toStr(d.get(23))); + detail.setCustom1(Convert.toStr(d.get(24))); + detail.setCustom2(Convert.toStr(d.get(25))); + detail.setCustom3(Convert.toStr(d.get(26))); + detail.setCustom4(Convert.toStr(d.get(27))); + detail.setCustom5(Convert.toStr(d.get(28))); + detail.setCustom6(Convert.toStr(d.get(29))); + detail.setStevedore(Convert.toStr(d.get(30))); + detail.setOrderSrc("ERP"); + inStockinDetailNService.insertInStockinDetailN(detail); + } + } + + } catch (Exception e) { + log.error("解析并落库产品明细失败: {}", e.getMessage()); + } + } + } + } + return AjaxResult.success(body); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index d58a7c8..b6caae1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -136,7 +136,9 @@ public class MydoJobServiceImpl implements IMydoJobService { */ @Override public int insertMydoJob(MydoJob mydoJob) { - + mydoJob.setCreateTime(new Date()); +// mydoJob.setJobId(basJobIdService.getJobId("RK")); +// mydoJob.setTaskNo(Convert.toStr(basTaskNoService.getTaskNo("1"))); return mydoJobMapper.insertMydoJob(mydoJob); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNController.java new file mode 100644 index 0000000..a9f8df2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNController.java @@ -0,0 +1,104 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.service.IInStockinDetailNService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入库子单Controller + * + * @author ruoyi + * @date 2025-12-17 + */ +@RestController +@RequestMapping("/system/inStockinDetailN") +public class InStockinDetailNController extends BaseController +{ + @Autowired + private IInStockinDetailNService inStockinDetailNService; + + /** + * 查询入库子单列表 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:list')") + @GetMapping("/list") + public TableDataInfo list(InStockinDetailN inStockinDetailN) + { + startPage(); + List list = inStockinDetailNService.selectInStockinDetailNList(inStockinDetailN); + return getDataTable(list); + } + + /** + * 导出入库子单列表 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:export')") + @Log(title = "入库子单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, InStockinDetailN inStockinDetailN) + { + List list = inStockinDetailNService.selectInStockinDetailNList(inStockinDetailN); + ExcelUtil util = new ExcelUtil(InStockinDetailN.class); + util.exportExcel(response, list, "入库子单数据"); + } + + /** + * 获取入库子单详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:query')") + @GetMapping(value = "/{stockinDetailId}") + public AjaxResult getInfo(@PathVariable("stockinDetailId") String stockinDetailId) + { + return success(inStockinDetailNService.selectInStockinDetailNByStockinDetailId(stockinDetailId)); + } + + /** + * 新增入库子单 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:add')") + @Log(title = "入库子单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody InStockinDetailN inStockinDetailN) + { + return toAjax(inStockinDetailNService.insertInStockinDetailN(inStockinDetailN)); + } + + /** + * 修改入库子单 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:edit')") + @Log(title = "入库子单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody InStockinDetailN inStockinDetailN) + { + return toAjax(inStockinDetailNService.updateInStockinDetailN(inStockinDetailN)); + } + + /** + * 删除入库子单 + */ + @PreAuthorize("@ss.hasPermi('system:inStockinDetailN:remove')") + @Log(title = "入库子单", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockinDetailIds}") + public AjaxResult remove(@PathVariable String[] stockinDetailIds) + { + return toAjax(inStockinDetailNService.deleteInStockinDetailNByStockinDetailIds(stockinDetailIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNFinishController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNFinishController.java new file mode 100644 index 0000000..fcdfcc5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinDetailNFinishController.java @@ -0,0 +1,104 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.InStockinDetailNFinish; +import com.ruoyi.system.service.IInStockinDetailNFinishService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入库子表历史Controller + * + * @author zgw + * @date 2025-12-17 + */ +@RestController +@RequestMapping("/system/stockindetailNfinish") +public class InStockinDetailNFinishController extends BaseController +{ + @Autowired + private IInStockinDetailNFinishService inStockinDetailNFinishService; + + /** + * 查询入库子表历史列表 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:list')") + @GetMapping("/list") + public TableDataInfo list(InStockinDetailNFinish inStockinDetailNFinish) + { + startPage(); + List list = inStockinDetailNFinishService.selectInStockinDetailNFinishList(inStockinDetailNFinish); + return getDataTable(list); + } + + /** + * 导出入库子表历史列表 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:export')") + @Log(title = "入库子表历史", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, InStockinDetailNFinish inStockinDetailNFinish) + { + List list = inStockinDetailNFinishService.selectInStockinDetailNFinishList(inStockinDetailNFinish); + ExcelUtil util = new ExcelUtil(InStockinDetailNFinish.class); + util.exportExcel(response, list, "入库子表历史数据"); + } + + /** + * 获取入库子表历史详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:query')") + @GetMapping(value = "/{stockinDetailId}") + public AjaxResult getInfo(@PathVariable("stockinDetailId") String stockinDetailId) + { + return success(inStockinDetailNFinishService.selectInStockinDetailNFinishByStockinDetailId(stockinDetailId)); + } + + /** + * 新增入库子表历史 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:add')") + @Log(title = "入库子表历史", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody InStockinDetailNFinish inStockinDetailNFinish) + { + return toAjax(inStockinDetailNFinishService.insertInStockinDetailNFinish(inStockinDetailNFinish)); + } + + /** + * 修改入库子表历史 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:edit')") + @Log(title = "入库子表历史", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody InStockinDetailNFinish inStockinDetailNFinish) + { + return toAjax(inStockinDetailNFinishService.updateInStockinDetailNFinish(inStockinDetailNFinish)); + } + + /** + * 删除入库子表历史 + */ + @PreAuthorize("@ss.hasPermi('system:stockindetailNfinish:remove')") + @Log(title = "入库子表历史", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockinDetailIds}") + public AjaxResult remove(@PathVariable String[] stockinDetailIds) + { + return toAjax(inStockinDetailNFinishService.deleteInStockinDetailNFinishByStockinDetailIds(stockinDetailIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNFinishController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNFinishController.java new file mode 100644 index 0000000..adce0b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNFinishController.java @@ -0,0 +1,104 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.InStockinNFinish; +import com.ruoyi.system.service.IInStockinNFinishService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入库单历史表Controller + * + * @author zgw + * @date 2025-12-17 + */ +@RestController +@RequestMapping("/system/stockinfinish") +public class InStockinNFinishController extends BaseController +{ + @Autowired + private IInStockinNFinishService inStockinNFinishService; + + /** + * 查询入库单历史表列表 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:list')") + @GetMapping("/list") + public TableDataInfo list(InStockinNFinish inStockinNFinish) + { + startPage(); + List list = inStockinNFinishService.selectInStockinNFinishList(inStockinNFinish); + return getDataTable(list); + } + + /** + * 导出入库单历史表列表 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:export')") + @Log(title = "入库单历史表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, InStockinNFinish inStockinNFinish) + { + List list = inStockinNFinishService.selectInStockinNFinishList(inStockinNFinish); + ExcelUtil util = new ExcelUtil(InStockinNFinish.class); + util.exportExcel(response, list, "入库单历史表数据"); + } + + /** + * 获取入库单历史表详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:query')") + @GetMapping(value = "/{stockinGuid}") + public AjaxResult getInfo(@PathVariable("stockinGuid") String stockinGuid) + { + return success(inStockinNFinishService.selectInStockinNFinishByStockinGuid(stockinGuid)); + } + + /** + * 新增入库单历史表 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:add')") + @Log(title = "入库单历史表", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody InStockinNFinish inStockinNFinish) + { + return toAjax(inStockinNFinishService.insertInStockinNFinish(inStockinNFinish)); + } + + /** + * 修改入库单历史表 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:edit')") + @Log(title = "入库单历史表", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody InStockinNFinish inStockinNFinish) + { + return toAjax(inStockinNFinishService.updateInStockinNFinish(inStockinNFinish)); + } + + /** + * 删除入库单历史表 + */ + @PreAuthorize("@ss.hasPermi('system:stockinfinish:remove')") + @Log(title = "入库单历史表", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockinGuids}") + public AjaxResult remove(@PathVariable String[] stockinGuids) + { + return toAjax(inStockinNFinishService.deleteInStockinNFinishByStockinGuids(stockinGuids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java new file mode 100644 index 0000000..4ac8b69 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java @@ -0,0 +1,534 @@ +package com.ruoyi.system.domain; + +import java.math.BigDecimal; + +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入库子单对象 in_stockin_detail_n + * + * @author ruoyi + * @date 2025-12-17 + */ +@Data +public class InStockinDetailN extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long erpDetailId; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stockinGuid; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stockinId; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productName; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productModel; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String unit; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal unitPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String auxUnit; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String attr1; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String attr2; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal quantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal inQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal auxQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal totalPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal costUnitPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal costTotalPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal accountingCostTotal; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal accountingQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long accountingStatus; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String batchNo; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String serialNo; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productionDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String expiryDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String arrivalDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom1; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom2; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom3; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom4; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom5; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom6; + + /** 扫码数量 */ + @Excel(name = "扫码数量") + private BigDecimal smNum; + + /** 实际数量 */ + @Excel(name = "实际数量") + private BigDecimal finishNum; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stevedore; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String orderSrc; + + /** $column.columnComment */ + private String stockinDetailId; + + public void setErpDetailId(Long erpDetailId) + { + this.erpDetailId = erpDetailId; + } + + public Long getErpDetailId() + { + return erpDetailId; + } + + public void setStockinGuid(String stockinGuid) + { + this.stockinGuid = stockinGuid; + } + + public String getStockinGuid() + { + return stockinGuid; + } + + public void setStockinId(String stockinId) + { + this.stockinId = stockinId; + } + + public String getStockinId() + { + return stockinId; + } + + public void setProductName(String productName) + { + this.productName = productName; + } + + public String getProductName() + { + return productName; + } + + public void setProductModel(String productModel) + { + this.productModel = productModel; + } + + public String getProductModel() + { + return productModel; + } + + public void setUnit(String unit) + { + this.unit = unit; + } + + public String getUnit() + { + return unit; + } + + public void setUnitPrice(BigDecimal unitPrice) + { + this.unitPrice = unitPrice; + } + + public BigDecimal getUnitPrice() + { + return unitPrice; + } + + public void setAuxUnit(String auxUnit) + { + this.auxUnit = auxUnit; + } + + public String getAuxUnit() + { + return auxUnit; + } + + public void setAttr1(String attr1) + { + this.attr1 = attr1; + } + + public String getAttr1() + { + return attr1; + } + + public void setAttr2(String attr2) + { + this.attr2 = attr2; + } + + public String getAttr2() + { + return attr2; + } + + public void setQuantity(BigDecimal quantity) + { + this.quantity = quantity; + } + + public BigDecimal getQuantity() + { + return quantity; + } + + public void setInQuantity(BigDecimal inQuantity) + { + this.inQuantity = inQuantity; + } + + public BigDecimal getInQuantity() + { + return inQuantity; + } + + public void setAuxQuantity(BigDecimal auxQuantity) + { + this.auxQuantity = auxQuantity; + } + + public BigDecimal getAuxQuantity() + { + return auxQuantity; + } + + public void setTotalPrice(BigDecimal totalPrice) + { + this.totalPrice = totalPrice; + } + + public BigDecimal getTotalPrice() + { + return totalPrice; + } + + public void setCostUnitPrice(BigDecimal costUnitPrice) + { + this.costUnitPrice = costUnitPrice; + } + + public BigDecimal getCostUnitPrice() + { + return costUnitPrice; + } + + public void setCostTotalPrice(BigDecimal costTotalPrice) + { + this.costTotalPrice = costTotalPrice; + } + + public BigDecimal getCostTotalPrice() + { + return costTotalPrice; + } + + public void setAccountingCostTotal(BigDecimal accountingCostTotal) + { + this.accountingCostTotal = accountingCostTotal; + } + + public BigDecimal getAccountingCostTotal() + { + return accountingCostTotal; + } + + public void setAccountingQuantity(BigDecimal accountingQuantity) + { + this.accountingQuantity = accountingQuantity; + } + + public BigDecimal getAccountingQuantity() + { + return accountingQuantity; + } + + public void setAccountingStatus(Long accountingStatus) + { + this.accountingStatus = accountingStatus; + } + + public Long getAccountingStatus() + { + return accountingStatus; + } + + public void setBatchNo(String batchNo) + { + this.batchNo = batchNo; + } + + public String getBatchNo() + { + return batchNo; + } + + public void setSerialNo(String serialNo) + { + this.serialNo = serialNo; + } + + public String getSerialNo() + { + return serialNo; + } + + public void setProductionDate(String productionDate) + { + this.productionDate = productionDate; + } + + public String getProductionDate() + { + return productionDate; + } + + public void setExpiryDate(String expiryDate) + { + this.expiryDate = expiryDate; + } + + public String getExpiryDate() + { + return expiryDate; + } + + public void setArrivalDate(String arrivalDate) + { + this.arrivalDate = arrivalDate; + } + + public String getArrivalDate() + { + return arrivalDate; + } + + public void setCustom1(String custom1) + { + this.custom1 = custom1; + } + + public String getCustom1() + { + return custom1; + } + + public void setCustom2(String custom2) + { + this.custom2 = custom2; + } + + public String getCustom2() + { + return custom2; + } + + public void setCustom3(String custom3) + { + this.custom3 = custom3; + } + + public String getCustom3() + { + return custom3; + } + + public void setCustom4(String custom4) + { + this.custom4 = custom4; + } + + public String getCustom4() + { + return custom4; + } + + public void setCustom5(String custom5) + { + this.custom5 = custom5; + } + + public String getCustom5() + { + return custom5; + } + + public void setCustom6(String custom6) + { + this.custom6 = custom6; + } + + public String getCustom6() + { + return custom6; + } + + public void setStevedore(String stevedore) + { + this.stevedore = stevedore; + } + + public String getStevedore() + { + return stevedore; + } + + public void setOrderSrc(String orderSrc) + { + this.orderSrc = orderSrc; + } + + public String getOrderSrc() + { + return orderSrc; + } + + public void setStockinDetailId(String stockinDetailId) + { + this.stockinDetailId = stockinDetailId; + } + + public String getStockinDetailId() + { + return stockinDetailId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("erpDetailId", getErpDetailId()) + .append("stockinGuid", getStockinGuid()) + .append("stockinId", getStockinId()) + .append("productName", getProductName()) + .append("productModel", getProductModel()) + .append("unit", getUnit()) + .append("unitPrice", getUnitPrice()) + .append("auxUnit", getAuxUnit()) + .append("attr1", getAttr1()) + .append("attr2", getAttr2()) + .append("quantity", getQuantity()) + .append("inQuantity", getInQuantity()) + .append("auxQuantity", getAuxQuantity()) + .append("totalPrice", getTotalPrice()) + .append("costUnitPrice", getCostUnitPrice()) + .append("costTotalPrice", getCostTotalPrice()) + .append("accountingCostTotal", getAccountingCostTotal()) + .append("accountingQuantity", getAccountingQuantity()) + .append("accountingStatus", getAccountingStatus()) + .append("batchNo", getBatchNo()) + .append("serialNo", getSerialNo()) + .append("productionDate", getProductionDate()) + .append("expiryDate", getExpiryDate()) + .append("arrivalDate", getArrivalDate()) + .append("remark", getRemark()) + .append("custom1", getCustom1()) + .append("custom2", getCustom2()) + .append("custom3", getCustom3()) + .append("custom4", getCustom4()) + .append("custom5", getCustom5()) + .append("custom6", getCustom6()) + .append("smNum", getSmNum()) + .append("finishNum", getFinishNum()) + .append("stevedore", getStevedore()) + .append("orderSrc", getOrderSrc()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("stockinDetailId", getStockinDetailId()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailNFinish.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailNFinish.java new file mode 100644 index 0000000..5a4f352 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailNFinish.java @@ -0,0 +1,521 @@ +package com.ruoyi.system.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入库子表历史对象 in_stockin_detail_n_finish + * + * @author zgw + * @date 2025-12-17 + */ +public class InStockinDetailNFinish extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long erpDetailId; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stockinGuid; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stockinId; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productName; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productModel; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String unit; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal unitPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String auxUnit; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String attr1; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String attr2; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal quantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal inQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal auxQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal totalPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal costUnitPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal costTotalPrice; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal accountingCostTotal; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private BigDecimal accountingQuantity; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long accountingStatus; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String batchNo; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String serialNo; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String productionDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String expiryDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String arrivalDate; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom1; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom2; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom3; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom4; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom5; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String custom6; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String stevedore; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String orderSrc; + + /** $column.columnComment */ + private String stockinDetailId; + + public void setErpDetailId(Long erpDetailId) + { + this.erpDetailId = erpDetailId; + } + + public Long getErpDetailId() + { + return erpDetailId; + } + + public void setStockinGuid(String stockinGuid) + { + this.stockinGuid = stockinGuid; + } + + public String getStockinGuid() + { + return stockinGuid; + } + + public void setStockinId(String stockinId) + { + this.stockinId = stockinId; + } + + public String getStockinId() + { + return stockinId; + } + + public void setProductName(String productName) + { + this.productName = productName; + } + + public String getProductName() + { + return productName; + } + + public void setProductModel(String productModel) + { + this.productModel = productModel; + } + + public String getProductModel() + { + return productModel; + } + + public void setUnit(String unit) + { + this.unit = unit; + } + + public String getUnit() + { + return unit; + } + + public void setUnitPrice(BigDecimal unitPrice) + { + this.unitPrice = unitPrice; + } + + public BigDecimal getUnitPrice() + { + return unitPrice; + } + + public void setAuxUnit(String auxUnit) + { + this.auxUnit = auxUnit; + } + + public String getAuxUnit() + { + return auxUnit; + } + + public void setAttr1(String attr1) + { + this.attr1 = attr1; + } + + public String getAttr1() + { + return attr1; + } + + public void setAttr2(String attr2) + { + this.attr2 = attr2; + } + + public String getAttr2() + { + return attr2; + } + + public void setQuantity(BigDecimal quantity) + { + this.quantity = quantity; + } + + public BigDecimal getQuantity() + { + return quantity; + } + + public void setInQuantity(BigDecimal inQuantity) + { + this.inQuantity = inQuantity; + } + + public BigDecimal getInQuantity() + { + return inQuantity; + } + + public void setAuxQuantity(BigDecimal auxQuantity) + { + this.auxQuantity = auxQuantity; + } + + public BigDecimal getAuxQuantity() + { + return auxQuantity; + } + + public void setTotalPrice(BigDecimal totalPrice) + { + this.totalPrice = totalPrice; + } + + public BigDecimal getTotalPrice() + { + return totalPrice; + } + + public void setCostUnitPrice(BigDecimal costUnitPrice) + { + this.costUnitPrice = costUnitPrice; + } + + public BigDecimal getCostUnitPrice() + { + return costUnitPrice; + } + + public void setCostTotalPrice(BigDecimal costTotalPrice) + { + this.costTotalPrice = costTotalPrice; + } + + public BigDecimal getCostTotalPrice() + { + return costTotalPrice; + } + + public void setAccountingCostTotal(BigDecimal accountingCostTotal) + { + this.accountingCostTotal = accountingCostTotal; + } + + public BigDecimal getAccountingCostTotal() + { + return accountingCostTotal; + } + + public void setAccountingQuantity(BigDecimal accountingQuantity) + { + this.accountingQuantity = accountingQuantity; + } + + public BigDecimal getAccountingQuantity() + { + return accountingQuantity; + } + + public void setAccountingStatus(Long accountingStatus) + { + this.accountingStatus = accountingStatus; + } + + public Long getAccountingStatus() + { + return accountingStatus; + } + + public void setBatchNo(String batchNo) + { + this.batchNo = batchNo; + } + + public String getBatchNo() + { + return batchNo; + } + + public void setSerialNo(String serialNo) + { + this.serialNo = serialNo; + } + + public String getSerialNo() + { + return serialNo; + } + + public void setProductionDate(String productionDate) + { + this.productionDate = productionDate; + } + + public String getProductionDate() + { + return productionDate; + } + + public void setExpiryDate(String expiryDate) + { + this.expiryDate = expiryDate; + } + + public String getExpiryDate() + { + return expiryDate; + } + + public void setArrivalDate(String arrivalDate) + { + this.arrivalDate = arrivalDate; + } + + public String getArrivalDate() + { + return arrivalDate; + } + + public void setCustom1(String custom1) + { + this.custom1 = custom1; + } + + public String getCustom1() + { + return custom1; + } + + public void setCustom2(String custom2) + { + this.custom2 = custom2; + } + + public String getCustom2() + { + return custom2; + } + + public void setCustom3(String custom3) + { + this.custom3 = custom3; + } + + public String getCustom3() + { + return custom3; + } + + public void setCustom4(String custom4) + { + this.custom4 = custom4; + } + + public String getCustom4() + { + return custom4; + } + + public void setCustom5(String custom5) + { + this.custom5 = custom5; + } + + public String getCustom5() + { + return custom5; + } + + public void setCustom6(String custom6) + { + this.custom6 = custom6; + } + + public String getCustom6() + { + return custom6; + } + + public void setStevedore(String stevedore) + { + this.stevedore = stevedore; + } + + public String getStevedore() + { + return stevedore; + } + + public void setOrderSrc(String orderSrc) + { + this.orderSrc = orderSrc; + } + + public String getOrderSrc() + { + return orderSrc; + } + + public void setStockinDetailId(String stockinDetailId) + { + this.stockinDetailId = stockinDetailId; + } + + public String getStockinDetailId() + { + return stockinDetailId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("erpDetailId", getErpDetailId()) + .append("stockinGuid", getStockinGuid()) + .append("stockinId", getStockinId()) + .append("productName", getProductName()) + .append("productModel", getProductModel()) + .append("unit", getUnit()) + .append("unitPrice", getUnitPrice()) + .append("auxUnit", getAuxUnit()) + .append("attr1", getAttr1()) + .append("attr2", getAttr2()) + .append("quantity", getQuantity()) + .append("inQuantity", getInQuantity()) + .append("auxQuantity", getAuxQuantity()) + .append("totalPrice", getTotalPrice()) + .append("costUnitPrice", getCostUnitPrice()) + .append("costTotalPrice", getCostTotalPrice()) + .append("accountingCostTotal", getAccountingCostTotal()) + .append("accountingQuantity", getAccountingQuantity()) + .append("accountingStatus", getAccountingStatus()) + .append("batchNo", getBatchNo()) + .append("serialNo", getSerialNo()) + .append("productionDate", getProductionDate()) + .append("expiryDate", getExpiryDate()) + .append("arrivalDate", getArrivalDate()) + .append("remark", getRemark()) + .append("custom1", getCustom1()) + .append("custom2", getCustom2()) + .append("custom3", getCustom3()) + .append("custom4", getCustom4()) + .append("custom5", getCustom5()) + .append("custom6", getCustom6()) + .append("stevedore", getStevedore()) + .append("orderSrc", getOrderSrc()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("stockinDetailId", getStockinDetailId()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNFinish.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNFinish.java new file mode 100644 index 0000000..1e6d4cf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNFinish.java @@ -0,0 +1,401 @@ +package com.ruoyi.system.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入库单历史表对象 in_stockin_n_finish + * + * @author zgw + * @date 2025-12-17 + */ +public class InStockinNFinish extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 入库单据编号 */ + @Excel(name = "入库单据编号") + private String stockinId; + + /** 入库主题 */ + @Excel(name = "入库主题") + private String subject; + + /** 入库id(内部或外部流水ID) */ + @Excel(name = "入库id", readConverterExp = "内=部或外部流水ID") + private String erpStockinId; + + /** 入库状态(0-草稿,1-待确认,2-已确认,3-已入库等) */ + @Excel(name = "入库状态", readConverterExp = "0=-草稿,1-待确认,2-已确认,3-已入库等") + private int status; + + /** 申请人 */ + @Excel(name = "申请人") + private String applicant; + + /** 申请日期 */ + @Excel(name = "申请日期") + private String applyDate; + + /** 确认日期 */ + @Excel(name = "确认日期") + private String confirmDate; + + /** 审批人 */ + @Excel(name = "审批人") + private String approver; + + /** 审批意见 */ + @Excel(name = "审批意见") + private String approvalComment; + + /** 关联其他单据id */ + @Excel(name = "关联其他单据id") + private String relatedDocId; + + /** 添加时间(记录插入时间) */ + @Excel(name = "添加时间", readConverterExp = "记=录插入时间") + private String createdAt; + + /** 库管id(用户ID或职员ID) */ + @Excel(name = "库管id", readConverterExp = "用=户ID或职员ID") + private Long keeperId; + + /** 入库类别 */ + @Excel(name = "入库类别") + private String category; + + /** 入库编号(流水或业务编号) */ + @Excel(name = "入库编号", readConverterExp = "流=水或业务编号") + private String entryCode; + + /** 审批状态(0-未审批,1-通过,2-驳回) */ + @Excel(name = "审批状态", readConverterExp = "0=-未审批,1-通过,2-驳回") + private Long approvalStatus; + + /** 产品明细(建议存JSON或文本) */ + @Excel(name = "产品明细", readConverterExp = "建=议存JSON或文本") + private String productDetails; + + /** 客户名称 */ + @Excel(name = "客户名称") + private String customerName; + + /** 磅单编号 */ + @Excel(name = "磅单编号") + private String weighbillNo; + + /** 入库车号 */ + @Excel(name = "入库车号") + private String vehicleNo; + + /** ERP单据状态 */ + @Excel(name = "ERP单据状态") + private String erpStatus; + + /** 单据来源 */ + @Excel(name = "单据来源") + private String orderSrc; + + /** 单据数量 */ + @Excel(name = "单据数量") + private BigDecimal orderNum; + + /** 完成数量 */ + @Excel(name = "完成数量") + private BigDecimal finishNum; + + /** guid */ + private String stockinGuid; + + /** 删除时间 */ + @Excel(name = "删除时间") + private String deleteTime; + + public void setStockinId(String stockinId) + { + this.stockinId = stockinId; + } + + public String getStockinId() + { + return stockinId; + } + + public void setSubject(String subject) + { + this.subject = subject; + } + + public String getSubject() + { + return subject; + } + + public void setErpStockinId(String erpStockinId) + { + this.erpStockinId = erpStockinId; + } + + public String getErpStockinId() + { + return erpStockinId; + } + + public void setStatus(int status) + { + this.status = status; + } + + public int getStatus() + { + return status; + } + + public void setApplicant(String applicant) + { + this.applicant = applicant; + } + + public String getApplicant() + { + return applicant; + } + + public void setApplyDate(String applyDate) + { + this.applyDate = applyDate; + } + + public String getApplyDate() + { + return applyDate; + } + + public void setConfirmDate(String confirmDate) + { + this.confirmDate = confirmDate; + } + + public String getConfirmDate() + { + return confirmDate; + } + + public void setApprover(String approver) + { + this.approver = approver; + } + + public String getApprover() + { + return approver; + } + + public void setApprovalComment(String approvalComment) + { + this.approvalComment = approvalComment; + } + + public String getApprovalComment() + { + return approvalComment; + } + + public void setRelatedDocId(String relatedDocId) + { + this.relatedDocId = relatedDocId; + } + + public String getRelatedDocId() + { + return relatedDocId; + } + + public void setCreatedAt(String createdAt) + { + this.createdAt = createdAt; + } + + public String getCreatedAt() + { + return createdAt; + } + + public void setKeeperId(Long keeperId) + { + this.keeperId = keeperId; + } + + public Long getKeeperId() + { + return keeperId; + } + + public void setCategory(String category) + { + this.category = category; + } + + public String getCategory() + { + return category; + } + + public void setEntryCode(String entryCode) + { + this.entryCode = entryCode; + } + + public String getEntryCode() + { + return entryCode; + } + + public void setApprovalStatus(Long approvalStatus) + { + this.approvalStatus = approvalStatus; + } + + public Long getApprovalStatus() + { + return approvalStatus; + } + + public void setProductDetails(String productDetails) + { + this.productDetails = productDetails; + } + + public String getProductDetails() + { + return productDetails; + } + + public void setCustomerName(String customerName) + { + this.customerName = customerName; + } + + public String getCustomerName() + { + return customerName; + } + + public void setWeighbillNo(String weighbillNo) + { + this.weighbillNo = weighbillNo; + } + + public String getWeighbillNo() + { + return weighbillNo; + } + + public void setVehicleNo(String vehicleNo) + { + this.vehicleNo = vehicleNo; + } + + public String getVehicleNo() + { + return vehicleNo; + } + + public void setErpStatus(String erpStatus) + { + this.erpStatus = erpStatus; + } + + public String getErpStatus() + { + return erpStatus; + } + + public void setOrderSrc(String orderSrc) + { + this.orderSrc = orderSrc; + } + + public String getOrderSrc() + { + return orderSrc; + } + + public void setOrderNum(BigDecimal orderNum) + { + this.orderNum = orderNum; + } + + public BigDecimal getOrderNum() + { + return orderNum; + } + + public void setFinishNum(BigDecimal finishNum) + { + this.finishNum = finishNum; + } + + public BigDecimal getFinishNum() + { + return finishNum; + } + + public void setStockinGuid(String stockinGuid) + { + this.stockinGuid = stockinGuid; + } + + public String getStockinGuid() + { + return stockinGuid; + } + + public void setDeleteTime(String deleteTime) + { + this.deleteTime = deleteTime; + } + + public String getDeleteTime() + { + return deleteTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("stockinId", getStockinId()) + .append("subject", getSubject()) + .append("erpStockinId", getErpStockinId()) + .append("status", getStatus()) + .append("applicant", getApplicant()) + .append("applyDate", getApplyDate()) + .append("confirmDate", getConfirmDate()) + .append("approver", getApprover()) + .append("approvalComment", getApprovalComment()) + .append("remark", getRemark()) + .append("relatedDocId", getRelatedDocId()) + .append("createdAt", getCreatedAt()) + .append("keeperId", getKeeperId()) + .append("category", getCategory()) + .append("entryCode", getEntryCode()) + .append("approvalStatus", getApprovalStatus()) + .append("productDetails", getProductDetails()) + .append("customerName", getCustomerName()) + .append("weighbillNo", getWeighbillNo()) + .append("vehicleNo", getVehicleNo()) + .append("erpStatus", getErpStatus()) + .append("orderSrc", getOrderSrc()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("orderNum", getOrderNum()) + .append("finishNum", getFinishNum()) + .append("stockinGuid", getStockinGuid()) + .append("deleteTime", getDeleteTime()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNFinishMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNFinishMapper.java new file mode 100644 index 0000000..87b951f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNFinishMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.InStockinDetailNFinish; +import org.apache.ibatis.annotations.Param; + +/** + * 入库子表历史Mapper接口 + * + * @author zgw + * @date 2025-12-17 + */ +public interface InStockinDetailNFinishMapper +{ + /** + * 查询入库子表历史 + * + * @param stockinDetailId 入库子表历史主键 + * @return 入库子表历史 + */ + public InStockinDetailNFinish selectInStockinDetailNFinishByStockinDetailId(String stockinDetailId); + + /** + * 查询入库子表历史列表 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 入库子表历史集合 + */ + public List selectInStockinDetailNFinishList(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 新增入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + public int insertInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 修改入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + public int updateInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 删除入库子表历史 + * + * @param stockinDetailId 入库子表历史主键 + * @return 结果 + */ + public int deleteInStockinDetailNFinishByStockinDetailId(String stockinDetailId); + + /** + * 批量删除入库子表历史 + * + * @param stockinDetailIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInStockinDetailNFinishByStockinDetailIds(String[] stockinDetailIds); + + void insertByStockInId(@Param("stockinId") String stockinId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java new file mode 100644 index 0000000..48c326b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.InStockinDetailN; +import org.apache.ibatis.annotations.Param; + +/** + * 入库子单Mapper接口 + * + * @author ruoyi + * @date 2025-12-17 + */ +public interface InStockinDetailNMapper +{ + /** + * 查询入库子单 + * + * @param stockinDetailId 入库子单主键 + * @return 入库子单 + */ + public InStockinDetailN selectInStockinDetailNByStockinDetailId(String stockinDetailId); + + /** + * 查询入库子单列表 + * + * @param inStockinDetailN 入库子单 + * @return 入库子单集合 + */ + public List selectInStockinDetailNList(InStockinDetailN inStockinDetailN); + + /** + * 新增入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + public int insertInStockinDetailN(InStockinDetailN inStockinDetailN); + + /** + * 修改入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + public int updateInStockinDetailN(InStockinDetailN inStockinDetailN); + + /** + * 删除入库子单 + * + * @param stockinDetailId 入库子单主键 + * @return 结果 + */ + public int deleteInStockinDetailNByStockinDetailId(String stockinDetailId); + + /** + * 批量删除入库子单 + * + * @param stockinDetailIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInStockinDetailNByStockinDetailIds(String[] stockinDetailIds); + + void deleteByStockInId(@Param("stockinId") String stockinId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinNFinishMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinNFinishMapper.java new file mode 100644 index 0000000..3e740ea --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinNFinishMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.InStockinNFinish; +import org.apache.ibatis.annotations.Param; + +/** + * 入库单历史表Mapper接口 + * + * @author zgw + * @date 2025-12-17 + */ +public interface InStockinNFinishMapper +{ + /** + * 查询入库单历史表 + * + * @param stockinGuid 入库单历史表主键 + * @return 入库单历史表 + */ + public InStockinNFinish selectInStockinNFinishByStockinGuid(String stockinGuid); + + /** + * 查询入库单历史表列表 + * + * @param inStockinNFinish 入库单历史表 + * @return 入库单历史表集合 + */ + public List selectInStockinNFinishList(InStockinNFinish inStockinNFinish); + + /** + * 新增入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + public int insertInStockinNFinish(InStockinNFinish inStockinNFinish); + + /** + * 修改入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + public int updateInStockinNFinish(InStockinNFinish inStockinNFinish); + + /** + * 删除入库单历史表 + * + * @param stockinGuid 入库单历史表主键 + * @return 结果 + */ + public int deleteInStockinNFinishByStockinGuid(String stockinGuid); + + /** + * 批量删除入库单历史表 + * + * @param stockinGuids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInStockinNFinishByStockinGuids(String[] stockinGuids); + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNFinishService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNFinishService.java new file mode 100644 index 0000000..0ec7ea8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNFinishService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.InStockinDetailNFinish; + +/** + * 入库子表历史Service接口 + * + * @author zgw + * @date 2025-12-17 + */ +public interface IInStockinDetailNFinishService +{ + /** + * 查询入库子表历史 + * + * @param stockinDetailId 入库子表历史主键 + * @return 入库子表历史 + */ + public InStockinDetailNFinish selectInStockinDetailNFinishByStockinDetailId(String stockinDetailId); + + /** + * 查询入库子表历史列表 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 入库子表历史集合 + */ + public List selectInStockinDetailNFinishList(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 新增入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + public int insertInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 修改入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + public int updateInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish); + + /** + * 批量删除入库子表历史 + * + * @param stockinDetailIds 需要删除的入库子表历史主键集合 + * @return 结果 + */ + public int deleteInStockinDetailNFinishByStockinDetailIds(String[] stockinDetailIds); + + /** + * 删除入库子表历史信息 + * + * @param stockinDetailId 入库子表历史主键 + * @return 结果 + */ + public int deleteInStockinDetailNFinishByStockinDetailId(String stockinDetailId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java new file mode 100644 index 0000000..676d82b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.InStockinDetailN; + +/** + * 入库子单Service接口 + * + * @author ruoyi + * @date 2025-12-17 + */ +public interface IInStockinDetailNService +{ + /** + * 查询入库子单 + * + * @param stockinDetailId 入库子单主键 + * @return 入库子单 + */ + public InStockinDetailN selectInStockinDetailNByStockinDetailId(String stockinDetailId); + + /** + * 查询入库子单列表 + * + * @param inStockinDetailN 入库子单 + * @return 入库子单集合 + */ + public List selectInStockinDetailNList(InStockinDetailN inStockinDetailN); + + /** + * 新增入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + public int insertInStockinDetailN(InStockinDetailN inStockinDetailN); + + /** + * 修改入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + public int updateInStockinDetailN(InStockinDetailN inStockinDetailN); + + /** + * 批量删除入库子单 + * + * @param stockinDetailIds 需要删除的入库子单主键集合 + * @return 结果 + */ + public int deleteInStockinDetailNByStockinDetailIds(String[] stockinDetailIds); + + /** + * 删除入库子单信息 + * + * @param stockinDetailId 入库子单主键 + * @return 结果 + */ + public int deleteInStockinDetailNByStockinDetailId(String stockinDetailId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNFinishService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNFinishService.java new file mode 100644 index 0000000..c38fda0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNFinishService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.InStockinNFinish; + +/** + * 入库单历史表Service接口 + * + * @author zgw + * @date 2025-12-17 + */ +public interface IInStockinNFinishService +{ + /** + * 查询入库单历史表 + * + * @param stockinGuid 入库单历史表主键 + * @return 入库单历史表 + */ + public InStockinNFinish selectInStockinNFinishByStockinGuid(String stockinGuid); + + /** + * 查询入库单历史表列表 + * + * @param inStockinNFinish 入库单历史表 + * @return 入库单历史表集合 + */ + public List selectInStockinNFinishList(InStockinNFinish inStockinNFinish); + + /** + * 新增入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + public int insertInStockinNFinish(InStockinNFinish inStockinNFinish); + + /** + * 修改入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + public int updateInStockinNFinish(InStockinNFinish inStockinNFinish); + + /** + * 批量删除入库单历史表 + * + * @param stockinGuids 需要删除的入库单历史表主键集合 + * @return 结果 + */ + public int deleteInStockinNFinishByStockinGuids(String[] stockinGuids); + + /** + * 删除入库单历史表信息 + * + * @param stockinGuid 入库单历史表主键 + * @return 结果 + */ + public int deleteInStockinNFinishByStockinGuid(String stockinGuid); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNFinishServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNFinishServiceImpl.java new file mode 100644 index 0000000..7b09647 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNFinishServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.InStockinDetailNFinishMapper; +import com.ruoyi.system.domain.InStockinDetailNFinish; +import com.ruoyi.system.service.IInStockinDetailNFinishService; + +/** + * 入库子表历史Service业务层处理 + * + * @author zgw + * @date 2025-12-17 + */ +@Service +public class InStockinDetailNFinishServiceImpl implements IInStockinDetailNFinishService +{ + @Autowired + private InStockinDetailNFinishMapper inStockinDetailNFinishMapper; + + /** + * 查询入库子表历史 + * + * @param stockinDetailId 入库子表历史主键 + * @return 入库子表历史 + */ + @Override + public InStockinDetailNFinish selectInStockinDetailNFinishByStockinDetailId(String stockinDetailId) + { + return inStockinDetailNFinishMapper.selectInStockinDetailNFinishByStockinDetailId(stockinDetailId); + } + + /** + * 查询入库子表历史列表 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 入库子表历史 + */ + @Override + public List selectInStockinDetailNFinishList(InStockinDetailNFinish inStockinDetailNFinish) + { + return inStockinDetailNFinishMapper.selectInStockinDetailNFinishList(inStockinDetailNFinish); + } + + /** + * 新增入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + @Override + public int insertInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish) + { + inStockinDetailNFinish.setCreateTime(DateUtils.getNowDate()); + return inStockinDetailNFinishMapper.insertInStockinDetailNFinish(inStockinDetailNFinish); + } + + /** + * 修改入库子表历史 + * + * @param inStockinDetailNFinish 入库子表历史 + * @return 结果 + */ + @Override + public int updateInStockinDetailNFinish(InStockinDetailNFinish inStockinDetailNFinish) + { + inStockinDetailNFinish.setUpdateTime(DateUtils.getNowDate()); + return inStockinDetailNFinishMapper.updateInStockinDetailNFinish(inStockinDetailNFinish); + } + + /** + * 批量删除入库子表历史 + * + * @param stockinDetailIds 需要删除的入库子表历史主键 + * @return 结果 + */ + @Override + public int deleteInStockinDetailNFinishByStockinDetailIds(String[] stockinDetailIds) + { + return inStockinDetailNFinishMapper.deleteInStockinDetailNFinishByStockinDetailIds(stockinDetailIds); + } + + /** + * 删除入库子表历史信息 + * + * @param stockinDetailId 入库子表历史主键 + * @return 结果 + */ + @Override + public int deleteInStockinDetailNFinishByStockinDetailId(String stockinDetailId) + { + return inStockinDetailNFinishMapper.deleteInStockinDetailNFinishByStockinDetailId(stockinDetailId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java new file mode 100644 index 0000000..bca9da0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.InStockinDetailNMapper; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.service.IInStockinDetailNService; + +/** + * 入库子单Service业务层处理 + * + * @author ruoyi + * @date 2025-12-17 + */ +@Service +public class InStockinDetailNServiceImpl implements IInStockinDetailNService +{ + @Autowired + private InStockinDetailNMapper inStockinDetailNMapper; + + /** + * 查询入库子单 + * + * @param stockinDetailId 入库子单主键 + * @return 入库子单 + */ + @Override + public InStockinDetailN selectInStockinDetailNByStockinDetailId(String stockinDetailId) + { + return inStockinDetailNMapper.selectInStockinDetailNByStockinDetailId(stockinDetailId); + } + + /** + * 查询入库子单列表 + * + * @param inStockinDetailN 入库子单 + * @return 入库子单 + */ + @Override + public List selectInStockinDetailNList(InStockinDetailN inStockinDetailN) + { + return inStockinDetailNMapper.selectInStockinDetailNList(inStockinDetailN); + } + + /** + * 新增入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + @Override + public int insertInStockinDetailN(InStockinDetailN inStockinDetailN) + { + inStockinDetailN.setCreateTime(DateUtils.getNowDate()); + return inStockinDetailNMapper.insertInStockinDetailN(inStockinDetailN); + } + + /** + * 修改入库子单 + * + * @param inStockinDetailN 入库子单 + * @return 结果 + */ + @Override + public int updateInStockinDetailN(InStockinDetailN inStockinDetailN) + { + inStockinDetailN.setUpdateTime(DateUtils.getNowDate()); + return inStockinDetailNMapper.updateInStockinDetailN(inStockinDetailN); + } + + /** + * 批量删除入库子单 + * + * @param stockinDetailIds 需要删除的入库子单主键 + * @return 结果 + */ + @Override + public int deleteInStockinDetailNByStockinDetailIds(String[] stockinDetailIds) + { + return inStockinDetailNMapper.deleteInStockinDetailNByStockinDetailIds(stockinDetailIds); + } + + /** + * 删除入库子单信息 + * + * @param stockinDetailId 入库子单主键 + * @return 结果 + */ + @Override + public int deleteInStockinDetailNByStockinDetailId(String stockinDetailId) + { + return inStockinDetailNMapper.deleteInStockinDetailNByStockinDetailId(stockinDetailId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNFinishServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNFinishServiceImpl.java new file mode 100644 index 0000000..dc21569 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNFinishServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.InStockinNFinishMapper; +import com.ruoyi.system.domain.InStockinNFinish; +import com.ruoyi.system.service.IInStockinNFinishService; + +/** + * 入库单历史表Service业务层处理 + * + * @author zgw + * @date 2025-12-17 + */ +@Service +public class InStockinNFinishServiceImpl implements IInStockinNFinishService +{ + @Autowired + private InStockinNFinishMapper inStockinNFinishMapper; + + /** + * 查询入库单历史表 + * + * @param stockinGuid 入库单历史表主键 + * @return 入库单历史表 + */ + @Override + public InStockinNFinish selectInStockinNFinishByStockinGuid(String stockinGuid) + { + return inStockinNFinishMapper.selectInStockinNFinishByStockinGuid(stockinGuid); + } + + /** + * 查询入库单历史表列表 + * + * @param inStockinNFinish 入库单历史表 + * @return 入库单历史表 + */ + @Override + public List selectInStockinNFinishList(InStockinNFinish inStockinNFinish) + { + return inStockinNFinishMapper.selectInStockinNFinishList(inStockinNFinish); + } + + /** + * 新增入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + @Override + public int insertInStockinNFinish(InStockinNFinish inStockinNFinish) + { + inStockinNFinish.setCreateTime(DateUtils.getNowDate()); + return inStockinNFinishMapper.insertInStockinNFinish(inStockinNFinish); + } + + /** + * 修改入库单历史表 + * + * @param inStockinNFinish 入库单历史表 + * @return 结果 + */ + @Override + public int updateInStockinNFinish(InStockinNFinish inStockinNFinish) + { + inStockinNFinish.setUpdateTime(DateUtils.getNowDate()); + return inStockinNFinishMapper.updateInStockinNFinish(inStockinNFinish); + } + + /** + * 批量删除入库单历史表 + * + * @param stockinGuids 需要删除的入库单历史表主键 + * @return 结果 + */ + @Override + public int deleteInStockinNFinishByStockinGuids(String[] stockinGuids) + { + return inStockinNFinishMapper.deleteInStockinNFinishByStockinGuids(stockinGuids); + } + + /** + * 删除入库单历史表信息 + * + * @param stockinGuid 入库单历史表主键 + * @return 结果 + */ + @Override + public int deleteInStockinNFinishByStockinGuid(String stockinGuid) + { + return inStockinNFinishMapper.deleteInStockinNFinishByStockinGuid(stockinGuid); + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 1d47795..7529151 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -66,7 +66,7 @@ spring: devtools: restart: # 热部署开关 - enabled: true + enabled: false data: # redis 配置 redis: diff --git a/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNFinishMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNFinishMapper.xml new file mode 100644 index 0000000..18de09b --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNFinishMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select erp_detail_id, stockin_guid, stockin_id, product_name, product_model, unit, unit_price, aux_unit, attr1, attr2, quantity, in_quantity, aux_quantity, total_price, cost_unit_price, cost_total_price, accounting_cost_total, accounting_quantity, accounting_status, batch_no, serial_no, production_date, expiry_date, arrival_date, remark, custom1, custom2, custom3, custom4, custom5, custom6, stevedore, order_src, create_time, update_time, stockin_detail_id from in_stockin_detail_n_finish + + + + + + + + insert into in_stockin_detail_n_finish + + erp_detail_id, + stockin_guid, + stockin_id, + product_name, + product_model, + unit, + unit_price, + aux_unit, + attr1, + attr2, + quantity, + in_quantity, + aux_quantity, + total_price, + cost_unit_price, + cost_total_price, + accounting_cost_total, + accounting_quantity, + accounting_status, + batch_no, + serial_no, + production_date, + expiry_date, + arrival_date, + remark, + custom1, + custom2, + custom3, + custom4, + custom5, + custom6, + stevedore, + order_src, + create_time, + update_time, + stockin_detail_id, + + + #{erpDetailId}, + #{stockinGuid}, + #{stockinId}, + #{productName}, + #{productModel}, + #{unit}, + #{unitPrice}, + #{auxUnit}, + #{attr1}, + #{attr2}, + #{quantity}, + #{inQuantity}, + #{auxQuantity}, + #{totalPrice}, + #{costUnitPrice}, + #{costTotalPrice}, + #{accountingCostTotal}, + #{accountingQuantity}, + #{accountingStatus}, + #{batchNo}, + #{serialNo}, + #{productionDate}, + #{expiryDate}, + #{arrivalDate}, + #{remark}, + #{custom1}, + #{custom2}, + #{custom3}, + #{custom4}, + #{custom5}, + #{custom6}, + #{stevedore}, + #{orderSrc}, + #{createTime}, + #{updateTime}, + #{stockinDetailId}, + + + + insert into in_stockin_detail_n_finish select * from in_stockin_detail_n where stockin_id=#{stockinId} + + + + update in_stockin_detail_n_finish + + erp_detail_id = #{erpDetailId}, + stockin_guid = #{stockinGuid}, + stockin_id = #{stockinId}, + product_name = #{productName}, + product_model = #{productModel}, + unit = #{unit}, + unit_price = #{unitPrice}, + aux_unit = #{auxUnit}, + attr1 = #{attr1}, + attr2 = #{attr2}, + quantity = #{quantity}, + in_quantity = #{inQuantity}, + aux_quantity = #{auxQuantity}, + total_price = #{totalPrice}, + cost_unit_price = #{costUnitPrice}, + cost_total_price = #{costTotalPrice}, + accounting_cost_total = #{accountingCostTotal}, + accounting_quantity = #{accountingQuantity}, + accounting_status = #{accountingStatus}, + batch_no = #{batchNo}, + serial_no = #{serialNo}, + production_date = #{productionDate}, + expiry_date = #{expiryDate}, + arrival_date = #{arrivalDate}, + remark = #{remark}, + custom1 = #{custom1}, + custom2 = #{custom2}, + custom3 = #{custom3}, + custom4 = #{custom4}, + custom5 = #{custom5}, + custom6 = #{custom6}, + stevedore = #{stevedore}, + order_src = #{orderSrc}, + create_time = #{createTime}, + update_time = #{updateTime}, + + where stockin_detail_id = #{stockinDetailId} + + + + delete from in_stockin_detail_n_finish where stockin_detail_id = #{stockinDetailId} + + + + delete from in_stockin_detail_n_finish where stockin_detail_id in + + #{stockinDetailId} + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml new file mode 100644 index 0000000..c2576a6 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select erp_detail_id, stockin_guid, stockin_id, product_name, product_model, unit, unit_price, aux_unit, attr1, attr2, quantity, in_quantity, aux_quantity, total_price, cost_unit_price, cost_total_price, accounting_cost_total, accounting_quantity, accounting_status, batch_no, serial_no, production_date, expiry_date, arrival_date, remark, custom1, custom2, custom3, custom4, custom5, custom6, sm_num, finish_num, stevedore, order_src, create_time, update_time, stockin_detail_id from in_stockin_detail_n + + + + + + + + insert into in_stockin_detail_n + + erp_detail_id, + stockin_guid, + stockin_id, + product_name, + product_model, + unit, + unit_price, + aux_unit, + attr1, + attr2, + quantity, + in_quantity, + aux_quantity, + total_price, + cost_unit_price, + cost_total_price, + accounting_cost_total, + accounting_quantity, + accounting_status, + batch_no, + serial_no, + production_date, + expiry_date, + arrival_date, + remark, + custom1, + custom2, + custom3, + custom4, + custom5, + custom6, + stevedore, + order_src, + create_time, + update_time, + stockin_detail_id, + + + #{erpDetailId}, + #{stockinGuid}, + #{stockinId}, + #{productName}, + #{productModel}, + #{unit}, + #{unitPrice}, + #{auxUnit}, + #{attr1}, + #{attr2}, + #{quantity}, + #{inQuantity}, + #{auxQuantity}, + #{totalPrice}, + #{costUnitPrice}, + #{costTotalPrice}, + #{accountingCostTotal}, + #{accountingQuantity}, + #{accountingStatus}, + #{batchNo}, + #{serialNo}, + #{productionDate}, + #{expiryDate}, + #{arrivalDate}, + #{remark}, + #{custom1}, + #{custom2}, + #{custom3}, + #{custom4}, + #{custom5}, + #{custom6}, + #{smNum}, + #{finishNum}, + #{stevedore}, + #{orderSrc}, + #{createTime}, + #{updateTime}, + #{stockinDetailId}, + + + + + update in_stockin_detail_n + + erp_detail_id = #{erpDetailId}, + stockin_guid = #{stockinGuid}, + stockin_id = #{stockinId}, + product_name = #{productName}, + product_model = #{productModel}, + unit = #{unit}, + unit_price = #{unitPrice}, + aux_unit = #{auxUnit}, + attr1 = #{attr1}, + attr2 = #{attr2}, + quantity = #{quantity}, + in_quantity = #{inQuantity}, + aux_quantity = #{auxQuantity}, + total_price = #{totalPrice}, + cost_unit_price = #{costUnitPrice}, + cost_total_price = #{costTotalPrice}, + accounting_cost_total = #{accountingCostTotal}, + accounting_quantity = #{accountingQuantity}, + accounting_status = #{accountingStatus}, + batch_no = #{batchNo}, + serial_no = #{serialNo}, + production_date = #{productionDate}, + expiry_date = #{expiryDate}, + arrival_date = #{arrivalDate}, + remark = #{remark}, + custom1 = #{custom1}, + custom2 = #{custom2}, + custom3 = #{custom3}, + custom4 = #{custom4}, + custom5 = #{custom5}, + custom6 = #{custom6}, + sm_num = #{smNum}, + finish_num = #{finishNum}, + stevedore = #{stevedore}, + order_src = #{orderSrc}, + create_time = #{createTime}, + update_time = #{updateTime}, + + where stockin_detail_id = #{stockinDetailId} + + + + delete from in_stockin_detail_n where stockin_detail_id = #{stockinDetailId} + + + + delete from in_stockin_detail_n where stockin_detail_id in + + #{stockinDetailId} + + + + delete from in_stockin_detail_n where stockin_id = #{stockinId} + + diff --git a/ruoyi-admin/src/main/resources/mapper/system/InStockinNFinishMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/InStockinNFinishMapper.xml new file mode 100644 index 0000000..de0d6d3 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/system/InStockinNFinishMapper.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stockin_id, subject, erp_stockin_id, status, applicant, apply_date, confirm_date, approver, approval_comment, remark, related_doc_id, created_at, keeper_id, category, entry_code, approval_status, product_details, customer_name, weighbill_no, vehicle_no, erp_status, order_src, create_time, update_time, order_num, finish_num, stockin_guid, delete_time from in_stockin_n_finish + + + + + + + + insert into in_stockin_n_finish + + stockin_id, + subject, + erp_stockin_id, + status, + applicant, + apply_date, + confirm_date, + approver, + approval_comment, + remark, + related_doc_id, + created_at, + keeper_id, + category, + entry_code, + approval_status, + product_details, + customer_name, + weighbill_no, + vehicle_no, + erp_status, + order_src, + create_time, + update_time, + order_num, + finish_num, + stockin_guid, + delete_time, + + + #{stockinId}, + #{subject}, + #{erpStockinId}, + #{status}, + #{applicant}, + #{applyDate}, + #{confirmDate}, + #{approver}, + #{approvalComment}, + #{remark}, + #{relatedDocId}, + #{createdAt}, + #{keeperId}, + #{category}, + #{entryCode}, + #{approvalStatus}, + #{productDetails}, + #{customerName}, + #{weighbillNo}, + #{vehicleNo}, + #{erpStatus}, + #{orderSrc}, + #{createTime}, + #{updateTime}, + #{orderNum}, + #{finishNum}, + #{stockinGuid}, + #{deleteTime}, + + + + insert into in_stockin_detail_n_finish select * from in_stockin_detail_n where stockin_id=#{stockinId} + + + + update in_stockin_n_finish + + stockin_id = #{stockinId}, + subject = #{subject}, + erp_stockin_id = #{erpStockinId}, + status = #{status}, + applicant = #{applicant}, + apply_date = #{applyDate}, + confirm_date = #{confirmDate}, + approver = #{approver}, + approval_comment = #{approvalComment}, + remark = #{remark}, + related_doc_id = #{relatedDocId}, + created_at = #{createdAt}, + keeper_id = #{keeperId}, + category = #{category}, + entry_code = #{entryCode}, + approval_status = #{approvalStatus}, + product_details = #{productDetails}, + customer_name = #{customerName}, + weighbill_no = #{weighbillNo}, + vehicle_no = #{vehicleNo}, + erp_status = #{erpStatus}, + order_src = #{orderSrc}, + create_time = #{createTime}, + update_time = #{updateTime}, + order_num = #{orderNum}, + finish_num = #{finishNum}, + delete_time = #{deleteTime}, + + where stockin_guid = #{stockinGuid} + + + + delete from in_stockin_n_finish where stockin_guid = #{stockinGuid} + + + + delete from in_stockin_n_finish where stockin_guid in + + #{stockinGuid} + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/sql/in_stockin_detail_n.sql b/ruoyi-admin/src/main/resources/sql/in_stockin_detail_n.sql new file mode 100644 index 0000000..869c7e2 --- /dev/null +++ b/ruoyi-admin/src/main/resources/sql/in_stockin_detail_n.sql @@ -0,0 +1,40 @@ +-- SQL Server 建表:in_stockin_detail_n +CREATE TABLE dbo.in_stockin_detail_n ( + stockin_detail_id NVARCHAR(64) NOT NULL, + erp_detail_id BIGINT NULL, + stockin_guid NVARCHAR(64) NULL, + stockin_id NVARCHAR(64) NULL, + product_name NVARCHAR(200) NULL, + product_model NVARCHAR(200) NULL, + unit NVARCHAR(50) NULL, + unit_price DECIMAL(18,6) NULL, + aux_unit NVARCHAR(50) NULL, + attr1 NVARCHAR(100) NULL, + attr2 NVARCHAR(100) NULL, + quantity DECIMAL(18,6) NULL, + in_quantity DECIMAL(18,6) NULL, + aux_quantity DECIMAL(18,6) NULL, + total_price DECIMAL(18,6) NULL, + cost_unit_price DECIMAL(18,6) NULL, + cost_total_price DECIMAL(18,6) NULL, + accounting_cost_total DECIMAL(18,6) NULL, + accounting_quantity DECIMAL(18,6) NULL, + accounting_status INT NULL, + batch_no NVARCHAR(100) NULL, + serial_no NVARCHAR(100) NULL, + production_date DATETIME2(3) NULL, + expiry_date DATETIME2(3) NULL, + arrival_date DATETIME2(3) NULL, + remark NVARCHAR(255) NULL, + custom1 NVARCHAR(255) NULL, + custom2 NVARCHAR(255) NULL, + custom3 NVARCHAR(255) NULL, + custom4 NVARCHAR(255) NULL, + custom5 NVARCHAR(255) NULL, + custom6 NVARCHAR(255) NULL, + stevedore NVARCHAR(100) NULL, + order_src NVARCHAR(50) NULL, + create_time DATETIME2(3) NOT NULL DEFAULT SYSDATETIME(), + update_time DATETIME2(3) NULL, + CONSTRAINT PK_in_stockin_detail_n PRIMARY KEY (stockin_detail_id) +); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/StockInCompleteStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/StockInCompleteStatus.java new file mode 100644 index 0000000..d21fa4d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/StockInCompleteStatus.java @@ -0,0 +1,31 @@ +package com.ruoyi.common.enums; + +/** + * 入库单据完成状态 + * + * @author ruoyi + */ +public enum StockInCompleteStatus +{ + UNEXECUTED(1, "未执行"), + EXECUTED(3, "已执行"); // Based on previous JSON example where Complete1 was 3, adding it proactively or just stick to what user asked. User asked for 1. + + private final Integer code; + private final String info; + + StockInCompleteStatus(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/ruoyi-ui/src/api/in/stockIn.js b/ruoyi-ui/src/api/in/stockIn.js index e5b7a0a..09a05df 100644 --- a/ruoyi-ui/src/api/in/stockIn.js +++ b/ruoyi-ui/src/api/in/stockIn.js @@ -3,7 +3,7 @@ import request from '@/utils/request' // 查询入库单据列表 export function listStockIn(query) { return request({ - url: '/in/stockIn/list', + url: '/in/stockIn/listAll', method: 'get', params: query }) diff --git a/ruoyi-ui/src/api/system/inStockinDetailN.js b/ruoyi-ui/src/api/system/inStockinDetailN.js new file mode 100644 index 0000000..59606e4 --- /dev/null +++ b/ruoyi-ui/src/api/system/inStockinDetailN.js @@ -0,0 +1,41 @@ +// 说明:入库子单(N版)相关接口封装 +// 理由:后端已提供 /system/inStockinDetailN/list 与 /{stockinDetailId}, +// 前端统一通过模块化方式调用,便于维护与复用 + +import request from '@/utils/request' + +/** + * 查询入库子单(N版)列表 + * @param {Object} query 查询参数 + * @param {number} query.pageNum 页码 + * @param {number} query.pageSize 每页条数 + * @param {string} [query.stockinId] 主单号(通过主单过滤子单) + * 设计说明:后端 Mapper.xml 支持按 stockinId 过滤,故通过 params 传递即可 + */ +export function listInStockinDetailN(query) { + return request({ + url: '/system/inStockinDetailN/list', + method: 'get', + params: query + }) +} + + +export function listInStockinDetailNFinish(query) { + return request({ + url: '/system/stockindetailNfinish/list', + method: 'get', + params: query + }) +} +/** + * 查询入库子单(N版)详情 + * @param {string|number} stockinDetailId 子单主键ID + * 设计说明:后端提供 REST 风格详情接口,便于前端查看单条明细 + */ +export function getInStockinDetailN(stockinDetailId) { + return request({ + url: '/system/inStockinDetailN/' + stockinDetailId, + method: 'get' + }) +} diff --git a/ruoyi-ui/src/views/in/stockIn/add/index_new.vue b/ruoyi-ui/src/views/in/stockIn/add/index_new.vue index 3ccbcce..01d8d31 100644 --- a/ruoyi-ui/src/views/in/stockIn/add/index_new.vue +++ b/ruoyi-ui/src/views/in/stockIn/add/index_new.vue @@ -13,7 +13,7 @@ - + 入库物料 - - 添加物料 + + 添加物料 + - + - - + + - - - + + + - + - + - + @@ -170,7 +172,8 @@ type="text" icon="el-icon-delete" @click="handleDeleteProduct(scope.$index)" - >删除 + >删除 + @@ -185,7 +188,7 @@ - + - + {{ '搜索' }} @@ -225,19 +228,19 @@ - - - - - - - - + + + + + + + + - + @@ -246,8 +249,8 @@ --> - - + + - +
将文件拖到此处,或点击上传
仅允许导入xls、xlsx格式文件。 - 下载模板 + 下载模板 +