Browse Source

feat(check): 新增日常盘点类型和RFID快照生成盘点功能

- 在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表用于存储历史快照数据
master
常熟吴彦祖 3 months ago
parent
commit
372dad3df5
  1. 21
      src/main/java/com/gaotao/modules/check/controller/RfidCountController.java
  2. 4
      src/main/java/com/gaotao/modules/check/entity/CountHeader.java
  3. 181
      src/main/java/com/gaotao/modules/check/entity/RfidCountSnapshotHistory.java
  4. 17
      src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotHistoryMapper.java
  5. 68
      src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java
  6. 24
      src/main/java/com/gaotao/modules/check/service/RfidCountHeaderService.java
  7. 111
      src/main/java/com/gaotao/modules/check/service/impl/RfidCountHeaderServiceImpl.java
  8. 3
      src/main/resources/mapper/check/PhysicalInventoryMapper.xml
  9. 7
      src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml
  10. 141
      src/main/resources/mapper/check/RfidCountSnapshotMapper.xml

21
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<String, Object> params) throws Exception {
String site = (String) params.get("site");
String username = (String) params.get("username");
Map<String, Object> 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"));
}
}

4
src/main/java/com/gaotao/modules/check/entity/CountHeader.java

@ -22,7 +22,7 @@ import java.util.Date;
* <p><b>核心字段说明</b></p>
* <ul>
* <li><b>count_no</b>盘点单号格式CT + yyyyMMdd + 4位序号</li>
* <li><b>count_type</b>盘点类型CYCLE=循环盘点MANUAL=手工盘点</li>
* <li><b>count_type</b>盘点类型CYCLE=循环盘点MANUAL=手工盘点DAILY=日常盘点 - rqrq</li>
* <li><b>status</b>盘点状态控制盘点单的生命周期</li>
* <li><b>count_percent</b>循环盘点百分比仅循环盘点使用</li>
* </ul>
@ -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";

181
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
*
* <p><b>数据库表名</b>rfid_count_snapshot_history</p>
*
* <p><b>表索引</b></p>
* <ul>
* <li>PRIMARY KEY: site + unit_id + count_no联合主键</li>
* <li>INDEX: IX_snapshot_history_count_no - 按盘点单号查询</li>
* <li>INDEX: IX_snapshot_history_backup_date - 按备份日期查询</li>
* <li>INDEX: IX_snapshot_history_part - 按物料号查询</li>
* <li>INDEX: IX_snapshot_history_pallet - 按托盘号查询</li>
* </ul>
*
* <p><b>核心字段说明</b></p>
* <ul>
* <li><b>count_no</b>盘点单号主键之一关联count_header.count_no</li>
* <li><b>backup_date</b>备份时间生成盘点单时的时间戳</li>
* <li><b>last_count_date</b>最后一次RFID盘点时间</li>
* <li><b>count_times</b>累计盘点次数</li>
* </ul>
*
* <p><b>业务用途</b></p>
* <pre>
* 1. 追溯每次生成盘点单时的原始数据
* 2. 统计分析历史盘点情况
* 3. 错误恢复如果盘点单生成错误可从历史表恢复
* 4. 审计和合规要求
* </pre>
*
* <p><b>数据来源</b></p>
* <pre>
* 生成盘点单时 rfid_count_snapshot 表备份而来
* INSERT INTO rfid_count_snapshot_history
* SELECT *, #{countNo}, GETDATE() FROM rfid_count_snapshot
* </pre>
*
* @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;
/**
* 最新盘点结果
* <p><b>枚举值说明</b></p>
* <ul>
* <li>盘点成功 = 最新一次盘点成功</li>
* <li>盘点失败 = 最新一次盘点失败</li>
* </ul>
*/
@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
* <p><b>业务说明</b></p>
* <pre>
* 记录该快照数据是因为哪个盘点单备份的用于追溯和关联查询
* 示例PD202603160001
* </pre>
*/
@TableField("count_no")
private String countNo;
/**
* 备份时间生成盘点单时的时间戳- rqrq
* <p><b>业务说明</b></p>
* <pre>
* 记录备份动作发生的时间用于统计和查询
* last_count_date 的区别
* - last_count_date标签最后一次被RFID盘点的时间来自WCS
* - backup_date快照数据被备份到历史表的时间生成盘点单时
* </pre>
*/
@TableField("backup_date")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date backupDate;
}

