From 0688ca49d9de12d75211864afeaf6e346390bbd2 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Tue, 9 Jun 2026 09:41:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E5=8C=85=E8=A3=85?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/erp/enums/ErrorCodeConstants.java | 5 + .../product/ErpPackagingSchemeController.java | 108 +++++++++++++++ .../ErpPackagingSchemePageReqVO.java | 34 +++++ .../ErpPackagingSchemeRespVO.java | 56 ++++++++ .../ErpPackagingSchemeSaveReqVO.java | 48 +++++++ .../product/ErpPackagingSchemeDO.java | 46 +++++++ .../product/ErpPackagingSchemeMapper.java | 36 +++++ .../product/ErpPackagingSchemeService.java | 25 ++++ .../ErpPackagingSchemeServiceImpl.java | 130 ++++++++++++++++++ 9 files changed, 488 insertions(+) create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpPackagingSchemeController.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemePageReqVO.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeRespVO.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeSaveReqVO.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/product/ErpPackagingSchemeDO.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpPackagingSchemeMapper.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeService.java create mode 100644 yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeServiceImpl.java diff --git a/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java index 6d46f1093..30f4c5977 100644 --- a/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java +++ b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java @@ -13,6 +13,11 @@ public interface ErrorCodeConstants { ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_030_100_000, "供应商不存在"); ErrorCode SUPPLIER_NOT_ENABLE = new ErrorCode(1_030_100_000, "供应商({})未启用"); + // ========== ERP 包装方案(1-030-104-000) ========== + ErrorCode PACKAGING_SCHEME_NOT_EXISTS = new ErrorCode(1_030_104_000, "包装方案不存在"); + ErrorCode PACKAGING_SCHEME_CODE_DUPLICATE = new ErrorCode(1_030_104_001, "包装方案编码已存在"); + ErrorCode PACKAGING_SCHEME_NAME_DUPLICATE = new ErrorCode(1_030_104_002, "包装方案名称已存在"); + // ========== ERP 采购订单(1-030-101-000) ========== ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_030_101_000, "采购订单不存在"); ErrorCode PURCHASE_ORDER_DELETE_FAIL_APPROVE = new ErrorCode(1_030_101_001, "采购订单({})已审核,无法删除"); diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpPackagingSchemeController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpPackagingSchemeController.java new file mode 100644 index 000000000..6e71b1d22 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpPackagingSchemeController.java @@ -0,0 +1,108 @@ +package cn.iocoder.yudao.module.erp.controller.admin.product; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +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.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemePageReqVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemeRespVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemeSaveReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO; +import cn.iocoder.yudao.module.erp.service.product.ErpPackagingSchemeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +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.convertList; + +@Tag(name = "管理后台 - ERP 包装方案") +@RestController +@RequestMapping("/erp/packaging-scheme") +@Validated +public class ErpPackagingSchemeController { + + @Resource + private ErpPackagingSchemeService packagingSchemeService; + + @PostMapping("/create") + @Operation(summary = "创建包装方案") + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:create')") + public CommonResult createPackagingScheme(@Valid @RequestBody ErpPackagingSchemeSaveReqVO createReqVO) { + return success(packagingSchemeService.createPackagingScheme(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新包装方案") + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:update')") + public CommonResult updatePackagingScheme(@Valid @RequestBody ErpPackagingSchemeSaveReqVO updateReqVO) { + packagingSchemeService.updatePackagingScheme(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除包装方案") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:delete')") + public CommonResult deletePackagingScheme(@RequestParam("id") Long id) { + packagingSchemeService.deletePackagingScheme(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得包装方案") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:query')") + public CommonResult getPackagingScheme(@RequestParam("id") Long id) { + ErpPackagingSchemeDO scheme = packagingSchemeService.getPackagingScheme(id); + return success(BeanUtils.toBean(scheme, ErpPackagingSchemeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得包装方案分页") + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:query')") + public CommonResult> getPackagingSchemePage(@Valid ErpPackagingSchemePageReqVO pageReqVO) { + PageResult pageResult = packagingSchemeService.getPackagingSchemePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ErpPackagingSchemeRespVO.class)); + } + + @GetMapping("/simple-list") + @Operation(summary = "获得包装方案精简列表", description = "只包含已启用的包装方案") + public CommonResult> getPackagingSchemeSimpleList() { + List list = packagingSchemeService.getPackagingSchemeListByStatus(CommonStatusEnum.ENABLE.getStatus()); + return success(convertList(list, item -> BeanUtils.toBean(item, ErpPackagingSchemeRespVO.class))); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出包装方案 Excel") + @PreAuthorize("@ss.hasPermission('erp:packaging-scheme:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPackagingSchemeExcel(@Valid ErpPackagingSchemePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = packagingSchemeService.getPackagingSchemePage(pageReqVO).getList(); + ExcelUtils.write(response, "包装方案.xls", "数据", ErpPackagingSchemeRespVO.class, + BeanUtils.toBean(list, ErpPackagingSchemeRespVO.class)); + } + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemePageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemePageReqVO.java new file mode 100644 index 000000000..0e2e987f2 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemePageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme; + +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.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - ERP 包装方案分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ErpPackagingSchemePageReqVO extends PageParam { + + @Schema(description = "方案编码", example = "BZFA202501010001") + private String code; + + @Schema(description = "方案名称", example = "标准包装方案") + private String name; + + @Schema(description = "状态", example = "0") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private List createTime; + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeRespVO.java new file mode 100644 index 000000000..41545bf1a --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - ERP 包装方案 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ErpPackagingSchemeRespVO { + + @Schema(description = "包装方案编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "方案编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "BZFA202501010001") + @ExcelProperty("方案编码") + private String code; + + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "标准包装方案") + @ExcelProperty("方案名称") + private String name; + + @Schema(description = "每包数量(件)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @ExcelProperty("每包数量(件)") + private BigDecimal packageQuantity; + + @Schema(description = "每托包数(包)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") + @ExcelProperty("每托包数(包)") + private BigDecimal palletPackageQuantity; + + @Schema(description = "每托总数量(件)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000") + @ExcelProperty("每托总数量(件)") + private BigDecimal palletTotalQuantity; + + @Schema(description = "备注", example = "默认包装") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeSaveReqVO.java new file mode 100644 index 000000000..9e527862f --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/packagingscheme/ErpPackagingSchemeSaveReqVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - ERP 包装方案新增/修改 Request VO") +@Data +public class ErpPackagingSchemeSaveReqVO { + + @Schema(description = "包装方案编号", example = "1") + private Long id; + + @Schema(description = "方案编码", example = "BZFA202501010001") + private String code; + + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "标准包装方案") + @NotBlank(message = "方案名称不能为空") + private String name; + + @Schema(description = "每包数量(件)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @NotNull(message = "每包数量不能为空") + @DecimalMin(value = "0", inclusive = false, message = "每包数量必须大于 0") + private BigDecimal packageQuantity; + + @Schema(description = "每托包数(包)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") + @NotNull(message = "每托包数不能为空") + @DecimalMin(value = "0", inclusive = false, message = "每托包数必须大于 0") + private BigDecimal palletPackageQuantity; + + @Schema(description = "每托总数量(件)", example = "2000") + private BigDecimal palletTotalQuantity; + + @Schema(description = "备注", example = "默认包装") + private String remark; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @NotNull(message = "状态不能为空") + @InEnum(CommonStatusEnum.class) + private Integer status; + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/product/ErpPackagingSchemeDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/product/ErpPackagingSchemeDO.java new file mode 100644 index 000000000..05dc16ae7 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/product/ErpPackagingSchemeDO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.erp.dal.dataobject.product; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.math.BigDecimal; + +/** + * ERP 包装方案 DO + */ +@TableName("erp_packaging_scheme") +@KeySequence("erp_packaging_scheme_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ErpPackagingSchemeDO extends BaseDO { + + @TableId + private Long id; + + private String code; + + private String name; + + private BigDecimal packageQuantity; + + private BigDecimal palletPackageQuantity; + + private BigDecimal palletTotalQuantity; + + private String remark; + + private Integer status; + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpPackagingSchemeMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpPackagingSchemeMapper.java new file mode 100644 index 000000000..cae9ee6aa --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpPackagingSchemeMapper.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.erp.dal.mysql.product; + +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.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemePageReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ErpPackagingSchemeMapper extends BaseMapperX { + + default PageResult selectPage(ErpPackagingSchemePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ErpPackagingSchemeDO::getCode, reqVO.getCode()) + .likeIfPresent(ErpPackagingSchemeDO::getName, reqVO.getName()) + .eqIfPresent(ErpPackagingSchemeDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ErpPackagingSchemeDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ErpPackagingSchemeDO::getId)); + } + + default ErpPackagingSchemeDO selectByCode(String code) { + return selectOne(ErpPackagingSchemeDO::getCode, code); + } + + default ErpPackagingSchemeDO selectByName(String name) { + return selectOne(ErpPackagingSchemeDO::getName, name); + } + + default List selectListByStatus(Integer status) { + return selectList(ErpPackagingSchemeDO::getStatus, status); + } + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeService.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeService.java new file mode 100644 index 000000000..03e3acacf --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeService.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.erp.service.product; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemePageReqVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemeSaveReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO; + +import javax.validation.Valid; +import java.util.List; + +public interface ErpPackagingSchemeService { + + Long createPackagingScheme(@Valid ErpPackagingSchemeSaveReqVO createReqVO); + + void updatePackagingScheme(@Valid ErpPackagingSchemeSaveReqVO updateReqVO); + + void deletePackagingScheme(Long id); + + ErpPackagingSchemeDO getPackagingScheme(Long id); + + PageResult getPackagingSchemePage(ErpPackagingSchemePageReqVO pageReqVO); + + List getPackagingSchemeListByStatus(Integer status); + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeServiceImpl.java new file mode 100644 index 000000000..67d016355 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpPackagingSchemeServiceImpl.java @@ -0,0 +1,130 @@ +package cn.iocoder.yudao.module.erp.service.product; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemePageReqVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.ErpPackagingSchemeSaveReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO; +import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpPackagingSchemeMapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_CODE_DUPLICATE; +import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_NAME_DUPLICATE; +import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_NOT_EXISTS; + +@Service +@Validated +public class ErpPackagingSchemeServiceImpl implements ErpPackagingSchemeService { + + @Resource + private ErpPackagingSchemeMapper packagingSchemeMapper; + + @Autowired + private AutoCodeUtil autoCodeUtil; + + @Override + public Long createPackagingScheme(ErpPackagingSchemeSaveReqVO createReqVO) { + validatePackagingSchemeNameUnique(null, createReqVO.getName()); + String code = createReqVO.getCode(); + if (StringUtils.isBlank(code)) { + code = autoCodeUtil.genSerialCode("PACKAGING_SCHEME_CODE_GENERATE", null); + } else { + validatePackagingSchemeCodeUnique(null, code); + } + ErpPackagingSchemeDO packagingScheme = BeanUtils.toBean(createReqVO, ErpPackagingSchemeDO.class); + packagingScheme.setCode(code); + packagingScheme.setPalletTotalQuantity(calculatePalletTotalQuantity( + createReqVO.getPackageQuantity(), createReqVO.getPalletPackageQuantity(), createReqVO.getPalletTotalQuantity())); + packagingSchemeMapper.insert(packagingScheme); + return packagingScheme.getId(); + } + + @Override + public void updatePackagingScheme(ErpPackagingSchemeSaveReqVO updateReqVO) { + ErpPackagingSchemeDO dbScheme = getRequiredPackagingScheme(updateReqVO.getId()); + validatePackagingSchemeNameUnique(updateReqVO.getId(), updateReqVO.getName()); + String code = StringUtils.isBlank(updateReqVO.getCode()) ? dbScheme.getCode() : updateReqVO.getCode(); + validatePackagingSchemeCodeUnique(updateReqVO.getId(), code); + ErpPackagingSchemeDO updateObj = BeanUtils.toBean(updateReqVO, ErpPackagingSchemeDO.class); + updateObj.setCode(code); + updateObj.setPalletTotalQuantity(calculatePalletTotalQuantity( + updateReqVO.getPackageQuantity(), updateReqVO.getPalletPackageQuantity(), updateReqVO.getPalletTotalQuantity())); + packagingSchemeMapper.updateById(updateObj); + } + + @Override + public void deletePackagingScheme(Long id) { + validatePackagingSchemeExists(id); + packagingSchemeMapper.deleteById(id); + } + + private void validatePackagingSchemeExists(Long id) { + if (packagingSchemeMapper.selectById(id) == null) { + throw exception(PACKAGING_SCHEME_NOT_EXISTS); + } + } + + private ErpPackagingSchemeDO getRequiredPackagingScheme(Long id) { + ErpPackagingSchemeDO scheme = packagingSchemeMapper.selectById(id); + if (scheme == null) { + throw exception(PACKAGING_SCHEME_NOT_EXISTS); + } + return scheme; + } + + private void validatePackagingSchemeNameUnique(Long id, String name) { + ErpPackagingSchemeDO scheme = packagingSchemeMapper.selectByName(name); + if (scheme == null) { + return; + } + if (id == null || !scheme.getId().equals(id)) { + throw exception(PACKAGING_SCHEME_NAME_DUPLICATE); + } + } + + private void validatePackagingSchemeCodeUnique(Long id, String code) { + if (StringUtils.isBlank(code)) { + return; + } + ErpPackagingSchemeDO scheme = packagingSchemeMapper.selectByCode(code); + if (scheme == null) { + return; + } + if (id == null || !scheme.getId().equals(id)) { + throw exception(PACKAGING_SCHEME_CODE_DUPLICATE); + } + } + + private BigDecimal calculatePalletTotalQuantity(BigDecimal packageQuantity, BigDecimal palletPackageQuantity, + BigDecimal palletTotalQuantity) { + if (packageQuantity != null && palletPackageQuantity != null) { + return packageQuantity.multiply(palletPackageQuantity); + } + return palletTotalQuantity; + } + + @Override + public ErpPackagingSchemeDO getPackagingScheme(Long id) { + return packagingSchemeMapper.selectById(id); + } + + @Override + public PageResult getPackagingSchemePage(ErpPackagingSchemePageReqVO pageReqVO) { + return packagingSchemeMapper.selectPage(pageReqVO); + } + + @Override + public List getPackagingSchemeListByStatus(Integer status) { + return packagingSchemeMapper.selectListByStatus(status); + } + +}