diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java index 87983f3..b04730b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java @@ -1,39 +1,32 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages; import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageRespVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; -import cn.iocoder.yudao.module.mes.service.wm.wmpackage.MesWmPackageService; +import cn.iocoder.yudao.module.mes.service.wm.packages.MesWmPackageService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @@ -97,18 +90,6 @@ public class MesWmPackageController { return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); } - @GetMapping("/export-excel") - @Operation(summary = "导出装箱单 Excel") - @PreAuthorize("@ss.hasPermission('mes:wm-package:export')") - @ApiAccessLog(operateType = EXPORT) - public void exportPackageExcel(@Valid MesWmPackagePageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - PageResult pageResult = packageService.getPackagePage(pageReqVO); - ExcelUtils.write(response, "装箱单.xls", "数据", MesWmPackageRespVO.class, - buildRespVOList(pageResult.getList())); - } - @PutMapping("/finish") @Operation(summary = "完成装箱单") @Parameter(name = "id", description = "编号", required = true) @@ -118,14 +99,30 @@ public class MesWmPackageController { return success(true); } - @GetMapping("/tree") - @Operation(summary = "获得装箱单树形结构") + @PutMapping("/add-sub-package") + @Operation(summary = "添加子箱") + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") + public CommonResult addSubPackage(@RequestParam("parentId") Long parentId, + @RequestParam("childId") Long childId) { + packageService.addSubPackage(parentId, childId); + return success(true); + } + + @PutMapping("/remove-sub-package") + @Operation(summary = "移除子箱") + @Parameter(name = "childId", description = "子箱编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") + public CommonResult removeSubPackage(@RequestParam("childId") Long childId) { + packageService.removeSubPackage(childId); + return success(true); + } + + @GetMapping("/simple-list") + @Operation(summary = "获取装箱单精简列表") @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult> getPackageTree() { - List list = packageService.getPackageTree(); - List voList = buildRespVOList(list); - // 构建树形结构 - return success(buildTree(voList)); + public CommonResult> getPackageSimpleList() { + List list = packageService.getPackageSimpleList(); + return success(buildRespVOList(list)); } // ========== 私有方法 ========== @@ -138,6 +135,7 @@ public class MesWmPackageController { Map clientMap = clientService.getClientMap( convertSet(list, MesWmPackageDO::getClientId)); // 批量查询计量单位(尺寸 + 重量) + // TODO @AI:可以通过 CollecionUtils 里,通过 flat 操作; Set unitIds = new HashSet<>(); list.forEach(p -> { if (p.getSizeUnitId() != null) { @@ -151,7 +149,7 @@ public class MesWmPackageController { // 批量查询检查员 Map userMap = adminUserApi.getUserMap( convertSet(list, MesWmPackageDO::getInspectorUserId)); - + // 构建返回结果 return BeanUtils.toBean(list, MesWmPackageRespVO.class, vo -> { MapUtils.findAndThen(clientMap, vo.getClientId(), client -> vo.setClientCode(client.getCode()).setClientName(client.getName()) @@ -165,16 +163,4 @@ public class MesWmPackageController { }); } - private List buildTree(List list) { - // 按 parentId 分组 - Map> parentMap = list.stream() - .collect(Collectors.groupingBy(vo -> vo.getParentId() != null ? vo.getParentId() : 0L)); - // 设置 children - list.forEach(vo -> vo.setChildren(parentMap.get(vo.getId()))); - // 返回顶级节点(parentId == 0 或 parentId == null) - return list.stream() - .filter(vo -> vo.getParentId() == null || vo.getParentId() == 0L) - .collect(Collectors.toList()); - } - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java index a15e511..3434700 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java @@ -1,27 +1,27 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineRespVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; -import cn.iocoder.yudao.module.mes.service.wm.wmpackage.MesWmPackageLineService; +import cn.iocoder.yudao.module.mes.service.wm.packages.MesWmPackageLineService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java index 4238e8a..dbba7f1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java @@ -1,15 +1,10 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDate; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; @Schema(description = "管理后台 - MES 装箱单分页 Request VO") @Data @@ -21,16 +16,15 @@ public class MesWmPackagePageReqVO extends PageParam { private String code; @Schema(description = "销售订单编号", example = "SO") - private String soCode; + private String salesOrderCode; @Schema(description = "客户 ID", example = "1") private Long clientId; - @Schema(description = "装箱日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) - private LocalDate[] packageDate; + @Schema(description = "父箱 ID", example = "1024") + private Long parentId; - @Schema(description = "状态", example = "0") - private Integer status; + @Schema(description = "检查员用户 ID", example = "1") + private Long inspectorUserId; } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java index 6b241ed..c032344 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; @@ -7,9 +7,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.math.BigDecimal; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.List; @Schema(description = "管理后台 - MES 装箱单 Response VO") @Data @@ -30,11 +28,11 @@ public class MesWmPackageRespVO { @Schema(description = "装箱日期") @ExcelProperty("装箱日期") - private LocalDate packageDate; + private LocalDateTime packageDate; @Schema(description = "销售订单编号", example = "SO20260301") @ExcelProperty("销售订单编号") - private String soCode; + private String salesOrderCode; @Schema(description = "发票编号", example = "INV20260301") @ExcelProperty("发票编号") @@ -107,7 +105,4 @@ public class MesWmPackageRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; - @Schema(description = "子箱列表") - private List children; - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java index 18fb504..43f4934 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; @@ -6,7 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDate; +import java.time.LocalDateTime; @Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") @Data @@ -19,15 +19,16 @@ public class MesWmPackageSaveReqVO { @NotEmpty(message = "装箱单编号不能为空") private String code; + // TODO @AI:不传递 parentId;默认都是 = 0; @Schema(description = "父箱 ID", example = "0") private Long parentId; @Schema(description = "装箱日期", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "装箱日期不能为空") - private LocalDate packageDate; + private LocalDateTime packageDate; @Schema(description = "销售订单编号", example = "SO20260301") - private String soCode; + private String salesOrderCode; @Schema(description = "发票编号", example = "INV20260301") private String invoiceCode; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java index c2c8ae2..7a41ec0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java index 6ac33e0..71736ed 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java index ff63430..8e447dd 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.DecimalMin; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java index 7837c20..d0f0fc5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java @@ -1,11 +1,10 @@ -// TODO @AI:报名改成 packages 避免 Java 关键字冲突; -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -26,7 +25,7 @@ import java.time.LocalDate; @AllArgsConstructor public class MesWmPackageDO extends BaseDO { - private static final Integer PARENT_ID_ROOT = 0; + public static final Long PARENT_ID_ROOT = 0L; @TableId private Long id; @@ -42,11 +41,13 @@ public class MesWmPackageDO extends BaseDO { * 装箱日期 */ private LocalDate packageDate; - // TODO @AI:改成 salesOrderCode + // DONE @AI:改成 salesOrderCode + // TODO @AI:数据库也改;另外前端也检查下; /** * 销售订单编号 */ - private String soCode; + @TableField("so_code") + private String salesOrderCode; /** * 发票编号 */ @@ -95,11 +96,10 @@ public class MesWmPackageDO extends BaseDO { * 关联 AdminUserDO 的 id */ private Long inspectorUserId; - // TODO @AI:自定义一个属于自己的枚举类;类似:MesWmSalesNoticeStatusEnum /** * 状态 * - * 枚举 {@link MesOrderStatusConstants#PREPARE}、{@link MesOrderStatusConstants#FINISHED} + * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum} */ private Integer status; /** diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java index e803f7b..09c4d6f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; @@ -49,7 +49,7 @@ public class MesWmPackageLineDO extends BaseDO { * 装箱数量 */ private BigDecimal quantity; - // TODO @AI:需要在确认下; + // DONE @芋艿:需要在确认下; /** * 生产工单 ID * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java index 43904be..a25a9c9 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; +package cn.iocoder.yudao.module.mes.dal.mysql.wm.packages; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java index 4f4c0ff..dd6a220 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java @@ -1,10 +1,10 @@ -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; +package cn.iocoder.yudao.module.mes.dal.mysql.wm.packages; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -15,10 +15,10 @@ public interface MesWmPackageMapper extends BaseMapperX { default PageResult selectPage(MesWmPackagePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(MesWmPackageDO::getCode, reqVO.getCode()) - .likeIfPresent(MesWmPackageDO::getSoCode, reqVO.getSoCode()) + .likeIfPresent(MesWmPackageDO::getSalesOrderCode, reqVO.getSalesOrderCode()) .eqIfPresent(MesWmPackageDO::getClientId, reqVO.getClientId()) - .betweenIfPresent(MesWmPackageDO::getPackageDate, reqVO.getPackageDate()) - .eqIfPresent(MesWmPackageDO::getStatus, reqVO.getStatus()) + .eqIfPresent(MesWmPackageDO::getParentId, reqVO.getParentId()) + .eqIfPresent(MesWmPackageDO::getInspectorUserId, reqVO.getInspectorUserId()) .orderByDesc(MesWmPackageDO::getId)); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 3dd3090..a35549b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -517,6 +517,7 @@ public interface ErrorCodeConstants { ErrorCode WM_PACKAGE_STATUS_NOT_PREPARE = new ErrorCode(1_040_740_002, "只有草稿状态才允许此操作"); ErrorCode WM_PACKAGE_PARENT_NOT_EXISTS = new ErrorCode(1_040_740_003, "父箱不存在"); ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, "不能选择自己作为父箱"); + ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, "该装箱单已有父箱,不能重复添加"); ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, "装箱明细不存在"); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java new file mode 100644 index 0000000..383c846 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.enums.wm; + +import cn.iocoder.yudao.framework.common.core.ArrayValuable; +import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * MES 装箱单状态枚举 + */ +@Getter +@AllArgsConstructor +public enum MesWmPackageStatusEnum implements ArrayValuable { + + // TODO @AI:需要增加下: * 对应方法:{@link MesWmOutsourceIssueService#createOutsourceIssue(MesWmOutsourceIssueSaveReqVO)} + /** + * 草稿 + */ + PREPARE(MesOrderStatusConstants.PREPARE, "草稿"), + /** + * 已完成 + */ + FINISHED(MesOrderStatusConstants.FINISHED, "已完成"); + + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmPackageStatusEnum::getStatus) + .toArray(Integer[]::new); + + /** + * 状态值 + */ + private final Integer status; + /** + * 状态名 + */ + private final String name; + + @Override + public Integer[] array() { + return ARRAYS; + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java index d2645e0..ab50320 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; +package cn.iocoder.yudao.module.mes.service.wm.packages; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; import jakarta.validation.Valid; import java.util.List; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java index 5657576..14adefb 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java @@ -1,14 +1,12 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; +package cn.iocoder.yudao.module.mes.service.wm.packages; -import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLinePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line.MesWmPackageLineSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageLineDO; -import cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage.MesWmPackageLineMapper; -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLinePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPackageLineSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; +import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -28,13 +26,17 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { @Resource @Lazy private MesWmPackageService packageService; + @Resource + private MesMdItemService itemService; @Override public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { - // TODO @AI:检查关联的 packageId(草稿)、itemId - // 校验装箱单状态为草稿 - validatePackageStatusDraft(createReqVO.getPackageId()); + packageService.validatePackageStatusDraft(createReqVO.getPackageId()); + // 校验产品物料存在 + itemService.validateItemExists(createReqVO.getItemId()); + + // 插入 MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); packageLineMapper.insert(line); return line.getId(); @@ -44,10 +46,12 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { // 校验存在 MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); - // TODO @AI:检查关联的 packageId(草稿)、itemId - // 校验装箱单状态为草稿 - validatePackageStatusDraft(line.getPackageId()); + packageService.validatePackageStatusDraft(line.getPackageId()); + // 校验产品物料存在 + itemService.validateItemExists(updateReqVO.getItemId()); + + // 更新 MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); packageLineMapper.updateById(updateObj); } @@ -57,7 +61,7 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { // 校验存在 MesWmPackageLineDO line = validatePackageLineExists(id); // 校验装箱单状态为草稿 - validatePackageStatusDraft(line.getPackageId()); + packageService.validatePackageStatusDraft(line.getPackageId()); // 删除 packageLineMapper.deleteById(id); @@ -93,15 +97,4 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { return line; } - // TODO @AI:这个方法,应该 packageService 实现; - private void validatePackageStatusDraft(Long packageId) { - MesWmPackageDO packageDO = packageService.getPackage(packageId); - if (packageDO == null) { - throw exception(WM_PACKAGE_NOT_EXISTS); - } - if (ObjUtil.notEqual(MesOrderStatusConstants.PREPARE, packageDO.getStatus())) { - throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); - } - } - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java index 97b4a81..da0ed38 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java @@ -1,9 +1,9 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; +package cn.iocoder.yudao.module.mes.service.wm.packages; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; import jakarta.validation.Valid; import java.util.List; @@ -59,10 +59,32 @@ public interface MesWmPackageService { void finishPackage(Long id); /** - * 获得装箱单树形结构 + * 校验装箱单状态为草稿 * - * @return 装箱单列表(树形) + * @param packageId 装箱单 ID */ - List getPackageTree(); + void validatePackageStatusDraft(Long packageId); + + /** + * 添加子箱 + * + * @param parentId 父箱 ID + * @param childId 子箱 ID + */ + void addSubPackage(Long parentId, Long childId); + + /** + * 移除子箱 + * + * @param childId 子箱 ID + */ + void removeSubPackage(Long childId); + + /** + * 获取装箱单精简列表(无父箱 + 已完成状态) + * + * @return 装箱单列表 + */ + List getPackageSimpleList(); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java index 31996cc..456643b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java @@ -1,14 +1,15 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; +package cn.iocoder.yudao.module.mes.service.wm.packages; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackagePageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.MesWmPackageSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage.MesWmPackageDO; -import cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage.MesWmPackageMapper; -import cn.iocoder.yudao.module.mes.enums.MesOrderStatusConstants; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; +import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,14 +34,13 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { // 校验编码唯一性 validateCodeUnique(null, createReqVO.getCode()); // 校验父箱存在 + // TODO @AI:parentId 校验都去掉,不传递了; validateParentExists(createReqVO.getParentId()); // 创建装箱单,默认为草稿状态 MesWmPackageDO packageDO = BeanUtils.toBean(createReqVO, MesWmPackageDO.class); - packageDO.setStatus(MesOrderStatusConstants.PREPARE); - if (packageDO.getParentId() == null) { - packageDO.setParentId(0L); - } + packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus()) + .setParentId(MesWmPackageDO.PARENT_ID_ROOT); packageMapper.insert(packageDO); return packageDO.getId(); } @@ -51,7 +51,8 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { validatePackageExistsAndDraft(updateReqVO.getId()); // 校验编码唯一性 validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); - // TODO @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; + // TODO @AI:parentId 校验都去掉,不传递了; + // DONE @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; // 校验父箱存在,且不能选自己或子节点 validateParentExists(updateReqVO.getParentId()); if (updateReqVO.getParentId() != null && ObjUtil.equal(updateReqVO.getParentId(), updateReqVO.getId())) { @@ -100,12 +101,55 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { // 更新状态为已完成 packageMapper.updateById(new MesWmPackageDO() - .setId(id).setStatus(MesOrderStatusConstants.FINISHED)); + .setId(id).setStatus(MesWmPackageStatusEnum.FINISHED.getStatus())); + } + + @Override + public void validatePackageStatusDraft(Long packageId) { + validatePackageExistsAndDraft(packageId); + } + + @Override + public void addSubPackage(Long parentId, Long childId) { + // 校验父箱存在且为草稿 + validatePackageExistsAndDraft(parentId); + // 校验子箱存在 + MesWmPackageDO child = validatePackageExists(childId); + // TODO @AI:参考 validateParentDept 的实现; + // 校验子箱没有父箱(parentId 为 0 或 null) + if (child.getParentId() != null && child.getParentId() != 0L) { + throw exception(WM_PACKAGE_CHILD_HAS_PARENT); + } + // 不能将自己作为子箱 + if (ObjUtil.equal(parentId, childId)) { + throw exception(WM_PACKAGE_PARENT_SELF); + } + + // 设置子箱的 parentId + packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(parentId)); + } + + @Override + public void removeSubPackage(Long childId) { + // 校验子箱存在 + MesWmPackageDO child = validatePackageExists(childId); + // 校验父箱存在且为草稿 + // TODO @AI:notEquals(null, 和 MesWmPackageDO.PARENT_ID_ROOT) + if (child.getParentId() != null && child.getParentId() != 0L) { + validatePackageExistsAndDraft(child.getParentId()); + } + + // 清除 parentId + packageMapper.updateById(new MesWmPackageDO().setId(childId).setParentId(MesWmPackageDO.PARENT_ID_ROOT)); } @Override - public List getPackageTree() { - return packageMapper.selectList(); + public List getPackageSimpleList() { + return packageMapper.selectList(new LambdaQueryWrapperX() + // TODO @AI:这些不要直接写在 service 里,要和 mybatis plus 解耦;通过条件传递下去; + .eq(MesWmPackageDO::getParentId, 0L) + .eq(MesWmPackageDO::getStatus, MesWmPackageStatusEnum.FINISHED.getStatus()) + .orderByDesc(MesWmPackageDO::getId)); } // ========== 校验方法 ========== @@ -120,7 +164,7 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { private MesWmPackageDO validatePackageExistsAndDraft(Long id) { MesWmPackageDO packageDO = validatePackageExists(id); - if (ObjUtil.notEqual(MesOrderStatusConstants.PREPARE, packageDO.getStatus())) { + if (ObjUtil.notEqual(MesWmPackageStatusEnum.PREPARE.getStatus(), packageDO.getStatus())) { throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); } return packageDO;