Browse Source

```

feat(check): 添加RFID快照归档功能

- 在PhysicalInventoryServiceImpl中注入RfidCountSnapshotMapper
- 添加DateTimeFormatter用于生成归档批次号
- 实现过期RFID快照自动归档到历史表功能
- 添加按最后盘点日期清理过期快照的逻辑
- 在RfidCountSnapshotMapper中新增归档相关方法
- 配置MyBatis XML映射文件实现归档和删除SQL
```
master
常熟吴彦祖 2 weeks ago
parent
commit
ed6cfeb1da
  1. 15
      src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java
  2. 14
      src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java
  3. 28
      src/main/resources/mapper/check/RfidCountSnapshotMapper.xml

15
src/main/java/com/gaotao/modules/check/mapper/RfidCountSnapshotMapper.java

@ -5,6 +5,8 @@ import com.gaotao.modules.check.entity.RfidCountSnapshot;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
* @Description 标签盘点快照表Mapper - rqrq
* @author rqrq
@ -67,6 +69,19 @@ public interface RfidCountSnapshotMapper extends BaseMapper<RfidCountSnapshot> {
*/
int deleteSnapshotBySite(@Param("site") String site);
/**
* @Description last_count_date 早于 lastPandian 的快照备份到 rfid_count_snapshot_historycount_no 为归档批次yyyyMMddHHmmss- rqrq
*/
int backupStaleSnapshotToHistoryByLastPandian(@Param("site") String site,
@Param("lastPandian") Date lastPandian,
@Param("countNo") String countNo);
/**
* @Description 删除 last_count_date 早于 lastPandian rfid_count_snapshot 须先备份- rqrq
*/
int deleteStaleRfidCountSnapshotByLastPandian(@Param("site") String site,
@Param("lastPandian") Date lastPandian);
/**
* @Description 从快照插入count_result盘点结果全部为OK无差异- rqrq
* @param site 工厂编码

14
src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java

@ -10,6 +10,7 @@ import com.gaotao.modules.automatedWarehouse.entity.WmsOrderTaskDetailData;
import com.gaotao.modules.automatedWarehouse.mapper.WcsIntegrationMapper;
import com.gaotao.modules.check.entity.*;
import com.gaotao.modules.check.mapper.PhysicalInventoryMapper;
import com.gaotao.modules.check.mapper.RfidCountSnapshotMapper;
import com.gaotao.modules.check.service.PhysicalInventoryService;
import com.gaotao.common.utils.R;
import com.gaotao.modules.trans.entity.TransNoControl;
@ -26,6 +27,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Set;
@ -50,6 +52,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
@Autowired
private WcsApiService wcsApiService; // rqrq - 注入WCS接口服务
@Autowired
private RfidCountSnapshotMapper rfidCountSnapshotMapper;
/** 多行 VALUES 批量插入每批最大行数(count_label/count_pallet/count_result),避免 SQL Server 2100 参数上限 - rqrq */
private static final int BATCH_INSERT_MAX_ROWS = 100;
@ -2502,9 +2507,18 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
lastPandian = Date.from(lastDayOfLastYear.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
// 过期 RFID 快照归档last_count_date < lastPandian 的写入历史history.count_no=当前时间串 yyyyMMddHHmmss - rqrq
String snapshotArchiveCountNo = DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
.format(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
int archivedRows = rfidCountSnapshotMapper.backupStaleSnapshotToHistoryByLastPandian(site, lastPandian, snapshotArchiveCountNo);
int deletedSnapRows = rfidCountSnapshotMapper.deleteStaleRfidCountSnapshotByLastPandian(site, lastPandian);
log.info("开启盘点模式 RFID 快照归档 site={} lastPandian={} archiveCountNo={} 历史插入={} 快照删除={} - rqrq",
site, lastPandian, snapshotArchiveCountNo, archivedRows, deletedSnapRows);
baseMapper.updateLastPandianHU(site, lastPandian);
//开启盘点模式
}else {
if("N".equals(nowStatus)){
throw new RuntimeException("盘点模式已关闭,无需重复关闭");

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

@ -102,6 +102,34 @@
DELETE FROM rfid_count_snapshot WHERE site = #{site}
</delete>
<!-- rqrq - 开启盘点模式:将 last_count_date 早于 lastPandian 的快照写入历史(count_no=归档批次号 yyyyMMddHHmmss)-->
<insert id="backupStaleSnapshotToHistoryByLastPandian">
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}
AND last_count_date &lt; #{lastPandian}
</insert>
<!-- rqrq - 开启盘点模式:删除已归档到历史的过期快照行 -->
<delete id="deleteStaleRfidCountSnapshotByLastPandian">
DELETE FROM rfid_count_snapshot
WHERE site = #{site}
AND last_count_date &lt; #{lastPandian}
</delete>
<!-- rqrq - 从快照插入count_result(盘点结果,全部为OK无差异)-->
<insert id="insertCountResultFromSnapshot">
INSERT INTO count_result (

Loading…
Cancel
Save