Commit f004611c76fe78c772b854d05236f4be735e5a3e

Authored by YunaiV
1 parent 07ab5ae4

✨ feat(mes): 添加转移单及转移单行相关功能和数据结构

新增转移单及转移单行的相关数据对象、服务接口和控制器,支持转移单的创建、修改、删除和查询功能。同时,添加了转移单状态和类型的枚举,完善了相关的 API 接口。

- 添加 MesWmTransferDO、MesWmTransferLineDO、MesWmTransferDetailDO 数据对象
- 实现 MesWmTransferService 和 MesWmTransferLineService 接口
- 新增 MesWmTransferController 和 MesWmTransferLineController 控制器
- 更新相关的 API 接口文档
Showing 27 changed files with 1619 additions and 1 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/MesWmTransferController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferSaveReqVO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDO;
  13 +import cn.iocoder.yudao.module.mes.service.wm.transfer.MesWmTransferService;
  14 +import io.swagger.v3.oas.annotations.Operation;
  15 +import io.swagger.v3.oas.annotations.Parameter;
  16 +import io.swagger.v3.oas.annotations.tags.Tag;
  17 +import jakarta.annotation.Resource;
  18 +import jakarta.servlet.http.HttpServletResponse;
  19 +import jakarta.validation.Valid;
  20 +import org.springframework.security.access.prepost.PreAuthorize;
  21 +import org.springframework.validation.annotation.Validated;
  22 +import org.springframework.web.bind.annotation.*;
  23 +
  24 +import java.io.IOException;
  25 +
  26 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  27 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  28 +
  29 +@Tag(name = "管理后台 - MES 转移单")
  30 +@RestController
  31 +@RequestMapping("/mes/wm/transfer")
  32 +@Validated
  33 +public class MesWmTransferController {
  34 +
  35 + @Resource
  36 + private MesWmTransferService transferService;
  37 +
  38 + @PostMapping("/create")
  39 + @Operation(summary = "创建转移单")
  40 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:create')")
  41 + public CommonResult<Long> createTransfer(@Valid @RequestBody MesWmTransferSaveReqVO createReqVO) {
  42 + return success(transferService.createTransfer(createReqVO));
  43 + }
  44 +
  45 + @PutMapping("/update")
  46 + @Operation(summary = "修改转移单")
  47 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  48 + public CommonResult<Boolean> updateTransfer(@Valid @RequestBody MesWmTransferSaveReqVO updateReqVO) {
  49 + transferService.updateTransfer(updateReqVO);
  50 + return success(true);
  51 + }
  52 +
  53 + @DeleteMapping("/delete")
  54 + @Operation(summary = "删除转移单")
  55 + @Parameter(name = "id", description = "编号", required = true)
  56 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:delete')")
  57 + public CommonResult<Boolean> deleteTransfer(@RequestParam("id") Long id) {
  58 + transferService.deleteTransfer(id);
  59 + return success(true);
  60 + }
  61 +
  62 + @GetMapping("/get")
  63 + @Operation(summary = "获得转移单")
  64 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  65 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  66 + public CommonResult<MesWmTransferRespVO> getTransfer(@RequestParam("id") Long id) {
  67 + MesWmTransferDO transfer = transferService.getTransfer(id);
  68 + return success(BeanUtils.toBean(transfer, MesWmTransferRespVO.class));
  69 + }
  70 +
  71 + @GetMapping("/page")
  72 + @Operation(summary = "获得转移单分页")
  73 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  74 + public CommonResult<PageResult<MesWmTransferRespVO>> getTransferPage(
  75 + @Valid MesWmTransferPageReqVO pageReqVO) {
  76 + PageResult<MesWmTransferDO> pageResult = transferService.getTransferPage(pageReqVO);
  77 + return success(BeanUtils.toBean(pageResult, MesWmTransferRespVO.class));
  78 + }
  79 +
  80 + @GetMapping("/export-excel")
  81 + @Operation(summary = "导出转移单 Excel")
  82 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:export')")
  83 + @ApiAccessLog(operateType = EXPORT)
  84 + public void exportTransferExcel(@Valid MesWmTransferPageReqVO pageReqVO,
  85 + HttpServletResponse response) throws IOException {
  86 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  87 + PageResult<MesWmTransferDO> pageResult = transferService.getTransferPage(pageReqVO);
  88 + ExcelUtils.write(response, "转移单.xls", "数据", MesWmTransferRespVO.class,
  89 + BeanUtils.toBean(pageResult.getList(), MesWmTransferRespVO.class));
  90 + }
  91 +
  92 + @PutMapping("/submit")
  93 + @Operation(summary = "提交转移单")
  94 + @Parameter(name = "id", description = "编号", required = true)
  95 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  96 + public CommonResult<Boolean> submitTransfer(@RequestParam("id") Long id) {
  97 + transferService.submitTransfer(id);
  98 + return success(true);
  99 + }
  100 +
  101 + @PutMapping("/confirm")
  102 + @Operation(summary = "确认转移单")
  103 + @Parameter(name = "id", description = "编号", required = true)
  104 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  105 + public CommonResult<Boolean> confirmTransfer(@RequestParam("id") Long id) {
  106 + transferService.confirmTransfer(id);
  107 + return success(true);
  108 + }
  109 +
  110 + @PutMapping("/finish")
  111 + @Operation(summary = "完成转移单")
  112 + @Parameter(name = "id", description = "编号", required = true)
  113 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:finish')")
  114 + public CommonResult<Boolean> finishTransfer(@RequestParam("id") Long id) {
  115 + transferService.finishTransfer(id);
  116 + return success(true);
  117 + }
  118 +
  119 + @PutMapping("/cancel")
  120 + @Operation(summary = "取消转移单")
  121 + @Parameter(name = "id", description = "编号", required = true)
  122 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  123 + public CommonResult<Boolean> cancelTransfer(@RequestParam("id") Long id) {
  124 + transferService.cancelTransfer(id);
  125 + return success(true);
  126 + }
  127 +
  128 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/MesWmTransferDetailController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail.MesWmTransferDetailRespVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail.MesWmTransferDetailSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDetailDO;
  8 +import cn.iocoder.yudao.module.mes.service.wm.transfer.MesWmTransferDetailService;
  9 +import io.swagger.v3.oas.annotations.Operation;
  10 +import io.swagger.v3.oas.annotations.Parameter;
  11 +import io.swagger.v3.oas.annotations.tags.Tag;
  12 +import jakarta.annotation.Resource;
  13 +import jakarta.validation.Valid;
  14 +import org.springframework.security.access.prepost.PreAuthorize;
  15 +import org.springframework.validation.annotation.Validated;
  16 +import org.springframework.web.bind.annotation.*;
  17 +
  18 +import java.util.List;
  19 +
  20 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  21 +
  22 +@Tag(name = "管理后台 - MES 调拨明细")
  23 +@RestController
  24 +@RequestMapping("/mes/wm/transfer-detail")
  25 +@Validated
  26 +public class MesWmTransferDetailController {
  27 +
  28 + @Resource
  29 + private MesWmTransferDetailService transferDetailService;
  30 +
  31 + @PostMapping("/create")
  32 + @Operation(summary = "创建调拨明细")
  33 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:create')")
  34 + public CommonResult<Long> createTransferDetail(@Valid @RequestBody MesWmTransferDetailSaveReqVO createReqVO) {
  35 + return success(transferDetailService.createTransferDetail(createReqVO));
  36 + }
  37 +
  38 + @PutMapping("/update")
  39 + @Operation(summary = "修改调拨明细")
  40 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  41 + public CommonResult<Boolean> updateTransferDetail(@Valid @RequestBody MesWmTransferDetailSaveReqVO updateReqVO) {
  42 + transferDetailService.updateTransferDetail(updateReqVO);
  43 + return success(true);
  44 + }
  45 +
  46 + @DeleteMapping("/delete")
  47 + @Operation(summary = "删除调拨明细")
  48 + @Parameter(name = "id", description = "编号", required = true)
  49 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:delete')")
  50 + public CommonResult<Boolean> deleteTransferDetail(@RequestParam("id") Long id) {
  51 + transferDetailService.deleteTransferDetail(id);
  52 + return success(true);
  53 + }
  54 +
  55 + @GetMapping("/get")
  56 + @Operation(summary = "获得调拨明细")
  57 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  58 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  59 + public CommonResult<MesWmTransferDetailRespVO> getTransferDetail(@RequestParam("id") Long id) {
  60 + MesWmTransferDetailDO detail = transferDetailService.getTransferDetail(id);
  61 + return success(BeanUtils.toBean(detail, MesWmTransferDetailRespVO.class));
  62 + }
  63 +
  64 + @GetMapping("/list-by-line")
  65 + @Operation(summary = "获得调拨明细列表(按行编号)")
  66 + @Parameter(name = "lineId", description = "行编号", required = true, example = "1024")
  67 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  68 + public CommonResult<List<MesWmTransferDetailRespVO>> getTransferDetailListByLineId(
  69 + @RequestParam("lineId") Long lineId) {
  70 + List<MesWmTransferDetailDO> list = transferDetailService.getTransferDetailListByLineId(lineId);
  71 + return success(BeanUtils.toBean(list, MesWmTransferDetailRespVO.class));
  72 + }
  73 +
  74 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/MesWmTransferLineController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineRespVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
  8 +import cn.iocoder.yudao.module.mes.service.wm.transfer.MesWmTransferLineService;
  9 +import io.swagger.v3.oas.annotations.Operation;
  10 +import io.swagger.v3.oas.annotations.Parameter;
  11 +import io.swagger.v3.oas.annotations.tags.Tag;
  12 +import jakarta.annotation.Resource;
  13 +import jakarta.validation.Valid;
  14 +import org.springframework.security.access.prepost.PreAuthorize;
  15 +import org.springframework.validation.annotation.Validated;
  16 +import org.springframework.web.bind.annotation.*;
  17 +
  18 +import java.util.List;
  19 +
  20 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  21 +
  22 +@Tag(name = "管理后台 - MES 转移单行")
  23 +@RestController
  24 +@RequestMapping("/mes/wm/transfer-line")
  25 +@Validated
  26 +public class MesWmTransferLineController {
  27 +
  28 + @Resource
  29 + private MesWmTransferLineService transferLineService;
  30 +
  31 + @PostMapping("/create")
  32 + @Operation(summary = "创建转移单行")
  33 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:create')")
  34 + public CommonResult<Long> createTransferLine(@Valid @RequestBody MesWmTransferLineSaveReqVO createReqVO) {
  35 + return success(transferLineService.createTransferLine(createReqVO));
  36 + }
  37 +
  38 + @PutMapping("/update")
  39 + @Operation(summary = "修改转移单行")
  40 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:update')")
  41 + public CommonResult<Boolean> updateTransferLine(@Valid @RequestBody MesWmTransferLineSaveReqVO updateReqVO) {
  42 + transferLineService.updateTransferLine(updateReqVO);
  43 + return success(true);
  44 + }
  45 +
  46 + @DeleteMapping("/delete")
  47 + @Operation(summary = "删除转移单行")
  48 + @Parameter(name = "id", description = "编号", required = true)
  49 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:delete')")
  50 + public CommonResult<Boolean> deleteTransferLine(@RequestParam("id") Long id) {
  51 + transferLineService.deleteTransferLine(id);
  52 + return success(true);
  53 + }
  54 +
  55 + @GetMapping("/get")
  56 + @Operation(summary = "获得转移单行")
  57 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  58 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  59 + public CommonResult<MesWmTransferLineRespVO> getTransferLine(@RequestParam("id") Long id) {
  60 + MesWmTransferLineDO line = transferLineService.getTransferLine(id);
  61 + return success(BeanUtils.toBean(line, MesWmTransferLineRespVO.class));
  62 + }
  63 +
  64 + @GetMapping("/list")
  65 + @Operation(summary = "获得转移单行列表")
  66 + @Parameter(name = "transferId", description = "转移单编号", required = true)
  67 + @PreAuthorize("@ss.hasPermission('mes:wm-transfer:query')")
  68 + public CommonResult<List<MesWmTransferLineRespVO>> getTransferLineList(@RequestParam("transferId") Long transferId) {
  69 + List<MesWmTransferLineDO> list = transferLineService.getTransferLineListByTransferId(transferId);
  70 + return success(BeanUtils.toBean(list, MesWmTransferLineRespVO.class));
  71 + }
  72 +
  73 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/MesWmTransferPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - MES 转移单分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class MesWmTransferPageReqVO extends PageParam {
  19 +
  20 + @Schema(description = "转移单编号", example = "TR2026020001")
  21 + private String code;
  22 +
  23 + @Schema(description = "转移单名称", example = "钢板转移单")
  24 + private String name;
  25 +
  26 + @Schema(description = "转移单类型", example = "1")
  27 + private Integer type;
  28 +
  29 + @Schema(description = "转移日期")
  30 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  31 + private LocalDateTime[] transferDate;
  32 +
  33 + @Schema(description = "单据状态", example = "0")
  34 + private Integer status;
  35 +
  36 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/MesWmTransferRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.time.LocalDateTime;
  7 +
  8 +@Schema(description = "管理后台 - MES 转移单 Response VO")
  9 +@Data
  10 +public class MesWmTransferRespVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单编号", example = "TR2026020001")
  16 + private String code;
  17 +
  18 + @Schema(description = "转移单名称", example = "钢板转移单")
  19 + private String name;
  20 +
  21 + @Schema(description = "转移单类型", example = "1")
  22 + private Integer type;
  23 +
  24 + @Schema(description = "是否配送", example = "true")
  25 + private Boolean deliveryFlag;
  26 +
  27 + @Schema(description = "收货人", example = "张三")
  28 + private String recipientName;
  29 +
  30 + @Schema(description = "联系方式", example = "13800138000")
  31 + private String recipientTelephone;
  32 +
  33 + @Schema(description = "目的地", example = "上海市浦东新区")
  34 + private String destinationAddress;
  35 +
  36 + @Schema(description = "承运商", example = "顺丰速运")
  37 + private String carrier;
  38 +
  39 + @Schema(description = "运输单号", example = "SF123456789")
  40 + private String shippingNumber;
  41 +
  42 + @Schema(description = "是否已确认", example = "false")
  43 + private Boolean confirmFlag;
  44 +
  45 + @Schema(description = "转移日期")
  46 + private LocalDateTime transferDate;
  47 +
  48 + @Schema(description = "单据状态", example = "0")
  49 + private Integer status;
  50 +
  51 + @Schema(description = "备注", example = "备注信息")
  52 + private String remark;
  53 +
  54 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/MesWmTransferSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.time.LocalDateTime;
  7 +
  8 +@Schema(description = "管理后台 - MES 转移单 Save Request VO")
  9 +@Data
  10 +public class MesWmTransferSaveReqVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单编号", example = "TR2026020001")
  16 + private String code;
  17 +
  18 + @Schema(description = "转移单名称", example = "钢板转移单")
  19 + private String name;
  20 +
  21 + @Schema(description = "转移单类型", example = "1")
  22 + private Integer type;
  23 +
  24 + @Schema(description = "是否配送", example = "true")
  25 + private Boolean deliveryFlag;
  26 +
  27 + @Schema(description = "收货人", example = "张三")
  28 + private String recipientName;
  29 +
  30 + @Schema(description = "联系方式", example = "13800138000")
  31 + private String recipientTelephone;
  32 +
  33 + @Schema(description = "目的地", example = "上海市浦东新区")
  34 + private String destinationAddress;
  35 +
  36 + @Schema(description = "承运商", example = "顺丰速运")
  37 + private String carrier;
  38 +
  39 + @Schema(description = "运输单号", example = "SF123456789")
  40 + private String shippingNumber;
  41 +
  42 + @Schema(description = "是否已确认", example = "false")
  43 + private Boolean confirmFlag;
  44 +
  45 + @Schema(description = "转移日期")
  46 + private LocalDateTime transferDate;
  47 +
  48 + @Schema(description = "单据状态", example = "0")
  49 + private Integer status;
  50 +
  51 + @Schema(description = "备注", example = "备注信息")
  52 + private String remark;
  53 +
  54 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/detail/MesWmTransferDetailRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +
  8 +@Schema(description = "管理后台 - MES 调拨明细 Response VO")
  9 +@Data
  10 +public class MesWmTransferDetailRespVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单行编号", example = "1")
  16 + private Long lineId;
  17 +
  18 + @Schema(description = "转移单编号", example = "1")
  19 + private Long transferId;
  20 +
  21 + @Schema(description = "物料编号", example = "1")
  22 + private Long itemId;
  23 +
  24 + @Schema(description = "上架数量", example = "100")
  25 + private BigDecimal quantity;
  26 +
  27 + @Schema(description = "批次编号", example = "1")
  28 + private Long batchId;
  29 +
  30 + @Schema(description = "移入仓库编号", example = "1")
  31 + private Long toWarehouseId;
  32 +
  33 + @Schema(description = "移入库区编号", example = "1")
  34 + private Long toLocationId;
  35 +
  36 + @Schema(description = "移入库位编号", example = "1")
  37 + private Long toAreaId;
  38 +
  39 + @Schema(description = "备注", example = "备注信息")
  40 + private String remark;
  41 +
  42 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/detail/MesWmTransferDetailSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +
  8 +@Schema(description = "管理后台 - MES 调拨明细 Save Request VO")
  9 +@Data
  10 +public class MesWmTransferDetailSaveReqVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单行编号", example = "1")
  16 + private Long lineId;
  17 +
  18 + @Schema(description = "转移单编号", example = "1")
  19 + private Long transferId;
  20 +
  21 + @Schema(description = "物料编号", example = "1")
  22 + private Long itemId;
  23 +
  24 + @Schema(description = "上架数量", example = "100")
  25 + private BigDecimal quantity;
  26 +
  27 + @Schema(description = "批次编号", example = "1")
  28 + private Long batchId;
  29 +
  30 + @Schema(description = "移入仓库编号", example = "1")
  31 + private Long toWarehouseId;
  32 +
  33 + @Schema(description = "移入库区编号", example = "1")
  34 + private Long toLocationId;
  35 +
  36 + @Schema(description = "移入库位编号", example = "1")
  37 + private Long toAreaId;
  38 +
  39 + @Schema(description = "备注", example = "备注信息")
  40 + private String remark;
  41 +
  42 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/line/MesWmTransferLineRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +
  8 +@Schema(description = "管理后台 - MES 转移单行 Response VO")
  9 +@Data
  10 +public class MesWmTransferLineRespVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单编号", example = "1")
  16 + private Long transferId;
  17 +
  18 + @Schema(description = "库存记录编号", example = "1")
  19 + private Long materialStockId;
  20 +
  21 + @Schema(description = "物料编号", example = "1")
  22 + private Long itemId;
  23 +
  24 + @Schema(description = "转移数量", example = "100")
  25 + private BigDecimal quantity;
  26 +
  27 + @Schema(description = "批次编号", example = "1")
  28 + private Long batchId;
  29 +
  30 + @Schema(description = "移出仓库编号", example = "1")
  31 + private Long fromWarehouseId;
  32 +
  33 + @Schema(description = "移出库区编号", example = "1")
  34 + private Long fromLocationId;
  35 +
  36 + @Schema(description = "移出库位编号", example = "1")
  37 + private Long fromAreaId;
  38 +
  39 + @Schema(description = "备注", example = "备注信息")
  40 + private String remark;
  41 +
  42 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/transfer/vo/line/MesWmTransferLineSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +
  8 +@Schema(description = "管理后台 - MES 转移单行 Save Request VO")
  9 +@Data
  10 +public class MesWmTransferLineSaveReqVO {
  11 +
  12 + @Schema(description = "编号", example = "1")
  13 + private Long id;
  14 +
  15 + @Schema(description = "转移单编号", example = "1")
  16 + private Long transferId;
  17 +
  18 + @Schema(description = "库存记录编号", example = "1")
  19 + private Long materialStockId;
  20 +
  21 + @Schema(description = "物料编号", example = "1")
  22 + private Long itemId;
  23 +
  24 + @Schema(description = "转移数量", example = "100")
  25 + private BigDecimal quantity;
  26 +
  27 + @Schema(description = "批次编号", example = "1")
  28 + private Long batchId;
  29 +
  30 + @Schema(description = "移出仓库编号", example = "1")
  31 + private Long fromWarehouseId;
  32 +
  33 + @Schema(description = "移出库区编号", example = "1")
  34 + private Long fromLocationId;
  35 +
  36 + @Schema(description = "移出库位编号", example = "1")
  37 + private Long fromAreaId;
  38 +
  39 + @Schema(description = "备注", example = "备注信息")
  40 + private String remark;
  41 +
  42 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/transfer/MesWmTransferDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransferStatusEnum;
  5 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransferTypeEnum;
  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 + * @author 芋道源码
  17 + */
  18 +@TableName("mes_wm_transfer")
  19 +@KeySequence("mes_wm_transfer_seq")
  20 +@Data
  21 +@EqualsAndHashCode(callSuper = true)
  22 +@ToString(callSuper = true)
  23 +@Builder
  24 +@NoArgsConstructor
  25 +@AllArgsConstructor
  26 +public class MesWmTransferDO extends BaseDO {
  27 +
  28 + /**
  29 + * 编号
  30 + */
  31 + @TableId
  32 + private Long id;
  33 + /**
  34 + * 转移单编号
  35 + */
  36 + private String code;
  37 + /**
  38 + * 转移单名称
  39 + */
  40 + private String name;
  41 + /**
  42 + * 转移单类型
  43 + *
  44 + * 枚举 {@link MesWmTransferTypeEnum}
  45 + */
  46 + private Integer type;
  47 +
  48 + /**
  49 + * 是否配送
  50 + */
  51 + private Boolean deliveryFlag;
  52 + /**
  53 + * 收货人
  54 + */
  55 + private String recipientName;
  56 + /**
  57 + * 联系方式
  58 + */
  59 + private String recipientTelephone;
  60 + /**
  61 + * 目的地
  62 + */
  63 + private String destinationAddress;
  64 + /**
  65 + * 承运商
  66 + */
  67 + private String carrier;
  68 + /**
  69 + * 运输单号
  70 + */
  71 + private String shippingNumber;
  72 + /**
  73 + * 是否已确认
  74 + */
  75 + private Boolean confirmFlag;
  76 +
  77 + /**
  78 + * 转移日期
  79 + */
  80 + private LocalDateTime transferDate;
  81 +
  82 + /**
  83 + * 状态
  84 + *
  85 + * 枚举 {@link MesWmTransferStatusEnum}
  86 + */
  87 + private Integer status;
  88 +
  89 + /**
  90 + * 备注
  91 + */
  92 + private String remark;
  93 +
  94 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/transfer/MesWmTransferDetailDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer;
  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 + * @author 芋道源码
  16 + */
  17 +@TableName("mes_wm_transfer_detail")
  18 +@KeySequence("mes_wm_transfer_detail_seq")
  19 +@Data
  20 +@EqualsAndHashCode(callSuper = true)
  21 +@ToString(callSuper = true)
  22 +@Builder
  23 +@NoArgsConstructor
  24 +@AllArgsConstructor
  25 +public class MesWmTransferDetailDO extends BaseDO {
  26 +
  27 + /**
  28 + * 编号
  29 + */
  30 + @TableId
  31 + private Long id;
  32 +
  33 + /**
  34 + * 转移单行编号
  35 + *
  36 + * 关联 {@link MesWmTransferLineDO#getId()}
  37 + */
  38 + private Long lineId;
  39 + /**
  40 + * 转移单编号
  41 + *
  42 + * 关联 {@link MesWmTransferDO#getId()}
  43 + */
  44 + private Long transferId;
  45 + /**
  46 + * 物料编号
  47 + *
  48 + * 关联 {@link MesMdItemDO#getId()}
  49 + */
  50 + private Long itemId;
  51 + /**
  52 + * 上架数量
  53 + */
  54 + private BigDecimal quantity;
  55 + /**
  56 + * 批次编号
  57 + */
  58 + private Long batchId;
  59 +
  60 + // TODO @AI:需要 @
  61 + /**
  62 + * 移入仓库编号
  63 + */
  64 + private Long toWarehouseId;
  65 + /**
  66 + * 移入库区编号
  67 + */
  68 + private Long toLocationId;
  69 + /**
  70 + * 移入库位编号
  71 + */
  72 + private Long toAreaId;
  73 +
  74 + /**
  75 + * 备注
  76 + */
  77 + private String remark;
  78 +
  79 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/transfer/MesWmTransferLineDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer;
  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 + * @author 芋道源码
  16 + */
  17 +@TableName("mes_wm_transfer_line")
  18 +@KeySequence("mes_wm_transfer_line_seq")
  19 +@Data
  20 +@EqualsAndHashCode(callSuper = true)
  21 +@ToString(callSuper = true)
  22 +@Builder
  23 +@NoArgsConstructor
  24 +@AllArgsConstructor
  25 +public class MesWmTransferLineDO extends BaseDO {
  26 +
  27 + /**
  28 + * 编号
  29 + */
  30 + @TableId
  31 + private Long id;
  32 + /**
  33 + * 转移单编号
  34 + *
  35 + * 关联 {@link MesWmTransferDO#getId()}
  36 + */
  37 + private Long transferId;
  38 + /**
  39 + * 库存记录编号
  40 + */
  41 + private Long materialStockId;
  42 + /**
  43 + * 物料编号
  44 + *
  45 + * 关联 {@link MesMdItemDO#getId()}
  46 + */
  47 + private Long itemId;
  48 + /**
  49 + * 转移数量
  50 + */
  51 + private BigDecimal quantity;
  52 + /**
  53 + * 批次编号
  54 + */
  55 + private Long batchId;
  56 +
  57 + // TODO @AI:需要 @
  58 + /**
  59 + * 移出仓库编号
  60 + */
  61 + private Long fromWarehouseId;
  62 + /**
  63 + * 移出库区编号
  64 + */
  65 + private Long fromLocationId;
  66 + /**
  67 + * 移出库位编号
  68 + */
  69 + private Long fromAreaId;
  70 +
  71 + /**
  72 + * 备注
  73 + */
  74 + private String remark;
  75 +
  76 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java
... ... @@ -16,6 +16,8 @@ import org.apache.ibatis.annotations.Mapper;
16 16 public interface MesWmPackageLineMapper extends BaseMapperX<MesWmPackageLineDO> {
17 17  
18 18 default PageResult<MesWmPackageLineDO> selectPage(MesWmPackageLinePageReqVO reqVO) {
  19 + // TODO @芋艿:需确认“父箱详情 -> 装箱清单”是否需要汇总当前箱及其所有子孙箱的明细;
  20 + // ktg-mes 当前通过 SQL + ancestors 实现聚合查询,这里现在仅按 packageId 精确查询。
19 21 return selectPage(reqVO, new LambdaQueryWrapperX<MesWmPackageLineDO>()
20 22 .eqIfPresent(MesWmPackageLineDO::getPackageId, reqVO.getPackageId())
21 23 .orderByDesc(MesWmPackageLineDO::getId));
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transfer/MesWmTransferDetailMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDetailDO;
  6 +import org.apache.ibatis.annotations.Mapper;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * MES 调拨明细 Mapper
  12 + */
  13 +@Mapper
  14 +public interface MesWmTransferDetailMapper extends BaseMapperX<MesWmTransferDetailDO> {
  15 +
  16 + default List<MesWmTransferDetailDO> selectListByLineId(Long lineId) {
  17 + return selectList(new LambdaQueryWrapperX<MesWmTransferDetailDO>()
  18 + .eq(MesWmTransferDetailDO::getLineId, lineId)
  19 + .orderByAsc(MesWmTransferDetailDO::getId));
  20 + }
  21 +
  22 + default List<MesWmTransferDetailDO> selectListByTransferId(Long transferId) {
  23 + return selectList(new LambdaQueryWrapperX<MesWmTransferDetailDO>()
  24 + .eq(MesWmTransferDetailDO::getTransferId, transferId)
  25 + .orderByAsc(MesWmTransferDetailDO::getId));
  26 + }
  27 +
  28 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transfer/MesWmTransferLineMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
  6 +import org.apache.ibatis.annotations.Mapper;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * MES 转移单行 Mapper
  12 + */
  13 +@Mapper
  14 +public interface MesWmTransferLineMapper extends BaseMapperX<MesWmTransferLineDO> {
  15 +
  16 + default List<MesWmTransferLineDO> selectListByTransferId(Long transferId) {
  17 + return selectList(new LambdaQueryWrapperX<MesWmTransferLineDO>()
  18 + .eq(MesWmTransferLineDO::getTransferId, transferId)
  19 + .orderByAsc(MesWmTransferLineDO::getId));
  20 + }
  21 +
  22 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transfer/MesWmTransferMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer;
  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.transfer.vo.MesWmTransferPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +/**
  11 + * MES 转移单 Mapper
  12 + */
  13 +@Mapper
  14 +public interface MesWmTransferMapper extends BaseMapperX<MesWmTransferDO> {
  15 +
  16 + default PageResult<MesWmTransferDO> selectPage(MesWmTransferPageReqVO reqVO) {
  17 + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmTransferDO>()
  18 + .likeIfPresent(MesWmTransferDO::getCode, reqVO.getCode())
  19 + .likeIfPresent(MesWmTransferDO::getName, reqVO.getName())
  20 + .eqIfPresent(MesWmTransferDO::getType, reqVO.getType())
  21 + .betweenIfPresent(MesWmTransferDO::getTransferDate, reqVO.getTransferDate())
  22 + .eqIfPresent(MesWmTransferDO::getStatus, reqVO.getStatus())
  23 + .orderByDesc(MesWmTransferDO::getId));
  24 + }
  25 +
  26 + default MesWmTransferDO selectByCode(String code) {
  27 + return selectOne(MesWmTransferDO::getCode, code);
  28 + }
  29 +
  30 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java
... ... @@ -52,5 +52,7 @@ public interface DictTypeConstants {
52 52 String MES_WM_RETURN_ISSUE_TYPE = "mes_return_issue_type"; // MES 生产退料类型
53 53 String MES_WM_MISC_ISSUE_TYPE = "mes_wm_misc_issue_type"; // MES 杂项出库类型
54 54 String MES_WM_MISC_ISSUE_STATUS = "mes_wm_misc_issue_status"; // MES 杂项出库单状态
  55 + String MES_WM_TRANSFER_STATUS = "mes_wm_transfer_status"; // MES 转移单状态
  56 + String MES_WM_TRANSFER_TYPE = "mes_wm_transfer_type"; // MES 转移单类型
55 57  
56 58 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -395,7 +395,18 @@ public interface ErrorCodeConstants {
395 395 ErrorCode WM_PRODUCT_PRODUCE_LINE_NOT_EXISTS = new ErrorCode(1_040_709_100, "生产入库单行不存在");
396 396 ErrorCode WM_PRODUCT_PRODUCE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_709_200, "生产入库单明细不存在");
397 397  
398   - // ========== MES 仓库管理-生产退料单(1-040-710-000) ==========
  398 + // ========== MES 仓库管理-转移调拨(1-040-710-000) ==========
  399 + ErrorCode WM_TRANSFER_NOT_EXISTS = new ErrorCode(1_040_710_000, "转移单不存在");
  400 + ErrorCode WM_TRANSFER_NOT_EDITABLE = new ErrorCode(1_040_710_001, "当前转移单状态不允许编辑");
  401 + ErrorCode WM_TRANSFER_CODE_DUPLICATE = new ErrorCode(1_040_710_002, "转移单编号已存在");
  402 + ErrorCode WM_TRANSFER_NOT_DRAFT = new ErrorCode(1_040_710_003, "只有草稿状态的转移单才可操作");
  403 + ErrorCode WM_TRANSFER_NOT_CONFIRMED = new ErrorCode(1_040_710_004, "只有待确认状态的转移单才可执行确认");
  404 + ErrorCode WM_TRANSFER_NOT_UNEXECUTE = new ErrorCode(1_040_710_005, "只有待执行状态的转移单才可完成");
  405 + ErrorCode WM_TRANSFER_ALREADY_FINISHED = new ErrorCode(1_040_710_006, "转移单已完成或已取消,无法继续操作");
  406 + ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "转移单行不存在");
  407 + ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "调拨明细不存在");
  408 +
  409 + // ========== MES 仓库管理-生产退料单(1-040-711-000) ==========
399 410 ErrorCode WM_RETURN_ISSUE_NOT_EXISTS = new ErrorCode(1_040_710_000, "生产退料单不存在");
400 411 ErrorCode WM_RETURN_ISSUE_STATUS_INVALID = new ErrorCode(1_040_710_001, "生产退料单状态不正确,无法执行该操作");
401 412 ErrorCode WM_RETURN_ISSUE_NOT_PREPARE = new ErrorCode(1_040_710_002, "只有草稿状态的退料单才可操作");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmTransferStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.wm;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants;
  5 +import lombok.AllArgsConstructor;
  6 +import lombok.Getter;
  7 +
  8 +import java.util.Arrays;
  9 +
  10 +/**
  11 + * MES 转移单状态枚举
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Getter
  16 +@AllArgsConstructor
  17 +public enum MesWmTransferStatusEnum implements ArrayValuable<Integer> {
  18 +
  19 + // TODO @AI:/Users/yunai/Java/yudao-all-in-one/ruoyi-vue-pro/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmOutsourceReceiptStatusEnum.java,增加 “对应方法”
  20 + /**
  21 + * 草稿
  22 + */
  23 + PREPARE(MesOrderStatusConstants.PREPARE, "草稿"),
  24 + /**
  25 + * 待确认(仅配送模式)
  26 + */
  27 + UNCONFIRMED(MesOrderStatusConstants.CONFIRMED, "待确认"),
  28 + /**
  29 + * 待上架
  30 + */
  31 + UNSTOCK(MesOrderStatusConstants.APPROVING, "待上架"),
  32 + /**
  33 + * 待执行
  34 + */
  35 + UNEXECUTE(MesOrderStatusConstants.APPROVED, "待执行"),
  36 + /**
  37 + * 已完成
  38 + */
  39 + FINISHED(MesOrderStatusConstants.FINISHED, "已完成"),
  40 + /**
  41 + * 已取消
  42 + */
  43 + CANCELED(MesOrderStatusConstants.CANCELLED, "已取消");
  44 +
  45 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmTransferStatusEnum::getStatus).toArray(Integer[]::new);
  46 +
  47 + /**
  48 + * 状态值
  49 + */
  50 + private final Integer status;
  51 + /**
  52 + * 状态名
  53 + */
  54 + private final String name;
  55 +
  56 + @Override
  57 + public Integer[] array() {
  58 + return ARRAYS;
  59 + }
  60 +
  61 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmTransferTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.wm;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +// TODO @AI:没有 IntArrayValuable,你检查下;应该是另外个
  10 +/**
  11 + * MES 转移单类型枚举
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Getter
  16 +@AllArgsConstructor
  17 +public enum MesWmTransferTypeEnum implements ArrayValuable<Integer> {
  18 +
  19 + /**
  20 + * 内部调拨
  21 + */
  22 + INNER(1, "内部调拨"),
  23 + /**
  24 + * 外部调拨
  25 + */
  26 + OUTER(2, "外部调拨");
  27 +
  28 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmTransferTypeEnum::getType).toArray(Integer[]::new);
  29 +
  30 + /**
  31 + * 类型值
  32 + */
  33 + private final Integer type;
  34 + /**
  35 + * 类型名
  36 + */
  37 + private final String name;
  38 +
  39 + public static MesWmTransferTypeEnum valueOf(Integer type) {
  40 + return Arrays.stream(values()).filter(e -> e.getType().equals(type)).findFirst().orElse(null);
  41 + }
  42 +
  43 + @Override
  44 + public Integer[] array() {
  45 + return ARRAYS;
  46 + }
  47 +
  48 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferDetailService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail.MesWmTransferDetailSaveReqVO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDetailDO;
  5 +import jakarta.validation.Valid;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * MES 调拨明细 Service 接口
  11 + */
  12 +public interface MesWmTransferDetailService {
  13 +
  14 + /**
  15 + * 创建调拨明细
  16 + *
  17 + * @param createReqVO 创建信息
  18 + * @return 编号
  19 + */
  20 + Long createTransferDetail(@Valid MesWmTransferDetailSaveReqVO createReqVO);
  21 +
  22 + /**
  23 + * 更新调拨明细
  24 + *
  25 + * @param updateReqVO 更新信息
  26 + */
  27 + void updateTransferDetail(@Valid MesWmTransferDetailSaveReqVO updateReqVO);
  28 +
  29 + /**
  30 + * 删除调拨明细
  31 + *
  32 + * @param id 编号
  33 + */
  34 + void deleteTransferDetail(Long id);
  35 +
  36 + /**
  37 + * 获得调拨明细
  38 + *
  39 + * @param id 编号
  40 + * @return 调拨明细
  41 + */
  42 + MesWmTransferDetailDO getTransferDetail(Long id);
  43 +
  44 + /**
  45 + * 根据行 ID 获取明细列表
  46 + *
  47 + * @param lineId 行 ID
  48 + * @return 明细列表
  49 + */
  50 + List<MesWmTransferDetailDO> getTransferDetailListByLineId(Long lineId);
  51 +
  52 + /**
  53 + * 根据转移单 ID 获取明细列表
  54 + *
  55 + * @param transferId 转移单 ID
  56 + * @return 明细列表
  57 + */
  58 + List<MesWmTransferDetailDO> getTransferDetailListByTransferId(Long transferId);
  59 +
  60 + /**
  61 + * 根据转移单 ID 删除明细
  62 + *
  63 + * @param transferId 转移单 ID
  64 + */
  65 + void deleteTransferDetailByTransferId(Long transferId);
  66 +
  67 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferDetailServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.detail.MesWmTransferDetailSaveReqVO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDetailDO;
  6 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferDetailMapper;
  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_TRANSFER_DETAIL_NOT_EXISTS;
  16 +
  17 +// TODO @AI:注释完善下
  18 +/**
  19 + * MES 调拨明细 Service 实现类
  20 + */
  21 +@Service
  22 +@Validated
  23 +public class MesWmTransferDetailServiceImpl implements MesWmTransferDetailService {
  24 +
  25 + @Resource
  26 + private MesWmTransferDetailMapper transferDetailMapper;
  27 +
  28 + @Resource
  29 + @Lazy
  30 + private MesWmTransferLineService transferLineService;
  31 +
  32 + @Override
  33 + public Long createTransferDetail(MesWmTransferDetailSaveReqVO createReqVO) {
  34 + transferLineService.validateTransferLineExists(createReqVO.getLineId());
  35 + // TODO @AI:看看还有没关联的数据要校验的;包括状态的
  36 +
  37 + MesWmTransferDetailDO detail = BeanUtils.toBean(createReqVO, MesWmTransferDetailDO.class);
  38 + transferDetailMapper.insert(detail);
  39 + return detail.getId();
  40 + }
  41 +
  42 + @Override
  43 + public void updateTransferDetail(MesWmTransferDetailSaveReqVO updateReqVO) {
  44 + validateTransferDetailExists(updateReqVO.getId());
  45 + transferLineService.validateTransferLineExists(updateReqVO.getLineId());
  46 + // TODO @AI:看看还有没关联的数据要校验的;包括状态的
  47 +
  48 + MesWmTransferDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmTransferDetailDO.class);
  49 + transferDetailMapper.updateById(updateObj);
  50 + }
  51 +
  52 + @Override
  53 + public void deleteTransferDetail(Long id) {
  54 + // TODO @AI:看看还有没关联的数据要校验的;包括状态的
  55 + validateTransferDetailExists(id);
  56 + transferDetailMapper.deleteById(id);
  57 + }
  58 +
  59 + @Override
  60 + public MesWmTransferDetailDO getTransferDetail(Long id) {
  61 + return transferDetailMapper.selectById(id);
  62 + }
  63 +
  64 + @Override
  65 + public List<MesWmTransferDetailDO> getTransferDetailListByLineId(Long lineId) {
  66 + return transferDetailMapper.selectListByLineId(lineId);
  67 + }
  68 +
  69 + @Override
  70 + public List<MesWmTransferDetailDO> getTransferDetailListByTransferId(Long transferId) {
  71 + return transferDetailMapper.selectListByTransferId(transferId);
  72 + }
  73 +
  74 + @Override
  75 + public void deleteTransferDetailByTransferId(Long transferId) {
  76 + getTransferDetailListByTransferId(transferId)
  77 + .forEach(detail -> transferDetailMapper.deleteById(detail.getId()));
  78 + }
  79 +
  80 + private void validateTransferDetailExists(Long id) {
  81 + if (transferDetailMapper.selectById(id) == null) {
  82 + throw exception(WM_TRANSFER_DETAIL_NOT_EXISTS);
  83 + }
  84 + }
  85 +
  86 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferLineService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
  5 +import jakarta.validation.Valid;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * MES 转移单行 Service 接口
  11 + */
  12 +public interface MesWmTransferLineService {
  13 +
  14 + /**
  15 + * 创建转移单行
  16 + *
  17 + * @param createReqVO 创建信息
  18 + * @return 编号
  19 + */
  20 + Long createTransferLine(@Valid MesWmTransferLineSaveReqVO createReqVO);
  21 +
  22 + /**
  23 + * 更新转移单行
  24 + *
  25 + * @param updateReqVO 更新信息
  26 + */
  27 + void updateTransferLine(@Valid MesWmTransferLineSaveReqVO updateReqVO);
  28 +
  29 + /**
  30 + * 删除转移单行
  31 + *
  32 + * @param id 编号
  33 + */
  34 + void deleteTransferLine(Long id);
  35 +
  36 + /**
  37 + * 获得转移单行
  38 + *
  39 + * @param id 编号
  40 + * @return 转移单行
  41 + */
  42 + MesWmTransferLineDO getTransferLine(Long id);
  43 +
  44 + /**
  45 + * 根据转移单 ID 获取行列表
  46 + *
  47 + * @param transferId 转移单 ID
  48 + * @return 行列表
  49 + */
  50 + List<MesWmTransferLineDO> getTransferLineListByTransferId(Long transferId);
  51 +
  52 + /**
  53 + * 根据转移单 ID 删除行
  54 + *
  55 + * @param transferId 转移单 ID
  56 + */
  57 + void deleteTransferLineByTransferId(Long transferId);
  58 +
  59 + /**
  60 + * 校验转移单行是否存在
  61 + *
  62 + * @param id 编号
  63 + * @return 转移单行
  64 + */
  65 + MesWmTransferLineDO validateTransferLineExists(Long id);
  66 +
  67 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferLineServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
  6 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferLineMapper;
  7 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  8 +import jakarta.annotation.Resource;
  9 +import org.springframework.context.annotation.Lazy;
  10 +import org.springframework.stereotype.Service;
  11 +import org.springframework.validation.annotation.Validated;
  12 +
  13 +import java.util.List;
  14 +
  15 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  16 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_NOT_EXISTS;
  17 +
  18 +// TODO @AI:注释完善下
  19 +/**
  20 + * MES 转移单行 Service 实现类
  21 + */
  22 +@Service
  23 +@Validated
  24 +public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
  25 +
  26 + @Resource
  27 + private MesWmTransferLineMapper transferLineMapper;
  28 +
  29 + @Resource
  30 + @Lazy
  31 + private MesWmTransferService transferService;
  32 + @Resource
  33 + private MesMdItemService itemService;
  34 +
  35 + @Override
  36 + public Long createTransferLine(MesWmTransferLineSaveReqVO createReqVO) {
  37 + transferService.validateTransferEditable(createReqVO.getTransferId());
  38 + itemService.validateItemExists(createReqVO.getItemId());
  39 + // TODO @AI:看看还有没关联的数据要校验的;包括状态的
  40 +
  41 + MesWmTransferLineDO line = BeanUtils.toBean(createReqVO, MesWmTransferLineDO.class);
  42 + transferLineMapper.insert(line);
  43 + return line.getId();
  44 + }
  45 +
  46 + @Override
  47 + public void updateTransferLine(MesWmTransferLineSaveReqVO updateReqVO) {
  48 + validateTransferLineExists(updateReqVO.getId());
  49 + transferService.validateTransferEditable(updateReqVO.getTransferId());
  50 + itemService.validateItemExists(updateReqVO.getItemId());
  51 + // TODO @AI:看看还有没关联的数据要校验的;包括状态的
  52 +
  53 + MesWmTransferLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmTransferLineDO.class);
  54 + transferLineMapper.updateById(updateObj);
  55 + }
  56 +
  57 + @Override
  58 + public void deleteTransferLine(Long id) {
  59 + validateTransferLineExists(id);
  60 + transferLineMapper.deleteById(id);
  61 + }
  62 +
  63 + @Override
  64 + public MesWmTransferLineDO getTransferLine(Long id) {
  65 + return transferLineMapper.selectById(id);
  66 + }
  67 +
  68 + @Override
  69 + public List<MesWmTransferLineDO> getTransferLineListByTransferId(Long transferId) {
  70 + return transferLineMapper.selectListByTransferId(transferId);
  71 + }
  72 +
  73 + @Override
  74 + public void deleteTransferLineByTransferId(Long transferId) {
  75 + getTransferLineListByTransferId(transferId)
  76 + .forEach(line -> transferLineMapper.deleteById(line.getId()));
  77 + }
  78 +
  79 + @Override
  80 + public MesWmTransferLineDO validateTransferLineExists(Long id) {
  81 + MesWmTransferLineDO line = transferLineMapper.selectById(id);
  82 + if (line == null) {
  83 + throw exception(WM_TRANSFER_LINE_NOT_EXISTS);
  84 + }
  85 + return line;
  86 + }
  87 +
  88 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +/**
  10 + * MES 转移单 Service 接口
  11 + */
  12 +public interface MesWmTransferService {
  13 +
  14 + /**
  15 + * 创建转移单
  16 + */
  17 + Long createTransfer(@Valid MesWmTransferSaveReqVO createReqVO);
  18 +
  19 + /**
  20 + * 修改转移单
  21 + */
  22 + void updateTransfer(@Valid MesWmTransferSaveReqVO updateReqVO);
  23 +
  24 + /**
  25 + * 删除转移单
  26 + */
  27 + void deleteTransfer(Long id);
  28 +
  29 + /**
  30 + * 获得转移单
  31 + */
  32 + MesWmTransferDO getTransfer(Long id);
  33 +
  34 + /**
  35 + * 获得转移单分页
  36 + */
  37 + PageResult<MesWmTransferDO> getTransferPage(MesWmTransferPageReqVO pageReqVO);
  38 +
  39 + /**
  40 + * 提交转移单(草稿 → 待确认/待上架)
  41 + */
  42 + void submitTransfer(Long id);
  43 +
  44 + /**
  45 + * 确认转移单(待确认 → 待上架)
  46 + */
  47 + void confirmTransfer(Long id);
  48 +
  49 + /**
  50 + * 完成转移单(待执行 → 已完成)
  51 + */
  52 + void finishTransfer(Long id);
  53 +
  54 + /**
  55 + * 取消转移单
  56 + */
  57 + void cancelTransfer(Long id);
  58 +
  59 + /**
  60 + * 校验转移单存在且处于可编辑状态
  61 + */
  62 + MesWmTransferDO validateTransferEditable(Long id);
  63 +
  64 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.wm.transfer;
  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.transfer.vo.MesWmTransferPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.MesWmTransferSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferMapper;
  9 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransferStatusEnum;
  10 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransferTypeEnum;
  11 +import jakarta.annotation.Resource;
  12 +import org.springframework.stereotype.Service;
  13 +import org.springframework.validation.annotation.Validated;
  14 +
  15 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  16 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  17 +
  18 +/**
  19 + * MES 转移单 Service 实现类
  20 + */
  21 +@Service
  22 +@Validated
  23 +public class MesWmTransferServiceImpl implements MesWmTransferService {
  24 +
  25 + @Resource
  26 + private MesWmTransferMapper transferMapper;
  27 +
  28 + // TODO @AI:MesWmTransferLineService、MesWmTransferDetailService 类不存在;
  29 + @Resource
  30 + private MesWmTransferLineService transferLineService;
  31 + @Resource
  32 + private MesWmTransferDetailService transferDetailService;
  33 +
  34 + @Override
  35 + public Long createTransfer(MesWmTransferSaveReqVO createReqVO) {
  36 + // 校验编码唯一
  37 + validateCodeUnique(null, createReqVO.getCode());
  38 +
  39 + // 插入
  40 + MesWmTransferDO transfer = BeanUtils.toBean(createReqVO, MesWmTransferDO.class);
  41 + transfer.setStatus(MesWmTransferStatusEnum.PREPARE.getStatus());
  42 + transferMapper.insert(transfer);
  43 + return transfer.getId();
  44 + }
  45 +
  46 + @Override
  47 + public void updateTransfer(MesWmTransferSaveReqVO updateReqVO) {
  48 + // 校验存在 + 草稿状态
  49 + validateTransferExistsAndDraft(updateReqVO.getId());
  50 + // 校验编码唯一
  51 + validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
  52 +
  53 + // 更新
  54 + MesWmTransferDO updateObj = BeanUtils.toBean(updateReqVO, MesWmTransferDO.class);
  55 + transferMapper.updateById(updateObj);
  56 + }
  57 +
  58 + // TODO @AI:少了事务;
  59 + @Override
  60 + public void deleteTransfer(Long id) {
  61 + // 校验存在 + 草稿状态
  62 + validateTransferExistsAndDraft(id);
  63 +
  64 + // 级联删除明细和行
  65 + transferDetailService.deleteTransferDetailByTransferId(id);
  66 + transferLineService.deleteTransferLineByTransferId(id);
  67 + // 删除
  68 + transferMapper.deleteById(id);
  69 + }
  70 +
  71 + @Override
  72 + public MesWmTransferDO getTransfer(Long id) {
  73 + return transferMapper.selectById(id);
  74 + }
  75 +
  76 + @Override
  77 + public PageResult<MesWmTransferDO> getTransferPage(MesWmTransferPageReqVO pageReqVO) {
  78 + return transferMapper.selectPage(pageReqVO);
  79 + }
  80 +
  81 + @Override
  82 + public void submitTransfer(Long id) {
  83 + // 校验存在 + 草稿状态
  84 + MesWmTransferDO transfer = validateTransferExistsAndDraft(id);
  85 +
  86 + // TODO @芋艿:这里的逻辑对齐不对;需要再次看看;
  87 + // 根据转移单类型设置状态
  88 + // 内部调拨:草稿 -> 待上架
  89 + // 外部调拨:草稿 -> 待确认
  90 + if (MesWmTransferTypeEnum.INNER.getType().equals(transfer.getType())) {
  91 + transfer.setStatus(MesWmTransferStatusEnum.UNSTOCK.getStatus());
  92 + } else {
  93 + transfer.setStatus(MesWmTransferStatusEnum.UNCONFIRMED.getStatus());
  94 + }
  95 + transferMapper.updateById(transfer);
  96 + }
  97 +
  98 + @Override
  99 + public void confirmTransfer(Long id) {
  100 + // 校验存在 + 待确认状态
  101 + MesWmTransferDO transfer = validateTransferExistsAndConfirm(id);
  102 +
  103 + // 更新状态:待确认 -> 待上架
  104 + transfer.setStatus(MesWmTransferStatusEnum.UNSTOCK.getStatus());
  105 + transfer.setConfirmFlag(true);
  106 + transferMapper.updateById(transfer);
  107 + }
  108 +
  109 + @Override
  110 + public void finishTransfer(Long id) {
  111 + // 校验存在 + 待执行状态
  112 + MesWmTransferDO transfer = validateTransferExistsAndUnexecute(id);
  113 +
  114 + // TODO: 执行库存转移逻辑
  115 +
  116 + // 更新状态:待执行 -> 已完成
  117 + transfer.setStatus(MesWmTransferStatusEnum.FINISHED.getStatus());
  118 + transferMapper.updateById(transfer);
  119 + }
  120 +
  121 + @Override
  122 + public void cancelTransfer(Long id) {
  123 + // 校验存在 + 非已完成/已取消状态
  124 + MesWmTransferDO transfer = validateTransferExistsAndNotFinished(id);
  125 +
  126 + // 更新状态 -> 已取消
  127 + transfer.setStatus(MesWmTransferStatusEnum.CANCELED.getStatus());
  128 + transferMapper.updateById(transfer);
  129 + }
  130 +
  131 + @Override
  132 + public MesWmTransferDO validateTransferEditable(Long id) {
  133 + MesWmTransferDO transfer = transferMapper.selectById(id);
  134 + // TODO @AI:错误码缺少;是不是少了 WM_
  135 + if (transfer == null) {
  136 + throw exception(WM_TRANSFER_NOT_EXISTS);
  137 + }
  138 + if (!MesWmTransferStatusEnum.PREPARE.getStatus().equals(transfer.getStatus())) {
  139 + throw exception(WM_TRANSFER_NOT_EDITABLE);
  140 + }
  141 + return transfer;
  142 + }
  143 +
  144 + // ==================== 私有方法 ====================
  145 +
  146 + private void validateCodeUnique(Long id, String code) {
  147 + MesWmTransferDO transfer = transferMapper.selectByCode(code);
  148 + if (transfer == null) {
  149 + return;
  150 + }
  151 + // 如果 id 为空,说明是新增,存在同名则报错
  152 + if (id == null) {
  153 + throw exception(WM_TRANSFER_CODE_DUPLICATE);
  154 + }
  155 + // 如果 id 不为空,说明是修改,存在同名且不是自己则报错
  156 + if (!transfer.getId().equals(id)) {
  157 + throw exception(WM_TRANSFER_CODE_DUPLICATE);
  158 + }
  159 + }
  160 +
  161 + private MesWmTransferDO validateTransferExistsAndDraft(Long id) {
  162 + MesWmTransferDO transfer = transferMapper.selectById(id);
  163 + if (transfer == null) {
  164 + throw exception(WM_TRANSFER_NOT_EXISTS);
  165 + }
  166 + if (!MesWmTransferStatusEnum.PREPARE.getStatus().equals(transfer.getStatus())) {
  167 + throw exception(WM_TRANSFER_NOT_DRAFT);
  168 + }
  169 + return transfer;
  170 + }
  171 +
  172 + private MesWmTransferDO validateTransferExistsAndConfirm(Long id) {
  173 + MesWmTransferDO transfer = transferMapper.selectById(id);
  174 + if (transfer == null) {
  175 + throw exception(WM_TRANSFER_NOT_EXISTS);
  176 + }
  177 + if (!MesWmTransferStatusEnum.UNCONFIRMED.getStatus().equals(transfer.getStatus())) {
  178 + throw exception(WM_TRANSFER_NOT_CONFIRMED);
  179 + }
  180 + return transfer;
  181 + }
  182 +
  183 + private MesWmTransferDO validateTransferExistsAndUnexecute(Long id) {
  184 + MesWmTransferDO transfer = transferMapper.selectById(id);
  185 + if (transfer == null) {
  186 + throw exception(WM_TRANSFER_NOT_EXISTS);
  187 + }
  188 + if (!MesWmTransferStatusEnum.UNEXECUTE.getStatus().equals(transfer.getStatus())) {
  189 + throw exception(WM_TRANSFER_NOT_UNEXECUTE);
  190 + }
  191 + return transfer;
  192 + }
  193 +
  194 + private MesWmTransferDO validateTransferExistsAndNotFinished(Long id) {
  195 + MesWmTransferDO transfer = transferMapper.selectById(id);
  196 + if (transfer == null) {
  197 + throw exception(WM_TRANSFER_NOT_EXISTS);
  198 + }
  199 + if (MesWmTransferStatusEnum.FINISHED.getStatus().equals(transfer.getStatus())
  200 + || MesWmTransferStatusEnum.CANCELED.getStatus().equals(transfer.getStatus())) {
  201 + throw exception(WM_TRANSFER_ALREADY_FINISHED);
  202 + }
  203 + return transfer;
  204 + }
  205 +
  206 +}
... ...