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<MesWmTransactionDO> {
|
|
default PageResult<MesWmTransactionDO> selectPage(MesWmTransactionPageReqVO reqVO) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<MesWmTransactionDO>()
|
.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));
|
}
|
|
/**
|
* 查找虚拟线边库库存记录对应的原始出库仓库信息
|
* <p>
|
* 通过虚拟线边库的 materialStockId,找到首次入库事务(IN),
|
* 再通过 relatedTransactionId 找到关联的出库事务(OUT),
|
* 获取物料从哪个实际仓库出库进入虚拟线边库的。
|
*
|
* @param materialStockId 虚拟线边库库存记录 ID
|
* @return 原始出库事务(包含 warehouseId/locationId/areaId),不存在返回 null
|
*/
|
default MesWmTransactionDO selectOriginalOutTransaction(Long materialStockId) {
|
// 1. 找到该库存记录的首次入库事务
|
MesWmTransactionDO firstInTransaction = selectOne(new LambdaQueryWrapperX<MesWmTransactionDO>()
|
.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());
|
}
|
|
}
|