云
9 天以前 bf5f52656e128f578ed42c7979c31cf4b476ce46
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
@@ -2,6 +2,10 @@
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.mes.service.pd.processparamtemplate.MesPdProcessParamTemplateService;
import cn.iocoder.yudao.module.mes.service.pro.feedback.dto.MesTaskParamSnapshot;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskAutoGeneratePreviewRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskAutoGenerateReqVO;
@@ -76,6 +80,8 @@
    @Resource
    private MesProTaskMapper taskMapper;
    @Resource
    private MesPdProcessParamTemplateService paramTemplateService;
    @Resource
    private MesProFeedbackMapper feedbackMapper;
@@ -116,6 +122,7 @@
    private MesCalTeamService teamService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long createTask(MesProTaskSaveReqVO createReqVO) {
        // 1. 校验关联数据存在
        MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
@@ -143,14 +150,17 @@
            task.setClientId(workOrder.getClientId());
        }
        // 2.2 插入
        freezeTaskParamConfig(task);
        taskMapper.insert(task);
        return task.getId();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateTask(MesProTaskSaveReqVO updateReqVO) {
        // 1.1 校验存在
        MesProTaskDO task = validateTaskExists(updateReqVO.getId());
        MesProTaskDO task = taskMapper.selectOne(new LambdaQueryWrapperX<MesProTaskDO>()
                .eq(MesProTaskDO::getId, updateReqVO.getId()).last("FOR UPDATE"));
        if (task == null) throw exception(PRO_TASK_NOT_EXISTS);
        // 1.2 校验关联数据存在
        if (updateReqVO.getWorkOrderId() != null) {
            workOrderService.validateWorkOrderExists(updateReqVO.getWorkOrderId());
@@ -176,7 +186,40 @@
        // 2. 更新
        MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class)
                .setName(buildTaskName(item, quantity));
        if (updateReqVO.getProcessId() != null && !updateReqVO.getProcessId().equals(task.getProcessId())) {
            if (feedbackMapper.selectCountByTaskId(task.getId()) > 0) throw exception(PRO_TASK_HAS_FEEDBACK);
            freezeTaskParamConfig(updateObj);
        }
        taskMapper.updateById(updateObj);
    }
    /** 从工序和模板复制定义,后续模板维护不改变已排产任务。 */
    private void freezeTaskParamConfig(MesProTaskDO task) {
        var process = processService.getProcess(task.getProcessId());
        if (process == null) throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_PROCESS_NOT_EXISTS);
        int mode = process.getParamCollectMode() == null ? 0 : process.getParamCollectMode();
        task.setParamCollectMode(mode);
        task.setParamTemplateSnapshot("");
        task.setParamSharedSnapshot("");
        if (mode == 0) return;
        if ((mode != 1 && mode != 2) || process.getParamTemplateId() == null)
            throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_PROCESS_PARAM_CONFIG_INVALID);
        var template = paramTemplateService.validateProcessParamTemplateExists(process.getParamTemplateId());
        var details = paramTemplateService.getProcessParamTemplateDetailListByTemplateId(template.getId());
        if (CollUtil.isEmpty(details)) throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL);
        MesTaskParamSnapshot snapshot = new MesTaskParamSnapshot();
        snapshot.setTemplateId(template.getId());
        snapshot.setTemplateCode(template.getTemplateCode());
        snapshot.setTemplateName(template.getTemplateName());
        List<MesTaskParamSnapshot.Detail> frozenDetails = BeanUtils.toBean(details, MesTaskParamSnapshot.Detail.class);
        for (MesTaskParamSnapshot.Detail detail : frozenDetails) {
            if (detail.getUnitMeasureId() != null) {
                var unit = unitMeasureService.getUnitMeasure(detail.getUnitMeasureId());
                if (unit != null) detail.setUnitMeasureName(unit.getName());
            }
        }
        snapshot.setDetails(frozenDetails);
        task.setParamTemplateSnapshot(JsonUtils.toJsonString(snapshot));
    }
    /**
@@ -492,6 +535,7 @@
                    .setStatus(MesProTaskStatusEnum.PREPARE.getStatus())
                    .setClientId(workOrder.getClientId())
                    .setColorCode(rp.getColorCode());
            freezeTaskParamConfig(task);
            taskMapper.insert(task);
            taskIds.add(task.getId());
        }