17
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<RfidCountSnapshotHistory> {
// 基础CRUD操作由BaseMapper提供
// 如需自定义查询可在此添加方法并在XML中实现
}

68
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<RfidCountSnapshot> {
/**
* @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);
}

24
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<RfidCountHeader> {
* @date 2026/03/04
*/
IPage<RfidCountSnapshot> searchRfidCountSnapshotList(RfidCountSnapshot query);
/**
* @Description 从RFID快照生成盘点结果 - rqrq
*
* <p><b>业务逻辑</b></p>
* <pre>
* 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. 返回结果盘点单号标签数栈板数
* </pre>
*
* @param site 工厂编码
* @param username 操作用户
* @return Map<String, Object> {countNo, labelCount, palletCount, msg}
* @author rqrq
* @date 2026/03/16
*/
Map<String, Object> generateCountResultFromSnapshot(String site, String username);
}

111
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<RfidCountHeaderMappe
@Autowired
private WcsIntegrationMapper wcsIntegrationMapper;
@Autowired
private PhysicalInventoryMapper physicalInventoryMapper;
@Autowired
private TransNoControlService transNoService;
/**
* @Description 处理WCS日常入库RFID复核回调 - rqrq
*
@ -455,4 +468,102 @@ public class RfidCountHeaderServiceImpl extends ServiceImpl<RfidCountHeaderMappe
System.out.println("查询RFID日常入库盘点结果列表完成 - rqrq,共" + result.getTotal() + "条");
return result;
}
/**
* @Description 从RFID快照生成盘点结果 - rqrq
*
* <p><b>业务逻辑</b></p>
* <pre>
* 1. 参数校验siteusername
* 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. 返回结果盘点单号标签数栈板数
* </pre>
*
* @param site 工厂编码
* @param username 操作用户
* @return Map<String, Object> {countNo, labelCount, palletCount, msg}
* @author rqrq
* @date 2026/03/16
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> 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<String, Object> 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;
}
}

3
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,

7
src/main/resources/mapper/check/RfidCountSnapshotHistoryMapper.xml

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaotao.modules.check.mapper.RfidCountSnapshotHistoryMapper">
<!-- rqrq - RFID盘点快照历史表Mapper -->
</mapper>

141
src/main/resources/mapper/check/RfidCountSnapshotMapper.xml

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaotao.modules.check.mapper.RfidCountSnapshotMapper">
<!-- rqrq - 统计在库标签数量 -->
<select id="countInStockLabels" resultType="java.lang.Integer">
SELECT COUNT(1)
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'
</select>
<!-- rqrq - 从快照插入count_label(只插入在库标签,已盘点状态)-->
<insert id="insertCountLabelFromSnapshot">
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>
<!-- rqrq - 从快照插入count_pallet(按托盘分组,已盘点状态)-->
<insert id="insertCountPalletFromSnapshot">
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>
<!-- rqrq - 备份快照数据到历史表 -->
<insert id="backupSnapshotToHistory">
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}
</insert>
<!-- rqrq - 删除快照数据 -->
<delete id="deleteSnapshotBySite">
DELETE FROM rfid_count_snapshot WHERE site = #{site}
</delete>
<!-- rqrq - 从快照插入count_result(盘点结果,全部为OK无差异)-->
<insert id="insertCountResultFromSnapshot">
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'
</insert>
</mapper>
Loading…
Cancel
Save