package cn.iocoder.yudao.module.mdm.controller.admin.item; 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.mdm.controller.admin.item.vo.MdmItemModelPageReqVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelRespVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelSaveReqVO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; import cn.iocoder.yudao.module.mdm.service.item.MdmItemModelService; import cn.iocoder.yudao.module.mdm.service.item.MdmItemService; import cn.iocoder.yudao.module.mdm.service.unit.MdmUnitMeasureService; 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.Collection; 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 = "管理后台 - MDM 物料型号(型号 + 主辅单位换算)") @RestController @RequestMapping("/mdm/item-model") @Validated public class MdmItemModelController { @Resource private MdmItemModelService itemModelService; @Resource private MdmItemService itemService; @Resource private MdmUnitMeasureService unitMeasureService; @PostMapping("/create") @Operation(summary = "创建物料型号") @PreAuthorize("@ss.hasPermission('mdm:item:create')") public CommonResult createItemModel(@Valid @RequestBody MdmItemModelSaveReqVO createReqVO) { return success(itemModelService.createItemModel(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新物料型号") @PreAuthorize("@ss.hasPermission('mdm:item:update')") public CommonResult updateItemModel(@Valid @RequestBody MdmItemModelSaveReqVO updateReqVO) { itemModelService.updateItemModel(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除物料型号") @Parameter(name = "id", description = "型号编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mdm:item:delete')") public CommonResult deleteItemModel(@RequestParam("id") Long id) { itemModelService.deleteItemModel(id); return success(true); } @PostMapping("/save-list") @Operation(summary = "全量覆盖保存物料的型号列表") @PreAuthorize("@ss.hasPermission('mdm:item:update')") public CommonResult saveItemModelList(@RequestParam("itemId") Long itemId, @RequestBody List modelList) { itemModelService.saveItemModelList(itemId, modelList); return success(true); } @GetMapping("/get") @Operation(summary = "获得物料型号") @Parameter(name = "id", description = "型号编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mdm:item:query')") public CommonResult getItemModel(@RequestParam("id") Long id) { MdmItemModelDO itemModel = itemModelService.getItemModel(id); if (itemModel == null) { return success(null); } return success(buildRespVOList(List.of(itemModel)).get(0)); } @GetMapping("/list-by-item") @Operation(summary = "获得指定物料的型号列表") @Parameter(name = "itemId", description = "物料编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('mdm:item:query')") public CommonResult> getItemModelListByItemId(@RequestParam("itemId") Long itemId) { return success(buildRespVOList(itemModelService.getItemModelListByItemId(itemId))); } @GetMapping("/list-by-items") @Operation(summary = "获得指定多个物料的型号列表") @Parameter(name = "itemIds", description = "物料编号列表", required = true) @PreAuthorize("@ss.hasPermission('mdm:item:query')") public CommonResult> getItemModelListByItemIds(@RequestParam("itemIds") Collection itemIds) { List list = itemModelService.getItemModelListByItemIds(itemIds); return success(buildRespVOList(list)); } @GetMapping("/page") @Operation(summary = "获得物料型号分页") @PreAuthorize("@ss.hasPermission('mdm:item:query')") public CommonResult> getItemModelPage(@Valid MdmItemModelPageReqVO pageReqVO) { PageResult pageResult = itemModelService.getItemModelPage(pageReqVO); return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); } private List buildRespVOList(List list) { if (list == null || list.isEmpty()) { return List.of(); } List respList = BeanUtils.toBean(list, MdmItemModelRespVO.class); Map itemMap = convertMap(itemService.getItemList(convertSet(list, MdmItemModelDO::getItemId)), MdmItemDO::getId); Map unitMap = convertMap( unitMeasureService.getUnitMeasureList(convertSet(list, MdmItemModelDO::getUnitMeasureId)), MdmUnitMeasureDO::getId); respList.forEach(resp -> { MdmItemDO item = itemMap.get(resp.getItemId()); if (item != null) { resp.setItemCode(item.getCode()).setItemName(item.getName()); } MdmUnitMeasureDO unit = unitMap.get(resp.getUnitMeasureId()); if (unit != null) { resp.setUnitMeasureName(unit.getName()); } }); return respList; } }