yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/feedback/MesProFeedbackMapper.java
@@ -1,28 +1,55 @@
package cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback;
import cn.hutool.core.util.StrUtil;
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.pro.feedback.vo.MesProFeedbackPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
/**
 * MES 生产报工 Mapper
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Mapper
public interface MesProFeedbackMapper extends BaseMapperX<MesProFeedbackDO> {
    default PageResult<MesProFeedbackDO> selectPage(MesProFeedbackPageReqVO reqVO) {
        // 当按任务编码模糊查询时,需要 JOIN 任务表
        if (StrUtil.isNotBlank(reqVO.getTaskCode())) {
            MPJLambdaWrapperX<MesProFeedbackDO> query = new MPJLambdaWrapperX<>();
            query.selectAll(MesProFeedbackDO.class);
            query.leftJoin(MesProTaskDO.class, on -> on
                    .eq(MesProTaskDO::getId, MesProFeedbackDO::getTaskId));
            query.like(MesProTaskDO::getCode, reqVO.getTaskCode());
            query.likeIfPresent(MesProFeedbackDO::getCode, reqVO.getCode())
                    .eqIfPresent(MesProFeedbackDO::getType, reqVO.getType())
                    .eqIfPresent(MesProFeedbackDO::getWorkOrderId, reqVO.getWorkOrderId())
                    .eqIfPresent(MesProFeedbackDO::getTaskId, reqVO.getTaskId())
                    .eqIfPresent(MesProFeedbackDO::getStatus, reqVO.getStatus())
                    .betweenIfPresent(MesProFeedbackDO::getFeedbackTime, reqVO.getFeedbackTime())
                    .eqIfPresent(MesProFeedbackDO::getItemId, reqVO.getItemId())
                    .eqIfPresent(MesProFeedbackDO::getFeedbackUserId, reqVO.getFeedbackUserId())
                    .eqIfPresent(MesProFeedbackDO::getCreator, reqVO.getCreator())
                    .orderByDesc(MesProFeedbackDO::getId);
            return selectPage(reqVO, query);
        }
        // 不涉及任务编码查询时,走普通查询
        return selectPage(reqVO, new LambdaQueryWrapperX<MesProFeedbackDO>()
                .likeIfPresent(MesProFeedbackDO::getCode, reqVO.getCode())
                .eqIfPresent(MesProFeedbackDO::getType, reqVO.getType())
                .eqIfPresent(MesProFeedbackDO::getWorkOrderId, reqVO.getWorkOrderId())
                .eqIfPresent(MesProFeedbackDO::getTaskId, reqVO.getTaskId())
                .eqIfPresent(MesProFeedbackDO::getStatus, reqVO.getStatus())
                .betweenIfPresent(MesProFeedbackDO::getFeedbackTime, reqVO.getFeedbackTime())
                .eqIfPresent(MesProFeedbackDO::getItemId, reqVO.getItemId())
@@ -46,4 +73,22 @@
                .in(MesProFeedbackDO::getTaskId, taskIds));
    }
    /**
     * 汇总指定工单、指定工序下已完成报工的合格数量
     *
     * @param workOrderId 生产工单编号
     * @param processIds  工序编号集合
     * @return 合格数量合计
     */
    default BigDecimal selectFinishedQualifiedQuantitySum(Long workOrderId, Collection<Long> processIds) {
        return selectList(new LambdaQueryWrapperX<MesProFeedbackDO>()
                .eq(MesProFeedbackDO::getWorkOrderId, workOrderId)
                .in(MesProFeedbackDO::getProcessId, processIds)
                .eq(MesProFeedbackDO::getStatus, MesProFeedbackStatusEnum.FINISHED.getStatus()))
                .stream()
                .map(MesProFeedbackDO::getQualifiedQuantity)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
}