package cn.iocoder.yudao.module.mes.dal.mysql.safety; 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.safety.vo.material.SafetyMaterialPageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.safety.SafetyMaterialDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.time.LocalDate; import java.util.List; /** * 安全生产 - 物资台账 Mapper * * @author 超级管理员 */ @Mapper public interface SafetyMaterialMapper extends BaseMapperX { default PageResult selectPage(SafetyMaterialPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(SafetyMaterialDO::getCode, reqVO.getCode()) .likeIfPresent(SafetyMaterialDO::getName, reqVO.getName()) .eqIfPresent(SafetyMaterialDO::getCategory, reqVO.getCategory()) .eqIfPresent(SafetyMaterialDO::getStatus, reqVO.getStatus()) .likeIfPresent(SafetyMaterialDO::getStorageLocation, reqVO.getStorageLocation()) .orderByAsc(SafetyMaterialDO::getCategory) .orderByAsc(SafetyMaterialDO::getCode)); } default SafetyMaterialDO selectByCode(String code) { return selectOne(SafetyMaterialDO::getCode, code); } /** 锁定库存行,避免并发出入库导致库存错乱 */ @Select("SELECT * FROM safety_material WHERE id = #{id} AND deleted = b'0' FOR UPDATE") SafetyMaterialDO selectByIdForUpdate(@Param("id") Long id); /** 低于安全库存的物资 */ default List selectBelowSafeStock() { return selectList(new LambdaQueryWrapperX() .apply("stock_qty < safe_stock") .orderByAsc(SafetyMaterialDO::getCode)); } /** 有效期临近的物资 */ default List selectExpiringBefore(LocalDate deadline) { return selectList(new LambdaQueryWrapperX() .isNotNull(SafetyMaterialDO::getExpireDate) .le(SafetyMaterialDO::getExpireDate, deadline) .orderByAsc(SafetyMaterialDO::getExpireDate)); } }