Commit f9de4d95fe6574a996394e1c04524ba290320113

Authored by YunaiV
1 parent 305753a0

✨ feat(mes): 添加供应商退货单及相关明细功能

新增供应商退货单、退货单行及退货明细的数据对象和 API 接口,支持供应商退货管理功能。
Showing 17 changed files with 1396 additions and 0 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/MesWmReturnVendorController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  5 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  7 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  8 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  9 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  10 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorRespVO;
  13 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorSaveReqVO;
  14 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO;
  15 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO;
  16 +import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService;
  17 +import cn.iocoder.yudao.module.mes.service.wm.returnvendor.MesWmReturnVendorService;
  18 +import io.swagger.v3.oas.annotations.Operation;
  19 +import io.swagger.v3.oas.annotations.Parameter;
  20 +import io.swagger.v3.oas.annotations.tags.Tag;
  21 +import jakarta.annotation.Resource;
  22 +import jakarta.servlet.http.HttpServletResponse;
  23 +import jakarta.validation.Valid;
  24 +import org.springframework.security.access.prepost.PreAuthorize;
  25 +import org.springframework.validation.annotation.Validated;
  26 +import org.springframework.web.bind.annotation.*;
  27 +
  28 +import java.io.IOException;
  29 +import java.util.Collections;
  30 +import java.util.List;
  31 +import java.util.Map;
  32 +
  33 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  34 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  35 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  36 +
  37 +@Tag(name = "管理后台 - MES 供应商退货单")
  38 +@RestController
  39 +@RequestMapping("/mes/wm/return-vendor")
  40 +@Validated
  41 +public class MesWmReturnVendorController {
  42 +
  43 + @Resource
  44 + private MesWmReturnVendorService returnVendorService;
  45 + @Resource
  46 + private MesMdVendorService vendorService;
  47 +
  48 + @PostMapping("/create")
  49 + @Operation(summary = "创建供应商退货单")
  50 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:create')")
  51 + public CommonResult<Long> createReturnVendor(@Valid @RequestBody MesWmReturnVendorSaveReqVO createReqVO) {
  52 + return success(returnVendorService.createReturnVendor(createReqVO));
  53 + }
  54 +
  55 + @PutMapping("/update")
  56 + @Operation(summary = "修改供应商退货单")
  57 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  58 + public CommonResult<Boolean> updateReturnVendor(@Valid @RequestBody MesWmReturnVendorSaveReqVO updateReqVO) {
  59 + returnVendorService.updateReturnVendor(updateReqVO);
  60 + return success(true);
  61 + }
  62 +
  63 + @DeleteMapping("/delete")
  64 + @Operation(summary = "删除供应商退货单")
  65 + @Parameter(name = "id", description = "编号", required = true)
  66 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:delete')")
  67 + public CommonResult<Boolean> deleteReturnVendor(@RequestParam("id") Long id) {
  68 + returnVendorService.deleteReturnVendor(id);
  69 + return success(true);
  70 + }
  71 +
  72 + @GetMapping("/get")
  73 + @Operation(summary = "获得供应商退货单")
  74 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  75 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  76 + public CommonResult<MesWmReturnVendorRespVO> getReturnVendor(@RequestParam("id") Long id) {
  77 + MesWmReturnVendorDO returnVendor = returnVendorService.getReturnVendor(id);
  78 + if (returnVendor == null) {
  79 + return success(null);
  80 + }
  81 + return success(buildRespVOList(Collections.singletonList(returnVendor)).get(0));
  82 + }
  83 +
  84 + @GetMapping("/page")
  85 + @Operation(summary = "获得供应商退货单分页")
  86 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  87 + public CommonResult<PageResult<MesWmReturnVendorRespVO>> getReturnVendorPage(
  88 + @Valid MesWmReturnVendorPageReqVO pageReqVO) {
  89 + PageResult<MesWmReturnVendorDO> pageResult = returnVendorService.getReturnVendorPage(pageReqVO);
  90 + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal()));
  91 + }
  92 +
  93 + @GetMapping("/export-excel")
  94 + @Operation(summary = "导出供应商退货单 Excel")
  95 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:export')")
  96 + @ApiAccessLog(operateType = EXPORT)
  97 + public void exportReturnVendorExcel(@Valid MesWmReturnVendorPageReqVO pageReqVO,
  98 + HttpServletResponse response) throws IOException {
  99 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  100 + PageResult<MesWmReturnVendorDO> pageResult = returnVendorService.getReturnVendorPage(pageReqVO);
  101 + ExcelUtils.write(response, "供应商退货单.xls", "数据", MesWmReturnVendorRespVO.class,
  102 + buildRespVOList(pageResult.getList()));
  103 + }
  104 +
  105 + @PutMapping("/submit")
  106 + @Operation(summary = "提交供应商退货单")
  107 + @Parameter(name = "id", description = "编号", required = true)
  108 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  109 + public CommonResult<Boolean> submitReturnVendor(@RequestParam("id") Long id) {
  110 + returnVendorService.submitReturnVendor(id);
  111 + return success(true);
  112 + }
  113 +
  114 + @PutMapping("/stock")
  115 + @Operation(summary = "执行拣货")
  116 + @Parameter(name = "id", description = "编号", required = true)
  117 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  118 + public CommonResult<Boolean> stockReturnVendor(@RequestParam("id") Long id) {
  119 + returnVendorService.stockReturnVendor(id);
  120 + return success(true);
  121 + }
  122 +
  123 + @PutMapping("/finish")
  124 + @Operation(summary = "完成供应商退货单")
  125 + @Parameter(name = "id", description = "编号", required = true)
  126 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:execute')")
  127 + public CommonResult<Boolean> finishReturnVendor(@RequestParam("id") Long id) {
  128 + returnVendorService.finishReturnVendor(id);
  129 + return success(true);
  130 + }
  131 +
  132 + @PutMapping("/cancel")
  133 + @Operation(summary = "取消供应商退货单")
  134 + @Parameter(name = "id", description = "编号", required = true)
  135 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  136 + public CommonResult<Boolean> cancelReturnVendor(@RequestParam("id") Long id) {
  137 + returnVendorService.cancelReturnVendor(id);
  138 + return success(true);
  139 + }
  140 +
  141 + @GetMapping("/check-quantity")
  142 + @Operation(summary = "校验供应商退货单数量", description = "校验每行明细数量之和是否等于行退货数量")
  143 + @Parameter(name = "id", description = "编号", required = true)
  144 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  145 + public CommonResult<Boolean> checkReturnVendorQuantity(@RequestParam("id") Long id) {
  146 + return success(returnVendorService.checkReturnVendorQuantity(id));
  147 + }
  148 +
  149 + // ==================== 拼接 VO ====================
  150 +
  151 + private List<MesWmReturnVendorRespVO> buildRespVOList(List<MesWmReturnVendorDO> list) {
  152 + if (CollUtil.isEmpty(list)) {
  153 + return Collections.emptyList();
  154 + }
  155 + // 1. 获得关联数据
  156 + Map<Long, MesMdVendorDO> vendorMap = vendorService.getVendorMap(
  157 + convertSet(list, MesWmReturnVendorDO::getVendorId));
  158 + // 2. 构建结果
  159 + return BeanUtils.toBean(list, MesWmReturnVendorRespVO.class, vo ->
  160 + MapUtils.findAndThen(vendorMap, vo.getVendorId(), vendor ->
  161 + vo.setVendorName(vendor.getName()).setVendorNickname(vendor.getNickname())));
  162 + }
  163 +
  164 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/MesWmReturnVendorDetailController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  6 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.detail.MesWmReturnVendorDetailRespVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.detail.MesWmReturnVendorDetailSaveReqVO;
  9 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDetailDO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
  14 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
  15 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  16 +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
  17 +import cn.iocoder.yudao.module.mes.service.wm.returnvendor.MesWmReturnVendorDetailService;
  18 +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
  19 +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
  20 +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
  21 +import io.swagger.v3.oas.annotations.Operation;
  22 +import io.swagger.v3.oas.annotations.Parameter;
  23 +import io.swagger.v3.oas.annotations.tags.Tag;
  24 +import jakarta.annotation.Resource;
  25 +import jakarta.validation.Valid;
  26 +import org.springframework.security.access.prepost.PreAuthorize;
  27 +import org.springframework.validation.annotation.Validated;
  28 +import org.springframework.web.bind.annotation.*;
  29 +
  30 +import java.util.Collections;
  31 +import java.util.List;
  32 +import java.util.Map;
  33 +
  34 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  35 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  36 +
  37 +@Tag(name = "管理后台 - MES 供应商退货明细")
  38 +@RestController
  39 +@RequestMapping("/mes/wm/return-vendor-detail")
  40 +@Validated
  41 +public class MesWmReturnVendorDetailController {
  42 +
  43 + @Resource
  44 + private MesWmReturnVendorDetailService returnVendorDetailService;
  45 +
  46 + @Resource
  47 + private MesMdItemService itemService;
  48 +
  49 + @Resource
  50 + private MesMdUnitMeasureService unitMeasureService;
  51 +
  52 + @Resource
  53 + private MesWmWarehouseService warehouseService;
  54 +
  55 + @Resource
  56 + private MesWmWarehouseLocationService locationService;
  57 +
  58 + @Resource
  59 + private MesWmWarehouseAreaService areaService;
  60 +
  61 + @PostMapping("/create")
  62 + @Operation(summary = "创建供应商退货明细")
  63 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:create')")
  64 + public CommonResult<Long> createReturnVendorDetail(@Valid @RequestBody MesWmReturnVendorDetailSaveReqVO createReqVO) {
  65 + return success(returnVendorDetailService.createReturnVendorDetail(createReqVO));
  66 + }
  67 +
  68 + @PutMapping("/update")
  69 + @Operation(summary = "修改供应商退货明细")
  70 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  71 + public CommonResult<Boolean> updateReturnVendorDetail(@Valid @RequestBody MesWmReturnVendorDetailSaveReqVO updateReqVO) {
  72 + returnVendorDetailService.updateReturnVendorDetail(updateReqVO);
  73 + return success(true);
  74 + }
  75 +
  76 + @DeleteMapping("/delete")
  77 + @Operation(summary = "删除供应商退货明细")
  78 + @Parameter(name = "id", description = "编号", required = true)
  79 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:delete')")
  80 + public CommonResult<Boolean> deleteReturnVendorDetail(@RequestParam("id") Long id) {
  81 + returnVendorDetailService.deleteReturnVendorDetail(id);
  82 + return success(true);
  83 + }
  84 +
  85 + @GetMapping("/get")
  86 + @Operation(summary = "获得供应商退货明细")
  87 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  88 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  89 + public CommonResult<MesWmReturnVendorDetailRespVO> getReturnVendorDetail(@RequestParam("id") Long id) {
  90 + MesWmReturnVendorDetailDO detail = returnVendorDetailService.getReturnVendorDetail(id);
  91 + if (detail == null) {
  92 + return success(null);
  93 + }
  94 + return success(buildRespVOList(Collections.singletonList(detail)).get(0));
  95 + }
  96 +
  97 + @GetMapping("/list-by-line")
  98 + @Operation(summary = "获得供应商退货明细列表(按行编号)")
  99 + @Parameter(name = "lineId", description = "行编号", required = true, example = "1024")
  100 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  101 + public CommonResult<List<MesWmReturnVendorDetailRespVO>> getReturnVendorDetailListByLineId(
  102 + @RequestParam("lineId") Long lineId) {
  103 + List<MesWmReturnVendorDetailDO> list = returnVendorDetailService.getReturnVendorDetailListByLineId(lineId);
  104 + return success(buildRespVOList(list));
  105 + }
  106 +
  107 + // ==================== 拼接 VO ====================
  108 +
  109 + private List<MesWmReturnVendorDetailRespVO> buildRespVOList(List<MesWmReturnVendorDetailDO> list) {
  110 + if (CollUtil.isEmpty(list)) {
  111 + return Collections.emptyList();
  112 + }
  113 + // 1. 获得关联数据
  114 + Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
  115 + convertSet(list, MesWmReturnVendorDetailDO::getItemId));
  116 + Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
  117 + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
  118 + Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
  119 + convertSet(list, MesWmReturnVendorDetailDO::getWarehouseId));
  120 + Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap(
  121 + convertSet(list, MesWmReturnVendorDetailDO::getLocationId));
  122 + Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap(
  123 + convertSet(list, MesWmReturnVendorDetailDO::getAreaId));
  124 + // 2. 构建结果
  125 + return BeanUtils.toBean(list, MesWmReturnVendorDetailRespVO.class, vo -> {
  126 + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
  127 + vo.setItemCode(item.getCode());
  128 + vo.setItemName(item.getName());
  129 + vo.setSpecification(item.getSpecification());
  130 + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
  131 + unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName()));
  132 + });
  133 + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(),
  134 + warehouse -> vo.setWarehouseName(warehouse.getName()));
  135 + MapUtils.findAndThen(locationMap, vo.getLocationId(),
  136 + location -> vo.setLocationName(location.getName()));
  137 + MapUtils.findAndThen(areaMap, vo.getAreaId(),
  138 + area -> vo.setAreaName(area.getName()));
  139 + });
  140 + }
  141 +
  142 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/MesWmReturnVendorLineController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineRespVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
  14 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  15 +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
  16 +import cn.iocoder.yudao.module.mes.service.wm.returnvendor.MesWmReturnVendorLineService;
  17 +import io.swagger.v3.oas.annotations.Operation;
  18 +import io.swagger.v3.oas.annotations.Parameter;
  19 +import io.swagger.v3.oas.annotations.tags.Tag;
  20 +import jakarta.annotation.Resource;
  21 +import jakarta.validation.Valid;
  22 +import org.springframework.security.access.prepost.PreAuthorize;
  23 +import org.springframework.validation.annotation.Validated;
  24 +import org.springframework.web.bind.annotation.*;
  25 +
  26 +import java.util.Collections;
  27 +import java.util.List;
  28 +import java.util.Map;
  29 +
  30 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  31 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  32 +
  33 +@Tag(name = "管理后台 - MES 供应商退货单行")
  34 +@RestController
  35 +@RequestMapping("/mes/wm/return-vendor-line")
  36 +@Validated
  37 +public class MesWmReturnVendorLineController {
  38 +
  39 + @Resource
  40 + private MesWmReturnVendorLineService returnVendorLineService;
  41 +
  42 + @Resource
  43 + private MesMdItemService itemService;
  44 +
  45 + @Resource
  46 + private MesMdUnitMeasureService unitMeasureService;
  47 +
  48 + @PostMapping("/create")
  49 + @Operation(summary = "创建供应商退货单行")
  50 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:create')")
  51 + public CommonResult<Long> createReturnVendorLine(@Valid @RequestBody MesWmReturnVendorLineSaveReqVO createReqVO) {
  52 + return success(returnVendorLineService.createReturnVendorLine(createReqVO));
  53 + }
  54 +
  55 + @PutMapping("/update")
  56 + @Operation(summary = "修改供应商退货单行")
  57 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')")
  58 + public CommonResult<Boolean> updateReturnVendorLine(@Valid @RequestBody MesWmReturnVendorLineSaveReqVO updateReqVO) {
  59 + returnVendorLineService.updateReturnVendorLine(updateReqVO);
  60 + return success(true);
  61 + }
  62 +
  63 + @DeleteMapping("/delete")
  64 + @Operation(summary = "删除供应商退货单行")
  65 + @Parameter(name = "id", description = "编号", required = true)
  66 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:delete')")
  67 + public CommonResult<Boolean> deleteReturnVendorLine(@RequestParam("id") Long id) {
  68 + returnVendorLineService.deleteReturnVendorLine(id);
  69 + return success(true);
  70 + }
  71 +
  72 + @GetMapping("/get")
  73 + @Operation(summary = "获得供应商退货单行")
  74 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  75 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  76 + public CommonResult<MesWmReturnVendorLineRespVO> getReturnVendorLine(@RequestParam("id") Long id) {
  77 + MesWmReturnVendorLineDO line = returnVendorLineService.getReturnVendorLine(id);
  78 + if (line == null) {
  79 + return success(null);
  80 + }
  81 + return success(buildRespVOList(Collections.singletonList(line)).get(0));
  82 + }
  83 +
  84 + @GetMapping("/page")
  85 + @Operation(summary = "获得供应商退货单行分页")
  86 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  87 + public CommonResult<PageResult<MesWmReturnVendorLineRespVO>> getReturnVendorLinePage(
  88 + @Valid MesWmReturnVendorLinePageReqVO pageReqVO) {
  89 + PageResult<MesWmReturnVendorLineDO> pageResult = returnVendorLineService.getReturnVendorLinePage(pageReqVO);
  90 + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal()));
  91 + }
  92 +
  93 + @GetMapping("/list-by-return-vendor")
  94 + @Operation(summary = "获得供应商退货单行列表(按退货单编号)")
  95 + @Parameter(name = "returnVendorId", description = "退货单编号", required = true, example = "1024")
  96 + @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')")
  97 + public CommonResult<List<MesWmReturnVendorLineRespVO>> getReturnVendorLineListByReturnVendorId(
  98 + @RequestParam("returnVendorId") Long returnVendorId) {
  99 + List<MesWmReturnVendorLineDO> list = returnVendorLineService.getReturnVendorLineListByReturnVendorId(returnVendorId);
  100 + return success(buildRespVOList(list));
  101 + }
  102 +
  103 + // ==================== 拼接 VO ====================
  104 +
  105 + private List<MesWmReturnVendorLineRespVO> buildRespVOList(List<MesWmReturnVendorLineDO> list) {
  106 + if (CollUtil.isEmpty(list)) {
  107 + return Collections.emptyList();
  108 + }
  109 + // 1. 获得关联数据
  110 + Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
  111 + convertSet(list, MesWmReturnVendorLineDO::getItemId));
  112 + Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
  113 + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
  114 + // 2. 构建结果
  115 + return BeanUtils.toBean(list, MesWmReturnVendorLineRespVO.class, vo -> {
  116 + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
  117 + vo.setItemCode(item.getCode());
  118 + vo.setItemName(item.getName());
  119 + vo.setSpecification(item.getSpecification());
  120 + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(),
  121 + unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName()));
  122 + });
  123 + });
  124 + }
  125 +
  126 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnvendor/MesWmReturnVendorDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO;
  5 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnVendorStatusEnum;
  6 +import com.baomidou.mybatisplus.annotation.KeySequence;
  7 +import com.baomidou.mybatisplus.annotation.TableId;
  8 +import com.baomidou.mybatisplus.annotation.TableName;
  9 +import lombok.*;
  10 +
  11 +import java.time.LocalDateTime;
  12 +
  13 +/**
  14 + * MES 供应商退货单 DO
  15 + */
  16 +@TableName("mes_wm_return_vendor")
  17 +@KeySequence("mes_wm_return_vendor_seq")
  18 +@Data
  19 +@EqualsAndHashCode(callSuper = true)
  20 +@ToString(callSuper = true)
  21 +@Builder
  22 +@NoArgsConstructor
  23 +@AllArgsConstructor
  24 +public class MesWmReturnVendorDO extends BaseDO {
  25 +
  26 + /**
  27 + * 编号
  28 + */
  29 + @TableId
  30 + private Long id;
  31 + /**
  32 + * 退货单编号
  33 + */
  34 + private String code;
  35 + /**
  36 + * 退货单名称
  37 + */
  38 + private String name;
  39 + // TODO @AI:还是类似 purchase_order_code 全称
  40 + /**
  41 + * 采购订单编号
  42 + */
  43 + private String poCode;
  44 + /**
  45 + * 供应商 ID
  46 + *
  47 + * 关联 {@link MesMdVendorDO#getId()}
  48 + */
  49 + private Long vendorId;
  50 + /**
  51 + * 批次号
  52 + */
  53 + private String batchCode;
  54 + /**
  55 + * 退货日期
  56 + */
  57 + private LocalDateTime returnDate;
  58 + /**
  59 + * 退货原因
  60 + */
  61 + private String returnReason;
  62 + /**
  63 + * 物流单号
  64 + */
  65 + private String transportCode;
  66 + /**
  67 + * 物流联系电话
  68 + */
  69 + private String transportTelephone;
  70 + /**
  71 + * 状态
  72 + *
  73 + * 枚举 {@link MesWmReturnVendorStatusEnum}
  74 + */
  75 + private Integer status;
  76 + /**
  77 + * 备注
  78 + */
  79 + private String remark;
  80 +
  81 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnvendor/MesWmReturnVendorDetailDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
  8 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
  9 +import com.baomidou.mybatisplus.annotation.KeySequence;
  10 +import com.baomidou.mybatisplus.annotation.TableId;
  11 +import com.baomidou.mybatisplus.annotation.TableName;
  12 +import lombok.*;
  13 +
  14 +import java.math.BigDecimal;
  15 +
  16 +/**
  17 + * MES 供应商退货明细 DO
  18 + */
  19 +@TableName("mes_wm_return_vendor_detail")
  20 +@KeySequence("mes_wm_return_vendor_detail_seq")
  21 +@Data
  22 +@EqualsAndHashCode(callSuper = true)
  23 +@ToString(callSuper = true)
  24 +@Builder
  25 +@NoArgsConstructor
  26 +@AllArgsConstructor
  27 +public class MesWmReturnVendorDetailDO extends BaseDO {
  28 +
  29 + /**
  30 + * 编号
  31 + */
  32 + @TableId
  33 + private Long id;
  34 + // TODO @AI:使用 returnId,是不是更简洁一点;
  35 + /**
  36 + * 退货单 ID
  37 + *
  38 + * 关联 {@link MesWmReturnVendorDO#getId()}
  39 + */
  40 + private Long returnVendorId;
  41 + /**
  42 + * 行 ID
  43 + *
  44 + * 关联 {@link MesWmReturnVendorLineDO#getId()}
  45 + */
  46 + private Long lineId;
  47 + /**
  48 + * 库存记录 ID
  49 + *
  50 + * 关联 {@link MesWmMaterialStockDO#getId()}
  51 + */
  52 + private Long materialStockId;
  53 + /**
  54 + * 物料 ID
  55 + *
  56 + * 关联 {@link MesMdItemDO#getId()}
  57 + */
  58 + private Long itemId;
  59 + /**
  60 + * 退货数量
  61 + */
  62 + private BigDecimal quantity;
  63 + /**
  64 + * 批次 ID
  65 + */
  66 + private Long batchId;
  67 + /**
  68 + * 批次号
  69 + */
  70 + private String batchCode;
  71 + /**
  72 + * 仓库 ID
  73 + *
  74 + * 关联 {@link MesWmWarehouseDO#getId()}
  75 + */
  76 + private Long warehouseId;
  77 + /**
  78 + * 库区 ID
  79 + *
  80 + * 关联 {@link MesWmWarehouseLocationDO#getId()}
  81 + */
  82 + private Long locationId;
  83 + /**
  84 + * 库位 ID
  85 + *
  86 + * 关联 {@link MesWmWarehouseAreaDO#getId()}
  87 + */
  88 + private Long areaId;
  89 + /**
  90 + * 备注
  91 + */
  92 + private String remark;
  93 +
  94 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnvendor/MesWmReturnVendorLineDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
  5 +import com.baomidou.mybatisplus.annotation.KeySequence;
  6 +import com.baomidou.mybatisplus.annotation.TableId;
  7 +import com.baomidou.mybatisplus.annotation.TableName;
  8 +import lombok.*;
  9 +
  10 +import java.math.BigDecimal;
  11 +
  12 +/**
  13 + * MES 供应商退货单行 DO
  14 + */
  15 +@TableName("mes_wm_return_vendor_line")
  16 +@KeySequence("mes_wm_return_vendor_line_seq")
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = true)
  19 +@ToString(callSuper = true)
  20 +@Builder
  21 +@NoArgsConstructor
  22 +@AllArgsConstructor
  23 +public class MesWmReturnVendorLineDO extends BaseDO {
  24 +
  25 + /**
  26 + * 编号
  27 + */
  28 + @TableId
  29 + private Long id;
  30 + // TODO @AI:使用 returnId,是不是更简洁一点;
  31 + /**
  32 + * 退货单 ID
  33 + *
  34 + * 关联 {@link MesWmReturnVendorDO#getId()}
  35 + */
  36 + private Long returnVendorId;
  37 + /**
  38 + * 物料 ID
  39 + *
  40 + * 关联 {@link MesMdItemDO#getId()}
  41 + */
  42 + private Long itemId;
  43 + /**
  44 + * 退货数量
  45 + */
  46 + private BigDecimal quantity;
  47 + /**
  48 + * 批次 ID
  49 + */
  50 + private Long batchId;
  51 + /**
  52 + * 备注
  53 + */
  54 + private String remark;
  55 +
  56 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDetailDO;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * MES 供应商退货明细 Mapper
  11 + */
  12 +@Mapper
  13 +public interface MesWmReturnVendorDetailMapper extends BaseMapperX<MesWmReturnVendorDetailDO> {
  14 +
  15 + default List<MesWmReturnVendorDetailDO> selectListByLineId(Long lineId) {
  16 + return selectList(MesWmReturnVendorDetailDO::getLineId, lineId);
  17 + }
  18 +
  19 + default List<MesWmReturnVendorDetailDO> selectListByReturnVendorId(Long returnVendorId) {
  20 + return selectList(MesWmReturnVendorDetailDO::getReturnVendorId, returnVendorId);
  21 + }
  22 +
  23 + default void deleteByReturnVendorId(Long returnVendorId) {
  24 + delete(MesWmReturnVendorDetailDO::getReturnVendorId, returnVendorId);
  25 + }
  26 +
  27 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorLineMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * MES 供应商退货单行 Mapper
  14 + */
  15 +@Mapper
  16 +public interface MesWmReturnVendorLineMapper extends BaseMapperX<MesWmReturnVendorLineDO> {
  17 +
  18 + default PageResult<MesWmReturnVendorLineDO> selectPage(MesWmReturnVendorLinePageReqVO reqVO) {
  19 + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmReturnVendorLineDO>()
  20 + .eqIfPresent(MesWmReturnVendorLineDO::getReturnVendorId, reqVO.getReturnVendorId())
  21 + .orderByDesc(MesWmReturnVendorLineDO::getId));
  22 + }
  23 +
  24 + default List<MesWmReturnVendorLineDO> selectListByReturnVendorId(Long returnVendorId) {
  25 + return selectList(MesWmReturnVendorLineDO::getReturnVendorId, returnVendorId);
  26 + }
  27 +
  28 + default void deleteByReturnVendorId(Long returnVendorId) {
  29 + delete(MesWmReturnVendorLineDO::getReturnVendorId, returnVendorId);
  30 + }
  31 +
  32 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +/**
  11 + * MES 供应商退货单 Mapper
  12 + */
  13 +@Mapper
  14 +public interface MesWmReturnVendorMapper extends BaseMapperX<MesWmReturnVendorDO> {
  15 +
  16 + default PageResult<MesWmReturnVendorDO> selectPage(MesWmReturnVendorPageReqVO reqVO) {
  17 + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmReturnVendorDO>()
  18 + .likeIfPresent(MesWmReturnVendorDO::getCode, reqVO.getCode())
  19 + .likeIfPresent(MesWmReturnVendorDO::getName, reqVO.getName())
  20 + .eqIfPresent(MesWmReturnVendorDO::getVendorId, reqVO.getVendorId())
  21 + .eqIfPresent(MesWmReturnVendorDO::getStatus, reqVO.getStatus())
  22 + .betweenIfPresent(MesWmReturnVendorDO::getReturnDate, reqVO.getReturnDate())
  23 + .orderByDesc(MesWmReturnVendorDO::getId));
  24 + }
  25 +
  26 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java
... ... @@ -48,5 +48,7 @@ public interface DictTypeConstants {
48 48 String MES_WM_ITEM_RECEIPT_STATUS = "mes_wm_item_receipt_status"; // MES 采购入库单状态
49 49 String MES_WM_PRODUCT_PRODUCE_STATUS = "mes_product_produce_status"; // MES 生产入库单状态
50 50 String MES_WM_QUALITY_STATUS = "mes_wm_quality_status"; // MES 质量状态(待检/合格/不合格)
  51 + String MES_WM_RETURN_ISSUE_STATUS = "mes_return_issue_status"; // MES 生产退料单状态
  52 + String MES_WM_RETURN_ISSUE_TYPE = "mes_return_issue_type"; // MES 生产退料类型
51 53  
52 54 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -378,4 +378,22 @@ public interface ErrorCodeConstants {
378 378 ErrorCode WM_PRODUCT_PRODUCE_LINE_NOT_EXISTS = new ErrorCode(1_040_709_100, "生产入库单行不存在");
379 379 ErrorCode WM_PRODUCT_PRODUCE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_709_200, "生产入库单明细不存在");
380 380  
  381 + // ========== MES 仓库管理-生产退料单(1-040-710-000) ==========
  382 + ErrorCode WM_RETURN_ISSUE_NOT_EXISTS = new ErrorCode(1_040_710_000, "生产退料单不存在");
  383 + ErrorCode WM_RETURN_ISSUE_STATUS_INVALID = new ErrorCode(1_040_710_001, "生产退料单状态不正确,无法执行该操作");
  384 + ErrorCode WM_RETURN_ISSUE_NO_LINE = new ErrorCode(1_040_710_002, "生产退料单至少需要一条行数据");
  385 + ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_003, "退料单行数量与明细数量不一致");
  386 + ErrorCode WM_RETURN_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_710_004, "生产退料单已完成或已取消,无法取消");
  387 + ErrorCode WM_RETURN_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "生产退料单行不存在");
  388 + ErrorCode WM_RETURN_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "生产退料单明细不存在");
  389 +
  390 + // ========== MES 仓库管理-供应商退货单(1-040-711-000) ==========
  391 + ErrorCode WM_RETURN_VENDOR_NOT_EXISTS = new ErrorCode(1_040_711_000, "供应商退货单不存在");
  392 + ErrorCode WM_RETURN_VENDOR_STATUS_INVALID = new ErrorCode(1_040_711_001, "供应商退货单状态不正确,无法执行该操作");
  393 + ErrorCode WM_RETURN_VENDOR_NO_LINE = new ErrorCode(1_040_711_002, "供应商退货单至少需要一条行数据");
  394 + ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_711_003, "供应商退货单行数量与明细数量不一致");
  395 + ErrorCode WM_RETURN_VENDOR_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_711_004, "供应商退货单已完成或已取消,无法取消");
  396 + ErrorCode WM_RETURN_VENDOR_LINE_NOT_EXISTS = new ErrorCode(1_040_711_100, "供应商退货单行不存在");
  397 + ErrorCode WM_RETURN_VENDOR_DETAIL_NOT_EXISTS = new ErrorCode(1_040_711_200, "供应商退货单明细不存在");
  398 +
