From a63a8070497607a5b6077e5cd56e3ffbd714c5f0 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 8 Mar 2026 11:06:22 +0800 Subject: [PATCH] ✨ feat(mes): 添加装箱单及装箱明细相关功能 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java | 30 ++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java | 20 ++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java | 180 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java | 160 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java | 36 ------------------------------------ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java | 113 ----------------------------------------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java | 65 ----------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java | 20 -------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java | 79 ------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java | 52 ---------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java | 110 -------------------------------------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java | 86 -------------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java | 29 +++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java | 33 +++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java | 29 ----------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java | 33 --------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java | 69 --------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java | 107 ----------------------------------------------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java | 68 -------------------------------------------------------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java | 149 ----------------------------------------------------------------------------------------------------------------------------------------------------- 34 files changed, 1436 insertions(+), 1356 deletions(-) create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmPackageStatusEnum.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java delete mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java new file mode 100644 index 0000000..b04730b --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageController.java @@ -0,0 +1,166 @@ +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.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.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.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.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - MES 装箱单") +@RestController +@RequestMapping("/mes/wm/package") +@Validated +public class MesWmPackageController { + + @Resource + private MesWmPackageService packageService; + @Resource + private MesMdClientService clientService; + @Resource + private MesMdUnitMeasureService unitMeasureService; + @Resource + private AdminUserApi adminUserApi; + + @PostMapping("/create") + @Operation(summary = "创建装箱单") + @PreAuthorize("@ss.hasPermission('mes:wm-package:create')") + public CommonResult createPackage(@Valid @RequestBody MesWmPackageSaveReqVO createReqVO) { + return success(packageService.createPackage(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "修改装箱单") + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") + public CommonResult updatePackage(@Valid @RequestBody MesWmPackageSaveReqVO updateReqVO) { + packageService.updatePackage(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除装箱单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')") + public CommonResult deletePackage(@RequestParam("id") Long id) { + packageService.deletePackage(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得装箱单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") + public CommonResult getPackage(@RequestParam("id") Long id) { + MesWmPackageDO packageDO = packageService.getPackage(id); + if (packageDO == null) { + return success(null); + } + return success(buildRespVOList(Collections.singletonList(packageDO)).get(0)); + } + + @GetMapping("/page") + @Operation(summary = "获得装箱单分页") + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") + public CommonResult> getPackagePage( + @Valid MesWmPackagePageReqVO pageReqVO) { + PageResult pageResult = packageService.getPackagePage(pageReqVO); + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); + } + + @PutMapping("/finish") + @Operation(summary = "完成装箱单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") + public CommonResult finishPackage(@RequestParam("id") Long id) { + packageService.finishPackage(id); + return success(true); + } + + @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> getPackageSimpleList() { + List list = packageService.getPackageSimpleList(); + return success(buildRespVOList(list)); + } + + // ========== 私有方法 ========== + + private List buildRespVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + // 批量查询客户 + Map clientMap = clientService.getClientMap( + convertSet(list, MesWmPackageDO::getClientId)); + // 批量查询计量单位(尺寸 + 重量) + // TODO @AI:可以通过 CollecionUtils 里,通过 flat 操作; + Set unitIds = new HashSet<>(); + list.forEach(p -> { + if (p.getSizeUnitId() != null) { + unitIds.add(p.getSizeUnitId()); + } + if (p.getWeightUnitId() != null) { + unitIds.add(p.getWeightUnitId()); + } + }); + Map unitMeasureMap = unitMeasureService.getUnitMeasureMap(unitIds); + // 批量查询检查员 + 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()) + .setClientNickname(client.getNickname())); + MapUtils.findAndThen(unitMeasureMap, vo.getSizeUnitId(), + unit -> vo.setSizeUnitName(unit.getName())); + MapUtils.findAndThen(unitMeasureMap, vo.getWeightUnitId(), + unit -> vo.setWeightUnitName(unit.getName())); + MapUtils.findAndThen(userMap, vo.getInspectorUserId(), + user -> vo.setInspectorName(user.getNickname())); + }); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java new file mode 100644 index 0000000..3434700 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/MesWmPackageLineController.java @@ -0,0 +1,160 @@ +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.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.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.packages.MesWmPackageLineService; +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.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - MES 装箱明细") +@RestController +@RequestMapping("/mes/wm/package-line") +@Validated +public class MesWmPackageLineController { + + @Resource + private MesWmPackageLineService packageLineService; + @Resource + private MesMdItemService itemService; + @Resource + private MesMdUnitMeasureService unitMeasureService; + @Resource + private MesProWorkOrderService workOrderService; + @Resource + private MesWmWarehouseService warehouseService; + @Resource + private MesWmWarehouseLocationService locationService; + @Resource + private MesWmWarehouseAreaService areaService; + + @PostMapping("/create") + @Operation(summary = "创建装箱明细") + @PreAuthorize("@ss.hasPermission('mes:wm-package:create')") + public CommonResult createPackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO createReqVO) { + return success(packageLineService.createPackageLine(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "修改装箱明细") + @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") + public CommonResult updatePackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO updateReqVO) { + packageLineService.updatePackageLine(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除装箱明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')") + public CommonResult deletePackageLine(@RequestParam("id") Long id) { + packageLineService.deletePackageLine(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得装箱明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") + public CommonResult getPackageLine(@RequestParam("id") Long id) { + MesWmPackageLineDO line = packageLineService.getPackageLine(id); + if (line == null) { + return success(null); + } + return success(buildRespVOList(Collections.singletonList(line)).get(0)); + } + + @GetMapping("/page") + @Operation(summary = "获得装箱明细分页") + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") + public CommonResult> getPackageLinePage( + @Valid MesWmPackageLinePageReqVO pageReqVO) { + PageResult pageResult = packageLineService.getPackageLinePage(pageReqVO); + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); + } + + @GetMapping("/list-by-package-id") + @Operation(summary = "根据装箱单 ID 获得明细列表") + @Parameter(name = "packageId", description = "装箱单 ID", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") + public CommonResult> getPackageLineListByPackageId( + @RequestParam("packageId") Long packageId) { + List list = packageLineService.getPackageLineListByPackageId(packageId); + return success(buildRespVOList(list)); + } + + // ========== 私有方法 ========== + + private List buildRespVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + // 批量查询物料 + Map itemMap = itemService.getItemMap( + convertSet(list, MesWmPackageLineDO::getItemId)); + // 批量查询计量单位 + Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( + convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); + // 批量查询工单 + Map workOrderMap = workOrderService.getWorkOrderMap( + convertSet(list, MesWmPackageLineDO::getWorkOrderId)); + // 批量查询仓库 + Map warehouseMap = warehouseService.getWarehouseMap( + convertSet(list, MesWmPackageLineDO::getWarehouseId)); + // 批量查询库区 + Map locationMap = locationService.getWarehouseLocationMap( + convertSet(list, MesWmPackageLineDO::getLocationId)); + // 批量查询库位 + Map areaMap = areaService.getWarehouseAreaMap( + convertSet(list, MesWmPackageLineDO::getAreaId)); + // 拼接数据 + return BeanUtils.toBean(list, MesWmPackageLineRespVO.class, vo -> { + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { + vo.setItemCode(item.getCode()).setItemName(item.getName()) + .setSpecification(item.getSpecification()); + MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), + unit -> vo.setUnitMeasureName(unit.getName())); + }); + MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), + workOrder -> vo.setWorkOrderCode(workOrder.getCode()).setBatchCode(workOrder.getBatchCode())); + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), + warehouse -> vo.setWarehouseName(warehouse.getName())); + MapUtils.findAndThen(locationMap, vo.getLocationId(), + location -> vo.setLocationName(location.getName())); + MapUtils.findAndThen(areaMap, vo.getAreaId(), + area -> vo.setAreaName(area.getName())); + }); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java new file mode 100644 index 0000000..dbba7f1 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackagePageReqVO.java @@ -0,0 +1,30 @@ +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; + +@Schema(description = "管理后台 - MES 装箱单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MesWmPackagePageReqVO extends PageParam { + + @Schema(description = "装箱单编号", example = "PKG") + private String code; + + @Schema(description = "销售订单编号", example = "SO") + private String salesOrderCode; + + @Schema(description = "客户 ID", example = "1") + private Long clientId; + + @Schema(description = "父箱 ID", example = "1024") + private Long parentId; + + @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/packages/vo/MesWmPackageRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java new file mode 100644 index 0000000..c032344 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageRespVO.java @@ -0,0 +1,108 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - MES 装箱单 Response VO") +@Data +@Accessors(chain = true) +@ExcelIgnoreUnannotated +public class MesWmPackageRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "装箱单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "PKG20260307001") + @ExcelProperty("装箱单编号") + private String code; + + @Schema(description = "父箱 ID", example = "0") + private Long parentId; + + @Schema(description = "装箱日期") + @ExcelProperty("装箱日期") + private LocalDateTime packageDate; + + @Schema(description = "销售订单编号", example = "SO20260301") + @ExcelProperty("销售订单编号") + private String salesOrderCode; + + @Schema(description = "发票编号", example = "INV20260301") + @ExcelProperty("发票编号") + private String invoiceCode; + + @Schema(description = "客户 ID", example = "1") + private Long clientId; + + @Schema(description = "客户编码", example = "C001") + @ExcelProperty("客户编码") + private String clientCode; + + @Schema(description = "客户名称", example = "某客户") + @ExcelProperty("客户名称") + private String clientName; + + @Schema(description = "客户简称", example = "某客户简称") + private String clientNickname; + + @Schema(description = "箱长度", example = "60.00") + @ExcelProperty("箱长度") + private BigDecimal length; + + @Schema(description = "箱宽度", example = "40.00") + @ExcelProperty("箱宽度") + private BigDecimal width; + + @Schema(description = "箱高度", example = "30.00") + @ExcelProperty("箱高度") + private BigDecimal height; + + @Schema(description = "尺寸单位 ID", example = "1") + private Long sizeUnitId; + + @Schema(description = "尺寸单位名称", example = "厘米") + @ExcelProperty("尺寸单位") + private String sizeUnitName; + + @Schema(description = "净重", example = "10.00") + @ExcelProperty("净重") + private BigDecimal netWeight; + + @Schema(description = "毛重", example = "12.00") + @ExcelProperty("毛重") + private BigDecimal grossWeight; + + @Schema(description = "重量单位 ID", example = "2") + private Long weightUnitId; + + @Schema(description = "重量单位名称", example = "千克") + @ExcelProperty("重量单位") + private String weightUnitName; + + @Schema(description = "检查员用户 ID", example = "1") + private Long inspectorUserId; + + @Schema(description = "检查员姓名", example = "张三") + @ExcelProperty("检查员") + private String inspectorName; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @ExcelProperty("状态") + private Integer status; + + @Schema(description = "备注", example = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java new file mode 100644 index 0000000..43f4934 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/MesWmPackageSaveReqVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") +@Data +public class MesWmPackageSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "装箱单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "PKG20260307001") + @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 LocalDateTime packageDate; + + @Schema(description = "销售订单编号", example = "SO20260301") + private String salesOrderCode; + + @Schema(description = "发票编号", example = "INV20260301") + private String invoiceCode; + + @Schema(description = "客户 ID", example = "1") + private Long clientId; + + @Schema(description = "箱长度", example = "60.00") + private BigDecimal length; + + @Schema(description = "箱宽度", example = "40.00") + private BigDecimal width; + + @Schema(description = "箱高度", example = "30.00") + private BigDecimal height; + + @Schema(description = "尺寸单位 ID", example = "1") + private Long sizeUnitId; + + @Schema(description = "净重", example = "10.00") + private BigDecimal netWeight; + + @Schema(description = "毛重", example = "12.00") + private BigDecimal grossWeight; + + @Schema(description = "重量单位 ID", example = "2") + private Long weightUnitId; + + @Schema(description = "检查员用户 ID", example = "1") + private Long inspectorUserId; + + @Schema(description = "备注", example = "备注") + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java new file mode 100644 index 0000000..7a41ec0 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLinePageReqVO.java @@ -0,0 +1,20 @@ +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; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - MES 装箱明细分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MesWmPackageLinePageReqVO extends PageParam { + + @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "装箱单 ID 不能为空") + private Long packageId; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java new file mode 100644 index 0000000..71736ed --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineRespVO.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - MES 装箱明细 Response VO") +@Data +@Accessors(chain = true) +public class MesWmPackageLineRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long packageId; + + @Schema(description = "库存记录 ID", example = "1") + private Long materialStockId; + + @Schema(description = "产品物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long itemId; + + @Schema(description = "物料编码", example = "M001") + private String itemCode; + + @Schema(description = "物料名称", example = "螺栓") + private String itemName; + + @Schema(description = "规格型号", example = "M10*50") + private String specification; + + @Schema(description = "计量单位名称", example = "个") + private String unitMeasureName; + + @Schema(description = "装箱数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") + private BigDecimal quantity; + + @Schema(description = "生产工单 ID", example = "1") + private Long workOrderId; + + @Schema(description = "生产工单编号", example = "WO20260301") + private String workOrderCode; + + @Schema(description = "批次号", example = "BATCH001") + private String batchCode; + + @Schema(description = "仓库 ID", example = "1") + private Long warehouseId; + + @Schema(description = "仓库名称", example = "成品仓") + private String warehouseName; + + @Schema(description = "库区 ID", example = "1") + private Long locationId; + + @Schema(description = "库区名称", example = "A区") + private String locationName; + + @Schema(description = "库位 ID", example = "1") + private Long areaId; + + @Schema(description = "库位名称", example = "A-01-01") + private String areaName; + + @Schema(description = "有效期") + private LocalDate expireDate; + + @Schema(description = "备注", example = "备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java new file mode 100644 index 0000000..8e447dd --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java @@ -0,0 +1,52 @@ +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; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO") +@Data +public class MesWmPackageLineSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "装箱单 ID 不能为空") + private Long packageId; + + @Schema(description = "库存记录 ID", example = "1") + private Long materialStockId; + + @Schema(description = "产品物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "产品物料不能为空") + private Long itemId; + + @Schema(description = "装箱数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") + @NotNull(message = "装箱数量不能为空") + @DecimalMin(value = "0.01", message = "装箱数量必须大于 0") + private BigDecimal quantity; + + @Schema(description = "生产工单 ID", example = "1") + private Long workOrderId; + + @Schema(description = "仓库 ID", example = "1") + private Long warehouseId; + + @Schema(description = "库区 ID", example = "1") + private Long locationId; + + @Schema(description = "库位 ID", example = "1") + private Long areaId; + + @Schema(description = "有效期") + private LocalDate expireDate; + + @Schema(description = "备注", example = "备注") + private String remark; + +} 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/wmpackage/MesWmPackageController.java deleted file mode 100644 index 87983f3..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageController.java +++ /dev/null @@ -1,180 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; - -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.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.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.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; - -@Tag(name = "管理后台 - MES 装箱单") -@RestController -@RequestMapping("/mes/wm/package") -@Validated -public class MesWmPackageController { - - @Resource - private MesWmPackageService packageService; - @Resource - private MesMdClientService clientService; - @Resource - private MesMdUnitMeasureService unitMeasureService; - @Resource - private AdminUserApi adminUserApi; - - @PostMapping("/create") - @Operation(summary = "创建装箱单") - @PreAuthorize("@ss.hasPermission('mes:wm-package:create')") - public CommonResult createPackage(@Valid @RequestBody MesWmPackageSaveReqVO createReqVO) { - return success(packageService.createPackage(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "修改装箱单") - @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") - public CommonResult updatePackage(@Valid @RequestBody MesWmPackageSaveReqVO updateReqVO) { - packageService.updatePackage(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除装箱单") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')") - public CommonResult deletePackage(@RequestParam("id") Long id) { - packageService.deletePackage(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得装箱单") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult getPackage(@RequestParam("id") Long id) { - MesWmPackageDO packageDO = packageService.getPackage(id); - if (packageDO == null) { - return success(null); - } - return success(buildRespVOList(Collections.singletonList(packageDO)).get(0)); - } - - @GetMapping("/page") - @Operation(summary = "获得装箱单分页") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult> getPackagePage( - @Valid MesWmPackagePageReqVO pageReqVO) { - PageResult pageResult = packageService.getPackagePage(pageReqVO); - 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) - @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") - public CommonResult finishPackage(@RequestParam("id") Long id) { - packageService.finishPackage(id); - return success(true); - } - - @GetMapping("/tree") - @Operation(summary = "获得装箱单树形结构") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult> getPackageTree() { - List list = packageService.getPackageTree(); - List voList = buildRespVOList(list); - // 构建树形结构 - return success(buildTree(voList)); - } - - // ========== 私有方法 ========== - - private List buildRespVOList(List list) { - if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); - } - // 批量查询客户 - Map clientMap = clientService.getClientMap( - convertSet(list, MesWmPackageDO::getClientId)); - // 批量查询计量单位(尺寸 + 重量) - Set unitIds = new HashSet<>(); - list.forEach(p -> { - if (p.getSizeUnitId() != null) { - unitIds.add(p.getSizeUnitId()); - } - if (p.getWeightUnitId() != null) { - unitIds.add(p.getWeightUnitId()); - } - }); - Map unitMeasureMap = unitMeasureService.getUnitMeasureMap(unitIds); - // 批量查询检查员 - 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()) - .setClientNickname(client.getNickname())); - MapUtils.findAndThen(unitMeasureMap, vo.getSizeUnitId(), - unit -> vo.setSizeUnitName(unit.getName())); - MapUtils.findAndThen(unitMeasureMap, vo.getWeightUnitId(), - unit -> vo.setWeightUnitName(unit.getName())); - MapUtils.findAndThen(userMap, vo.getInspectorUserId(), - user -> vo.setInspectorName(user.getNickname())); - }); - } - - 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/wmpackage/MesWmPackageLineController.java deleted file mode 100644 index a15e511..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/MesWmPackageLineController.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage; - -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.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.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 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.validation.Valid; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; - -@Tag(name = "管理后台 - MES 装箱明细") -@RestController -@RequestMapping("/mes/wm/package-line") -@Validated -public class MesWmPackageLineController { - - @Resource - private MesWmPackageLineService packageLineService; - @Resource - private MesMdItemService itemService; - @Resource - private MesMdUnitMeasureService unitMeasureService; - @Resource - private MesProWorkOrderService workOrderService; - @Resource - private MesWmWarehouseService warehouseService; - @Resource - private MesWmWarehouseLocationService locationService; - @Resource - private MesWmWarehouseAreaService areaService; - - @PostMapping("/create") - @Operation(summary = "创建装箱明细") - @PreAuthorize("@ss.hasPermission('mes:wm-package:create')") - public CommonResult createPackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO createReqVO) { - return success(packageLineService.createPackageLine(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "修改装箱明细") - @PreAuthorize("@ss.hasPermission('mes:wm-package:update')") - public CommonResult updatePackageLine(@Valid @RequestBody MesWmPackageLineSaveReqVO updateReqVO) { - packageLineService.updatePackageLine(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除装箱明细") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-package:delete')") - public CommonResult deletePackageLine(@RequestParam("id") Long id) { - packageLineService.deletePackageLine(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得装箱明细") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult getPackageLine(@RequestParam("id") Long id) { - MesWmPackageLineDO line = packageLineService.getPackageLine(id); - if (line == null) { - return success(null); - } - return success(buildRespVOList(Collections.singletonList(line)).get(0)); - } - - @GetMapping("/page") - @Operation(summary = "获得装箱明细分页") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult> getPackageLinePage( - @Valid MesWmPackageLinePageReqVO pageReqVO) { - PageResult pageResult = packageLineService.getPackageLinePage(pageReqVO); - return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); - } - - @GetMapping("/list-by-package-id") - @Operation(summary = "根据装箱单 ID 获得明细列表") - @Parameter(name = "packageId", description = "装箱单 ID", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('mes:wm-package:query')") - public CommonResult> getPackageLineListByPackageId( - @RequestParam("packageId") Long packageId) { - List list = packageLineService.getPackageLineListByPackageId(packageId); - return success(buildRespVOList(list)); - } - - // ========== 私有方法 ========== - - private List buildRespVOList(List list) { - if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); - } - // 批量查询物料 - Map itemMap = itemService.getItemMap( - convertSet(list, MesWmPackageLineDO::getItemId)); - // 批量查询计量单位 - Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( - convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); - // 批量查询工单 - Map workOrderMap = workOrderService.getWorkOrderMap( - convertSet(list, MesWmPackageLineDO::getWorkOrderId)); - // 批量查询仓库 - Map warehouseMap = warehouseService.getWarehouseMap( - convertSet(list, MesWmPackageLineDO::getWarehouseId)); - // 批量查询库区 - Map locationMap = locationService.getWarehouseLocationMap( - convertSet(list, MesWmPackageLineDO::getLocationId)); - // 批量查询库位 - Map areaMap = areaService.getWarehouseAreaMap( - convertSet(list, MesWmPackageLineDO::getAreaId)); - // 拼接数据 - return BeanUtils.toBean(list, MesWmPackageLineRespVO.class, vo -> { - MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { - vo.setItemCode(item.getCode()).setItemName(item.getName()) - .setSpecification(item.getSpecification()); - MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), - unit -> vo.setUnitMeasureName(unit.getName())); - }); - MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), - workOrder -> vo.setWorkOrderCode(workOrder.getCode()).setBatchCode(workOrder.getBatchCode())); - MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), - warehouse -> vo.setWarehouseName(warehouse.getName())); - MapUtils.findAndThen(locationMap, vo.getLocationId(), - location -> vo.setLocationName(location.getName())); - MapUtils.findAndThen(areaMap, vo.getAreaId(), - area -> vo.setAreaName(area.getName())); - }); - } - -} 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/wmpackage/vo/MesWmPackagePageReqVO.java deleted file mode 100644 index 4238e8a..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackagePageReqVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.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 -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MesWmPackagePageReqVO extends PageParam { - - @Schema(description = "装箱单编号", example = "PKG") - private String code; - - @Schema(description = "销售订单编号", example = "SO") - private String soCode; - - @Schema(description = "客户 ID", example = "1") - private Long clientId; - - @Schema(description = "装箱日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) - private LocalDate[] packageDate; - - @Schema(description = "状态", example = "0") - private Integer status; - -} 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/wmpackage/vo/MesWmPackageRespVO.java deleted file mode 100644 index 6b241ed..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageRespVO.java +++ /dev/null @@ -1,113 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; - -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import io.swagger.v3.oas.annotations.media.Schema; -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 -@Accessors(chain = true) -@ExcelIgnoreUnannotated -public class MesWmPackageRespVO { - - @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("编号") - private Long id; - - @Schema(description = "装箱单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "PKG20260307001") - @ExcelProperty("装箱单编号") - private String code; - - @Schema(description = "父箱 ID", example = "0") - private Long parentId; - - @Schema(description = "装箱日期") - @ExcelProperty("装箱日期") - private LocalDate packageDate; - - @Schema(description = "销售订单编号", example = "SO20260301") - @ExcelProperty("销售订单编号") - private String soCode; - - @Schema(description = "发票编号", example = "INV20260301") - @ExcelProperty("发票编号") - private String invoiceCode; - - @Schema(description = "客户 ID", example = "1") - private Long clientId; - - @Schema(description = "客户编码", example = "C001") - @ExcelProperty("客户编码") - private String clientCode; - - @Schema(description = "客户名称", example = "某客户") - @ExcelProperty("客户名称") - private String clientName; - - @Schema(description = "客户简称", example = "某客户简称") - private String clientNickname; - - @Schema(description = "箱长度", example = "60.00") - @ExcelProperty("箱长度") - private BigDecimal length; - - @Schema(description = "箱宽度", example = "40.00") - @ExcelProperty("箱宽度") - private BigDecimal width; - - @Schema(description = "箱高度", example = "30.00") - @ExcelProperty("箱高度") - private BigDecimal height; - - @Schema(description = "尺寸单位 ID", example = "1") - private Long sizeUnitId; - - @Schema(description = "尺寸单位名称", example = "厘米") - @ExcelProperty("尺寸单位") - private String sizeUnitName; - - @Schema(description = "净重", example = "10.00") - @ExcelProperty("净重") - private BigDecimal netWeight; - - @Schema(description = "毛重", example = "12.00") - @ExcelProperty("毛重") - private BigDecimal grossWeight; - - @Schema(description = "重量单位 ID", example = "2") - private Long weightUnitId; - - @Schema(description = "重量单位名称", example = "千克") - @ExcelProperty("重量单位") - private String weightUnitName; - - @Schema(description = "检查员用户 ID", example = "1") - private Long inspectorUserId; - - @Schema(description = "检查员姓名", example = "张三") - @ExcelProperty("检查员") - private String inspectorName; - - @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") - @ExcelProperty("状态") - private Integer status; - - @Schema(description = "备注", example = "备注") - @ExcelProperty("备注") - private String remark; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @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/wmpackage/vo/MesWmPackageSaveReqVO.java deleted file mode 100644 index 18fb504..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/MesWmPackageSaveReqVO.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.math.BigDecimal; -import java.time.LocalDate; - -@Schema(description = "管理后台 - MES 装箱单新增/修改 Request VO") -@Data -public class MesWmPackageSaveReqVO { - - @Schema(description = "编号", example = "1024") - private Long id; - - @Schema(description = "装箱单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "PKG20260307001") - @NotEmpty(message = "装箱单编号不能为空") - private String code; - - @Schema(description = "父箱 ID", example = "0") - private Long parentId; - - @Schema(description = "装箱日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "装箱日期不能为空") - private LocalDate packageDate; - - @Schema(description = "销售订单编号", example = "SO20260301") - private String soCode; - - @Schema(description = "发票编号", example = "INV20260301") - private String invoiceCode; - - @Schema(description = "客户 ID", example = "1") - private Long clientId; - - @Schema(description = "箱长度", example = "60.00") - private BigDecimal length; - - @Schema(description = "箱宽度", example = "40.00") - private BigDecimal width; - - @Schema(description = "箱高度", example = "30.00") - private BigDecimal height; - - @Schema(description = "尺寸单位 ID", example = "1") - private Long sizeUnitId; - - @Schema(description = "净重", example = "10.00") - private BigDecimal netWeight; - - @Schema(description = "毛重", example = "12.00") - private BigDecimal grossWeight; - - @Schema(description = "重量单位 ID", example = "2") - private Long weightUnitId; - - @Schema(description = "检查员用户 ID", example = "1") - private Long inspectorUserId; - - @Schema(description = "备注", example = "备注") - private String remark; - -} 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/wmpackage/vo/line/MesWmPackageLinePageReqVO.java deleted file mode 100644 index c2c8ae2..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLinePageReqVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -@Schema(description = "管理后台 - MES 装箱明细分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class MesWmPackageLinePageReqVO extends PageParam { - - @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "装箱单 ID 不能为空") - private Long packageId; - -} 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/wmpackage/vo/line/MesWmPackageLineRespVO.java deleted file mode 100644 index 6ac33e0..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineRespVO.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; - -@Schema(description = "管理后台 - MES 装箱明细 Response VO") -@Data -@Accessors(chain = true) -public class MesWmPackageLineRespVO { - - @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long id; - - @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long packageId; - - @Schema(description = "库存记录 ID", example = "1") - private Long materialStockId; - - @Schema(description = "产品物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long itemId; - - @Schema(description = "物料编码", example = "M001") - private String itemCode; - - @Schema(description = "物料名称", example = "螺栓") - private String itemName; - - @Schema(description = "规格型号", example = "M10*50") - private String specification; - - @Schema(description = "计量单位名称", example = "个") - private String unitMeasureName; - - @Schema(description = "装箱数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") - private BigDecimal quantity; - - @Schema(description = "生产工单 ID", example = "1") - private Long workOrderId; - - @Schema(description = "生产工单编号", example = "WO20260301") - private String workOrderCode; - - @Schema(description = "批次号", example = "BATCH001") - private String batchCode; - - @Schema(description = "仓库 ID", example = "1") - private Long warehouseId; - - @Schema(description = "仓库名称", example = "成品仓") - private String warehouseName; - - @Schema(description = "库区 ID", example = "1") - private Long locationId; - - @Schema(description = "库区名称", example = "A区") - private String locationName; - - @Schema(description = "库位 ID", example = "1") - private Long areaId; - - @Schema(description = "库位名称", example = "A-01-01") - private String areaName; - - @Schema(description = "有效期") - private LocalDate expireDate; - - @Schema(description = "备注", example = "备注") - private String remark; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - -} 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/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java deleted file mode 100644 index ff63430..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/wmpackage/vo/line/MesWmPackageLineSaveReqVO.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.mes.controller.admin.wm.wmpackage.vo.line; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.DecimalMin; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.math.BigDecimal; -import java.time.LocalDate; - -@Schema(description = "管理后台 - MES 装箱明细新增/修改 Request VO") -@Data -public class MesWmPackageLineSaveReqVO { - - @Schema(description = "编号", example = "1024") - private Long id; - - @Schema(description = "装箱单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "装箱单 ID 不能为空") - private Long packageId; - - @Schema(description = "库存记录 ID", example = "1") - private Long materialStockId; - - @Schema(description = "产品物料 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "产品物料不能为空") - private Long itemId; - - @Schema(description = "装箱数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") - @NotNull(message = "装箱数量不能为空") - @DecimalMin(value = "0.01", message = "装箱数量必须大于 0") - private BigDecimal quantity; - - @Schema(description = "生产工单 ID", example = "1") - private Long workOrderId; - - @Schema(description = "仓库 ID", example = "1") - private Long warehouseId; - - @Schema(description = "库区 ID", example = "1") - private Long locationId; - - @Schema(description = "库位 ID", example = "1") - private Long areaId; - - @Schema(description = "有效期") - private LocalDate expireDate; - - @Schema(description = "备注", example = "备注") - private String remark; - -} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java new file mode 100644 index 0000000..d0f0fc5 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageDO.java @@ -0,0 +1,110 @@ +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 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.*; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * MES 装箱单 DO + */ +@TableName("mes_wm_package") +@KeySequence("mes_wm_package_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MesWmPackageDO extends BaseDO { + + public static final Long PARENT_ID_ROOT = 0L; + + @TableId + private Long id; + /** + * 装箱单编号 + */ + private String code; + /** + * 父箱 ID + */ + private Long parentId; + /** + * 装箱日期 + */ + private LocalDate packageDate; + // DONE @AI:改成 salesOrderCode + // TODO @AI:数据库也改;另外前端也检查下; + /** + * 销售订单编号 + */ + @TableField("so_code") + private String salesOrderCode; + /** + * 发票编号 + */ + private String invoiceCode; + /** + * 客户 ID + * + * 关联 {@link MesMdClientDO#getId()} + */ + private Long clientId; + /** + * 箱长度 + */ + private BigDecimal length; + /** + * 箱宽度 + */ + private BigDecimal width; + /** + * 箱高度 + */ + private BigDecimal height; + /** + * 尺寸单位 ID + * + * 关联 {@link MesMdUnitMeasureDO#getId()} + */ + private Long sizeUnitId; + /** + * 净重 + */ + private BigDecimal netWeight; + /** + * 毛重 + */ + private BigDecimal grossWeight; + /** + * 重量单位 ID + * + * 关联 {@link MesMdUnitMeasureDO#getId()} + */ + private Long weightUnitId; + /** + * 检查员用户 ID + * + * 关联 AdminUserDO 的 id + */ + private Long inspectorUserId; + /** + * 状态 + * + * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java new file mode 100644 index 0000000..09c4d6f --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/packages/MesWmPackageLineDO.java @@ -0,0 +1,86 @@ +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; +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; +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.warehouse.MesWmWarehouseAreaDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * MES 装箱明细 DO + */ +@TableName("mes_wm_package_line") +@KeySequence("mes_wm_package_line_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MesWmPackageLineDO extends BaseDO { + + @TableId + private Long id; + /** + * 装箱单 ID + * + * 关联 {@link MesWmPackageDO#getId()} + */ + private Long packageId; + /** + * 库存记录 ID + */ + private Long materialStockId; + /** + * 产品物料 ID + * + * 关联 {@link MesMdItemDO#getId()} + */ + private Long itemId; + /** + * 装箱数量 + */ + private BigDecimal quantity; + // DONE @芋艿:需要在确认下; + /** + * 生产工单 ID + * + * 关联 {@link MesProWorkOrderDO#getId()} + */ + private Long workOrderId; + /** + * 仓库 ID + * + * 关联 {@link MesWmWarehouseDO#getId()} + */ + private Long warehouseId; + /** + * 库区 ID + * + * 关联 {@link MesWmWarehouseLocationDO#getId()} + */ + private Long locationId; + /** + * 库位 ID + * + * 关联 {@link MesWmWarehouseAreaDO#getId()} + */ + private Long areaId; + /** + * 有效期 + */ + private LocalDate expireDate; + /** + * 备注 + */ + private String remark; + +} 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/wmpackage/MesWmPackageDO.java deleted file mode 100644 index 7837c20..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageDO.java +++ /dev/null @@ -1,110 +0,0 @@ -// TODO @AI:报名改成 packages 避免 Java 关键字冲突; -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; - -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.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -import java.math.BigDecimal; -import java.time.LocalDate; - -/** - * MES 装箱单 DO - */ -@TableName("mes_wm_package") -@KeySequence("mes_wm_package_seq") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MesWmPackageDO extends BaseDO { - - private static final Integer PARENT_ID_ROOT = 0; - - @TableId - private Long id; - /** - * 装箱单编号 - */ - private String code; - /** - * 父箱 ID - */ - private Long parentId; - /** - * 装箱日期 - */ - private LocalDate packageDate; - // TODO @AI:改成 salesOrderCode - /** - * 销售订单编号 - */ - private String soCode; - /** - * 发票编号 - */ - private String invoiceCode; - /** - * 客户 ID - * - * 关联 {@link MesMdClientDO#getId()} - */ - private Long clientId; - /** - * 箱长度 - */ - private BigDecimal length; - /** - * 箱宽度 - */ - private BigDecimal width; - /** - * 箱高度 - */ - private BigDecimal height; - /** - * 尺寸单位 ID - * - * 关联 {@link MesMdUnitMeasureDO#getId()} - */ - private Long sizeUnitId; - /** - * 净重 - */ - private BigDecimal netWeight; - /** - * 毛重 - */ - private BigDecimal grossWeight; - /** - * 重量单位 ID - * - * 关联 {@link MesMdUnitMeasureDO#getId()} - */ - private Long weightUnitId; - /** - * 检查员用户 ID - * - * 关联 AdminUserDO 的 id - */ - private Long inspectorUserId; - // TODO @AI:自定义一个属于自己的枚举类;类似:MesWmSalesNoticeStatusEnum - /** - * 状态 - * - * 枚举 {@link MesOrderStatusConstants#PREPARE}、{@link MesOrderStatusConstants#FINISHED} - */ - private Integer status; - /** - * 备注 - */ - private String remark; - -} 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/wmpackage/MesWmPackageLineDO.java deleted file mode 100644 index e803f7b..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/wmpackage/MesWmPackageLineDO.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.iocoder.yudao.module.mes.dal.dataobject.wm.wmpackage; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; -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.warehouse.MesWmWarehouseAreaDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -import java.math.BigDecimal; -import java.time.LocalDate; - -/** - * MES 装箱明细 DO - */ -@TableName("mes_wm_package_line") -@KeySequence("mes_wm_package_line_seq") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MesWmPackageLineDO extends BaseDO { - - @TableId - private Long id; - /** - * 装箱单 ID - * - * 关联 {@link MesWmPackageDO#getId()} - */ - private Long packageId; - /** - * 库存记录 ID - */ - private Long materialStockId; - /** - * 产品物料 ID - * - * 关联 {@link MesMdItemDO#getId()} - */ - private Long itemId; - /** - * 装箱数量 - */ - private BigDecimal quantity; - // TODO @AI:需要在确认下; - /** - * 生产工单 ID - * - * 关联 {@link MesProWorkOrderDO#getId()} - */ - private Long workOrderId; - /** - * 仓库 ID - * - * 关联 {@link MesWmWarehouseDO#getId()} - */ - private Long warehouseId; - /** - * 库区 ID - * - * 关联 {@link MesWmWarehouseLocationDO#getId()} - */ - private Long locationId; - /** - * 库位 ID - * - * 关联 {@link MesWmWarehouseAreaDO#getId()} - */ - private Long areaId; - /** - * 有效期 - */ - private LocalDate expireDate; - /** - * 备注 - */ - private String remark; - -} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java new file mode 100644 index 0000000..a25a9c9 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java @@ -0,0 +1,29 @@ +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.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; + +@Mapper +public interface MesWmPackageLineMapper extends BaseMapperX { + + default PageResult selectPage(MesWmPackageLinePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MesWmPackageLineDO::getPackageId, reqVO.getPackageId()) + .orderByDesc(MesWmPackageLineDO::getId)); + } + + default List selectListByPackageId(Long packageId) { + return selectList(MesWmPackageLineDO::getPackageId, packageId); + } + + default void deleteByPackageId(Long packageId) { + delete(MesWmPackageLineDO::getPackageId, packageId); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java new file mode 100644 index 0000000..dd6a220 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java @@ -0,0 +1,33 @@ +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.packages.vo.MesWmPackagePageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface MesWmPackageMapper extends BaseMapperX { + + default PageResult selectPage(MesWmPackagePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(MesWmPackageDO::getCode, reqVO.getCode()) + .likeIfPresent(MesWmPackageDO::getSalesOrderCode, reqVO.getSalesOrderCode()) + .eqIfPresent(MesWmPackageDO::getClientId, reqVO.getClientId()) + .eqIfPresent(MesWmPackageDO::getParentId, reqVO.getParentId()) + .eqIfPresent(MesWmPackageDO::getInspectorUserId, reqVO.getInspectorUserId()) + .orderByDesc(MesWmPackageDO::getId)); + } + + default MesWmPackageDO selectByCode(String code) { + return selectOne(MesWmPackageDO::getCode, code); + } + + default List selectListByParentId(Long parentId) { + return selectList(MesWmPackageDO::getParentId, parentId); + } + +} 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/wmpackage/MesWmPackageLineMapper.java deleted file mode 100644 index 43904be..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageLineMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; - -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 org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface MesWmPackageLineMapper extends BaseMapperX { - - default PageResult selectPage(MesWmPackageLinePageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MesWmPackageLineDO::getPackageId, reqVO.getPackageId()) - .orderByDesc(MesWmPackageLineDO::getId)); - } - - default List selectListByPackageId(Long packageId) { - return selectList(MesWmPackageLineDO::getPackageId, packageId); - } - - default void deleteByPackageId(Long packageId) { - delete(MesWmPackageLineDO::getPackageId, packageId); - } - -} 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/wmpackage/MesWmPackageMapper.java deleted file mode 100644 index 4f4c0ff..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/wmpackage/MesWmPackageMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.yudao.module.mes.dal.mysql.wm.wmpackage; - -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 org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -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()) - .eqIfPresent(MesWmPackageDO::getClientId, reqVO.getClientId()) - .betweenIfPresent(MesWmPackageDO::getPackageDate, reqVO.getPackageDate()) - .eqIfPresent(MesWmPackageDO::getStatus, reqVO.getStatus()) - .orderByDesc(MesWmPackageDO::getId)); - } - - default MesWmPackageDO selectByCode(String code) { - return selectOne(MesWmPackageDO::getCode, code); - } - - default List selectListByParentId(Long parentId) { - return selectList(MesWmPackageDO::getParentId, parentId); - } - -} 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/packages/MesWmPackageLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java new file mode 100644 index 0000000..ab50320 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineService.java @@ -0,0 +1,69 @@ +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.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; + +/** + * MES 装箱明细 Service 接口 + */ +public interface MesWmPackageLineService { + + /** + * 创建装箱明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPackageLine(@Valid MesWmPackageLineSaveReqVO createReqVO); + + /** + * 修改装箱明细 + * + * @param updateReqVO 修改信息 + */ + void updatePackageLine(@Valid MesWmPackageLineSaveReqVO updateReqVO); + + /** + * 删除装箱明细 + * + * @param id 编号 + */ + void deletePackageLine(Long id); + + /** + * 获得装箱明细 + * + * @param id 编号 + * @return 装箱明细 + */ + MesWmPackageLineDO getPackageLine(Long id); + + /** + * 获得装箱明细分页 + * + * @param pageReqVO 分页查询 + * @return 分页结果 + */ + PageResult getPackageLinePage(MesWmPackageLinePageReqVO pageReqVO); + + /** + * 根据装箱单 ID 获得明细列表 + * + * @param packageId 装箱单 ID + * @return 明细列表 + */ + List getPackageLineListByPackageId(Long packageId); + + /** + * 根据装箱单 ID 删除所有明细 + * + * @param packageId 装箱单 ID + */ + void deletePackageLineByPackageId(Long packageId); + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java new file mode 100644 index 0000000..14adefb --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java @@ -0,0 +1,100 @@ +package cn.iocoder.yudao.module.mes.service.wm.packages; + +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.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; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +@Service +@Validated +public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { + + @Resource + private MesWmPackageLineMapper packageLineMapper; + @Resource + @Lazy + private MesWmPackageService packageService; + @Resource + private MesMdItemService itemService; + + @Override + public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { + // 校验装箱单状态为草稿 + packageService.validatePackageStatusDraft(createReqVO.getPackageId()); + // 校验产品物料存在 + itemService.validateItemExists(createReqVO.getItemId()); + + // 插入 + MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); + packageLineMapper.insert(line); + return line.getId(); + } + + @Override + public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { + // 校验存在 + MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); + // 校验装箱单状态为草稿 + packageService.validatePackageStatusDraft(line.getPackageId()); + // 校验产品物料存在 + itemService.validateItemExists(updateReqVO.getItemId()); + + // 更新 + MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); + packageLineMapper.updateById(updateObj); + } + + @Override + public void deletePackageLine(Long id) { + // 校验存在 + MesWmPackageLineDO line = validatePackageLineExists(id); + // 校验装箱单状态为草稿 + packageService.validatePackageStatusDraft(line.getPackageId()); + + // 删除 + packageLineMapper.deleteById(id); + } + + @Override + public MesWmPackageLineDO getPackageLine(Long id) { + return packageLineMapper.selectById(id); + } + + @Override + public PageResult getPackageLinePage(MesWmPackageLinePageReqVO pageReqVO) { + return packageLineMapper.selectPage(pageReqVO); + } + + @Override + public List getPackageLineListByPackageId(Long packageId) { + return packageLineMapper.selectListByPackageId(packageId); + } + + @Override + public void deletePackageLineByPackageId(Long packageId) { + packageLineMapper.deleteByPackageId(packageId); + } + + // ========== 校验方法 ========== + + private MesWmPackageLineDO validatePackageLineExists(Long id) { + MesWmPackageLineDO line = packageLineMapper.selectById(id); + if (line == null) { + throw exception(WM_PACKAGE_LINE_NOT_EXISTS); + } + return line; + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java new file mode 100644 index 0000000..da0ed38 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java @@ -0,0 +1,90 @@ +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.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; + +/** + * MES 装箱单 Service 接口 + */ +public interface MesWmPackageService { + + /** + * 创建装箱单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPackage(@Valid MesWmPackageSaveReqVO createReqVO); + + /** + * 修改装箱单 + * + * @param updateReqVO 修改信息 + */ + void updatePackage(@Valid MesWmPackageSaveReqVO updateReqVO); + + /** + * 删除装箱单 + * + * @param id 编号 + */ + void deletePackage(Long id); + + /** + * 获得装箱单 + * + * @param id 编号 + * @return 装箱单 + */ + MesWmPackageDO getPackage(Long id); + + /** + * 获得装箱单分页 + * + * @param pageReqVO 分页查询 + * @return 分页结果 + */ + PageResult getPackagePage(MesWmPackagePageReqVO pageReqVO); + + /** + * 完成装箱单 + * + * @param id 编号 + */ + void finishPackage(Long id); + + /** + * 校验装箱单状态为草稿 + * + * @param packageId 装箱单 ID + */ + 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/packages/MesWmPackageServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java new file mode 100644 index 0000000..456643b --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java @@ -0,0 +1,193 @@ +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.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; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +@Service +@Validated +public class MesWmPackageServiceImpl implements MesWmPackageService { + + @Resource + private MesWmPackageMapper packageMapper; + @Resource + private MesWmPackageLineService packageLineService; + + @Override + public Long createPackage(MesWmPackageSaveReqVO createReqVO) { + // 校验编码唯一性 + validateCodeUnique(null, createReqVO.getCode()); + // 校验父箱存在 + // TODO @AI:parentId 校验都去掉,不传递了; + validateParentExists(createReqVO.getParentId()); + + // 创建装箱单,默认为草稿状态 + MesWmPackageDO packageDO = BeanUtils.toBean(createReqVO, MesWmPackageDO.class); + packageDO.setStatus(MesWmPackageStatusEnum.PREPARE.getStatus()) + .setParentId(MesWmPackageDO.PARENT_ID_ROOT); + packageMapper.insert(packageDO); + return packageDO.getId(); + } + + @Override + public void updatePackage(MesWmPackageSaveReqVO updateReqVO) { + // 校验存在且为草稿 + validatePackageExistsAndDraft(updateReqVO.getId()); + // 校验编码唯一性 + validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); + // TODO @AI:parentId 校验都去掉,不传递了; + // DONE @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; + // 校验父箱存在,且不能选自己或子节点 + validateParentExists(updateReqVO.getParentId()); + if (updateReqVO.getParentId() != null && ObjUtil.equal(updateReqVO.getParentId(), updateReqVO.getId())) { + throw exception(WM_PACKAGE_PARENT_SELF); + } + + // 更新装箱单 + MesWmPackageDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageDO.class); + packageMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePackage(Long id) { + // 校验存在且为草稿 + validatePackageExistsAndDraft(id); + + // 删除装箱明细 + packageLineService.deletePackageLineByPackageId(id); + // 删除装箱单 + packageMapper.deleteById(id); + + // 级联删除子箱 + List children = packageMapper.selectListByParentId(id); + if (CollUtil.isNotEmpty(children)) { + for (MesWmPackageDO child : children) { + deletePackage(child.getId()); + } + } + } + + @Override + public MesWmPackageDO getPackage(Long id) { + return packageMapper.selectById(id); + } + + @Override + public PageResult getPackagePage(MesWmPackagePageReqVO pageReqVO) { + return packageMapper.selectPage(pageReqVO); + } + + @Override + public void finishPackage(Long id) { + // 校验存在且为草稿 + validatePackageExistsAndDraft(id); + + // 更新状态为已完成 + packageMapper.updateById(new MesWmPackageDO() + .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 getPackageSimpleList() { + return packageMapper.selectList(new LambdaQueryWrapperX() + // TODO @AI:这些不要直接写在 service 里,要和 mybatis plus 解耦;通过条件传递下去; + .eq(MesWmPackageDO::getParentId, 0L) + .eq(MesWmPackageDO::getStatus, MesWmPackageStatusEnum.FINISHED.getStatus()) + .orderByDesc(MesWmPackageDO::getId)); + } + + // ========== 校验方法 ========== + + private MesWmPackageDO validatePackageExists(Long id) { + MesWmPackageDO packageDO = packageMapper.selectById(id); + if (packageDO == null) { + throw exception(WM_PACKAGE_NOT_EXISTS); + } + return packageDO; + } + + private MesWmPackageDO validatePackageExistsAndDraft(Long id) { + MesWmPackageDO packageDO = validatePackageExists(id); + if (ObjUtil.notEqual(MesWmPackageStatusEnum.PREPARE.getStatus(), packageDO.getStatus())) { + throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); + } + return packageDO; + } + + private void validateCodeUnique(Long id, String code) { + MesWmPackageDO packageDO = packageMapper.selectByCode(code); + if (packageDO == null) { + return; + } + if (ObjUtil.notEqual(id, packageDO.getId())) { + throw exception(WM_PACKAGE_CODE_DUPLICATE); + } + } + + private void validateParentExists(Long parentId) { + if (parentId == null || parentId == 0L) { + return; + } + MesWmPackageDO parent = packageMapper.selectById(parentId); + if (parent == null) { + throw exception(WM_PACKAGE_PARENT_NOT_EXISTS); + } + } + +} 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/wmpackage/MesWmPackageLineService.java deleted file mode 100644 index d2645e0..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineService.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; - -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 jakarta.validation.Valid; - -import java.util.List; - -/** - * MES 装箱明细 Service 接口 - */ -public interface MesWmPackageLineService { - - /** - * 创建装箱明细 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createPackageLine(@Valid MesWmPackageLineSaveReqVO createReqVO); - - /** - * 修改装箱明细 - * - * @param updateReqVO 修改信息 - */ - void updatePackageLine(@Valid MesWmPackageLineSaveReqVO updateReqVO); - - /** - * 删除装箱明细 - * - * @param id 编号 - */ - void deletePackageLine(Long id); - - /** - * 获得装箱明细 - * - * @param id 编号 - * @return 装箱明细 - */ - MesWmPackageLineDO getPackageLine(Long id); - - /** - * 获得装箱明细分页 - * - * @param pageReqVO 分页查询 - * @return 分页结果 - */ - PageResult getPackageLinePage(MesWmPackageLinePageReqVO pageReqVO); - - /** - * 根据装箱单 ID 获得明细列表 - * - * @param packageId 装箱单 ID - * @return 明细列表 - */ - List getPackageLineListByPackageId(Long packageId); - - /** - * 根据装箱单 ID 删除所有明细 - * - * @param packageId 装箱单 ID - */ - void deletePackageLineByPackageId(Long packageId); - -} 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/wmpackage/MesWmPackageLineServiceImpl.java deleted file mode 100644 index 5657576..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageLineServiceImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; - -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 jakarta.annotation.Resource; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; - -@Service -@Validated -public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { - - @Resource - private MesWmPackageLineMapper packageLineMapper; - @Resource - @Lazy - private MesWmPackageService packageService; - - @Override - public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { - // TODO @AI:检查关联的 packageId(草稿)、itemId - - // 校验装箱单状态为草稿 - validatePackageStatusDraft(createReqVO.getPackageId()); - MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); - packageLineMapper.insert(line); - return line.getId(); - } - - @Override - public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { - // 校验存在 - MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); - // TODO @AI:检查关联的 packageId(草稿)、itemId - - // 校验装箱单状态为草稿 - validatePackageStatusDraft(line.getPackageId()); - MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); - packageLineMapper.updateById(updateObj); - } - - @Override - public void deletePackageLine(Long id) { - // 校验存在 - MesWmPackageLineDO line = validatePackageLineExists(id); - // 校验装箱单状态为草稿 - validatePackageStatusDraft(line.getPackageId()); - - // 删除 - packageLineMapper.deleteById(id); - } - - @Override - public MesWmPackageLineDO getPackageLine(Long id) { - return packageLineMapper.selectById(id); - } - - @Override - public PageResult getPackageLinePage(MesWmPackageLinePageReqVO pageReqVO) { - return packageLineMapper.selectPage(pageReqVO); - } - - @Override - public List getPackageLineListByPackageId(Long packageId) { - return packageLineMapper.selectListByPackageId(packageId); - } - - @Override - public void deletePackageLineByPackageId(Long packageId) { - packageLineMapper.deleteByPackageId(packageId); - } - - // ========== 校验方法 ========== - - private MesWmPackageLineDO validatePackageLineExists(Long id) { - MesWmPackageLineDO line = packageLineMapper.selectById(id); - if (line == null) { - throw exception(WM_PACKAGE_LINE_NOT_EXISTS); - } - 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/wmpackage/MesWmPackageService.java deleted file mode 100644 index 97b4a81..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageService.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; - -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 jakarta.validation.Valid; - -import java.util.List; - -/** - * MES 装箱单 Service 接口 - */ -public interface MesWmPackageService { - - /** - * 创建装箱单 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createPackage(@Valid MesWmPackageSaveReqVO createReqVO); - - /** - * 修改装箱单 - * - * @param updateReqVO 修改信息 - */ - void updatePackage(@Valid MesWmPackageSaveReqVO updateReqVO); - - /** - * 删除装箱单 - * - * @param id 编号 - */ - void deletePackage(Long id); - - /** - * 获得装箱单 - * - * @param id 编号 - * @return 装箱单 - */ - MesWmPackageDO getPackage(Long id); - - /** - * 获得装箱单分页 - * - * @param pageReqVO 分页查询 - * @return 分页结果 - */ - PageResult getPackagePage(MesWmPackagePageReqVO pageReqVO); - - /** - * 完成装箱单 - * - * @param id 编号 - */ - void finishPackage(Long id); - - /** - * 获得装箱单树形结构 - * - * @return 装箱单列表(树形) - */ - List getPackageTree(); - -} 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/wmpackage/MesWmPackageServiceImpl.java deleted file mode 100644 index 31996cc..0000000 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/wmpackage/MesWmPackageServiceImpl.java +++ /dev/null @@ -1,149 +0,0 @@ -package cn.iocoder.yudao.module.mes.service.wm.wmpackage; - -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 jakarta.annotation.Resource; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; - -@Service -@Validated -public class MesWmPackageServiceImpl implements MesWmPackageService { - - @Resource - private MesWmPackageMapper packageMapper; - @Resource - private MesWmPackageLineService packageLineService; - - @Override - public Long createPackage(MesWmPackageSaveReqVO createReqVO) { - // 校验编码唯一性 - validateCodeUnique(null, createReqVO.getCode()); - // 校验父箱存在 - validateParentExists(createReqVO.getParentId()); - - // 创建装箱单,默认为草稿状态 - MesWmPackageDO packageDO = BeanUtils.toBean(createReqVO, MesWmPackageDO.class); - packageDO.setStatus(MesOrderStatusConstants.PREPARE); - if (packageDO.getParentId() == null) { - packageDO.setParentId(0L); - } - packageMapper.insert(packageDO); - return packageDO.getId(); - } - - @Override - public void updatePackage(MesWmPackageSaveReqVO updateReqVO) { - // 校验存在且为草稿 - validatePackageExistsAndDraft(updateReqVO.getId()); - // 校验编码唯一性 - validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); - // TODO @AI:是不是创建一个方法,校验 parent;因为 create 和 update 都需要; - // 校验父箱存在,且不能选自己或子节点 - validateParentExists(updateReqVO.getParentId()); - if (updateReqVO.getParentId() != null && ObjUtil.equal(updateReqVO.getParentId(), updateReqVO.getId())) { - throw exception(WM_PACKAGE_PARENT_SELF); - } - - // 更新装箱单 - MesWmPackageDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageDO.class); - packageMapper.updateById(updateObj); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deletePackage(Long id) { - // 校验存在且为草稿 - validatePackageExistsAndDraft(id); - - // 删除装箱明细 - packageLineService.deletePackageLineByPackageId(id); - // 删除装箱单 - packageMapper.deleteById(id); - - // 级联删除子箱 - List children = packageMapper.selectListByParentId(id); - if (CollUtil.isNotEmpty(children)) { - for (MesWmPackageDO child : children) { - deletePackage(child.getId()); - } - } - } - - @Override - public MesWmPackageDO getPackage(Long id) { - return packageMapper.selectById(id); - } - - @Override - public PageResult getPackagePage(MesWmPackagePageReqVO pageReqVO) { - return packageMapper.selectPage(pageReqVO); - } - - @Override - public void finishPackage(Long id) { - // 校验存在且为草稿 - validatePackageExistsAndDraft(id); - - // 更新状态为已完成 - packageMapper.updateById(new MesWmPackageDO() - .setId(id).setStatus(MesOrderStatusConstants.FINISHED)); - } - - @Override - public List getPackageTree() { - return packageMapper.selectList(); - } - - // ========== 校验方法 ========== - - private MesWmPackageDO validatePackageExists(Long id) { - MesWmPackageDO packageDO = packageMapper.selectById(id); - if (packageDO == null) { - throw exception(WM_PACKAGE_NOT_EXISTS); - } - return packageDO; - } - - private MesWmPackageDO validatePackageExistsAndDraft(Long id) { - MesWmPackageDO packageDO = validatePackageExists(id); - if (ObjUtil.notEqual(MesOrderStatusConstants.PREPARE, packageDO.getStatus())) { - throw exception(WM_PACKAGE_STATUS_NOT_PREPARE); - } - return packageDO; - } - - private void validateCodeUnique(Long id, String code) { - MesWmPackageDO packageDO = packageMapper.selectByCode(code); - if (packageDO == null) { - return; - } - if (ObjUtil.notEqual(id, packageDO.getId())) { - throw exception(WM_PACKAGE_CODE_DUPLICATE); - } - } - - private void validateParentExists(Long parentId) { - if (parentId == null || parentId == 0L) { - return; - } - MesWmPackageDO parent = packageMapper.selectById(parentId); - if (parent == null) { - throw exception(WM_PACKAGE_PARENT_NOT_EXISTS); - } - } - -} -- libgit2 0.21.4