From 0dadcf2aa9db915e52eec932b09eba5a2a1225fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=BE=E5=90=9B=E7=A6=B9?= <2673609096@qq.com> Date: Sun, 14 Sep 2025 20:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BA=AF=E6=BA=90=E7=A0=81=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TraceabilityCodeMapper.java | 136 ++++++++++++------ 1 file changed, 94 insertions(+), 42 deletions(-) diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/traceabilitycode/TraceabilityCodeMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/traceabilitycode/TraceabilityCodeMapper.java index 68b0fca6..2c7ae93d 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/traceabilitycode/TraceabilityCodeMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/traceabilitycode/TraceabilityCodeMapper.java @@ -6,6 +6,12 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.farm.controller.admin.traceabilitycode.vo.TraceabilityCodePageReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.traceabilitycode.TraceabilityCodeDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; /** * 溯源-溯源码 Mapper @@ -60,50 +66,96 @@ public interface TraceabilityCodeMapper extends BaseMapperX .orderByDesc(TraceabilityCodeDO::getCreateTime)); } + /** + * 根据CodeOutBatch分组查询,获取每个批次的最新记录 + * 使用子查询方式避免GROUP BY的SQL兼容性问题 + */ + @Select("") + List selectLatestByCodeOutBatch(@Param("tenantId") String tenantId, + @Param("speciesCode") String speciesCode, + @Param("speciesName") String speciesName, + @Param("baseId") String baseId, + @Param("baseName") String baseName, + @Param("plotId") String plotId, + @Param("plotName") String plotName, + @Param("harvestDateStart") String harvestDateStart, + @Param("harvestDateEnd") String harvestDateEnd, + @Param("farmingInputCount") Long farmingInputCount, + @Param("productId") String productId, + @Param("productName") String productName, + @Param("codeOutBatch") String codeOutBatch, + @Param("status") Long status); + default PageResult selectPageList(TraceabilityCodePageReqVO reqVO) { + // 先查询符合条件的最新记录ID列表 + List latestRecords = selectLatestByCodeOutBatch( + reqVO.getTenantId(), + reqVO.getSpeciesCode(), + reqVO.getSpeciesName(), + reqVO.getBaseId(), + reqVO.getBaseName(), + reqVO.getPlotId(), + reqVO.getPlotName(), + reqVO.getHarvestDateStart(), + reqVO.getHarvestDateEnd(), + reqVO.getFarmingInputCount(), + reqVO.getProductId(), + reqVO.getProductName(), + reqVO.getCodeOutBatch(), + reqVO.getStatus() + ); + + // 如果没有记录,直接返回空结果 + if (latestRecords.isEmpty()) { + return new PageResult<>(Collections.emptyList(), 0L); + } + + // 提取ID列表 + List ids = latestRecords.stream() + .map(TraceabilityCodeDO::getId) + .collect(Collectors.toList()); + + // 根据ID列表进行分页查询,获取完整的记录信息 return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(TraceabilityCodeDO::getSpeciesCode, reqVO.getSpeciesCode()) - .likeIfPresent(TraceabilityCodeDO::getSpeciesName, reqVO.getSpeciesName()) - .eqIfPresent(TraceabilityCodeDO::getBaseId, reqVO.getBaseId()) - .likeIfPresent(TraceabilityCodeDO::getBaseName, reqVO.getBaseName()) - .eqIfPresent(TraceabilityCodeDO::getPlotId, reqVO.getPlotId()) - .likeIfPresent(TraceabilityCodeDO::getPlotName, reqVO.getPlotName()) - .eqIfPresent(TraceabilityCodeDO::getTenantId, reqVO.getTenantId()) - // 采收时间范围查询 - .gtIfPresent(TraceabilityCodeDO::getHarvestDate, reqVO.getHarvestDateStart()) - .leIfPresent(TraceabilityCodeDO::getHarvestDate, reqVO.getHarvestDateEnd()) - .eqIfPresent(TraceabilityCodeDO::getFarmingInputCount, reqVO.getFarmingInputCount()) - .eqIfPresent(TraceabilityCodeDO::getProductId, reqVO.getProductId()) - .likeIfPresent(TraceabilityCodeDO::getProductName, reqVO.getProductName()) - .eqIfPresent(TraceabilityCodeDO::getPackingSpec, reqVO.getPackingSpec()) - .eqIfPresent(TraceabilityCodeDO::getProductImage, reqVO.getProductImage()) - .likeIfPresent(TraceabilityCodeDO::getBrandName, reqVO.getBrandName()) - .eqIfPresent(TraceabilityCodeDO::getIntroduce, reqVO.getIntroduce()) - .eqIfPresent(TraceabilityCodeDO::getBrandAuthenticationStr, reqVO.getBrandAuthentication()) - .eqIfPresent(TraceabilityCodeDO::getBusinessId, reqVO.getBusinessId()) - .likeIfPresent(TraceabilityCodeDO::getBusinessName, reqVO.getBusinessName()) - .eqIfPresent(TraceabilityCodeDO::getIsShowBusinessName, reqVO.getIsShowBusinessName()) - .eqIfPresent(TraceabilityCodeDO::getBusinessPhone, reqVO.getBusinessPhone()) - .eqIfPresent(TraceabilityCodeDO::getIsShowBusinessPhone, reqVO.getIsShowBusinessPhone()) - .likeIfPresent(TraceabilityCodeDO::getStoreName, reqVO.getStoreName()) - .eqIfPresent(TraceabilityCodeDO::getIsShowStoreName, reqVO.getIsShowStoreName()) - .eqIfPresent(TraceabilityCodeDO::getBusinessAddress, reqVO.getBusinessAddress()) - .eqIfPresent(TraceabilityCodeDO::getIsShowBusinessAddress, reqVO.getIsShowBusinessAddress()) - .eqIfPresent(TraceabilityCodeDO::getPublicityImage, reqVO.getPublicityImage()) - .eqIfPresent(TraceabilityCodeDO::getIsShowPublicityImage, reqVO.getIsShowPublicityImage()) - .eqIfPresent(TraceabilityCodeDO::getPublicityProfile, reqVO.getPublicityProfile()) - .eqIfPresent(TraceabilityCodeDO::getIsShowPublicityProfile, reqVO.getIsShowPublicityProfile()) - .eqIfPresent(TraceabilityCodeDO::getInspectionReport, reqVO.getInspectionReport()) - .eqIfPresent(TraceabilityCodeDO::getCollectImages, reqVO.getCollectImages()) - .eqIfPresent(TraceabilityCodeDO::getCameraInformation, reqVO.getCameraInformation()) - .eqIfPresent(TraceabilityCodeDO::getCodeOutCount, reqVO.getCodeOutCount()) - .eqIfPresent(TraceabilityCodeDO::getQrCode, reqVO.getQrCode()) - .eqIfPresent(TraceabilityCodeDO::getStatus, reqVO.getStatus()) - .eqIfPresent(TraceabilityCodeDO::getCodeOutBatch, reqVO.getCodeOutBatch()) - .eqIfPresent(TraceabilityCodeDO::getScanCodeCount, reqVO.getScanCodeCount()) - .betweenIfPresent(TraceabilityCodeDO::getCreateTime, reqVO.getCreateTime()) - // 按CodeOutBatch分组,选择每个分组中最新创建的记录 - .groupBy(TraceabilityCodeDO::getCodeOutBatch) + .in(TraceabilityCodeDO::getId, ids) .orderByDesc(TraceabilityCodeDO::getCreateTime)); } } \ No newline at end of file