package cn.iocoder.yudao.module.mes.controller.admin.wm.transaction; 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.wm.transaction.vo.MesWmTransactionPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionRespVO; import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transaction.MesWmTransactionDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; 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.List; import java.util.Map; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; /** * 库存事务流水 Controller */ @Tag(name = "管理后台 - 库存事务流水") @RestController @RequestMapping("/mes/wm/transaction") @Validated public class MesWmTransactionController { @Resource private MesWmTransactionService transactionService; @Resource private MesMdmItemService mdmItemService; @Resource private MesWmWarehouseService warehouseService; @Resource private MesWmWarehouseLocationService locationService; @Resource private MesWmWarehouseAreaService areaService; @GetMapping("/page") @Operation(summary = "获取库存事务流水分页") @Parameter(name = "id", description = "编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('mes:wm-transaction:query')") public CommonResult> getTransactionPage(@Valid MesWmTransactionPageReqVO pageReqVO) { PageResult pageResult = transactionService.getTransactionPage(pageReqVO); if (pageResult.getTotal() == 0) { return success(PageResult.empty(pageResult.getTotal())); } // 关联查询物料信息 Map itemMap = mdmItemService.getItemMap( convertSet(pageResult.getList(), MesWmTransactionDO::getItemId)); // 关联查询仓库信息 Map warehouseMap = warehouseService.getWarehouseMap( convertSet(pageResult.getList(), MesWmTransactionDO::getWarehouseId)); // 关联查询库区信息 Map locationMap = locationService.getWarehouseLocationMap( convertSet(pageResult.getList(), MesWmTransactionDO::getLocationId)); // 关联查询库位信息 Map areaMap = areaService.getWarehouseAreaMap( convertSet(pageResult.getList(), MesWmTransactionDO::getAreaId)); // 转换为 VO List voList = pageResult.getList().stream().map(transaction -> { MesWmTransactionRespVO vo = BeanUtils.toBean(transaction, MesWmTransactionRespVO.class); // 事务类型名称 MesWmTransactionTypeEnum typeEnum = MesWmTransactionTypeEnum.valueOf(transaction.getType()); vo.setTypeName(typeEnum != null ? typeEnum.getName() : "未知"); // 业务类型名称 vo.setBizTypeName(getBizTypeName(transaction.getBizType())); // 物料信息 MesMdmItemDO item = itemMap.get(transaction.getItemId()); if (item != null) { vo.setItemCode(item.getCode()); vo.setItemName(item.getName()); } // 仓库信息 MesWmWarehouseDO warehouse = warehouseMap.get(transaction.getWarehouseId()); if (warehouse != null) { vo.setWarehouseName(warehouse.getName()); } // 库区信息 MesWmWarehouseLocationDO location = locationMap.get(transaction.getLocationId()); if (location != null) { vo.setLocationName(location.getName()); } // 库位信息 MesWmWarehouseAreaDO area = areaMap.get(transaction.getAreaId()); if (area != null) { vo.setAreaName(area.getName()); } return vo; }).collect(Collectors.toList()); return success(new PageResult<>(voList, pageResult.getTotal())); } /** * 获取业务类型名称 */ private String getBizTypeName(Integer bizType) { if (bizType == null) { return "未知"; } switch (bizType) { case MesBizTypeConstants.WM_STOCK_ADJUST_IN: return "自定义入库"; case MesBizTypeConstants.WM_STOCK_ADJUST_OUT: return "自定义出库"; case MesBizTypeConstants.WM_ITEM_RECEIPT_IN: return "采购入库"; case MesBizTypeConstants.WM_PRODUCT_SALES: return "销售出库"; case MesBizTypeConstants.WM_TRANSFER_IN: return "调拨入库"; case MesBizTypeConstants.WM_TRANSFER_OUT: return "调拨出库"; case MesBizTypeConstants.WM_MISC_RECPT: return "其他入库"; case MesBizTypeConstants.WM_MISC_ISSUE: return "其他出库"; case MesBizTypeConstants.WM_ISSUE: return "生产领料"; case MesBizTypeConstants.WM_RETURN_ISSUE: return "生产退料"; case MesBizTypeConstants.WM_PRODUCT_RECPT: return "生产入库"; case MesBizTypeConstants.WM_ITEM_CONSUME: return "生产消耗"; case MesBizTypeConstants.WM_PRODUCT_PRODUCE: return "产品产出"; case MesBizTypeConstants.WM_RETURN_VENDOR: return "供应商退货"; case MesBizTypeConstants.WM_RETURN_SALES: return "销售退货"; case MesBizTypeConstants.WM_OUTSOURCE_ISSUE: return "外协发料"; case MesBizTypeConstants.WM_OUTSOURCE_RECPT: return "外协入库"; default: return "未知类型(" + bizType + ")"; } } }