package cn.iocoder.yudao.module.mes.dal.mysql.wm.transaction; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionPageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transaction.MesWmTransactionDO; import org.apache.ibatis.annotations.Mapper; /** * MES 库存事务流水 Mapper */ @Mapper public interface MesWmTransactionMapper extends BaseMapperX { default PageResult selectPage(MesWmTransactionPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(MesWmTransactionDO::getItemId, reqVO.getItemId()) .likeIfPresent(MesWmTransactionDO::getBatchCode, reqVO.getBatchCode()) .eqIfPresent(MesWmTransactionDO::getWarehouseId, reqVO.getWarehouseId()) .eqIfPresent(MesWmTransactionDO::getLocationId, reqVO.getLocationId()) .eqIfPresent(MesWmTransactionDO::getAreaId, reqVO.getAreaId()) .eqIfPresent(MesWmTransactionDO::getType, reqVO.getType()) .eqIfPresent(MesWmTransactionDO::getBizType, reqVO.getBizType()) .likeIfPresent(MesWmTransactionDO::getBizCode, reqVO.getBizCode()) .eqIfPresent(MesWmTransactionDO::getMaterialStockId, reqVO.getMaterialStockId()) .geIfPresent(MesWmTransactionDO::getTransactionTime, reqVO.getStartTime()) .leIfPresent(MesWmTransactionDO::getTransactionTime, reqVO.getEndTime()) .orderByDesc(MesWmTransactionDO::getTransactionTime)); } /** * 查找虚拟线边库库存记录对应的原始出库仓库信息 *

* 通过虚拟线边库的 materialStockId,找到首次入库事务(IN), * 再通过 relatedTransactionId 找到关联的出库事务(OUT), * 获取物料从哪个实际仓库出库进入虚拟线边库的。 * * @param materialStockId 虚拟线边库库存记录 ID * @return 原始出库事务(包含 warehouseId/locationId/areaId),不存在返回 null */ default MesWmTransactionDO selectOriginalOutTransaction(Long materialStockId) { // 1. 找到该库存记录的首次入库事务 MesWmTransactionDO firstInTransaction = selectOne(new LambdaQueryWrapperX() .eq(MesWmTransactionDO::getMaterialStockId, materialStockId) .eq(MesWmTransactionDO::getType, 1) // IN .orderByAsc(MesWmTransactionDO::getId) .last("LIMIT 1")); if (firstInTransaction == null || firstInTransaction.getRelatedTransactionId() == null) { return null; } // 2. 通过 relatedTransactionId 找到原始出库事务 return selectById(firstInTransaction.getRelatedTransactionId()); } }