package cn.iocoder.yudao.module.mes.dal.mysql.pro.mps; import cn.hutool.core.collection.CollUtil; 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.pro.mps.vo.MesProMpsPageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.mps.MesProMpsDO; import cn.iocoder.yudao.module.mes.enums.pro.MesProMpsStatusEnum; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.math.BigDecimal; import java.util.Collection; import java.util.Collections; import java.util.List; /** * MES 生产主计划(MPS)Mapper * * @author 芋道源码 */ @Mapper public interface MesProMpsMapper extends BaseMapperX { default PageResult selectPage(MesProMpsPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(MesProMpsDO::getCode, reqVO.getCode()) .eqIfPresent(MesProMpsDO::getStatus, reqVO.getStatus()) .eqIfPresent(MesProMpsDO::getProductId, reqVO.getProductId()) .eqIfPresent(MesProMpsDO::getClientId, reqVO.getClientId()) .likeIfPresent(MesProMpsDO::getSaleOrderNo, reqVO.getSaleOrderNo()) .eqIfPresent(MesProMpsDO::getWorkOrderId, reqVO.getWorkOrderId()) .betweenIfPresent(MesProMpsDO::getRequestDate, reqVO.getRequestDate()) .betweenIfPresent(MesProMpsDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MesProMpsDO::getId)); } /** * 分页查询(带客户权限过滤) */ default PageResult selectPage(MesProMpsPageReqVO reqVO, List permittedClientIds) { LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX() .likeIfPresent(MesProMpsDO::getCode, reqVO.getCode()) .eqIfPresent(MesProMpsDO::getStatus, reqVO.getStatus()) .eqIfPresent(MesProMpsDO::getProductId, reqVO.getProductId()) .eqIfPresent(MesProMpsDO::getClientId, reqVO.getClientId()) .likeIfPresent(MesProMpsDO::getSaleOrderNo, reqVO.getSaleOrderNo()) .eqIfPresent(MesProMpsDO::getWorkOrderId, reqVO.getWorkOrderId()) .betweenIfPresent(MesProMpsDO::getRequestDate, reqVO.getRequestDate()) .betweenIfPresent(MesProMpsDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MesProMpsDO::getId); if (permittedClientIds != null) { if (CollUtil.isEmpty(permittedClientIds)) { return PageResult.empty(); } wrapper.in(MesProMpsDO::getClientId, permittedClientIds); } return selectPage(reqVO, wrapper); } default MesProMpsDO selectByCode(String code) { return selectOne(MesProMpsDO::getCode, code); } default MesProMpsDO selectBySaleOrderItemId(Long saleOrderItemId) { return selectOne(MesProMpsDO::getSaleOrderItemId, saleOrderItemId); } default List selectListBySaleOrderItemIds(Collection saleOrderItemIds) { if (saleOrderItemIds == null || saleOrderItemIds.isEmpty()) { return Collections.emptyList(); } return selectList(MesProMpsDO::getSaleOrderItemId, saleOrderItemIds); } /** * 获取可合并的 MPS 列表(相同产品、草稿状态) */ default List selectMergeableList(Long productId) { return selectList(new LambdaQueryWrapperX() .eq(MesProMpsDO::getProductId, productId) .eq(MesProMpsDO::getStatus, MesProMpsStatusEnum.DRAFT.getStatus()) .orderByAsc(MesProMpsDO::getId)); } /** * 更新已生产数量 */ default void updateProducedQuantity(Long id, BigDecimal incrQuantity) { update(null, new LambdaUpdateWrapper() .eq(MesProMpsDO::getId, id) .setSql("quantity_produced = IFNULL(quantity_produced, 0) + " + incrQuantity)); } }