liyong
4 小时以前 09e7523d24ac947d88d59ac54a25278c2283e5c2
待检验条件修改 现在不需要根据是否为关键工序进行判断了
已添加1个文件
已修改5个文件
149 ■■■■ 文件已修改
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemconsume/MesWmItemConsumeLineController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemconsume/MesWmItemConsumeLineMapper.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemconsume/MesWmItemConsumeLineService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemconsume/MesWmItemConsumeLineServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/resources/mapper/wm/itemconsume/MesWmItemConsumeLineMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemconsume/MesWmItemConsumeLineController.java
@@ -2,16 +2,8 @@
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLineRespVO;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeLineDO;
import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
import cn.iocoder.yudao.module.mes.service.wm.itemconsume.MesWmItemConsumeLineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,12 +15,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
@Tag(name = "管理后台 - MES ç‰©æ–™æ¶ˆè€—记录行")
@RestController
@@ -38,33 +25,15 @@
    @Resource
    private MesWmItemConsumeLineService itemConsumeLineService;
    @Resource
    private MdmItemApi mdmItemApi;
    @Resource
    private MdmUnitMeasureApi mdmUnitMeasureApi;
    @GetMapping("/page")
    @Operation(summary = "根据报工编号分页获取消耗行列表")
    @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')")
    public CommonResult<PageResult<MesWmItemConsumeLineRespVO>> getItemConsumeLinePage(
            @Valid MesWmItemConsumeLinePageReqVO pageReqVO) {
        // 1. åˆ†é¡µæŸ¥è¯¢æ¶ˆè€—行
        PageResult<MesWmItemConsumeLineDO> pageResult =
        PageResult<MesWmItemConsumeLineRespVO> pageResult =
                itemConsumeLineService.getItemConsumeLinePage(pageReqVO);
        PageResult<MesWmItemConsumeLineRespVO> voPage = BeanUtils.toBean(pageResult, MesWmItemConsumeLineRespVO.class);
        // 2. æ‹¼æŽ¥ç‰©æ–™ä¿¡æ¯
        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                convertSet(pageResult.getList(), MesWmItemConsumeLineDO::getItemId));
        Map<Long, MdmUnitMeasureRespDTO> unitMap = mdmUnitMeasureApi.getUnitMeasureList(
                convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
                .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
        for (MesWmItemConsumeLineRespVO vo : voPage.getList()) {
            findAndThen(itemMap, vo.getItemId(), item -> {
                vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification());
                findAndThen(unitMap, item.getUnitMeasureId(), unit -> vo.setUnitName(unit.getName()));
            });
        }
        return success(voPage);
        return success(pageResult);
    }
}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemconsume/MesWmItemConsumeLineMapper.java
@@ -4,8 +4,12 @@
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.wm.itemconsume.vo.MesWmItemConsumeLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLineRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeLineDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -17,11 +21,17 @@
@Mapper
public interface MesWmItemConsumeLineMapper extends BaseMapperX<MesWmItemConsumeLineDO> {
    default PageResult<MesWmItemConsumeLineDO> selectPage(MesWmItemConsumeLinePageReqVO reqVO,
                                                          Long consumeId) {
        return selectPage(reqVO, new LambdaQueryWrapperX<MesWmItemConsumeLineDO>()
                .eq(MesWmItemConsumeLineDO::getConsumeId, consumeId)
                .orderByDesc(MesWmItemConsumeLineDO::getId));
    /**
     * åˆ†é¡µæŸ¥è¯¢æ¶ˆè€—行(关联 mdm_item + mdm_unit_measure,通过 feedbackId)
     */
    IPage<MesWmItemConsumeLineRespVO> selectPageByFeedbackId(
            Page<MesWmItemConsumeLineRespVO> page, @Param("feedbackId") Long feedbackId);
    default PageResult<MesWmItemConsumeLineRespVO> selectPageByFeedbackId(
            MesWmItemConsumeLinePageReqVO reqVO) {
        Page<MesWmItemConsumeLineRespVO> mpPage = new Page<>(reqVO.getPageNo(), reqVO.getPageSize());
        IPage<MesWmItemConsumeLineRespVO> result = selectPageByFeedbackId(mpPage, reqVO.getFeedbackId());
        return new PageResult<>(result.getRecords(), result.getTotal());
    }
    default List<MesWmItemConsumeLineDO> selectListByConsumeId(Long consumeId) {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -205,28 +205,28 @@
                .setStatus(MesProFeedbackStatusEnum.FINISHED.getStatus())
                .setUncheckQuantity(BigDecimal.ZERO));
        // 6. å…³é”®å·¥åºï¼šç”Ÿæˆäº§å‡ºå•,并根据是否需要检验决定入库方式
        if (keyFlag) {
        // 6. æ ¹æ®æ˜¯å¦éœ€è¦æ£€éªŒï¼Œå†³å®šäº§å‡ºå’Œå…¥åº“方式
        if (checkFlag) {
            // 6.1 éœ€è¦æ£€éªŒï¼šç”Ÿæˆäº§å‡ºå•(质量状态=待检验),更新报工状态为待检验,等质检完成回调后再入库
            if (checkFlag) {
                // å®Œæˆæ—¶å›žè°ƒè§ï¼šMesQcIpqcServiceImpl#finishIpqc â†’ splitPendingAndFinishProduce + completeFeedbackFromIpqc
                productProduceService.generateProductProduce(feedback, true);
                feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
                        .setStatus(MesProFeedbackStatusEnum.UNCHECK.getStatus()));
                return false;
            }
            // 6.2 æ— éœ€æ£€éªŒï¼šç”Ÿæˆäº§å‡ºå•(按合格/不合格拆行),直接完成入库,并更新任务/工单的已生产数量
            // å®Œæˆæ—¶å›žè°ƒè§ï¼šMesQcIpqcServiceImpl#finishIpqc â†’ splitPendingAndFinishProduce + updateProFeedbackWhenIpqcFinish
            productProduceService.generateProductProduce(feedback, true);
            feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
                    .setStatus(MesProFeedbackStatusEnum.UNCHECK.getStatus()));
            return false;
        } else {
            // 6.2 æ— éœ€æ£€éªŒï¼šç”Ÿæˆäº§å‡ºå•(按合格/不合格拆行),直接完成入库
            MesWmProductProduceDO produce = productProduceService.generateProductProduce(feedback, false);
            productProduceService.finishProductProduce(produce.getId());
            updateTaskAndWorkOrderByFeedback(feedback);
        } else {
            // 6.3 éžå…³é”®å·¥åºï¼šåªæ›´æ–°ä»»åŠ¡çš„å·²ç”Ÿäº§æ•°é‡ï¼ˆå·¥å•ä¸æ›´æ–°ï¼Œå·¥å•åªçœ‹å…³é”®å·¥åºäº§å‡ºï¼‰
            taskService.updateProducedQuantity(feedback.getTaskId(),
                    feedback.getFeedbackQuantity(),
                    ObjectUtil.defaultIfNull(feedback.getQualifiedQuantity(), BigDecimal.ZERO),
                    ObjectUtil.defaultIfNull(feedback.getUnqualifiedQuantity(), BigDecimal.ZERO));
            // 6.4 éžå…³é”®å·¥åºä¹Ÿéœ€è¦æ£€æŸ¥ MPS å®ŒæˆçŠ¶æ€ï¼ˆæ‰€æœ‰å·¥åºæŠ¥å·¥å®Œæˆæ‰ç®—å®Œæˆï¼‰
            checkAndPublishProductionFinished(feedback.getWorkOrderId());
            // å…³é”®å·¥åºï¼šæ›´æ–°ä»»åŠ¡ + å·¥å•的已生产数量;非关键工序:只更新任务的已生产数量(工单只看关键工序产出)
            if (keyFlag) {
                updateTaskAndWorkOrderByFeedback(feedback);
            } else {
                taskService.updateProducedQuantity(feedback.getTaskId(),
                        feedback.getFeedbackQuantity(),
                        ObjectUtil.defaultIfNull(feedback.getQualifiedQuantity(), BigDecimal.ZERO),
                        ObjectUtil.defaultIfNull(feedback.getUnqualifiedQuantity(), BigDecimal.ZERO));
                checkAndPublishProductionFinished(feedback.getWorkOrderId());
            }
        }
        return true; // å·²å®Œæˆ
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemconsume/MesWmItemConsumeLineService.java
@@ -2,6 +2,7 @@
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLineRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeLineDO;
import java.util.List;
@@ -21,12 +22,12 @@
    void createItemConsumeLineBatch(List<MesWmItemConsumeLineDO> lines);
    /**
     * æ ¹æ®æŠ¥å·¥è®°å½•编号分页查询消耗行
     * æ ¹æ®æŠ¥å·¥è®°å½•编号分页查询消耗行(关联物料+单位信息)
     *
     * @param pageReqVO åˆ†é¡µæŸ¥è¯¢å‚数(含 feedbackId)
     * @return æ¶ˆè€—行分页
     * @return æ¶ˆè€—行分页(含物料编码、名称、规格、单位)
     */
    PageResult<MesWmItemConsumeLineDO> getItemConsumeLinePage(MesWmItemConsumeLinePageReqVO pageReqVO);
    PageResult<MesWmItemConsumeLineRespVO> getItemConsumeLinePage(MesWmItemConsumeLinePageReqVO pageReqVO);
    /**
     * æŸ¥è¯¢æŒ‡å®šæ¶ˆè€—记录的所有行
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemconsume/MesWmItemConsumeLineServiceImpl.java
@@ -2,11 +2,10 @@
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLinePageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeDO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLineRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemconsume.MesWmItemConsumeLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemconsume.MesWmItemConsumeLineMapper;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -24,24 +23,14 @@
    @Resource
    private MesWmItemConsumeLineMapper itemConsumeLineMapper;
    @Resource
    @Lazy
    private MesWmItemConsumeService itemConsumeService;
    @Override
    public void createItemConsumeLineBatch(List<MesWmItemConsumeLineDO> lines) {
        itemConsumeLineMapper.insertBatch(lines);
    }
    @Override
    public PageResult<MesWmItemConsumeLineDO> getItemConsumeLinePage(MesWmItemConsumeLinePageReqVO pageReqVO) {
        // 1. å…ˆé€šè¿‡ feedbackId æ‰¾åˆ°æ¶ˆè€—头(通过 Service è°ƒç”¨ï¼Œä¸ç›´æŽ¥æ³¨å…¥ Mapper)
        MesWmItemConsumeDO consume = itemConsumeService.getByFeedbackId(pageReqVO.getFeedbackId());
        if (consume == null) {
            return PageResult.empty();
        }
        // 2. åˆ†é¡µæŸ¥è¯¢æ¶ˆè€—行
        return itemConsumeLineMapper.selectPage(pageReqVO, consume.getId());
    public PageResult<MesWmItemConsumeLineRespVO> getItemConsumeLinePage(MesWmItemConsumeLinePageReqVO pageReqVO) {
        return itemConsumeLineMapper.selectPageByFeedbackId(pageReqVO);
    }
    @Override
yudao-module-mes/src/main/resources/mapper/wm/itemconsume/MesWmItemConsumeLineMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.wm.itemconsume.MesWmItemConsumeLineMapper">
    <!--
        ç‰©æ–™æ¶ˆè€—行分页查询(关联 mdm_item + mdm_unit_measure)
        é€šè¿‡ feedbackId å…³è”消耗头,再查消耗行
    -->
    <select id="selectPageByFeedbackId" resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.itemconsume.vo.MesWmItemConsumeLineRespVO">
        SELECT
            l.id,
            l.consume_id,
            l.item_id,
            l.quantity,
            l.batch_id,
            l.batch_code,
            l.remark,
            l.create_time,
            i.code AS itemCode,
            i.name AS itemName,
            i.specification AS specification,
            u.name AS unitName
        FROM mes_wm_item_consume_line l
            INNER JOIN mes_wm_item_consume c ON l.consume_id = c.id AND c.deleted = 0
            LEFT JOIN mdm_item i ON l.item_id = i.id AND i.deleted = 0
            LEFT JOIN mdm_unit_measure u ON i.unit_measure_id = u.id AND u.deleted = 0
        WHERE l.deleted = 0
          AND c.feedback_id = #{feedbackId}
        ORDER BY l.id DESC
    </select>
</mapper>