package cn.iocoder.yudao.module.mes.controller.admin.pro.process; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.pro.process.vo.MesProProcessRespVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.process.vo.param.MesProProcessParamRespVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.process.vo.param.MesProProcessParamSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pd.processparam.MesPdProcessParamDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessParamDO; import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; import cn.iocoder.yudao.module.mes.service.pd.processparam.MesPdProcessParamService; import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessParamService; import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; 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 @RequestMapping("/mes/pro/process-param") @Validated public class MesProProcessParamController { @Resource private MesProProcessParamService processParamService; @Resource private MesPdProcessParamService pdProcessParamService; @Resource private MesMdUnitMeasureService unitMeasureService; @Resource private MesProProcessService processService; @GetMapping("/list-by-process") @Operation(summary = "获得工序绑定的工艺参数列表(按工序编号)") @Parameter(name = "processId", description = "工序编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:pro-process:query')") public CommonResult> getProcessParamListByProcessId(@RequestParam("processId") Long processId) { List list = processParamService.getProcessParamListByProcessId(processId); return success(buildRespVOList(list)); } @PostMapping("/update-bindings") @Operation(summary = "全量覆盖保存工序绑定的工艺参数") @PreAuthorize("@ss.hasPermission('mes:pro-process:update')") public CommonResult updateProcessParams(@Valid @RequestBody MesProProcessParamSaveReqVO reqVO) { processParamService.updateProcessParams(reqVO.getProcessId(), reqVO.getItems()); return success(true); } @GetMapping("/list-by-param") @Operation(summary = "获得工艺参数被绑定的工序列表(按工艺参数编号)") @Parameter(name = "paramId", description = "工艺参数编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:pro-process:query')") public CommonResult> getProcessListByParamId(@RequestParam("paramId") Long paramId) { List list = processParamService.getProcessParamListByParamId(paramId); if (CollUtil.isEmpty(list)) { return success(Collections.emptyList()); } Map processMap = processService.getProcessMap( convertSet(list, MesProProcessParamDO::getProcessId)); List result = new ArrayList<>(list.size()); for (MesProProcessParamDO binding : list) { MesProProcessDO process = processMap.get(binding.getProcessId()); if (process != null) { result.add(new MesProProcessRespVO() .setId(process.getId()).setCode(process.getCode()).setName(process.getName())); } } return success(result); } // ==================== 拼接 VO ==================== private List buildRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } // 1. 批量获取工艺参数与计量单位 Map paramMap = pdProcessParamService.getProcessParamMap( convertSet(list, MesProProcessParamDO::getProcessParamId)); Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( convertSet(paramMap.values(), MesPdProcessParamDO::getUnitMeasureId)); // 2. 拼接 VO return BeanUtils.toBean(list, MesProProcessParamRespVO.class, vo -> findAndThen(paramMap, vo.getProcessParamId(), param -> { vo.setParamCode(param.getParamCode()).setParamName(param.getParamName()) .setParamType(param.getParamType()).setUnitMeasureId(param.getUnitMeasureId()); findAndThen(unitMeasureMap, param.getUnitMeasureId(), unit -> vo.setUnitMeasureName(unit.getName())); }) ); } }