| | |
| | | |
| | | 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; |
| | |
| | | |
| | | @Resource |
| | | private MesProTaskMapper taskMapper; |
| | | @Resource |
| | | private MesPdProcessParamTemplateService paramTemplateService; |
| | | |
| | | @Resource |
| | | private MesProFeedbackMapper feedbackMapper; |
| | |
| | | private MesCalTeamService teamService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createTask(MesProTaskSaveReqVO createReqVO) { |
| | | // 1. 校验关联数据存在 |
| | | MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); |
| | |
| | | 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()); |
| | |
| | | // 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)); |
| | | } |
| | | |
| | | /** |
| | |
| | | .setStatus(MesProTaskStatusEnum.PREPARE.getStatus()) |
| | | .setClientId(workOrder.getClientId()) |
| | | .setColorCode(rp.getColorCode()); |
| | | freezeTaskParamConfig(task); |
| | | taskMapper.insert(task); |
| | | taskIds.add(task.getId()); |
| | | } |