From 372dad3df5b163b4bcdb6c89e5bcd82b58686660 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?=
Date: Mon, 16 Mar 2026 17:22:29 +0800
Subject: [PATCH] =?UTF-8?q?feat(check):=20=E6=96=B0=E5=A2=9E=E6=97=A5?=
=?UTF-8?q?=E5=B8=B8=E7=9B=98=E7=82=B9=E7=B1=BB=E5=9E=8B=E5=92=8CRFID?=
=?UTF-8?q?=E5=BF=AB=E7=85=A7=E7=94=9F=E6=88=90=E7=9B=98=E7=82=B9=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在CountHeader实体中新增COUNT_TYPE_DAILY日常盘点类型常量
- 更新PhysicalInventoryMapper.xml中的盘点类型描述映射,支持DAILY类型显示
- 在RfidCountController中新增generateCountResultFromSnapshot接口
- 实现RfidCountHeaderService.generateCountResultFromSnapshot方法
- 添加RfidCountSnapshotHistory实体、Mapper及XML配置文件
- 实现从RFID快照批量插入count_label、count_pallet、count_result的功能
- 添加快照数据备份到历史表和清空快照表的逻辑
- 新建rfid_count_snapshot_history表用于存储历史快照数据
---
.../check/controller/RfidCountController.java | 21 ++
.../modules/check/entity/CountHeader.java | 4 +-
.../entity/RfidCountSnapshotHistory.java | 181 ++++++++++++++++++
.../RfidCountSnapshotHistoryMapper.java | 17 ++
.../check/mapper/RfidCountSnapshotMapper.java | 68 +++++++
.../check/service/RfidCountHeaderService.java | 24 +++
.../impl/RfidCountHeaderServiceImpl.java | 111 +++++++++++
.../mapper/check/PhysicalInventoryMapper.xml | 3 +-
.../check/RfidCountSnapshotHistoryMapper.xml | 7 +
.../mapper/check/RfidCountSnapshotMapper.xml | 141 ++++++++++++++
10 files changed, 575 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/com/gaotao/modules/check/entity/RfidCountSnapshotHistory.java
create mode 100644 src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotHistoryMapper.java
create mode 100644 src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml
create mode 100644 src/main/resources/mapper/check/RfidCountSnapshotMapper.xml
diff --git a/src/main/java/com/gaotao/modules/check/controller/RfidCountController.java b/src/main/java/com/gaotao/modules/check/controller/RfidCountController.java
index 9740cf0..81ac7b4 100644
--- a/src/main/java/com/gaotao/modules/check/controller/RfidCountController.java
+++ b/src/main/java/com/gaotao/modules/check/controller/RfidCountController.java
@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.Map;
/**
* RFID日常入库盘点Controller - rqrq
@@ -69,4 +70,24 @@ public class RfidCountController {
query.getPage() != null ? query.getPage() : 1);
return R.ok().put("page", pageUtils);
}
+
+ /**
+ * @Description 从RFID快照生成盘点结果 - rqrq
+ * @param params {site, username}
+ * @return R
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ @PostMapping("/generateCountResultFromSnapshot")
+ public R generateCountResultFromSnapshot(@RequestBody Map params) throws Exception {
+ String site = (String) params.get("site");
+ String username = (String) params.get("username");
+
+ Map result = rfidCountHeaderService.generateCountResultFromSnapshot(site, username);
+ return R.ok()
+ .put("countNo", result.get("countNo"))
+ .put("labelCount", result.get("labelCount"))
+ .put("palletCount", result.get("palletCount"))
+ .put("msg", result.get("msg"));
+ }
}
diff --git a/src/main/java/com/gaotao/modules/check/entity/CountHeader.java b/src/main/java/com/gaotao/modules/check/entity/CountHeader.java
index c7c6ff6..17891bc 100644
--- a/src/main/java/com/gaotao/modules/check/entity/CountHeader.java
+++ b/src/main/java/com/gaotao/modules/check/entity/CountHeader.java
@@ -22,7 +22,7 @@ import java.util.Date;
* 核心字段说明:
*
* - count_no:盘点单号,格式:CT + yyyyMMdd + 4位序号
- * - count_type:盘点类型,CYCLE=循环盘点,MANUAL=手工盘点
+ * - count_type:盘点类型,CYCLE=循环盘点,MANUAL=手工盘点,DAILY=日常盘点 - rqrq
* - status:盘点状态,控制盘点单的生命周期
* - count_percent:循环盘点百分比,仅循环盘点使用
*
@@ -172,6 +172,8 @@ public class CountHeader {
public static final String COUNT_TYPE_CYCLE = "CYCLE";
/** 盘点类型:手工盘点 */
public static final String COUNT_TYPE_MANUAL = "MANUAL";
+ /** 盘点类型:日常盘点(WCS日常RFID盘点)- rqrq */
+ public static final String COUNT_TYPE_DAILY = "DAILY";
/** 状态:草稿 */
public static final String STATUS_DRAFT = "DRAFT";
diff --git a/src/main/java/com/gaotao/modules/check/entity/RfidCountSnapshotHistory.java b/src/main/java/com/gaotao/modules/check/entity/RfidCountSnapshotHistory.java
new file mode 100644
index 0000000..a0917e6
--- /dev/null
+++ b/src/main/java/com/gaotao/modules/check/entity/RfidCountSnapshotHistory.java
@@ -0,0 +1,181 @@
+package com.gaotao.modules.check.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * RFID盘点快照历史表 - 记录每次生成盘点单时备份的快照数据 - rqrq
+ *
+ * 数据库表名:rfid_count_snapshot_history
+ *
+ * 表索引:
+ *
+ * - PRIMARY KEY: site + unit_id + count_no(联合主键)
+ * - INDEX: IX_snapshot_history_count_no - 按盘点单号查询
+ * - INDEX: IX_snapshot_history_backup_date - 按备份日期查询
+ * - INDEX: IX_snapshot_history_part - 按物料号查询
+ * - INDEX: IX_snapshot_history_pallet - 按托盘号查询
+ *
+ *
+ * 核心字段说明:
+ *
+ * - count_no:盘点单号(主键之一,关联count_header.count_no)
+ * - backup_date:备份时间(生成盘点单时的时间戳)
+ * - last_count_date:最后一次RFID盘点时间
+ * - count_times:累计盘点次数
+ *
+ *
+ * 业务用途:
+ *
+ * 1. 追溯每次生成盘点单时的原始数据
+ * 2. 统计分析历史盘点情况
+ * 3. 错误恢复(如果盘点单生成错误,可从历史表恢复)
+ * 4. 审计和合规要求
+ *
+ *
+ * 数据来源:
+ *
+ * 生成盘点单时,从 rfid_count_snapshot 表备份而来:
+ * INSERT INTO rfid_count_snapshot_history
+ * SELECT *, #{countNo}, GETDATE() FROM rfid_count_snapshot
+ *
+ *
+ * @author rqrq
+ * @date 2026/03/16
+ */
+@Data
+@TableName("rfid_count_snapshot_history")
+public class RfidCountSnapshotHistory {
+
+ /**
+ * 工厂编码(联合主键)
+ */
+ @TableField("site")
+ private String site;
+
+ /**
+ * 标签号(联合主键)
+ */
+ @TableField("unit_id")
+ private String unitId;
+
+ /**
+ * 物料号
+ */
+ @TableField("part_no")
+ private String partNo;
+
+ /**
+ * 数量
+ */
+ @TableField("qty")
+ private BigDecimal qty;
+
+ /**
+ * 批号
+ */
+ @TableField("batch_no")
+ private String batchNo;
+
+ /**
+ * 库位
+ */
+ @TableField("location_id")
+ private String locationId;
+
+ /**
+ * 仓库
+ */
+ @TableField("warehouse_id")
+ private String warehouseId;
+
+ /**
+ * WDR号
+ */
+ @TableField("wdr")
+ private String wdr;
+
+ /**
+ * 最后一次盘点时间(来自WCS推送的RFID盘点时间)
+ */
+ @TableField("last_count_date")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date lastCountDate;
+
+ /**
+ * 所在托盘号
+ */
+ @TableField("pallet_id")
+ private String palletId;
+
+ /**
+ * 最新盘点结果
+ * 枚举值说明:
+ *
+ * - 盘点成功 = 最新一次盘点成功
+ * - 盘点失败 = 最新一次盘点失败
+ *
+ */
+ @TableField("count_result")
+ private String countResult;
+
+ /**
+ * 累计盘点次数(每次盘点后+1)
+ */
+ @TableField("count_times")
+ private Integer countTimes;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ private String remark;
+
+ /**
+ * 首次创建时间(原始快照表的创建时间)
+ */
+ @TableField("created_date")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createdDate;
+
+ /**
+ * 最后更新时间(原始快照表的更新时间)
+ */
+ @TableField("updated_date")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updatedDate;
+
+ /**
+ * 盘点单号(联合主键,关联count_header.count_no)- rqrq
+ * 业务说明:
+ *
+ * 记录该快照数据是因为哪个盘点单备份的,用于追溯和关联查询。
+ * 示例:PD202603160001
+ *
+ */
+ @TableField("count_no")
+ private String countNo;
+
+ /**
+ * 备份时间(生成盘点单时的时间戳)- rqrq
+ * 业务说明:
+ *
+ * 记录备份动作发生的时间,用于统计和查询。
+ * 与 last_count_date 的区别:
+ * - last_count_date:标签最后一次被RFID盘点的时间(来自WCS)
+ * - backup_date:快照数据被备份到历史表的时间(生成盘点单时)
+ *
+ */
+ @TableField("backup_date")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date backupDate;
+}
diff --git a/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotHistoryMapper.java b/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotHistoryMapper.java
new file mode 100644
index 0000000..7eec675
--- /dev/null
+++ b/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotHistoryMapper.java
@@ -0,0 +1,17 @@
+package com.gaotao.modules.check.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gaotao.modules.check.entity.RfidCountSnapshotHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * RFID盘点快照历史表Mapper - rqrq
+ *
+ * @author rqrq
+ * @date 2026/03/16
+ */
+@Mapper
+public interface RfidCountSnapshotHistoryMapper extends BaseMapper {
+ // 基础CRUD操作由BaseMapper提供
+ // 如需自定义查询,可在此添加方法并在XML中实现
+}
diff --git a/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java b/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java
index 3076b79..096d48e 100644
--- a/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java
+++ b/src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java
@@ -3,6 +3,7 @@ package com.gaotao.modules.check.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gaotao.modules.check.entity.RfidCountSnapshot;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
/**
* @Description 标签盘点快照表Mapper - rqrq
@@ -11,4 +12,71 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface RfidCountSnapshotMapper extends BaseMapper {
+
+ /**
+ * @Description 统计在库标签数量(只统计in_stock_flag='Y'的标签)- rqrq
+ * @param site 工厂编码
+ * @return 在库标签数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ Integer countInStockLabels(@Param("site") String site);
+
+ /**
+ * @Description 从快照插入count_label(只插入在库标签)- rqrq
+ * @param site 工厂编码
+ * @param countNo 盘点单号
+ * @param username 操作用户
+ * @return 插入数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ int insertCountLabelFromSnapshot(@Param("site") String site,
+ @Param("countNo") String countNo,
+ @Param("username") String username);
+
+ /**
+ * @Description 从快照插入count_pallet(按托盘分组)- rqrq
+ * @param site 工厂编码
+ * @param countNo 盘点单号
+ * @param username 操作用户
+ * @return 插入数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ int insertCountPalletFromSnapshot(@Param("site") String site,
+ @Param("countNo") String countNo,
+ @Param("username") String username);
+
+ /**
+ * @Description 备份快照数据到历史表 - rqrq
+ * @param site 工厂编码
+ * @param countNo 盘点单号
+ * @return 备份数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ int backupSnapshotToHistory(@Param("site") String site, @Param("countNo") String countNo);
+
+ /**
+ * @Description 删除快照数据 - rqrq
+ * @param site 工厂编码
+ * @return 删除数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ int deleteSnapshotBySite(@Param("site") String site);
+
+ /**
+ * @Description 从快照插入count_result(盘点结果,全部为OK无差异)- rqrq
+ * @param site 工厂编码
+ * @param countNo 盘点单号
+ * @param username 操作用户
+ * @return 插入数量
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ int insertCountResultFromSnapshot(@Param("site") String site,
+ @Param("countNo") String countNo,
+ @Param("username") String username);
}
diff --git a/src/main/java/com/gaotao/modules/check/service/RfidCountHeaderService.java b/src/main/java/com/gaotao/modules/check/service/RfidCountHeaderService.java
index 728281d..be288fa 100644
--- a/src/main/java/com/gaotao/modules/check/service/RfidCountHeaderService.java
+++ b/src/main/java/com/gaotao/modules/check/service/RfidCountHeaderService.java
@@ -9,6 +9,7 @@ import com.gaotao.modules.check.entity.RfidCountHeaderData;
import com.gaotao.modules.check.entity.RfidCountSnapshot;
import java.util.List;
+import java.util.Map;
/**
* @Description RFID日常入库盘点主表Service - rqrq
@@ -72,4 +73,27 @@ public interface RfidCountHeaderService extends IService {
* @date 2026/03/04
*/
IPage searchRfidCountSnapshotList(RfidCountSnapshot query);
+
+ /**
+ * @Description 从RFID快照生成盘点结果 - rqrq
+ *
+ * 业务逻辑:
+ *
+ * 1. 查询在库标签数量(只统计in_stock_flag='Y'的标签)
+ * 2. 生成盘点单号(使用transNoService.getTransNo(site, "PD", 10))
+ * 3. 插入count_header(状态=DRAFT,类型=CYCLE)
+ * 4. 插入count_label(从快照筛选在库标签,count_date=last_count_date)
+ * 5. 插入count_pallet(按托盘分组统计,自动生成seq_no)
+ * 6. 备份快照数据到历史表(rfid_count_snapshot_history)
+ * 7. 清空快照表(rfid_count_snapshot)
+ * 8. 返回结果(盘点单号、标签数、栈板数)
+ *
+ *
+ * @param site 工厂编码
+ * @param username 操作用户
+ * @return Map {countNo, labelCount, palletCount, msg}
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ Map generateCountResultFromSnapshot(String site, String username);
}
diff --git a/src/main/java/com/gaotao/modules/check/service/impl/RfidCountHeaderServiceImpl.java b/src/main/java/com/gaotao/modules/check/service/impl/RfidCountHeaderServiceImpl.java
index d989d2b..4328acb 100644
--- a/src/main/java/com/gaotao/modules/check/service/impl/RfidCountHeaderServiceImpl.java
+++ b/src/main/java/com/gaotao/modules/check/service/impl/RfidCountHeaderServiceImpl.java
@@ -9,13 +9,19 @@ import com.gaotao.modules.check.entity.RfidCountDetail;
import com.gaotao.modules.check.entity.RfidCountHeader;
import com.gaotao.modules.check.entity.RfidCountHeaderData;
import com.gaotao.modules.check.entity.RfidCountSnapshot;
+import com.gaotao.modules.check.entity.CountHeader;
import com.gaotao.modules.check.mapper.RfidCountDetailMapper;
import com.gaotao.modules.check.mapper.RfidCountHeaderMapper;
import com.gaotao.modules.check.mapper.RfidCountSnapshotMapper;
+import com.gaotao.modules.check.mapper.PhysicalInventoryMapper;
import com.gaotao.modules.check.service.RfidCountHeaderService;
import com.gaotao.modules.handlingunit.entity.HandlingUnit;
import com.gaotao.modules.handlingunit.service.HandlingUnitService;
import com.gaotao.modules.automatedWarehouse.mapper.WcsIntegrationMapper;
+
+
+import com.gaotao.modules.trans.entity.TransNoControl;
+import com.gaotao.modules.trans.service.TransNoControlService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,6 +30,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -52,6 +59,12 @@ public class RfidCountHeaderServiceImpl extends ServiceImpl业务逻辑:
+ *
+ * 1. 参数校验(site、username)
+ * 2. 查询在库标签数量(只统计in_stock_flag='Y'的标签)
+ * 3. 生成盘点单号(使用transNoService.getTransNo(site, "PD", 10))
+ * 4. 插入count_header(状态=DRAFT,类型=CYCLE)
+ * 5. 插入count_label(从快照筛选在库标签,count_date=last_count_date)
+ * 6. 插入count_pallet(按托盘分组统计,自动生成seq_no)
+ * 7. 备份快照数据到历史表(rfid_count_snapshot_history)
+ * 8. 清空快照表(rfid_count_snapshot)
+ * 9. 返回结果(盘点单号、标签数、栈板数)
+ *
+ *
+ * @param site 工厂编码
+ * @param username 操作用户
+ * @return Map {countNo, labelCount, palletCount, msg}
+ * @author rqrq
+ * @date 2026/03/16
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Map generateCountResultFromSnapshot(String site, String username) {
+ log.info("开始从RFID快照生成盘点结果 - rqrq,site={}, username={}", site, username);
+
+ // 1. 参数校验 - rqrq
+ if (!StringUtils.hasText(site)) {
+ throw new RuntimeException("工厂编码不能为空");
+ }
+ if (!StringUtils.hasText(username)) {
+ throw new RuntimeException("操作用户不能为空");
+ }
+
+ // 2. 查询在库标签数量(关键:只统计in_stock_flag='Y'的标签)- rqrq
+ Integer inStockLabelCount = rfidCountSnapshotMapper.countInStockLabels(site);
+ if (inStockLabelCount == null || inStockLabelCount == 0) {
+ throw new RuntimeException("没有可生成的盘点记录(在库标签数为0)");
+ }
+ log.info("在库标签数量: {} - rqrq", inStockLabelCount);
+
+ // 3. 生成盘点单号(沿用现有逻辑)- rqrq
+ TransNoControl transData = transNoService.getTransNo(site, "PD", 10);
+ String countNo = transData.getNewTransNo();
+ log.info("生成盘点单号: {} - rqrq", countNo);
+
+ // 4. 插入 count_header(已完成状态)- rqrq
+ CountHeader header = new CountHeader();
+ header.setSite(site);
+ header.setCountNo(countNo);
+ header.setCountType(CountHeader.COUNT_TYPE_DAILY); // ⭐ 日常盘点(WCS日常RFID盘点)- rqrq
+ header.setStatus(CountHeader.STATUS_COMPLETED); // 已完成状态(WCS已盘点完成)- rqrq
+ header.setApplyUser(username);
+ header.setApplyDate(new Date());
+ header.setReleaseUser(username); // 下达人 - rqrq
+ header.setReleaseDate(new Date()); // 下达时间 - rqrq
+ header.setCompleteUser("SYSTEM"); // 完成人(系统自动完成)- rqrq
+ header.setCompleteDate(new Date()); // 完成时间 - rqrq
+ header.setRemark("WCS日常盘点");
+ header.setCreatedBy(username);
+ header.setCreatedDate(new Date());
+ physicalInventoryMapper.insertCountHeader(header);
+ log.info("count_header 插入完成(类型:DAILY,状态:COMPLETED)- rqrq");
+
+ // 5. 批量插入 count_label(从快照中筛选在库标签)- rqrq
+ int labelInsertCount = rfidCountSnapshotMapper.insertCountLabelFromSnapshot(site, countNo, username);
+ log.info("count_label 插入数量: {} - rqrq", labelInsertCount);
+
+ // 6. 批量插入 count_pallet(按托盘分组统计)- rqrq
+ int palletInsertCount = rfidCountSnapshotMapper.insertCountPalletFromSnapshot(site, countNo, username);
+ log.info("count_pallet 插入数量: {} - rqrq", palletInsertCount);
+
+ // 7. 批量插入 count_result(盘点结果,全部为OK无差异)- rqrq
+ int resultInsertCount = rfidCountSnapshotMapper.insertCountResultFromSnapshot(site, countNo, username);
+ log.info("count_result 插入数量: {} - rqrq", resultInsertCount);
+
+ // 8. 备份到历史表 - rqrq
+ int backupCount = rfidCountSnapshotMapper.backupSnapshotToHistory(site, countNo);
+ log.info("rfid_count_snapshot 备份数量: {} - rqrq", backupCount);
+
+ // 9. 清空主表 - rqrq
+ int deleteCount = rfidCountSnapshotMapper.deleteSnapshotBySite(site);
+ log.info("rfid_count_snapshot 删除数量: {} - rqrq", deleteCount);
+
+ // 10. 返回结果 - rqrq
+ Map result = new HashMap<>();
+ result.put("countNo", countNo);
+ result.put("labelCount", labelInsertCount);
+ result.put("palletCount", palletInsertCount);
+ result.put("resultCount", resultInsertCount);
+ result.put("msg", String.format("成功生成盘点单【%s】(已完成状态),共%d个标签,%d个栈板,%d条盘点结果",
+ countNo, labelInsertCount, palletInsertCount, resultInsertCount));
+
+ log.info("从RFID快照生成盘点结果完成 - rqrq,countNo={}", countNo);
+ return result;
+ }
}
diff --git a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml
index 94857b5..c48ef2f 100644
--- a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml
+++ b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml
@@ -25,6 +25,7 @@
CASE h.count_type
WHEN 'CYCLE' THEN '循环盘点'
WHEN 'MANUAL' THEN '手工盘点'
+ WHEN 'DAILY' THEN '日常盘点'
ELSE h.count_type
END AS countTypeDesc,
CASE h.status
@@ -117,7 +118,7 @@
h.remark,
h.created_by AS createdBy,
h.created_date AS createdDate,
- CASE h.count_type WHEN 'CYCLE' THEN '循环盘点' WHEN 'MANUAL' THEN '手工盘点' ELSE h.count_type END AS countTypeDesc,
+ CASE h.count_type WHEN 'CYCLE' THEN '循环盘点' WHEN 'MANUAL' THEN '手工盘点' WHEN 'DAILY' THEN '日常盘点' ELSE h.count_type END AS countTypeDesc,
CASE h.status WHEN 'DRAFT' THEN '草稿' WHEN 'RELEASED' THEN '已下达' WHEN 'CHECKING' THEN '盘点中' WHEN 'APPROVED' THEN '已审批' WHEN 'COMPLETED' THEN '已完成' WHEN 'CANCELLED' THEN '已取消' ELSE h.status END AS statusDesc,
(SELECT COUNT(1) FROM count_label WHERE site = h.site AND count_no = h.count_no) AS totalLabelCount,
(SELECT COUNT(1) FROM count_label WHERE site = h.site AND count_no = h.count_no AND count_flag = 'Y') AS checkedLabelCount,
diff --git a/src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml b/src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml
new file mode 100644
index 0000000..457b8c7
--- /dev/null
+++ b/src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/check/RfidCountSnapshotMapper.xml b/src/main/resources/mapper/check/RfidCountSnapshotMapper.xml
new file mode 100644
index 0000000..d8153f4
--- /dev/null
+++ b/src/main/resources/mapper/check/RfidCountSnapshotMapper.xml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+ INSERT INTO count_label (
+ site, count_no, unit_id, part_no, qty,
+ batch_no, location_id, warehouse_id, wdr, pallet_id,
+ label_type, count_flag, count_date, count_user,
+ created_by, created_date
+ )
+ SELECT
+ s.site,
+ #{countNo},
+ s.unit_id,
+ s.part_no,
+ s.qty,
+ s.batch_no,
+ s.location_id,
+ s.warehouse_id,
+ s.wdr,
+ s.pallet_id,
+ 'ASSIGNED',
+ 'Y',
+ s.last_count_date,
+ 'SYSTEM',
+ #{username},
+ GETDATE()
+ FROM rfid_count_snapshot s
+ INNER JOIN handling_unit h
+ ON s.site = h.site AND s.unit_id = h.unit_id
+ WHERE s.site = #{site}
+ AND h.in_stock_flag = 'Y'
+
+
+
+
+ INSERT INTO count_pallet (
+ site, count_no, seq_no, pallet_id,
+ count_flag, label_count, checked_count,
+ count_date, count_user,
+ created_by, created_date, location_z
+ )
+ SELECT
+ s.site,
+ #{countNo},
+ ROW_NUMBER() OVER (ORDER BY s.pallet_id),
+ s.pallet_id,
+ 'Y',
+ COUNT(s.unit_id),
+ COUNT(s.unit_id),
+ MAX(s.last_count_date),
+ 'SYSTEM',
+ #{username},
+ GETDATE(),
+ ISNULL(st.location_z, 1)
+ FROM rfid_count_snapshot s
+ INNER JOIN handling_unit h
+ ON s.site = h.site AND s.unit_id = h.unit_id
+ LEFT JOIN pallet p
+ ON s.site = p.site AND s.pallet_id = p.pallet_id
+ LEFT JOIN agv_station st
+ ON p.location_code = st.station_code
+ WHERE s.site = #{site}
+ AND h.in_stock_flag = 'Y'
+ GROUP BY s.site, s.pallet_id, st.location_z
+
+
+
+
+ INSERT INTO rfid_count_snapshot_history (
+ site, unit_id, part_no, qty, batch_no,
+ location_id, warehouse_id, wdr,
+ last_count_date, pallet_id, count_result, count_times,
+ remark, created_date, updated_date,
+ count_no, backup_date
+ )
+ SELECT
+ site, unit_id, part_no, qty, batch_no,
+ location_id, warehouse_id, wdr,
+ last_count_date, pallet_id, count_result, count_times,
+ remark, created_date, updated_date,
+ #{countNo},
+ GETDATE()
+ FROM rfid_count_snapshot
+ WHERE site = #{site}
+
+
+
+
+ DELETE FROM rfid_count_snapshot WHERE site = #{site}
+
+
+
+
+ INSERT INTO count_result (
+ site, count_no, unit_id, part_no, qty,
+ batch_no, location_id, warehouse_id, wdr, pallet_id,
+ count_date, count_user, count_result, diff_qty,
+ handle_flag, handle_type, remark,
+ created_by, created_date
+ )
+ SELECT
+ s.site,
+ #{countNo},
+ s.unit_id,
+ s.part_no,
+ s.qty,
+ s.batch_no,
+ s.location_id,
+ s.warehouse_id,
+ s.wdr,
+ s.pallet_id,
+ s.last_count_date,
+ 'SYSTEM',
+ 'OK',
+ 0,
+ 'Y',
+ 'SYSTEM',
+ 'WCS日常RFID盘点数据(无差异)',
+ #{username},
+ GETDATE()
+ FROM rfid_count_snapshot s
+ INNER JOIN handling_unit h
+ ON s.site = h.site AND s.unit_id = h.unit_id
+ WHERE s.site = #{site}
+ AND h.in_stock_flag = 'Y'
+
+
+