Commit f004611c76fe78c772b854d05236f4be735e5a3e
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 | +} | ... | ... |