package cn.iocoder.yudao.module.mes.dal.mysql.wm.sn; 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.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.mes.controller.admin.wm.sn.vo.MesWmSnGroupRespVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.sn.vo.MesWmSnInStockPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.sn.vo.MesWmSnPageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.sn.MesWmSnDO; import cn.iocoder.yudao.module.mes.enums.wm.MesWmSnStatusEnum; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * MES SN 码 Mapper * * @author 超级管理员 */ @Mapper public interface MesWmSnMapper extends BaseMapperX { /** * 按 UUID 分组查询 SN 码分页(聚合查询) */ default PageResult selectPageGroupByUuid(MesWmSnPageReqVO reqVO) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); query.eqIfPresent(MesWmSnDO::getUuid, reqVO.getUuid()) .likeIfPresent(MesWmSnDO::getCode, reqVO.getCode()) .eqIfPresent(MesWmSnDO::getItemId, reqVO.getItemId()) .likeIfPresent(MesWmSnDO::getBatchCode, reqVO.getBatchCode()) .betweenIfPresent(MesWmSnDO::getCreateTime, reqVO.getCreateTime()); query.selectAs(MesWmSnDO::getUuid, MesWmSnGroupRespVO::getUuid) .selectMax(MesWmSnDO::getItemId, MesWmSnGroupRespVO::getItemId) .selectMax(MesWmSnDO::getBatchCode, MesWmSnGroupRespVO::getBatchCode) .selectMax(MesWmSnDO::getWorkOrderId, MesWmSnGroupRespVO::getWorkOrderId) .selectMax(MesWmSnDO::getCreateTime, MesWmSnGroupRespVO::getCreateTime) .selectAs("COUNT(*)", MesWmSnGroupRespVO::getCount) .groupBy(MesWmSnDO::getUuid) .last("ORDER BY MAX(t.create_time) DESC"); // 避免 this is incompatible with sql_mode=only_full_group_by 报错 return selectJoinPage(reqVO, MesWmSnGroupRespVO.class, query); } default List selectListByUuid(String uuid) { return selectList(new LambdaQueryWrapperX() .eq(MesWmSnDO::getUuid, uuid) .orderByAsc(MesWmSnDO::getId)); } default int deleteByUuid(String uuid) { return delete(new LambdaQueryWrapperX() .eq(MesWmSnDO::getUuid, uuid)); } default MesWmSnDO selectByCode(String code) { return selectOne(MesWmSnDO::getCode, code); } /** * 出库核销:置为已出库并清空在库库位 */ default void markOutStockAndClearLocation(Long id) { update(null, new LambdaUpdateWrapper() .eq(MesWmSnDO::getId, id) .set(MesWmSnDO::getStatus, MesWmSnStatusEnum.OUT_STOCK.getStatus()) .set(MesWmSnDO::getWarehouseId, null) .set(MesWmSnDO::getLocationId, null) .set(MesWmSnDO::getAreaId, null)); } /** * 按 SN 状态/库位/物料等维度分页查询 */ default PageResult selectStatusPage(MesWmSnInStockPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(MesWmSnDO::getCode, reqVO.getCode()) .eqIfPresent(MesWmSnDO::getItemId, reqVO.getItemId()) .likeIfPresent(MesWmSnDO::getBatchCode, reqVO.getBatchCode()) .eqIfPresent(MesWmSnDO::getWarehouseId, reqVO.getWarehouseId()) .eqIfPresent(MesWmSnDO::getLocationId, reqVO.getLocationId()) .eqIfPresent(MesWmSnDO::getAreaId, reqVO.getAreaId()) .eqIfPresent(MesWmSnDO::getStatus, reqVO.getStatus()) .orderByDesc(MesWmSnDO::getId)); } }