Commit a63a8070497607a5b6077e5cd56e3ffbd714c5f0
1 parent
abddf4a1
✨ feat(mes): 添加装箱单及装箱明细相关功能
新增装箱单和装箱明细的请求和响应对象,支持装箱单的创建、更新、删除及查询功能。包括装箱单的状态管理和子箱的添加与移除逻辑,提升了系统的功能完整性和用户体验。
Showing
18 changed files
with
229 additions
and
149 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | -import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 6 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 9 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 10 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 11 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; | ||
| 12 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageRespVO; | ||
| 13 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; | 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; |
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageRespVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; | ||
| 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; | 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; |
| 15 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| 16 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; | 13 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; |
| 17 | import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; | 14 | import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; |
| 18 | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; | 15 | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| 19 | -import cn.iocoder.yudao.module.mes.service.wm.wmpackage.MesWmPackageService; | 16 | +import cn.iocoder.yudao.module.mes.service.wm.packages.MesWmPackageService; |
| 20 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | 17 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 21 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 18 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 22 | import io.swagger.v3.oas.annotations.Operation; | 19 | import io.swagger.v3.oas.annotations.Operation; |
| 23 | import io.swagger.v3.oas.annotations.Parameter; | 20 | import io.swagger.v3.oas.annotations.Parameter; |
| 24 | import io.swagger.v3.oas.annotations.tags.Tag; | 21 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 25 | import jakarta.annotation.Resource; | 22 | import jakarta.annotation.Resource; |
| 26 | -import jakarta.servlet.http.HttpServletResponse; | ||
| 27 | import jakarta.validation.Valid; | 23 | import jakarta.validation.Valid; |
| 28 | import org.springframework.security.access.prepost.PreAuthorize; | 24 | import org.springframework.security.access.prepost.PreAuthorize; |
| 29 | import org.springframework.validation.annotation.Validated; | 25 | import org.springframework.validation.annotation.Validated; |
| 30 | import org.springframework.web.bind.annotation.*; | 26 | import org.springframework.web.bind.annotation.*; |
| 31 | 27 | ||
| 32 | -import java.io.IOException; | ||
| 33 | import java.util.*; | 28 | import java.util.*; |
| 34 | -import java.util.stream.Collectors; | ||
| 35 | 29 | ||
| 36 | -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; | ||
| 37 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 30 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 38 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | 31 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 39 | 32 | ||
| @@ -97,18 +90,6 @@ public class MesWmPackageController { | @@ -97,18 +90,6 @@ public class MesWmPackageController { | ||
| 97 | return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); | 90 | return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); |
| 98 | } | 91 | } |
| 99 | 92 | ||
| 100 | - @GetMapping("/export-excel") | ||
| 101 | - @Operation(summary = "导出装箱单 Excel") | ||
| 102 | - @PreAuthorize("@ss.hasPermission('mes:wm-package:export')") | ||
| 103 | - @ApiAccessLog(operateType = EXPORT) | ||
| 104 | - public void exportPackageExcel(@Valid MesWmPackagePageReqVO pageReqVO, | ||
| 105 | - HttpServletResponse response) throws IOException { | ||
| 106 | - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 107 | - PageResult<MesWmPackageDO> pageResult = packageService.getPackagePage(pageReqVO); | ||
| 108 | - ExcelUtils.write(response, "装箱单.xls", "数据", MesWmPackageRespVO.class, | ||
| 109 | - buildRespVOList(pageResult.getList())); | ||
| 110 | - } | ||
| 111 | - | ||
| 112 | @PutMapping("/finish") | 93 | @PutMapping("/finish") |
| 113 | @Operation(summary = "完成装箱单") | 94 | @Operation(summary = "完成装箱单") |
| 114 | @Parameter(name = "id", description = "编号", required = true) | 95 | @Parameter(name = "id", description = "编号", required = true) |
| @@ -118,14 +99,30 @@ public class MesWmPackageController { | @@ -118,14 +99,30 @@ public class MesWmPackageController { | ||
| 118 | return success(true); | 99 | return success(true); |
| 119 | } | 100 | } |
| 120 | 101 | ||
| 121 | - @GetMapping("/tree") | ||
| 122 | - @Operation(summary = "获得装箱单树形结构") | 102 | + @PutMapping("/add-sub-package") |
| 103 | + @Operation(summary = "添加子箱") | ||
| 104 | + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") | ||
| 105 | + public CommonResult<Boolean> addSubPackage(@RequestParam("parentId") Long parentId, | ||
| 106 | + @RequestParam("childId") Long childId) { | ||
| 107 | + packageService.addSubPackage(parentId, childId); | ||
| 108 | + return success(true); | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + @PutMapping("/remove-sub-package") | ||
| 112 | + @Operation(summary = "移除子箱") | ||
| 113 | + @Parameter(name = "childId", description = "子箱编号", required = true) | ||
| 114 | + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") | ||
| 115 | + public CommonResult<Boolean> removeSubPackage(@RequestParam("childId") Long childId) { | ||
| 116 | + packageService.removeSubPackage(childId); | ||
| 117 | + return success(true); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + @GetMapping("/simple-list") | ||
| 121 | + @Operation(summary = "获取装箱单精简列表") | ||
| 123 | @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") | 122 | @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") |
| 124 | - public CommonResult<List<MesWmPackageRespVO>> getPackageTree() { | ||
| 125 | - List<MesWmPackageDO> list = packageService.getPackageTree(); | ||
| 126 | - List<MesWmPackageRespVO> voList = buildRespVOList(list); | ||
| 127 | - // 构建树形结构 | ||
| 128 | - return success(buildTree(voList)); | 123 | + public CommonResult<List<MesWmPackageRespVO>> getPackageSimpleList() { |
| 124 | + List<MesWmPackageDO> list = packageService.getPackageSimpleList(); | ||
| 125 | + return success(buildRespVOList(list)); | ||
| 129 | } | 126 | } |
| 130 | 127 | ||
| 131 | // ========== 私有方法 ========== | 128 | // ========== 私有方法 ========== |
| @@ -138,6 +135,7 @@ public class MesWmPackageController { | @@ -138,6 +135,7 @@ public class MesWmPackageController { | ||
| 138 | Map<Long, MesMdClientDO> clientMap = clientService.getClientMap( | 135 | Map<Long, MesMdClientDO> clientMap = clientService.getClientMap( |
| 139 | convertSet(list, MesWmPackageDO::getClientId)); | 136 | convertSet(list, MesWmPackageDO::getClientId)); |
| 140 | // 批量查询计量单位(尺寸 + 重量) | 137 | // 批量查询计量单位(尺寸 + 重量) |
| 138 | + // TODO @AI:可以通过 CollecionUtils 里,通过 flat 操作; | ||
| 141 | Set<Long> unitIds = new HashSet<>(); | 139 | Set<Long> unitIds = new HashSet<>(); |
| 142 | list.forEach(p -> { | 140 | list.forEach(p -> { |
| 143 | if (p.getSizeUnitId() != null) { | 141 | if (p.getSizeUnitId() != null) { |
| @@ -151,7 +149,7 @@ public class MesWmPackageController { | @@ -151,7 +149,7 @@ public class MesWmPackageController { | ||
| 151 | // 批量查询检查员 | 149 | // 批量查询检查员 |
| 152 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | 150 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 153 | convertSet(list, MesWmPackageDO::getInspectorUserId)); | 151 | convertSet(list, MesWmPackageDO::getInspectorUserId)); |
| 154 | - | 152 | + // 构建返回结果 |
| 155 | return BeanUtils.toBean(list, MesWmPackageRespVO.class, vo -> { | 153 | return BeanUtils.toBean(list, MesWmPackageRespVO.class, vo -> { |
| 156 | MapUtils.findAndThen(clientMap, vo.getClientId(), | 154 | MapUtils.findAndThen(clientMap, vo.getClientId(), |
| 157 | client -> vo.setClientCode(client.getCode()).setClientName(client.getName()) | 155 | client -> vo.setClientCode(client.getCode()).setClientName(client.getName()) |
| @@ -165,16 +163,4 @@ public class MesWmPackageController { | @@ -165,16 +163,4 @@ public class MesWmPackageController { | ||
| 165 | }); | 163 | }); |
| 166 | } | 164 | } |
| 167 | 165 | ||
| 168 | - private List<MesWmPackageRespVO> buildTree(List<MesWmPackageRespVO> list) { | ||
| 169 | - // 按 parentId 分组 | ||
| 170 | - Map<Long, List<MesWmPackageRespVO>> parentMap = list.stream() | ||
| 171 | - .collect(Collectors.groupingBy(vo -> vo.getParentId() != null ? vo.getParentId() : 0L)); | ||
| 172 | - // 设置 children | ||
| 173 | - list.forEach(vo -> vo.setChildren(parentMap.get(vo.getId()))); | ||
| 174 | - // 返回顶级节点(parentId == 0 或 parentId == null) | ||
| 175 | - return list.stream() | ||
| 176 | - .filter(vo -> vo.getParentId() == null || vo.getParentId() == 0L) | ||
| 177 | - .collect(Collectors.toList()); | ||
| 178 | - } | ||
| 179 | - | ||
| 180 | } | 166 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 6 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 8 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; | ||
| 9 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineRespVO; | ||
| 10 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; | 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; |
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineRespVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; | ||
| 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; |
| 15 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | 15 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; |
| 16 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | 16 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; |
| 17 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; | 17 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; |
| 18 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | 18 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 19 | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; | 19 | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| 20 | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; | 20 | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| 21 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; | 21 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| 22 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; | 22 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; |
| 23 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; | 23 | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; |
| 24 | -import cn.iocoder.yudao.module.mes.service.wm.wmpackage.MesWmPackageLineService; | 24 | +import cn.iocoder.yudao.module.mes.service.wm.packages.MesWmPackageLineService; |
| 25 | import io.swagger.v3.oas.annotations.Operation; | 25 | import io.swagger.v3.oas.annotations.Operation; |
| 26 | import io.swagger.v3.oas.annotations.Parameter; | 26 | import io.swagger.v3.oas.annotations.Parameter; |
| 27 | import io.swagger.v3.oas.annotations.tags.Tag; | 27 | import io.swagger.v3.oas.annotations.tags.Tag; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import lombok.Data; | 5 | import lombok.Data; |
| 6 | import lombok.EqualsAndHashCode; | 6 | import lombok.EqualsAndHashCode; |
| 7 | import lombok.ToString; | 7 | import lombok.ToString; |
| 8 | -import org.springframework.format.annotation.DateTimeFormat; | ||
| 9 | - | ||
| 10 | -import java.time.LocalDate; | ||
| 11 | - | ||
| 12 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; | ||
| 13 | 8 | ||
| 14 | @Schema(description = "管理后台 - MES 装箱单分页 Request VO") | 9 | @Schema(description = "管理后台 - MES 装箱单分页 Request VO") |
| 15 | @Data | 10 | @Data |
| @@ -21,16 +16,15 @@ public class MesWmPackagePageReqVO extends PageParam { | @@ -21,16 +16,15 @@ public class MesWmPackagePageReqVO extends PageParam { | ||
| 21 | private String code; | 16 | private String code; |
| 22 | 17 | ||
| 23 | @Schema(description = "销售订单编号", example = "SO") | 18 | @Schema(description = "销售订单编号", example = "SO") |
| 24 | - private String soCode; | 19 | + private String salesOrderCode; |
| 25 | 20 | ||
| 26 | @Schema(description = "客户 ID", example = "1") | 21 | @Schema(description = "客户 ID", example = "1") |
| 27 | private Long clientId; | 22 | private Long clientId; |
| 28 | 23 | ||
| 29 | - @Schema(description = "装箱日期") | ||
| 30 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) | ||
| 31 | - private LocalDate[] packageDate; | 24 | + @Schema(description = "父箱 ID", example = "1024") |
| 25 | + private Long parentId; | ||
| 32 | 26 | ||
| 33 | - @Schema(description = "状态", example = "0") | ||
| 34 | - private Integer status; | 27 | + @Schema(description = "检查员用户 ID", example = "1") |
| 28 | + private Long inspectorUserId; | ||
| 35 | 29 | ||
| 36 | } | 30 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; |
| 2 | 2 | ||
| 3 | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; | 3 | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| 4 | import cn.idev.excel.annotation.ExcelProperty; | 4 | import cn.idev.excel.annotation.ExcelProperty; |
| @@ -7,9 +7,7 @@ import lombok.Data; | @@ -7,9 +7,7 @@ import lombok.Data; | ||
| 7 | import lombok.experimental.Accessors; | 7 | import lombok.experimental.Accessors; |
| 8 | 8 | ||
| 9 | import java.math.BigDecimal; | 9 | import java.math.BigDecimal; |
| 10 | -import java.time.LocalDate; | ||
| 11 | import java.time.LocalDateTime; | 10 | import java.time.LocalDateTime; |
| 12 | -import java.util.List; | ||
| 13 | 11 | ||
| 14 | @Schema(description = "管理后台 - MES 装箱单 Response VO") | 12 | @Schema(description = "管理后台 - MES 装箱单 Response VO") |
| 15 | @Data | 13 | @Data |
| @@ -30,11 +28,11 @@ public class MesWmPackageRespVO { | @@ -30,11 +28,11 @@ public class MesWmPackageRespVO { | ||
| 30 | 28 | ||
| 31 | @Schema(description = "装箱日期") | 29 | @Schema(description = "装箱日期") |
| 32 | @ExcelProperty("装箱日期") | 30 | @ExcelProperty("装箱日期") |
| 33 | - private LocalDate packageDate; | 31 | + private LocalDateTime packageDate; |
| 34 | 32 | ||
| 35 | @Schema(description = "销售订单编号", example = "SO20260301") | 33 | @Schema(description = "销售订单编号", example = "SO20260301") |
| 36 | @ExcelProperty("销售订单编号") | 34 | @ExcelProperty("销售订单编号") |
| 37 | - private String soCode; | 35 | + private String salesOrderCode; |
| 38 | 36 | ||
| 39 | @Schema(description = "发票编号", example = "INV20260301") | 37 | @Schema(description = "发票编号", example = "INV20260301") |
| 40 | @ExcelProperty("发票编号") | 38 | @ExcelProperty("发票编号") |
| @@ -107,7 +105,4 @@ public class MesWmPackageRespVO { | @@ -107,7 +105,4 @@ public class MesWmPackageRespVO { | ||
| 107 | @ExcelProperty("创建时间") | 105 | @ExcelProperty("创建时间") |
| 108 | private LocalDateTime createTime; | 106 | private LocalDateTime createTime; |
| 109 | 107 | ||
| 110 | - @Schema(description = "子箱列表") | ||
| 111 | - private List<MesWmPackageRespVO> children; | ||
| 112 | - | ||
| 113 | } | 108 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import jakarta.validation.constraints.NotEmpty; | 4 | import jakarta.validation.constraints.NotEmpty; |
| @@ -6,7 +6,7 @@ import jakarta.validation.constraints.NotNull; | @@ -6,7 +6,7 @@ import jakarta.validation.constraints.NotNull; | ||
| 6 | import lombok.Data; | 6 | import lombok.Data; |
| 7 | 7 | ||
| 8 | import java.math.BigDecimal; | 8 | import java.math.BigDecimal; |
| 9 | -import java.time.LocalDate; | 9 | +import java.time.LocalDateTime; |
| 10 | 10 | ||
| 11 | @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") | 11 | @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") |
| 12 | @Data | 12 | @Data |
| @@ -19,15 +19,16 @@ public class MesWmPackageSaveReqVO { | @@ -19,15 +19,16 @@ public class MesWmPackageSaveReqVO { | ||
| 19 | @NotEmpty(message = "装箱单编号不能为空") | 19 | @NotEmpty(message = "装箱单编号不能为空") |
| 20 | private String code; | 20 | private String code; |
| 21 | 21 | ||
| 22 | + // TODO @AI:不传递 parentId;默认都是 = 0; | ||
| 22 | @Schema(description = "父箱 ID", example = "0") | 23 | @Schema(description = "父箱 ID", example = "0") |
| 23 | private Long parentId; | 24 | private Long parentId; |
| 24 | 25 | ||
| 25 | @Schema(description = "装箱日期", requiredMode = Schema.RequiredMode.REQUIRED) | 26 | @Schema(description = "装箱日期", requiredMode = Schema.RequiredMode.REQUIRED) |
| 26 | @NotNull(message = "装箱日期不能为空") | 27 | @NotNull(message = "装箱日期不能为空") |
| 27 | - private LocalDate packageDate; | 28 | + private LocalDateTime packageDate; |
| 28 | 29 | ||
| 29 | @Schema(description = "销售订单编号", example = "SO20260301") | 30 | @Schema(description = "销售订单编号", example = "SO20260301") |
| 30 | - private String soCode; | 31 | + private String salesOrderCode; |
| 31 | 32 | ||
| 32 | @Schema(description = "发票编号", example = "INV20260301") | 33 | @Schema(description = "发票编号", example = "INV20260301") |
| 33 | private String invoiceCode; | 34 | private String invoiceCode; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java
| 1 | -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; | 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import jakarta.validation.constraints.DecimalMin; | 4 | import jakarta.validation.constraints.DecimalMin; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java
| 1 | -// TODO @AI:报名改成 packages 避免 Java 关键字冲突; | ||
| 2 | -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages; |
| 3 | 2 | ||
| 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 5 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; | 4 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; |
| 6 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; | 5 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| 7 | -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; | ||
| 8 | import com.baomidou.mybatisplus.annotation.KeySequence; | 6 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 7 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
| 9 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 10 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| 11 | import lombok.*; | 10 | import lombok.*; |
| @@ -26,7 +25,7 @@ import java.time.LocalDate; | @@ -26,7 +25,7 @@ import java.time.LocalDate; | ||
| 26 | @AllArgsConstructor | 25 | @AllArgsConstructor |
| 27 | public class MesWmPackageDO extends BaseDO { | 26 | public class MesWmPackageDO extends BaseDO { |
| 28 | 27 | ||
| 29 | - private static final Integer PARENT_ID_ROOT = 0; | 28 | + public static final Long PARENT_ID_ROOT = 0L; |
| 30 | 29 | ||
| 31 | @TableId | 30 | @TableId |
| 32 | private Long id; | 31 | private Long id; |
| @@ -42,11 +41,13 @@ public class MesWmPackageDO extends BaseDO { | @@ -42,11 +41,13 @@ public class MesWmPackageDO extends BaseDO { | ||
| 42 | * 装箱日期 | 41 | * 装箱日期 |
| 43 | */ | 42 | */ |
| 44 | private LocalDate packageDate; | 43 | private LocalDate packageDate; |
| 45 | - // TODO @AI:改成 salesOrderCode | 44 | + // DONE @AI:改成 salesOrderCode |
| 45 | + // TODO @AI:数据库也改;另外前端也检查下; | ||
| 46 | /** | 46 | /** |
| 47 | * 销售订单编号 | 47 | * 销售订单编号 |
| 48 | */ | 48 | */ |
| 49 | - private String soCode; | 49 | + @TableField("so_code") |
| 50 | + private String salesOrderCode; | ||
| 50 | /** | 51 | /** |
| 51 | * 发票编号 | 52 | * 发票编号 |
| 52 | */ | 53 | */ |
| @@ -95,11 +96,10 @@ public class MesWmPackageDO extends BaseDO { | @@ -95,11 +96,10 @@ public class MesWmPackageDO extends BaseDO { | ||
| 95 | * 关联 AdminUserDO 的 id | 96 | * 关联 AdminUserDO 的 id |
| 96 | */ | 97 | */ |
| 97 | private Long inspectorUserId; | 98 | private Long inspectorUserId; |
| 98 | - // TODO @AI:自定义一个属于自己的枚举类;类似:MesWmSalesNoticeStatusEnum | ||
| 99 | /** | 99 | /** |
| 100 | * 状态 | 100 | * 状态 |
| 101 | * | 101 | * |
| 102 | - * 枚举 {@link MesOrderStatusConstants#PREPARE}、{@link MesOrderStatusConstants#FINISHED} | 102 | + * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum} |
| 103 | */ | 103 | */ |
| 104 | private Integer status; | 104 | private Integer status; |
| 105 | /** | 105 | /** |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java
| 1 | -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | 4 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| @@ -49,7 +49,7 @@ public class MesWmPackageLineDO extends BaseDO { | @@ -49,7 +49,7 @@ public class MesWmPackageLineDO extends BaseDO { | ||
| 49 | * 装箱数量 | 49 | * 装箱数量 |
| 50 | */ | 50 | */ |
| 51 | private BigDecimal quantity; | 51 | private BigDecimal quantity; |
| 52 | - // TODO @AI:需要在确认下; | 52 | + // DONE @芋艿:需要在确认下; |
| 53 | /** | 53 | /** |
| 54 | * 生产工单 ID | 54 | * 生产工单 ID |
| 55 | * | 55 | * |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java
| 1 | -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; | 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; |
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; | ||
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java
| 1 | -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; | 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; |
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; | ||
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| @@ -15,10 +15,10 @@ public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> { | @@ -15,10 +15,10 @@ public interface MesWmPackageMapper extends BaseMapperX<MesWmPackageDO> { | ||
| 15 | default PageResult<MesWmPackageDO> selectPage(MesWmPackagePageReqVO reqVO) { | 15 | default PageResult<MesWmPackageDO> selectPage(MesWmPackagePageReqVO reqVO) { |
| 16 | return selectPage(reqVO, new LambdaQueryWrapperX<MesWmPackageDO>() | 16 | return selectPage(reqVO, new LambdaQueryWrapperX<MesWmPackageDO>() |
| 17 | .likeIfPresent(MesWmPackageDO::getCode, reqVO.getCode()) | 17 | .likeIfPresent(MesWmPackageDO::getCode, reqVO.getCode()) |
| 18 | - .likeIfPresent(MesWmPackageDO::getSoCode, reqVO.getSoCode()) | 18 | + .likeIfPresent(MesWmPackageDO::getSalesOrderCode, reqVO.getSalesOrderCode()) |
| 19 | .eqIfPresent(MesWmPackageDO::getClientId, reqVO.getClientId()) | 19 | .eqIfPresent(MesWmPackageDO::getClientId, reqVO.getClientId()) |
| 20 | - .betweenIfPresent(MesWmPackageDO::getPackageDate, reqVO.getPackageDate()) | ||
| 21 | - .eqIfPresent(MesWmPackageDO::getStatus, reqVO.getStatus()) | 20 | + .eqIfPresent(MesWmPackageDO::getParentId, reqVO.getParentId()) |
| 21 | + .eqIfPresent(MesWmPackageDO::getInspectorUserId, reqVO.getInspectorUserId()) | ||
| 22 | .orderByDesc(MesWmPackageDO::getId)); | 22 | .orderByDesc(MesWmPackageDO::getId)); |
| 23 | } | 23 | } |
| 24 | 24 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| @@ -517,6 +517,7 @@ public interface ErrorCodeConstants { | @@ -517,6 +517,7 @@ public interface ErrorCodeConstants { | ||
| 517 | ErrorCode WM_PACKAGE_STATUS_NOT_PREPARE = new ErrorCode(1_040_740_002, "只有草稿状态才允许此操作"); | 517 | ErrorCode WM_PACKAGE_STATUS_NOT_PREPARE = new ErrorCode(1_040_740_002, "只有草稿状态才允许此操作"); |
| 518 | ErrorCode WM_PACKAGE_PARENT_NOT_EXISTS = new ErrorCode(1_040_740_003, "父箱不存在"); | 518 | ErrorCode WM_PACKAGE_PARENT_NOT_EXISTS = new ErrorCode(1_040_740_003, "父箱不存在"); |
| 519 | ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱"); | 519 | ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱"); |
| 520 | + ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, "该装箱单已有父箱,不能重复添加"); | ||
| 520 | ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在"); | 521 | ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在"); |
| 521 | 522 | ||
| 522 | } | 523 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.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 | +@Getter | ||
| 14 | +@AllArgsConstructor | ||
| 15 | +public enum MesWmPackageStatusEnum implements ArrayValuable<Integer> { | ||
| 16 | + | ||
| 17 | + // TODO @AI:需要增加下: * 对应方法:{@link MesWmOutsourceIssueService#createOutsourceIssue(MesWmOutsourceIssueSaveReqVO)} | ||
| 18 | + /** | ||
| 19 | + * 草稿 | ||
| 20 | + */ | ||
| 21 | + PREPARE(MesOrderStatusConstants.PREPARE, "草稿"), | ||
| 22 | + /** | ||
| 23 | + * 已完成 | ||
| 24 | + */ | ||
| 25 | + FINISHED(MesOrderStatusConstants.FINISHED, "已完成"); | ||
| 26 | + | ||
| 27 | + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmPackageStatusEnum::getStatus) | ||
| 28 | + .toArray(Integer[]::new); | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 状态值 | ||
| 32 | + */ | ||
| 33 | + private final Integer status; | ||
| 34 | + /** | ||
| 35 | + * 状态名 | ||
| 36 | + */ | ||
| 37 | + private final String name; | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public Integer[] array() { | ||
| 41 | + return ARRAYS; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java
| 1 | -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.service.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; | ||
| 5 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; | ||
| 6 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; | 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; |
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; | ||
| 7 | import jakarta.validation.Valid; | 7 | import jakarta.validation.Valid; |
| 8 | 8 | ||
| 9 | import java.util.List; | 9 | import java.util.List; |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java
| 1 | -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.service.wm.packages; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.util.ObjUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 4 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; | ||
| 8 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; | ||
| 9 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; | ||
| 10 | -import cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage.MesWmPackageLineMapper; | ||
| 11 | -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; | 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; |
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; | ||
| 9 | +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | ||
| 12 | import jakarta.annotation.Resource; | 10 | import jakarta.annotation.Resource; |
| 13 | import org.springframework.context.annotation.Lazy; | 11 | import org.springframework.context.annotation.Lazy; |
| 14 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| @@ -28,13 +26,17 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | @@ -28,13 +26,17 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | ||
| 28 | @Resource | 26 | @Resource |
| 29 | @Lazy | 27 | @Lazy |
| 30 | private MesWmPackageService packageService; | 28 | private MesWmPackageService packageService; |
| 29 | + @Resource | ||
| 30 | + private MesMdItemService itemService; | ||
| 31 | 31 | ||
| 32 | @Override | 32 | @Override |
| 33 | public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { | 33 | public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { |
| 34 | - // TODO @AI:检查关联的 packageId(草稿)、itemId | ||
| 35 | - | ||
| 36 | // 校验装箱单状态为草稿 | 34 | // 校验装箱单状态为草稿 |
| 37 | - validatePackageStatusDraft(createReqVO.getPackageId()); | 35 | + packageService.validatePackageStatusDraft(createReqVO.getPackageId()); |
| 36 | + // 校验产品物料存在 | ||
| 37 | + itemService.validateItemExists(createReqVO.getItemId()); | ||
| 38 | + | ||
| 39 | + // 插入 | ||
| 38 | MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); | 40 | MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); |
| 39 | packageLineMapper.insert(line); | 41 | packageLineMapper.insert(line); |
| 40 | return line.getId(); | 42 | return line.getId(); |
| @@ -44,10 +46,12 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | @@ -44,10 +46,12 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | ||
| 44 | public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { | 46 | public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { |
| 45 | // 校验存在 | 47 | // 校验存在 |
| 46 | MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); | 48 | MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); |
| 47 | - // TODO @AI:检查关联的 packageId(草稿)、itemId | ||
| 48 | - | ||
| 49 | // 校验装箱单状态为草稿 | 49 | // 校验装箱单状态为草稿 |
| 50 | - validatePackageStatusDraft(line.getPackageId()); | 50 | + packageService.validatePackageStatusDraft(line.getPackageId()); |
| 51 | + // 校验产品物料存在 | ||
| 52 | + itemService.validateItemExists(updateReqVO.getItemId()); | ||
| 53 | + | ||
| 54 | + // 更新 | ||
| 51 | MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); | 55 | MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); |
| 52 | packageLineMapper.updateById(updateObj); | 56 | packageLineMapper.updateById(updateObj); |
| 53 | } | 57 | } |
| @@ -57,7 +61,7 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | @@ -57,7 +61,7 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | ||
| 57 | // 校验存在 | 61 | // 校验存在 |
| 58 | MesWmPackageLineDO line = validatePackageLineExists(id); | 62 | MesWmPackageLineDO line = validatePackageLineExists(id); |
| 59 | // 校验装箱单状态为草稿 | 63 | // 校验装箱单状态为草稿 |
| 60 | - validatePackageStatusDraft(line.getPackageId()); | 64 | + packageService.validatePackageStatusDraft(line.getPackageId()); |
| 61 | 65 | ||
| 62 | // 删除 | 66 | // 删除 |
| 63 | packageLineMapper.deleteById(id); | 67 | packageLineMapper.deleteById(id); |
| @@ -93,15 +97,4 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | @@ -93,15 +97,4 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { | ||
| 93 | return line; | 97 | return line; |
| 94 | } | 98 | } |
| 95 | 99 | ||
| 96 | - // TODO @AI:这个方法,应该 packageService 实现; | ||
| 97 | - private void validatePackageStatusDraft(Long packageId) { | ||
| 98 | - MesWmPackageDO packageDO = packageService.getPackage(packageId); | ||
| 99 | - if (packageDO == null) { | ||
| 100 | - throw exception(WM_PACKAGE_NOT_EXISTS); | ||
| 101 | - } | ||
| 102 | - if (ObjUtil.notEqual(MesOrderStatusConstants.PREPARE, packageDO.getStatus())) { | ||
| 103 | - throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); | ||
| 104 | - } | ||
| 105 | - } | ||
| 106 | - | ||
| 107 | } | 100 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java
| 1 | -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.service.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; | ||
| 5 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; | ||
| 6 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; | 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; |
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; | ||
| 7 | import jakarta.validation.Valid; | 7 | import jakarta.validation.Valid; |
| 8 | 8 | ||
| 9 | import java.util.List; | 9 | import java.util.List; |
| @@ -59,10 +59,32 @@ public interface MesWmPackageService { | @@ -59,10 +59,32 @@ public interface MesWmPackageService { | ||
| 59 | void finishPackage(Long id); | 59 | void finishPackage(Long id); |
| 60 | 60 | ||
| 61 | /** | 61 | /** |
| 62 | - * 获得装箱单树形结构 | 62 | + * 校验装箱单状态为草稿 |
| 63 | * | 63 | * |
| 64 | - * @return 装箱单列表(树形) | 64 | + * @param packageId 装箱单 ID |
| 65 | */ | 65 | */ |
| 66 | - List<MesWmPackageDO> getPackageTree(); | 66 | + void validatePackageStatusDraft(Long packageId); |
| 67 | + | ||
| 68 | + /** | ||
| 69 | + * 添加子箱 | ||
| 70 | + * | ||
| 71 | + * @param parentId 父箱 ID | ||
| 72 | + * @param childId 子箱 ID | ||
| 73 | + */ | ||
| 74 | + void addSubPackage(Long parentId, Long childId); | ||
| 75 | + | ||
| 76 | + /** | ||
| 77 | + * 移除子箱 | ||
| 78 | + * | ||
| 79 | + * @param childId 子箱 ID | ||
| 80 | + */ | ||
| 81 | + void removeSubPackage(Long childId); | ||
| 82 | + | ||
| 83 | + /** | ||
| 84 | + * 获取装箱单精简列表(无父箱 + 已完成状态) | ||
| 85 | + * | ||
| 86 | + * @return 装箱单列表 | ||
| 87 | + */ | ||
| 88 | + List<MesWmPackageDO> getPackageSimpleList(); | ||
| 67 | 89 | ||
| 68 | } | 90 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
| 1 | -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; | 1 | +package cn.iocoder.yudao.module.mes.service.wm.packages; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.ObjUtil; | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 7 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; | ||
| 8 | -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; | ||
| 9 | -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; | ||
| 10 | -import cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage.MesWmPackageMapper; | ||
| 11 | -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; | 7 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; | ||
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; | ||
| 11 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper; | ||
| 12 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum; | ||
| 12 | import jakarta.annotation.Resource; | 13 | import jakarta.annotation.Resource; |
| 13 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 14 | import org.springframework.transaction.annotation.Transactional; | 15 | import org.springframework.transaction.annotation.Transactional; |
| @@ -33,14 +34,13 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | @@ -33,14 +34,13 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | ||
| 33 | // 校验编码唯一性 | 34 | // 校验编码唯一性 |
| 34 | validateCodeUnique(null, createReqVO.getCode()); | 35 | validateCodeUnique(null, createReqVO.getCode()); |
| 35 | // 校验父箱存在 | 36 | // 校验父箱存在 |
| 37 | + // TODO @AI:parentId 校验都去掉,不传递了; | ||
| 36 | validateParentExists(createReqVO.getParentId()); | 38 | validateParentExists(createReqVO.getParentId()); |
| 37 | 39 | ||
| 38 | // 创建装箱单,默认为草稿状态 | 40 | // 创建装箱单,默认为草稿状态 |
| 39 | MesWmPackageDO packageDO = BeanUtils.toBean(createReqVO, MesWmPackageDO.class); | 41 | MesWmPackageDO packageDO = BeanUtils.toBean(createReqVO, MesWmPackageDO.class); |
| 40 | - packageDO.setStatus(MesOrderStatusConstants.PREPARE); | ||
| 41 | - if (packageDO.getParentId() == null) { | ||
| 42 | - packageDO.setParentId(0L); | ||
| 43 | - } | 42 | + packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus()) |
| 43 | + .setParentId(MesWmPackageDO.PARENT_ID_ROOT); | ||
| 44 | packageMapper.insert(packageDO); | 44 | packageMapper.insert(packageDO); |
| 45 | return packageDO.getId(); | 45 | return packageDO.getId(); |
| 46 | } | 46 | } |
| @@ -51,7 +51,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | @@ -51,7 +51,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | ||
| 51 | validatePackageExistsAndDraft(updateReqVO.getId()); | 51 | validatePackageExistsAndDraft(updateReqVO.getId()); |
| 52 | // 校验编码唯一性 | 52 | // 校验编码唯一性 |
| 53 | validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | 53 | validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); |
| 54 | - // TODO @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; | 54 | + // TODO @AI:parentId 校验都去掉,不传递了; |
| 55 | + // DONE @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; | ||
| 55 | // 校验父箱存在,且不能选自己或子节点 | 56 | // 校验父箱存在,且不能选自己或子节点 |
| 56 | validateParentExists(updateReqVO.getParentId()); | 57 | validateParentExists(updateReqVO.getParentId()); |
| 57 | if (updateReqVO.getParentId() != null && ObjUtil.equal(updateReqVO.getParentId(), updateReqVO.getId())) { | 58 | if (updateReqVO.getParentId() != null && ObjUtil.equal(updateReqVO.getParentId(), updateReqVO.getId())) { |
| @@ -100,12 +101,55 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | @@ -100,12 +101,55 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | ||
| 100 | 101 | ||
| 101 | // 更新状态为已完成 | 102 | // 更新状态为已完成 |
| 102 | packageMapper.updateById(new MesWmPackageDO() | 103 | packageMapper.updateById(new MesWmPackageDO() |
| 103 | - .setId(id).setStatus(MesOrderStatusConstants.FINISHED)); | 104 | + .setId(id).setStatus(MesWmPackageStatusEnum.FINISHED.getStatus())); |
| 105 | + } | ||
| 106 | + | ||
| 107 | + @Override | ||
| 108 | + public void validatePackageStatusDraft(Long packageId) { | ||
| 109 | + validatePackageExistsAndDraft(packageId); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + @Override | ||
| 113 | + public void addSubPackage(Long parentId, Long childId) { | ||
| 114 | + // 校验父箱存在且为草稿 | ||
| 115 | + validatePackageExistsAndDraft(parentId); | ||
| 116 | + // 校验子箱存在 | ||
| 117 | + MesWmPackageDO child = validatePackageExists(childId); | ||
| 118 | + // TODO @AI:参考 validateParentDept 的实现; | ||
| 119 | + // 校验子箱没有父箱(parentId 为 0 或 null) | ||
| 120 | + if (child.getParentId() != null && child.getParentId() != 0L) { | ||
| 121 | + throw exception(WM_PACKAGE_CHILD_HAS_PARENT); | ||
| 122 | + } | ||
| 123 | + // 不能将自己作为子箱 | ||
| 124 | + if (ObjUtil.equal(parentId, childId)) { | ||
| 125 | + throw exception(WM_PACKAGE_PARENT_SELF); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + // 设置子箱的 parentId | ||
| 129 | + packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(parentId)); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + @Override | ||
| 133 | + public void removeSubPackage(Long childId) { | ||
| 134 | + // 校验子箱存在 | ||
| 135 | + MesWmPackageDO child = validatePackageExists(childId); | ||
| 136 | + // 校验父箱存在且为草稿 | ||
| 137 | + // TODO @AI:notEquals(null, 和 MesWmPackageDO.PARENT_ID_ROOT) | ||
| 138 | + if (child.getParentId() != null && child.getParentId() != 0L) { | ||
| 139 | + validatePackageExistsAndDraft(child.getParentId()); | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + // 清除 parentId | ||
| 143 | + packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(MesWmPackageDO.PARENT_ID_ROOT)); | ||
| 104 | } | 144 | } |
| 105 | 145 | ||
| 106 | @Override | 146 | @Override |
| 107 | - public List<MesWmPackageDO> getPackageTree() { | ||
| 108 | - return packageMapper.selectList(); | 147 | + public List<MesWmPackageDO> getPackageSimpleList() { |
| 148 | + return packageMapper.selectList(new LambdaQueryWrapperX<MesWmPackageDO>() | ||
| 149 | + // TODO @AI:这些不要直接写在 service 里,要和 mybatis plus 解耦;通过条件传递下去; | ||
| 150 | + .eq(MesWmPackageDO::getParentId, 0L) | ||
| 151 | + .eq(MesWmPackageDO::getStatus, MesWmPackageStatusEnum.FINISHED.getStatus()) | ||
| 152 | + .orderByDesc(MesWmPackageDO::getId)); | ||
| 109 | } | 153 | } |
| 110 | 154 | ||
| 111 | // ========== 校验方法 ========== | 155 | // ========== 校验方法 ========== |
| @@ -120,7 +164,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | @@ -120,7 +164,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { | ||
| 120 | 164 | ||
| 121 | private MesWmPackageDO validatePackageExistsAndDraft(Long id) { | 165 | private MesWmPackageDO validatePackageExistsAndDraft(Long id) { |
| 122 | MesWmPackageDO packageDO = validatePackageExists(id); | 166 | MesWmPackageDO packageDO = validatePackageExists(id); |
| 123 | - if (ObjUtil.notEqual(MesOrderStatusConstants.PREPARE, packageDO.getStatus())) { | 167 | + if (ObjUtil.notEqual(MesWmPackageStatusEnum.PREPARE.getStatus(), packageDO.getStatus())) { |
| 124 | throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); | 168 | throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); |
| 125 | } | 169 | } |
| 126 | return packageDO; | 170 | return packageDO; |