package cn.iocoder.yudao.module.mes.controller.admin.pd.reel; 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.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelRespVO; import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.pd.ctc.ProductCtcDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pd.reel.ProductCtcReelDO; import cn.iocoder.yudao.module.mes.service.pd.ctc.ProductCtcService; import cn.iocoder.yudao.module.mes.service.pd.reel.ProductCtcReelService; 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.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - 换位导线盘具计算") @RestController @RequestMapping("/mes/pd/ctc-reel") @Validated public class ProductCtcReelController { @Resource private ProductCtcReelService reelService; @Resource private ProductCtcService ctcService; @PostMapping("/create") @Operation(summary = "创建盘具计算记录") @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:create')") public CommonResult createReel(@Valid @RequestBody ProductCtcReelSaveReqVO createReqVO) { return success(reelService.createReel(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新盘具计算记录") @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:update')") public CommonResult updateReel(@Valid @RequestBody ProductCtcReelSaveReqVO updateReqVO) { reelService.updateReel(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除盘具计算记录") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:delete')") public CommonResult deleteReel(@RequestParam("id") Long id) { reelService.deleteReel(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得盘具计算记录") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:query')") public CommonResult getReel(@RequestParam("id") Long id) { ProductCtcReelDO reel = reelService.getReel(id); if (reel == null) { return success(null); } return success(buildReelRespVOList(Collections.singletonList(reel)).get(0)); } @GetMapping("/page") @Operation(summary = "获得盘具计算记录分页") @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:query')") public CommonResult> getReelPage(@Valid ProductCtcReelPageReqVO pageReqVO) { PageResult pageResult = reelService.getReelPage(pageReqVO); return success(new PageResult<>(buildReelRespVOList(pageResult.getList()), pageResult.getTotal())); } @GetMapping("/list-by-ctc") @Operation(summary = "获得指定换位导线产品的盘具计算记录列表") @Parameter(name = "ctcId", description = "换位导线产品ID", required = true) @PreAuthorize("@ss.hasPermission('mes:pd-ctc-reel:query')") public CommonResult> getReelListByCtcId(@RequestParam("ctcId") Long ctcId) { List list = reelService.getReelListByCtcId(ctcId); return success(buildReelRespVOList(list)); } // ==================== 拼接 VO ==================== private List buildReelRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } // 批量获取换位导线产品订货规格 Map ctcFullMap = loadCtcMap(convertSet(list, ProductCtcReelDO::getCtcId)); // 拼接 VO return BeanUtils.toBean(list, ProductCtcReelRespVO.class, vo -> { MapUtils.findAndThen(ctcFullMap, vo.getCtcId(), ctc -> vo.setCtcOrderSpec(ctc.getOrderSpec())); }); } private Map loadCtcMap(java.util.Set ctcIds) { if (CollUtil.isEmpty(ctcIds)) { return Collections.emptyMap(); } java.util.List list = ctcIds.stream() .map(ctcService::getCtc) .filter(java.util.Objects::nonNull) .toList(); return convertMap(list, ProductCtcDO::getId); } }