381 399 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorDetailService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.detail.MesWmReturnVendorDetailSaveReqVO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDetailDO;
  5 +import jakarta.validation.Valid;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * MES 供应商退货明细 Service 接口
  11 + */
  12 +public interface MesWmReturnVendorDetailService {
  13 +
  14 + /**
  15 + * 创建供应商退货明细
  16 + *
  17 + * @param createReqVO 创建信息
  18 + * @return 编号
  19 + */
  20 + Long createReturnVendorDetail(@Valid MesWmReturnVendorDetailSaveReqVO createReqVO);
  21 +
  22 + /**
  23 + * 更新供应商退货明细
  24 + *
  25 + * @param updateReqVO 更新信息
  26 + */
  27 + void updateReturnVendorDetail(@Valid MesWmReturnVendorDetailSaveReqVO updateReqVO);
  28 +
  29 + /**
  30 + * 删除供应商退货明细
  31 + *
  32 + * @param id 编号
  33 + */
  34 + void deleteReturnVendorDetail(Long id);
  35 +
  36 + /**
  37 + * 获得供应商退货明细
  38 + *
  39 + * @param id 编号
  40 + * @return 供应商退货明细
  41 + */
  42 + MesWmReturnVendorDetailDO getReturnVendorDetail(Long id);
  43 +
  44 + /**
  45 + * 根据行ID获取明细列表
  46 + *
  47 + * @param lineId 行ID
  48 + * @return 明细列表
  49 + */
  50 + List<MesWmReturnVendorDetailDO> getReturnVendorDetailListByLineId(Long lineId);
  51 +
  52 + /**
  53 + * 根据退货单ID获取明细列表
  54 + *
  55 + * @param returnVendorId 退货单ID
  56 + * @return 明细列表
  57 + */
  58 + List<MesWmReturnVendorDetailDO> getReturnVendorDetailListByReturnVendorId(Long returnVendorId);
  59 +
  60 + /**
  61 + * 根据退货单ID删除明细
  62 + *
  63 + * @param returnVendorId 退货单ID
  64 + */
  65 + void deleteReturnVendorDetailByReturnVendorId(Long returnVendorId);
  66 +
  67 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorDetailServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.detail.MesWmReturnVendorDetailSaveReqVO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDetailDO;
  6 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorDetailMapper;
  7 +import jakarta.annotation.Resource;
  8 +import org.springframework.context.annotation.Lazy;
  9 +import org.springframework.stereotype.Service;
  10 +import org.springframework.validation.annotation.Validated;
  11 +
  12 +import java.util.List;
  13 +
  14 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  15 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_DETAIL_NOT_EXISTS;
  16 +
  17 +/**
  18 + * MES 供应商退货明细 Service 实现类
  19 + */
  20 +@Service
  21 +@Validated
  22 +public class MesWmReturnVendorDetailServiceImpl implements MesWmReturnVendorDetailService {
  23 +
  24 + @Resource
  25 + private MesWmReturnVendorDetailMapper returnVendorDetailMapper;
  26 +
  27 + @Resource
  28 + @Lazy
  29 + private MesWmReturnVendorLineService returnVendorLineService;
  30 +
  31 + @Override
  32 + public Long createReturnVendorDetail(MesWmReturnVendorDetailSaveReqVO createReqVO) {
  33 + // 校验父数据存在
  34 + returnVendorLineService.validateReturnVendorLineExists(createReqVO.getLineId());
  35 + // TODO @AI:item 存在
  36 +
  37 + // 插入
  38 + MesWmReturnVendorDetailDO detail = BeanUtils.toBean(createReqVO, MesWmReturnVendorDetailDO.class);
  39 + returnVendorDetailMapper.insert(detail);
  40 + return detail.getId();
  41 + }
  42 +
  43 + @Override
  44 + public void updateReturnVendorDetail(MesWmReturnVendorDetailSaveReqVO updateReqVO) {
  45 + // 校验存在
  46 + validateReturnVendorDetailExists(updateReqVO.getId());
  47 + // 校验父数据存在
  48 + returnVendorLineService.validateReturnVendorLineExists(updateReqVO.getLineId());
  49 + // TODO @AI:item 存在
  50 +
  51 + // 更新
  52 + MesWmReturnVendorDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorDetailDO.class);
  53 + returnVendorDetailMapper.updateById(updateObj);
  54 + }
  55 +
  56 + @Override
  57 + public void deleteReturnVendorDetail(Long id) {
  58 + // 校验存在
  59 + validateReturnVendorDetailExists(id);
  60 + // 删除
  61 + returnVendorDetailMapper.deleteById(id);
  62 + }
  63 +
  64 + @Override
  65 + public MesWmReturnVendorDetailDO getReturnVendorDetail(Long id) {
  66 + return returnVendorDetailMapper.selectById(id);
  67 + }
  68 +
  69 + @Override
  70 + public List<MesWmReturnVendorDetailDO> getReturnVendorDetailListByLineId(Long lineId) {
  71 + return returnVendorDetailMapper.selectListByLineId(lineId);
  72 + }
  73 +
  74 + @Override
  75 + public List<MesWmReturnVendorDetailDO> getReturnVendorDetailListByReturnVendorId(Long returnVendorId) {
  76 + return returnVendorDetailMapper.selectListByReturnVendorId(returnVendorId);
  77 + }
  78 +
  79 + @Override
  80 + public void deleteReturnVendorDetailByReturnVendorId(Long returnVendorId) {
  81 + returnVendorDetailMapper.deleteByReturnVendorId(returnVendorId);
  82 + }
  83 +
  84 + private void validateReturnVendorDetailExists(Long id) {
  85 + if (returnVendorDetailMapper.selectById(id) == null) {
  86 + throw exception(WM_RETURN_VENDOR_DETAIL_NOT_EXISTS);
  87 + }
  88 + }
  89 +
  90 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * MES 供应商退货单行 Service 接口
  13 + */
  14 +public interface MesWmReturnVendorLineService {
  15 +
  16 + /**
  17 + * 创建供应商退货单行
  18 + *
  19 + * @param createReqVO 创建信息
  20 + * @return 编号
  21 + */
  22 + Long createReturnVendorLine(@Valid MesWmReturnVendorLineSaveReqVO createReqVO);
  23 +
  24 + /**
  25 + * 更新供应商退货单行
  26 + *
  27 + * @param updateReqVO 更新信息
  28 + */
  29 + void updateReturnVendorLine(@Valid MesWmReturnVendorLineSaveReqVO updateReqVO);
  30 +
  31 + /**
  32 + * 删除供应商退货单行
  33 + *
  34 + * @param id 编号
  35 + */
  36 + void deleteReturnVendorLine(Long id);
  37 +
  38 + /**
  39 + * 获得供应商退货单行
  40 + *
  41 + * @param id 编号
  42 + * @return 供应商退货单行
  43 + */
  44 + MesWmReturnVendorLineDO getReturnVendorLine(Long id);
  45 +
  46 + /**
  47 + * 获得供应商退货单行分页
  48 + *
  49 + * @param pageReqVO 分页查询
  50 + * @return 供应商退货单行分页
  51 + */
  52 + PageResult<MesWmReturnVendorLineDO> getReturnVendorLinePage(MesWmReturnVendorLinePageReqVO pageReqVO);
  53 +
  54 + /**
  55 + * 根据退货单ID获取行列表
  56 + *
  57 + * @param returnVendorId 退货单ID
  58 + * @return 行列表
  59 + */
  60 + List<MesWmReturnVendorLineDO> getReturnVendorLineListByReturnVendorId(Long returnVendorId);
  61 +
  62 + /**
  63 + * 根据退货单ID删除行
  64 + *
  65 + * @param returnVendorId 退货单ID
  66 + */
  67 + void deleteReturnVendorLineByReturnVendorId(Long returnVendorId);
  68 +
  69 + /**
  70 + * 校验供应商退货单行是否存在
  71 + *
  72 + * @param id 编号
  73 + * @return 供应商退货单行
  74 + */
  75 + MesWmReturnVendorLineDO validateReturnVendorLineExists(Long id);
  76 +
  77 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper;
  9 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  10 +import jakarta.annotation.Resource;
  11 +import org.springframework.context.annotation.Lazy;
  12 +import org.springframework.stereotype.Service;
  13 +import org.springframework.validation.annotation.Validated;
  14 +
  15 +import java.util.List;
  16 +
  17 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  18 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_LINE_NOT_EXISTS;
  19 +
  20 +/**
  21 + * MES 供应商退货单行 Service 实现类
  22 + */
  23 +@Service
  24 +@Validated
  25 +public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineService {
  26 +
  27 + @Resource
  28 + private MesWmReturnVendorLineMapper returnVendorLineMapper;
  29 +
  30 + @Resource
  31 + @Lazy
  32 + private MesWmReturnVendorService returnVendorService;
  33 + @Resource
  34 + private MesMdItemService itemService;
  35 +
  36 + @Override
  37 + public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) {
  38 + // 校验父数据存在
  39 + returnVendorService.validateReturnVendorExists(createReqVO.getReturnVendorId());
  40 + // 校验物料存在
  41 + itemService.validateItemExists(createReqVO.getItemId());
  42 +
  43 + // 插入
  44 + MesWmReturnVendorLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnVendorLineDO.class);
  45 + returnVendorLineMapper.insert(line);
  46 + return line.getId();
  47 + }
  48 +
  49 + @Override
  50 + public void updateReturnVendorLine(MesWmReturnVendorLineSaveReqVO updateReqVO) {
  51 + // 校验存在
  52 + validateReturnVendorLineExists(updateReqVO.getId());
  53 + // 校验父数据存在
  54 + returnVendorService.validateReturnVendorExists(updateReqVO.getReturnVendorId());
  55 + // 校验物料存在
  56 + itemService.validateItemExists(updateReqVO.getItemId());
  57 +
  58 + // 更新
  59 + MesWmReturnVendorLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorLineDO.class);
  60 + returnVendorLineMapper.updateById(updateObj);
  61 + }
  62 +
  63 + @Override
  64 + public void deleteReturnVendorLine(Long id) {
  65 + // 校验存在
  66 + validateReturnVendorLineExists(id);
  67 + // 删除
  68 + returnVendorLineMapper.deleteById(id);
  69 + }
  70 +
  71 + @Override
  72 + public MesWmReturnVendorLineDO getReturnVendorLine(Long id) {
  73 + return returnVendorLineMapper.selectById(id);
  74 + }
  75 +
  76 + @Override
  77 + public PageResult<MesWmReturnVendorLineDO> getReturnVendorLinePage(MesWmReturnVendorLinePageReqVO pageReqVO) {
  78 + return returnVendorLineMapper.selectPage(pageReqVO);
  79 + }
  80 +
  81 + @Override
  82 + public List<MesWmReturnVendorLineDO> getReturnVendorLineListByReturnVendorId(Long returnVendorId) {
  83 + return returnVendorLineMapper.selectListByReturnVendorId(returnVendorId);
  84 + }
  85 +
  86 + @Override
  87 + public void deleteReturnVendorLineByReturnVendorId(Long returnVendorId) {
  88 + returnVendorLineMapper.deleteByReturnVendorId(returnVendorId);
  89 + }
  90 +
  91 + @Override
  92 + public MesWmReturnVendorLineDO validateReturnVendorLineExists(Long id) {
  93 + MesWmReturnVendorLineDO line = returnVendorLineMapper.selectById(id);
  94 + if (line == null) {
  95 + throw exception(WM_RETURN_VENDOR_LINE_NOT_EXISTS);
  96 + }
  97 + return line;
  98 + }
  99 +
  100 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +/**
  10 + * MES 供应商退货单 Service 接口
  11 + */
  12 +public interface MesWmReturnVendorService {
  13 +
  14 + /**
  15 + * 创建供应商退货单
  16 + *
  17 + * @param createReqVO 创建信息
  18 + * @return 编号
  19 + */
  20 + Long createReturnVendor(@Valid MesWmReturnVendorSaveReqVO createReqVO);
  21 +
  22 + /**
  23 + * 修改供应商退货单
  24 + *
  25 + * @param updateReqVO 修改信息
  26 + */
  27 + void updateReturnVendor(@Valid MesWmReturnVendorSaveReqVO updateReqVO);
  28 +
  29 + /**
  30 + * 删除供应商退货单
  31 + *
  32 + * @param id 编号
  33 + */
  34 + void deleteReturnVendor(Long id);
  35 +
  36 + /**
  37 + * 获得供应商退货单
  38 + *
  39 + * @param id 编号
  40 + * @return 供应商退货单
  41 + */
  42 + MesWmReturnVendorDO getReturnVendor(Long id);
  43 +
  44 + /**
  45 + * 获得供应商退货单分页
  46 + *
  47 + * @param pageReqVO 分页参数
  48 + * @return 供应商退货单分页
  49 + */
  50 + PageResult<MesWmReturnVendorDO> getReturnVendorPage(MesWmReturnVendorPageReqVO pageReqVO);
  51 +
  52 + /**
  53 + * 校验供应商退货单是否存在
  54 + *
  55 + * @param id 编号
  56 + * @return 供应商退货单
  57 + */
  58 + MesWmReturnVendorDO validateReturnVendorExists(Long id);
  59 +
  60 + /**
  61 + * 提交供应商退货单(草稿 -> 待拣货)
  62 + *
  63 + * @param id 编号
  64 + */
  65 + void submitReturnVendor(Long id);
  66 +
  67 + /**
  68 + * 执行拣货(待拣货 -> 待执行退货)
  69 + *
  70 + * @param id 编号
  71 + */
  72 + void stockReturnVendor(Long id);
  73 +
  74 + /**
  75 + * 执行退货/出库(待执行退货 -> 已完成),更新库存台账
  76 + *
  77 + * @param id 编号
  78 + */
  79 + void finishReturnVendor(Long id);
  80 +
  81 + /**
  82 + * 取消供应商退货单(任意非已完成/已取消状态 -> 已取消)
  83 + *
  84 + * @param id 编号
  85 + */
  86 + void cancelReturnVendor(Long id);
  87 +
  88 + /**
  89 + * 校验供应商退货单的数量:每行明细数量之和是否等于行退货数量
  90 + *
  91 + * @param id 编号
  92 + * @return 是否全部一致
  93 + */
  94 + Boolean checkReturnVendorQuantity(Long id);
  95 +
  96 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.returnvendor;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDetailDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
  14 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorMapper;
  15 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnVendorStatusEnum;
  16 +import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService;
  17 +import jakarta.annotation.Resource;
  18 +import org.springframework.stereotype.Service;
  19 +import org.springframework.transaction.annotation.Transactional;
  20 +import org.springframework.validation.annotation.Validated;
  21 +
  22 +import java.math.BigDecimal;
  23 +import java.util.List;
  24 +
  25 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  26 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  27 +
  28 +/**
  29 + * MES 供应商退货单 Service 实现类
  30 + */
  31 +@Service
  32 +@Validated
  33 +public class MesWmReturnVendorServiceImpl implements MesWmReturnVendorService {
  34 +
  35 + @Resource
  36 + private MesWmReturnVendorMapper returnVendorMapper;
  37 +
  38 + @Resource
  39 + private MesWmReturnVendorLineService returnVendorLineService;
  40 + @Resource
  41 + private MesWmReturnVendorDetailService returnVendorDetailService;
  42 + @Resource
  43 + private MesMdVendorService vendorService;
  44 +
  45 + @Override
  46 + @Transactional(rollbackFor = Exception.class)
  47 + public Long createReturnVendor(MesWmReturnVendorSaveReqVO createReqVO) {
  48 + // 1. 校验关联数据
  49 + vendorService.validateVendorExists(createReqVO.getVendorId());
  50 +
  51 + // 2. 插入主表
  52 + MesWmReturnVendorDO returnVendor = BeanUtils.toBean(createReqVO, MesWmReturnVendorDO.class);
  53 + returnVendor.setStatus(MesWmReturnVendorStatusEnum.PREPARE.getStatus());
  54 + returnVendorMapper.insert(returnVendor);
  55 + return returnVendor.getId();
  56 + }
  57 +
  58 + @Override
  59 + @Transactional(rollbackFor = Exception.class)
  60 + public void updateReturnVendor(MesWmReturnVendorSaveReqVO updateReqVO) {
  61 + // 1.1 校验存在 + 准备中状态
  62 + validateReturnVendorExistsAndPrepare(updateReqVO.getId());
  63 + // 1.2 校验关联数据
  64 + vendorService.validateVendorExists(updateReqVO.getVendorId());
  65 +
  66 + // 2. 更新主表
  67 + MesWmReturnVendorDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorDO.class);
  68 + returnVendorMapper.updateById(updateObj);
  69 + }
  70 +
  71 + @Override
  72 + @Transactional(rollbackFor = Exception.class)
  73 + public void deleteReturnVendor(Long id) {
  74 + // 1. 校验存在 + 准备中状态
  75 + validateReturnVendorExistsAndPrepare(id);
  76 +
  77 + // 2.1 级联删除明细
  78 + returnVendorDetailService.deleteReturnVendorDetailByReturnVendorId(id);
  79 + // 2.2 级联删除行
  80 + returnVendorLineService.deleteReturnVendorLineByReturnVendorId(id);
  81 + // 2.3 删除主表
  82 + returnVendorMapper.deleteById(id);
  83 + }
  84 +
  85 + @Override
  86 + public MesWmReturnVendorDO getReturnVendor(Long id) {
  87 + return returnVendorMapper.selectById(id);
  88 + }
  89 +
  90 + @Override
  91 + public PageResult<MesWmReturnVendorDO> getReturnVendorPage(MesWmReturnVendorPageReqVO pageReqVO) {
  92 + return returnVendorMapper.selectPage(pageReqVO);
  93 + }
  94 +
  95 + @Override
  96 + @Transactional(rollbackFor = Exception.class)
  97 + public void submitReturnVendor(Long id) {
  98 + // 校验存在 + 草稿状态
  99 + validateReturnVendorExistsAndPrepare(id);
  100 + // 校验至少有一条行
  101 + List<MesWmReturnVendorLineDO> lines = returnVendorLineService.getReturnVendorLineListByReturnVendorId(id);
  102 + if (CollUtil.isEmpty(lines)) {
  103 + throw exception(WM_RETURN_VENDOR_NO_LINE);
  104 + }
  105 +
  106 + // 提交(草稿 -> 待拣货)
  107 + returnVendorMapper.updateById(new MesWmReturnVendorDO()
  108 + .setId(id).setStatus(MesWmReturnVendorStatusEnum.APPROVING.getStatus()));
  109 + }
  110 +
  111 + @Override
  112 + @Transactional(rollbackFor = Exception.class)
  113 + public void stockReturnVendor(Long id) {
  114 + // 校验存在
  115 + MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id);
  116 + if (ObjUtil.notEqual(MesWmReturnVendorStatusEnum.APPROVING.getStatus(), returnVendor.getStatus())) {
  117 + throw exception(WM_RETURN_VENDOR_STATUS_INVALID);
  118 + }
  119 + // 执行拣货(待拣货 -> 待执行退货)
  120 + returnVendorMapper.updateById(new MesWmReturnVendorDO()
  121 + .setId(id).setStatus(MesWmReturnVendorStatusEnum.APPROVED.getStatus()));
  122 + }
  123 +
  124 + @Override
  125 + @Transactional(rollbackFor = Exception.class)
  126 + public void finishReturnVendor(Long id) {
  127 + // 校验存在
  128 + MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id);
  129 + if (ObjUtil.notEqual(MesWmReturnVendorStatusEnum.APPROVED.getStatus(), returnVendor.getStatus())) {
  130 + throw exception(WM_RETURN_VENDOR_STATUS_INVALID);
  131 + }
  132 +
  133 + // 遍历所有明细,更新库存台账(扣减库存)
  134 + // TODO @芋艿:【后续在弄】这里可能有点问题;缺少库存更新;后面在弄;
  135 + List<MesWmReturnVendorDetailDO> details = returnVendorDetailService.getReturnVendorDetailListByReturnVendorId(id);
  136 + for (MesWmReturnVendorDetailDO detail : details) {
  137 + // materialStockService.decreaseStock(
  138 + // detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(),
  139 + // detail.getBatchId(), detail.getQuantity(), null, null, null);
  140 + }
  141 +
  142 + // 更新退货单状态
  143 + returnVendorMapper.updateById(new MesWmReturnVendorDO()
  144 + .setId(id).setStatus(MesWmReturnVendorStatusEnum.FINISHED.getStatus()));
  145 + }
  146 +
  147 + @Override
  148 + @Transactional(rollbackFor = Exception.class)
  149 + public void cancelReturnVendor(Long id) {
  150 + // 校验存在
  151 + MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id);
  152 + // 已完成和已取消不允许取消
  153 + if (ObjectUtils.equalsAny(returnVendor.getStatus(),
  154 + MesWmReturnVendorStatusEnum.FINISHED.getStatus(),
  155 + MesWmReturnVendorStatusEnum.CANCELED.getStatus())) {
  156 + throw exception(WM_RETURN_VENDOR_CANCEL_NOT_ALLOWED);
  157 + }
  158 +
  159 + // 取消
  160 + returnVendorMapper.updateById(new MesWmReturnVendorDO()
  161 + .setId(id).setStatus(MesWmReturnVendorStatusEnum.CANCELED.getStatus()));
  162 + }
  163 +
  164 + @Override
  165 + public Boolean checkReturnVendorQuantity(Long id) {
  166 + List<MesWmReturnVendorLineDO> lines = returnVendorLineService.getReturnVendorLineListByReturnVendorId(id);
  167 + for (MesWmReturnVendorLineDO line : lines) {
  168 + List<MesWmReturnVendorDetailDO> details = returnVendorDetailService.getReturnVendorDetailListByLineId(line.getId());
  169 + BigDecimal totalDetailQty = CollectionUtils.getSumValue(details,
  170 + MesWmReturnVendorDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO);
  171 + if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) {
  172 + return false;
  173 + }
  174 + }
  175 + return true;
  176 + }
  177 +
  178 + @Override
  179 + public MesWmReturnVendorDO validateReturnVendorExists(Long id) {
  180 + MesWmReturnVendorDO returnVendor = returnVendorMapper.selectById(id);
  181 + if (returnVendor == null) {
  182 + throw exception(WM_RETURN_VENDOR_NOT_EXISTS);
  183 + }
  184 + return returnVendor;
  185 + }
  186 +
  187 + /**
  188 + * 校验供应商退货单存在且为准备中状态
  189 + */
  190 + private MesWmReturnVendorDO validateReturnVendorExistsAndPrepare(Long id) {
  191 + MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id);
  192 + if (ObjUtil.notEqual(MesWmReturnVendorStatusEnum.PREPARE.getStatus(), returnVendor.getStatus())) {
  193 + throw exception(WM_RETURN_VENDOR_STATUS_INVALID);
  194 + }
  195 + return returnVendor;
  196 + }
  197 +
  198 +}
... ...