package cn.iocoder.yudao.module.mes.controller.admin.qc.outsourcetest; 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.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.module.mes.controller.admin.qc.outsourcetest.vo.MesQcOutsourceTestPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.outsourcetest.vo.MesQcOutsourceTestRespVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.outsourcetest.vo.MesQcOutsourceTestSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.outsourcetest.MesQcOutsourceTestDO; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.qc.outsourcetest.MesQcOutsourceTestService; import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; 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 static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - MES 委外检测/试验单") @RestController @RequestMapping("/mes/qc/outsource-test") @Validated public class MesQcOutsourceTestController { @Resource private MesQcOutsourceTestService testService; @Resource private MesMdItemService itemService; @Resource private StorageAttachmentApi storageAttachmentApi; @PostMapping("/create") @Operation(summary = "创建委外检测/试验单") @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:create')") public CommonResult createTest(@Valid @RequestBody MesQcOutsourceTestSaveReqVO createReqVO) { return success(testService.createTest(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新委外检测/试验单") @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:update')") public CommonResult updateTest(@Valid @RequestBody MesQcOutsourceTestSaveReqVO updateReqVO) { testService.updateTest(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除委外检测/试验单") @Parameter(name = "ids", description = "编号数组", required = true) @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:delete')") public CommonResult deleteTest(@RequestParam("ids") List ids) { testService.deleteTest(ids); return success(true); } @GetMapping("/get") @Operation(summary = "获得委外检测/试验单") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:query')") public CommonResult getTest(@RequestParam("id") Long id) { MesQcOutsourceTestDO test = testService.getTest(id); if (test == null) { return success(null); } return success(buildRespVO(test)); } @GetMapping("/page") @Operation(summary = "获得委外检测/试验单分页") @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:query')") public CommonResult> getTestPage(@Valid MesQcOutsourceTestPageReqVO pageReqVO) { PageResult pageResult = testService.getTestPage(pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return success(PageResult.empty(pageResult.getTotal())); } return success(new PageResult<>(BeanUtils.toBean(pageResult.getList(), MesQcOutsourceTestRespVO.class, vo -> fillItemName(vo, vo.getItemId())), pageResult.getTotal())); } @PutMapping("/submit") @Operation(summary = "提交委外检测/试验单") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:update')") public CommonResult submitTest(@RequestParam("id") Long id) { testService.submitTest(id); return success(true); } @PutMapping("/finish") @Operation(summary = "完成委外检测/试验单") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:qc-outsource-test:update')") public CommonResult finishTest(@RequestParam("id") Long id) { testService.finishTest(id); return success(true); } private MesQcOutsourceTestRespVO buildRespVO(MesQcOutsourceTestDO test) { MesQcOutsourceTestRespVO vo = BeanUtils.toBean(test, MesQcOutsourceTestRespVO.class); fillItemName(vo, test.getItemId()); // 附件 vo.setAttachmentList(BeanUtils.toBean(storageAttachmentApi.listAttachments( "mes_qc_outsource_test", test.getId()), MesQcOutsourceTestRespVO.Attachment.class)); return vo; } private void fillItemName(MesQcOutsourceTestRespVO vo, Long itemId) { if (itemId == null) { return; } Map itemMap = itemService.getItemMap(Collections.singleton(itemId)); MapUtils.findAndThen(itemMap, itemId, item -> vo.setItemName(item.getName())); } }