| | |
| | | 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.util.MyBatisUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeUnboundTonBagPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO; |
| | | import cn.iocoder.yudao.module.mes.enums.pro.MesProBagCodeStatusEnum; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.apache.ibatis.annotations.Select; |
| | |
| | | .orderByAsc(MesProBagCodeDO::getId)); |
| | | } |
| | | |
| | | /** |
| | | * 分页查询可绑定批次的吨袋:无托盘、未绑定批次、品种计量单位类型为吨。 |
| | | * <p> |
| | | * 计量单位类型在 MDM 侧维护,因此通过 mdm_item + mdm_unit_measure 关联过滤, |
| | | * 避免把全部袋码拉到内存再逐个查单位,数据量大时不可用。 |
| | | */ |
| | | default PageResult<MesProBagCodeDO> selectUnboundTonBagPage(MesProBagCodeUnboundTonBagPageReqVO reqVO, |
| | | String unitType) { |
| | | IPage<MesProBagCodeDO> result = selectUnboundTonBagPage(MyBatisUtils.buildPage(reqVO), reqVO.getKeyword(), |
| | | unitType, List.of(MesProBagCodeStatusEnum.GENERATED.getStatus(), |
| | | MesProBagCodeStatusEnum.PRINTED.getStatus())); |
| | | return new PageResult<>(result.getRecords(), result.getTotal()); |
| | | } |
| | | |
| | | IPage<MesProBagCodeDO> selectUnboundTonBagPage(IPage<MesProBagCodeDO> page, |
| | | @Param("keyword") String keyword, |
| | | @Param("unitType") String unitType, |
| | | @Param("statuses") Collection<Integer> statuses); |
| | | |
| | | /** 批次内有效袋码的品种编号集合(忽略历史空品种袋码),用于录入批次时的品种一致性校验 */ |
| | | @Select("SELECT DISTINCT item_id FROM mes_pro_bag_code " + |
| | | "WHERE deleted = 0 AND status <> 30 AND batch_id = #{batchId} AND item_id IS NOT NULL") |
| | | List<Long> selectDistinctItemIdsByBatchId(@Param("batchId") Long batchId); |
| | | |
| | | /** |
| | | * 物理删除生成组下的一批袋码(仅用于生成失败/取消后的半成品清理) |
| | | * <p> |
| | | * 半成品从未对外展示,逻辑删除只会留下几十万条垃圾并占用索引空间,因此这里直接物理删除。 |
| | | * |
| | | * @param uuid 生成组 UUID |
| | | * @param limit 单次最多删除行数 |
| | | * @return 实际删除行数 |
| | | */ |
| | | @org.apache.ibatis.annotations.Delete("DELETE FROM mes_pro_bag_code WHERE uuid = #{uuid} LIMIT #{limit}") |
| | | int deletePhysicallyByUuidChunk(@Param("uuid") String uuid, @Param("limit") int limit); |
| | | |
| | | default List<MesProBagCodeDO> selectListByIdsForUpdate(Collection<Long> ids) { |
| | | return selectList(new LambdaQueryWrapperX<MesProBagCodeDO>() |
| | | .in(MesProBagCodeDO::getId, ids) |