package cn.iocoder.yudao.module.mes.controller.admin.pro.worktime; import cn.hutool.core.collection.CollUtil; 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.pro.worktime.vo.MesProWorktimeAuxPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.worktime.vo.MesProWorktimeAuxRespVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.worktime.vo.MesProWorktimeAuxSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.worktime.MesProWorktimeAuxDO; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; import cn.iocoder.yudao.module.mes.service.pro.worktime.MesProWorktimeAuxService; 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.Collections; import java.util.List; import java.util.Map; import java.util.Set; 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/worktime-aux") @Validated public class MesProWorktimeAuxController { @Resource private MesProWorktimeAuxService worktimeAuxService; @Resource private MesProProcessService processService; @Resource private MesMdWorkstationService workstationService; @PostMapping("/create") @Operation(summary = "创建辅助工时项目") @PreAuthorize("@ss.hasPermission('mes:pro-worktime-aux:create')") public CommonResult createWorktimeAux(@Valid @RequestBody MesProWorktimeAuxSaveReqVO createReqVO) { return success(worktimeAuxService.createWorktimeAux(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新辅助工时项目") @PreAuthorize("@ss.hasPermission('mes:pro-worktime-aux:update')") public CommonResult updateWorktimeAux(@Valid @RequestBody MesProWorktimeAuxSaveReqVO updateReqVO) { worktimeAuxService.updateWorktimeAux(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除辅助工时项目") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:pro-worktime-aux:delete')") public CommonResult deleteWorktimeAux(@RequestParam("id") Long id) { worktimeAuxService.deleteWorktimeAux(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得辅助工时项目") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:pro-worktime-aux:query')") public CommonResult getWorktimeAux(@RequestParam("id") Long id) { MesProWorktimeAuxDO aux = worktimeAuxService.getWorktimeAux(id); if (aux == null) { return success(null); } return success(buildRespVOList(Collections.singletonList(aux)).get(0)); } @GetMapping("/page") @Operation(summary = "获得辅助工时项目分页") @PreAuthorize("@ss.hasPermission('mes:pro-worktime-aux:query')") public CommonResult> getWorktimeAuxPage(@Valid MesProWorktimeAuxPageReqVO pageReqVO) { PageResult pageResult = worktimeAuxService.getWorktimeAuxPage(pageReqVO); return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); } @GetMapping("/list-applicable") @Operation(summary = "获得工序+机台可用的辅助工时项目,报工表单使用") @Parameter(name = "processId", description = "工序编号", required = true) @Parameter(name = "workstationId", description = "工作站(机台)编号") @PreAuthorize("@ss.hasPermission('mes:pro-feedback:create')") public CommonResult> getApplicableList(@RequestParam("processId") Long processId, @RequestParam(value = "workstationId", required = false) Long workstationId) { List list = worktimeAuxService.getApplicableList(processId, workstationId); return success(buildRespVOList(list)); } private List buildRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } Set processIds = convertSet(list, MesProWorktimeAuxDO::getProcessId); processIds.remove(null); Map processMap = processService.getProcessMap(processIds); Set workstationIds = convertSet(list, MesProWorktimeAuxDO::getWorkstationId); workstationIds.remove(null); Map workstationMap = workstationService.getWorkstationMap(workstationIds); return BeanUtils.toBean(list, MesProWorktimeAuxRespVO.class, vo -> { findAndThen(processMap, vo.getProcessId(), process -> vo.setProcessName(process.getName())); findAndThen(workstationMap, vo.getWorkstationId(), workstation -> vo.setWorkstationName(workstation.getName())); }); } }