diff --git a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java index ed6c148..1f48451 100644 --- a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java +++ b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java @@ -3,6 +3,8 @@ package cn.hangtag.framework.common.util; import cn.hangtag.framework.common.util.json.JsonUtils; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.digest.DigestUtil; @@ -18,6 +20,7 @@ import java.math.BigDecimal; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.SecureRandom; +import java.time.Instant; import java.time.LocalDateTime; import java.util.*; import java.util.regex.Matcher; @@ -573,4 +576,17 @@ public class FuncUtil extends StringUtils { RequestAttributes requestAttributes =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()); return requestAttributes == null ? null : ((ServletRequestAttributes) requestAttributes).getRequest(); } + + public static LocalDateTime parseDate(Long timestamp) { + if(isEmpty(timestamp)){ + return null; + } + Instant instant = Instant.ofEpochMilli(timestamp); + // 将 Instant 转换为 LocalDateTime + return LocalDateTime.ofInstant(instant, java.time.ZoneId.systemDefault()); + } + private static final Snowflake snowflake = IdUtil.getSnowflake(); + public static long getNextId() { + return snowflake.nextId(); + } } diff --git a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java new file mode 100644 index 0000000..1f5589a --- /dev/null +++ b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java @@ -0,0 +1,31 @@ +package cn.hangtag.framework.common.util.validation; + +import cn.hangtag.framework.common.exception.ServiceException; +import cn.hangtag.framework.common.util.FuncUtil; +import org.springframework.util.Assert; + +/** + * 断言实用程序 + * + * @author YuanFeng + * @date 2024/09/23 + */ +public class AssertUtil { + public static void isEmpty(Object field, String errorMessage) { + if (FuncUtil.isEmpty(field)) { + throw new ServiceException(600, errorMessage); + } + } + + public static void isTrue(boolean b, String errorMessage) { + if (b) { + throw new ServiceException(600, errorMessage); + } + } + public static void isFalse(boolean b, String errorMessage) { + if (!b) { + throw new ServiceException(600, errorMessage); + } + } + +} diff --git a/hangtag-module-infra/hangtag-module-infra-biz/src/main/java/cn/hangtag/module/infra/framework/file/core/utils/FileTypeUtils.java b/hangtag-module-infra/hangtag-module-infra-biz/src/main/java/cn/hangtag/module/infra/framework/file/core/utils/FileTypeUtils.java index 1a9cef2..82d3259 100644 --- a/hangtag-module-infra/hangtag-module-infra-biz/src/main/java/cn/hangtag/module/infra/framework/file/core/utils/FileTypeUtils.java +++ b/hangtag-module-infra/hangtag-module-infra-biz/src/main/java/cn/hangtag/module/infra/framework/file/core/utils/FileTypeUtils.java @@ -69,6 +69,7 @@ public class FileTypeUtils { response.setHeader("Content-Range", String.valueOf(content.length - 1)); response.setHeader("Accept-Ranges", "bytes"); } + if (contentType.startsWith("image/")) { // 设置缓存 response.setHeader("Cache-Control", "max-age=604800"); diff --git a/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/ErrorCodeConstants.java b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/ErrorCodeConstants.java index 0b365bd..1a34068 100644 --- a/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/ErrorCodeConstants.java +++ b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/ErrorCodeConstants.java @@ -6,12 +6,14 @@ public interface ErrorCodeConstants extends cn.hangtag.module.system.enums.Erro // ========== 产品资料 TODO 补充编号 ========== ErrorCode PRODUCT_INFO_NOT_EXISTS = new ErrorCode(3200, "产品资料 不存在"); + ErrorCode PRODUCT_PROCESS_NOT_EXISTS = new ErrorCode(3201, "产品工艺 不存在"); ErrorCode CUSTOMER_NOT_EXISTS = new ErrorCode(3300, "客户不存在"); ErrorCode SHAPE_TEMPLATE_NOT_EXISTS = new ErrorCode(3400, "图形模板管理 不存在"); ErrorCode DRAFT_DESIGN_DATA_NOT_EXISTS = new ErrorCode(3500, "稿件模板数据 不存在"); ErrorCode SALE_ORDER_NOT_EXISTS = new ErrorCode(3600, "OMS销售订单不存在"); ErrorCode SALE_ORDER_ENTRY_NOT_EXISTS = new ErrorCode(3700, "OMS销售订单明细不存在"); ErrorCode SALE_ORDER_ENTRY_PRICE_NOT_NULL= new ErrorCode(3701, "单价不允许为空"); + ErrorCode SALE_ORDER_SKU_NOT_EXISTS = new ErrorCode(3702, "产品单价记录不存在"); ErrorCode CUSTOMER_BRAND_NOT_EXISTS = new ErrorCode(3800, "客户和品牌关联不存在"); ErrorCode PRODUCT_CARE_ITEM_NOT_EXISTS = new ErrorCode(3900, "产品保养项 不存在"); ErrorCode PRODUCE_ORDER_NOT_EXISTS = new ErrorCode(4000, "生产制单不存在"); diff --git a/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/saleorder/SaleOrderTypeEnum.java b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/saleorder/SaleOrderTypeEnum.java new file mode 100644 index 0000000..225fce4 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/saleorder/SaleOrderTypeEnum.java @@ -0,0 +1,33 @@ +package cn.hangtag.module.oms.enums.saleorder; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum SaleOrderTypeEnum { + + // 普通 + NORMAL("NORMAL", "普通"), + // 加急 + URGENT("URGENT", "加急"), + + ; + /** + * 类型 + */ + private final String type; + /** + * 类型名 + */ + private final String remark; + + public static SaleOrderTypeEnum getByType(String type) { + for (SaleOrderTypeEnum item : values()) { + if (item.getType().equals(type)) { + return item; + } + } + return null; + } +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/dto/ProductInfoPageDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/dto/ProductInfoPageDTO.java new file mode 100644 index 0000000..6d8c159 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/dto/ProductInfoPageDTO.java @@ -0,0 +1,99 @@ +package cn.hangtag.module.oms.controller.admin.productinfo.dto; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class ProductInfoPageDTO implements Serializable { + + /** + * id + */ + @TableId + private Long id; + /** + * 产品编码 + */ + private String code; + /** + * 产品名称 + */ + private String name; + /** + * 封面 + */ + private String cover; + /** + * 品牌 + */ + private Long brandId; + /** + * 产品类型id + */ + private Long productTypeId; + /** + * 设计稿id + */ + private String draftDesignDataId; + /** + * 设计稿列表 json数据带名称 + */ + private String draftDesignList; + + /** + * 启用状态 + */ + private Boolean enabled; + /** + * 备注 + */ + private String remark; + /** + * 详情介绍 + */ + private String details; + + /** + * 简述 + */ + private String summary; + + /** + * 规格尺寸宽度 + */ + private Double specSizeWidth; + + /** + * 规格尺寸高度 + */ + private Double specSizeHeight; + + /** + * 规格厚度 + */ + private Double specSizeThk; + + /** + * 规格材质 + */ + private String specMaterial; + /** + * 品牌名称 + */ + private String brandName; + + /** + * 类型名称 + */ + private String productTypeName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoPageReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoPageReqVO.java index 4fdae2b..103f157 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoPageReqVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoPageReqVO.java @@ -1,5 +1,6 @@ package cn.hangtag.module.oms.controller.admin.productinfo.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -45,6 +46,33 @@ public class ProductInfoPageReqVO extends PageParam { @Schema(description = "详情介绍") private String details; + @Schema(description = "简述") + private String summary; + + /** + * 规格尺寸宽度 + */ + @Schema(description = "规格尺寸宽度") + private Double specSizeWidth; + + /** + * 规格尺寸高度 + */ + @Schema(description = "规格尺寸高度") + private Double specSizeHeight; + + /** + * 规格厚度 + */ + @Schema(description = "规格厚度") + private Double specSizeThk; + + /** + * 规格材质 + */ + @Schema(description = "规格材质") + private String specMaterial; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java index 700c097..59ad735 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java @@ -1,5 +1,6 @@ package cn.hangtag.module.oms.controller.admin.productinfo.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -40,22 +41,63 @@ public class ProductInfoRespVO { @ExcelProperty("设计稿id") private String draftDesignDataId; - @Schema(description = "设计稿列表 json数据带名称") - @ExcelProperty("设计稿列表 json数据带名称") + @Schema(description = "设计稿列表") + @ExcelProperty("设计稿列表") private String draftDesignList; @Schema(description = "启用状态") @ExcelProperty("启用状态") private Boolean enabled; - @Schema(description = "备注", example = "你说的对") + @Schema(description = "备注") @ExcelProperty("备注") private String remark; + @Schema(description = "品牌名称") + @ExcelProperty("品牌名称") + private String brandName; + + @Schema(description = "产品类型名称") + @ExcelProperty("产品类型名称") + private String productTypeName; + + @Schema(description = "详情介绍") @ExcelProperty("详情介绍") private String details; + @Schema(description = "简述") + @ExcelProperty("简述") + private String summary; + + /** + * 规格尺寸宽度 + */ + @Schema(description = "规格尺寸宽度") + @ExcelProperty("规格尺寸宽度") + private Double specSizeWidth; + + /** + * 规格尺寸高度 + */ + @Schema(description = "规格尺寸高度") + @ExcelProperty("规格尺寸高度") + private Double specSizeHeight; + + /** + * 规格厚度 + */ + @Schema(description = "规格厚度") + @ExcelProperty("规格厚度") + private Double specSizeThk; + + /** + * 规格材质 + */ + @Schema(description = "规格材质") + @ExcelProperty("规格材质") + private String specMaterial; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java index 141f1d9..47b950c 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java @@ -1,5 +1,8 @@ package cn.hangtag.module.oms.controller.admin.productinfo.vo; +import cn.hangtag.module.oms.controller.admin.productprocess.vo.ProductProcessSaveReqVO; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -43,4 +46,34 @@ public class ProductInfoSaveReqVO { @Schema(description = "详情介绍") private String details; + @Schema(description = "简述") + private String summary; + + /** + * 规格尺寸宽度 + */ + @Schema(description = "规格尺寸宽度") + private Double specSizeWidth; + + /** + * 规格尺寸高度 + */ + @Schema(description = "规格尺寸高度") + private Double specSizeHeight; + + /** + * 规格厚度 + */ + @Schema(description = "规格厚度") + private Double specSizeThk; + + /** + * 规格材质 + */ + @Schema(description = "规格材质") + private String specMaterial; + + @Schema(description = "产品信息工艺列表") + private List productProcessList; + } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/ProductProcessController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/ProductProcessController.java new file mode 100644 index 0000000..06aacc2 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/ProductProcessController.java @@ -0,0 +1,95 @@ +package cn.hangtag.module.oms.controller.admin.productprocess; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.hangtag.framework.common.pojo.PageParam; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.CommonResult; +import cn.hangtag.framework.common.util.object.BeanUtils; +import static cn.hangtag.framework.common.pojo.CommonResult.success; + +import cn.hangtag.framework.excel.core.util.ExcelUtils; + +import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog; +import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.hangtag.module.oms.controller.admin.productprocess.vo.*; +import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO; +import cn.hangtag.module.oms.service.productprocess.ProductProcessService; + +@Tag(name = "管理后台 - 产品工艺 ") +@RestController +@RequestMapping("/oms/product-process") +@Validated +public class ProductProcessController { + + @Resource + private ProductProcessService productProcessService; + + @PostMapping("/create") + @Operation(summary = "创建产品工艺 ") + @PreAuthorize("@ss.hasPermission('oms:product-process:create')") + public CommonResult createProductProcess(@Valid @RequestBody ProductProcessSaveReqVO createReqVO) { + return success(productProcessService.createProductProcess(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新产品工艺 ") + @PreAuthorize("@ss.hasPermission('oms:product-process:update')") + public CommonResult updateProductProcess(@Valid @RequestBody ProductProcessSaveReqVO updateReqVO) { + productProcessService.updateProductProcess(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除产品工艺 ") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('oms:product-process:delete')") + public CommonResult deleteProductProcess(@RequestParam("id") Long id) { + productProcessService.deleteProductProcess(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得产品工艺 ") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('oms:product-process:query')") + public CommonResult getProductProcess(@RequestParam("id") Long id) { + ProductProcessDO productProcess = productProcessService.getProductProcess(id); + return success(BeanUtils.toBean(productProcess, ProductProcessRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得产品工艺 分页") + @PreAuthorize("@ss.hasPermission('oms:product-process:query')") + public CommonResult> getProductProcessPage(@Valid ProductProcessPageReqVO pageReqVO) { + PageResult pageResult = productProcessService.getProductProcessPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProductProcessRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出产品工艺 Excel") + @PreAuthorize("@ss.hasPermission('oms:product-process:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProductProcessExcel(@Valid ProductProcessPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = productProcessService.getProductProcessPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "产品工艺 .xls", "数据", ProductProcessRespVO.class, + BeanUtils.toBean(list, ProductProcessRespVO.class)); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessPageReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessPageReqVO.java new file mode 100644 index 0000000..d2e7026 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessPageReqVO.java @@ -0,0 +1,34 @@ +package cn.hangtag.module.oms.controller.admin.productprocess.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.hangtag.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.hangtag.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 产品工艺 分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProductProcessPageReqVO extends PageParam { + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "说明", example = "你猜") + private String remark; + + @Schema(description = "工序") + private Integer step; + + @Schema(description = "产品id oms_product_info", example = "21605") + private Long productInfoId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessRespVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessRespVO.java new file mode 100644 index 0000000..7a0af3c --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessRespVO.java @@ -0,0 +1,39 @@ +package cn.hangtag.module.oms.controller.admin.productprocess.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 产品工艺 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProductProcessRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26235") + @ExcelProperty("id") + private Long id; + + @Schema(description = "名称", example = "芋艿") + @ExcelProperty("名称") + private String name; + + @Schema(description = "说明", example = "你猜") + @ExcelProperty("说明") + private String remark; + + @Schema(description = "工序") + @ExcelProperty("工序") + private Integer step; + + @Schema(description = "产品id oms_product_info", example = "21605") + @ExcelProperty("产品id oms_product_info") + private Long productInfoId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessSaveReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessSaveReqVO.java new file mode 100644 index 0000000..53320df --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productprocess/vo/ProductProcessSaveReqVO.java @@ -0,0 +1,27 @@ +package cn.hangtag.module.oms.controller.admin.productprocess.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 产品工艺 新增/修改 Request VO") +@Data +public class ProductProcessSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26235") + private Long id; + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "说明", example = "你猜") + private String remark; + + @Schema(description = "工序") + private Integer step; + + @Schema(description = "产品id oms_product_info", example = "21605") + private Long productInfoId; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/SaleOrderFrontController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/SaleOrderFrontController.java new file mode 100644 index 0000000..4be26d9 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/SaleOrderFrontController.java @@ -0,0 +1,64 @@ +package cn.hangtag.module.oms.controller.admin.saleorder; + +import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog; +import cn.hangtag.framework.common.pojo.CommonResult; +import cn.hangtag.framework.common.pojo.PageParam; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.util.number.NumberUtils; +import cn.hangtag.framework.common.util.object.BeanUtils; +import cn.hangtag.framework.excel.core.util.ExcelUtils; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO; +import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO; +import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO; +import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRespVO; +import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO; +import cn.hangtag.module.oms.convert.saleorder.SaleOrderConvert; +import cn.hangtag.module.oms.dal.dataobject.customer.CustomerDO; +import cn.hangtag.module.oms.dal.dataobject.saleorder.SaleOrderDO; +import cn.hangtag.module.oms.dal.dataobject.saleorderentry.SaleOrderEntryDO; +import cn.hangtag.module.oms.service.customer.CustomerService; +import cn.hangtag.module.oms.service.saleorder.SaleOrderService; +import cn.hangtag.module.system.api.user.AdminUserApi; +import cn.hangtag.module.system.api.user.dto.AdminUserRespDTO; +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONObject; +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.*; + +import javax.annotation.Resource; +import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.hangtag.framework.common.pojo.CommonResult.success; + +@Tag(name = "销售订单") +@RestController +@RequestMapping("/front/oms/sale-order") +@Validated +public class SaleOrderFrontController { + + @Resource + private SaleOrderService saleOrderService; + @Resource + private CustomerService customerService; + @Resource + private AdminUserApi adminUserApi; + + + @PostMapping("/placeOrder") + @Operation(summary = "下单") + public CommonResult placeOrder(@Valid @RequestBody CreateSaleOrderDTO dto) { + return success(saleOrderService.placeOrder(dto)); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/CreateSaleOrderDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/CreateSaleOrderDTO.java new file mode 100644 index 0000000..2836cbb --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/CreateSaleOrderDTO.java @@ -0,0 +1,90 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Data +public class CreateSaleOrderDTO implements Serializable { + + /** + * 联系人信息 + */ + @Schema(description = "联系人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "啊三") + private String contactName; + /** + * 联系人电话 + */ + @Schema(description = "联系人电话", requiredMode = Schema.RequiredMode.REQUIRED, example = "0755-523127") + private String phone; + + @Schema(description = "固定电话", example = "0755-523127") + private String tel; + + @Schema(description = "传真号码", example = "0755-523127") + private String fax; + + @Schema(description = "合同编码", example = "123456") + private String contractCode; + + @Schema(description = "零售商编码", example = "123456") + private String retailerCode; + + @Schema(description = "发票代码") + private String invoiceCode; + + @Schema(description = "发票名称") + private String invoiceName; + + @Schema(description = "发票地址") + private String invoiceAddress; + + @Schema(description = "发票备注") + private String invoiceRemarks; + + /** + * 客户id + */ + private Long customerId; + /** + * 品牌id + */ + private Long brandId; + + /** + * 订单状态 + */ + private Integer orderStatus; + + @Schema(description = "备注", example = "备注信息") + private String remarks; + + /** + * 订单号 + */ + private String orderCode; + + @Schema(description = "联系邮箱") + private String emails; + + /** + * 订单创建时间戳 + */ + private Long bizdate; + + /** + * 交货日期 时间戳 + */ + private Long plansenddate; + + /** + * 是否分批交货 + */ + private Boolean isBatch; + + private List saleOrderEntry; + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/PropSortInfo.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/PropSortInfo.java new file mode 100644 index 0000000..085edfd --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/PropSortInfo.java @@ -0,0 +1,36 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 订单动态属性排序信息 + * + * @author YuanFeng + * @date 2024/10/02 + */ +@Data +public class PropSortInfo implements Serializable { + + /** + * 唯一key + */ + private String key; + + /** + * 名称 + */ + private String name; + + /** + * 形状 + */ + private String shape; + + /** + * 是组合 + */ + private Boolean isCombo; + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderEntryItemDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderEntryItemDTO.java new file mode 100644 index 0000000..236e4b3 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderEntryItemDTO.java @@ -0,0 +1,66 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 销售订单条目项目dto + * + * @author YuanFeng + * @date 2024/10/02 + */ +@Data +public class SaleOrderEntryItemDTO implements Serializable { + + /** + * 数据key + */ + private String key; + + /** + * 生产者 + */ + private String producer; + + /** + * 产品id + */ + private Integer productId; + + /** + * 产品编码 + */ + private String productCode; + /** + * 产品名称 + */ + private String productName; + /** + * 产品封面 + */ + private String cover; + + + /** + * 订货数量 + */ + private Integer orderQty; + /** + * 总数量 + */ + private Integer totalQty; + /** + * 交货日期 + */ + private Long deliveryDate; + + + /** + * 产品sku + */ + List productSkuList; + + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderSkuDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderSkuDTO.java new file mode 100644 index 0000000..6490b08 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SaleOrderSkuDTO.java @@ -0,0 +1,67 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 销售订单sku dto + * + * @author YuanFeng + * @date 2024/10/02 + */ +@Data +public class SaleOrderSkuDTO implements Serializable { + + private String itemKey; + + /** + * 产品id + */ + private Long productId; + + /** + * 订货数量 + */ + private Long orderQty; + + /** + * 草图设计id + */ + private Long draftDesignId; + + + /** + * 设计稿内容宽度 + */ + private Double width; + + /** + * 设计稿内容高度 + */ + private Double height; + + /** + * 最终稿件 base64编码数据 + */ + private String previewImage; + + /** + * 动态属性json配置信息 + */ + private String propInfo; + + /** + * 动态属性 排序信息 + */ + private List propOrderByList; + + /** + * 规格信息 + */ + private SpecInfoDTO specInfo; + + + +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SpecInfoDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SpecInfoDTO.java new file mode 100644 index 0000000..5ffafb4 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/dto/SpecInfoDTO.java @@ -0,0 +1,36 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 规格信息dto + * + * @author YuanFeng + * @date 2024/10/02 + */ +@Data +public class SpecInfoDTO implements Serializable { + + /** + * 规格尺寸宽度 + */ + private Integer specSizeWidth; + /** + * 规格尺寸高度 + */ + private Integer specSizeHeight; + /** + * 规格尺寸厚度 + */ + private Integer specSizeThk; + /** + * 规格材质 + */ + private String specMaterial; + /** + * 主色调 + */ + private String mainColor; +} diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/SaleOrderSkuController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/SaleOrderSkuController.java new file mode 100644 index 0000000..0206fc8 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/SaleOrderSkuController.java @@ -0,0 +1,95 @@ +package cn.hangtag.module.oms.controller.admin.saleordersku; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.hangtag.framework.common.pojo.PageParam; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.CommonResult; +import cn.hangtag.framework.common.util.object.BeanUtils; +import static cn.hangtag.framework.common.pojo.CommonResult.success; + +import cn.hangtag.framework.excel.core.util.ExcelUtils; + +import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog; +import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import cn.hangtag.module.oms.service.saleordersku.SaleOrderSkuService; + +@Tag(name = "管理后台 - 销售订单产品属性表 ") +@RestController +@RequestMapping("/oms/sale-order-sku") +@Validated +public class SaleOrderSkuController { + + @Resource + private SaleOrderSkuService saleOrderSkuService; + + @PostMapping("/create") + @Operation(summary = "创建销售订单产品属性表 ") + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:create')") + public CommonResult createSaleOrderSku(@Valid @RequestBody SaleOrderSkuSaveReqVO createReqVO) { + return success(saleOrderSkuService.createSaleOrderSku(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新销售订单产品属性表 ") + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:update')") + public CommonResult updateSaleOrderSku(@Valid @RequestBody SaleOrderSkuSaveReqVO updateReqVO) { + saleOrderSkuService.updateSaleOrderSku(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除销售订单产品属性表 ") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:delete')") + public CommonResult deleteSaleOrderSku(@RequestParam("id") Long id) { + saleOrderSkuService.deleteSaleOrderSku(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得销售订单产品属性表 ") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:query')") + public CommonResult getSaleOrderSku(@RequestParam("id") Long id) { + SaleOrderSkuDO saleOrderSku = saleOrderSkuService.getSaleOrderSku(id); + return success(BeanUtils.toBean(saleOrderSku, SaleOrderSkuRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得销售订单产品属性表 分页") + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:query')") + public CommonResult> getSaleOrderSkuPage(@Valid SaleOrderSkuPageReqVO pageReqVO) { + PageResult pageResult = saleOrderSkuService.getSaleOrderSkuPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SaleOrderSkuRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出销售订单产品属性表 Excel") + @PreAuthorize("@ss.hasPermission('oms:sale-order-sku:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSaleOrderSkuExcel(@Valid SaleOrderSkuPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = saleOrderSkuService.getSaleOrderSkuPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "销售订单产品属性表 .xls", "数据", SaleOrderSkuRespVO.class, + BeanUtils.toBean(list, SaleOrderSkuRespVO.class)); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuPageReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuPageReqVO.java new file mode 100644 index 0000000..96e8f40 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuPageReqVO.java @@ -0,0 +1,71 @@ +package cn.hangtag.module.oms.controller.admin.saleordersku.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.hangtag.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.hangtag.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 销售订单产品属性表 分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SaleOrderSkuPageReqVO extends PageParam { + + @Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754") + private String entryId; + + @Schema(description = "数据key") + private String itemKey; + + @Schema(description = "销售订单id oms_saleorder", example = "32307") + private String saleOrderId; + + @Schema(description = "产品id oms_product_info", example = "17865") + private String productId; + + @Schema(description = "数量") + private Integer orderQty; + + @Schema(description = "设计稿id oms_draft_design_data", example = "1282") + private Long draftDesignId; + + @Schema(description = "设计稿宽") + private BigDecimal width; + + @Schema(description = "设计稿高") + private BigDecimal height; + + @Schema(description = "预览图") + private String previewImage; + + @Schema(description = "动态属性 json动态属性") + private String propInfo; + + @Schema(description = "规格 json完整信息") + private String specInfo; + + @Schema(description = "宽(mm)") + private BigDecimal specSizeWidth; + + @Schema(description = "高(mm)") + private BigDecimal specSizeHeight; + + @Schema(description = "厚度(mm)") + private BigDecimal specSizeThk; + + @Schema(description = "材质") + private String specMaterial; + + @Schema(description = "主色风格") + private String mainColor; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuRespVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuRespVO.java new file mode 100644 index 0000000..a285833 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuRespVO.java @@ -0,0 +1,88 @@ +package cn.hangtag.module.oms.controller.admin.saleordersku.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 销售订单产品属性表 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SaleOrderSkuRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24887") + @ExcelProperty("id") + private Long id; + + @Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754") + @ExcelProperty("销售订单分表id oms_saleorder_entry") + private String entryId; + + @Schema(description = "数据key") + @ExcelProperty("数据key") + private String itemKey; + + @Schema(description = "销售订单id oms_saleorder", example = "32307") + @ExcelProperty("销售订单id oms_saleorder") + private String saleOrderId; + + @Schema(description = "产品id oms_product_info", example = "17865") + @ExcelProperty("产品id oms_product_info") + private String productId; + + @Schema(description = "数量") + @ExcelProperty("数量") + private Integer orderQty; + + @Schema(description = "设计稿id oms_draft_design_data", example = "1282") + @ExcelProperty("设计稿id oms_draft_design_data") + private Long draftDesignId; + + @Schema(description = "设计稿宽") + @ExcelProperty("设计稿宽") + private BigDecimal width; + + @Schema(description = "设计稿高") + @ExcelProperty("设计稿高") + private BigDecimal height; + + @Schema(description = "预览图") + @ExcelProperty("预览图") + private String previewImage; + + @Schema(description = "动态属性 json动态属性") + @ExcelProperty("动态属性 json动态属性") + private String propInfo; + + @Schema(description = "规格 json完整信息") + @ExcelProperty("规格 json完整信息") + private String specInfo; + + @Schema(description = "宽(mm)") + @ExcelProperty("宽(mm)") + private BigDecimal specSizeWidth; + + @Schema(description = "高(mm)") + @ExcelProperty("高(mm)") + private BigDecimal specSizeHeight; + + @Schema(description = "厚度(mm)") + @ExcelProperty("厚度(mm)") + private BigDecimal specSizeThk; + + @Schema(description = "材质") + @ExcelProperty("材质") + private String specMaterial; + + @Schema(description = "主色风格") + @ExcelProperty("主色风格") + private String mainColor; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java new file mode 100644 index 0000000..0641f88 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java @@ -0,0 +1,64 @@ +package cn.hangtag.module.oms.controller.admin.saleordersku.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 销售订单产品属性表 新增/修改 Request VO") +@Data +public class SaleOrderSkuSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24887") + private Long id; + + @Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754") + private String entryId; + + @Schema(description = "数据key") + private String itemKey; + + @Schema(description = "销售订单id oms_saleorder", example = "32307") + private String saleOrderId; + + @Schema(description = "产品id oms_product_info", example = "17865") + private String productId; + + @Schema(description = "数量") + private Integer orderQty; + + @Schema(description = "设计稿id oms_draft_design_data", example = "1282") + private Long draftDesignId; + + @Schema(description = "设计稿宽") + private BigDecimal width; + + @Schema(description = "设计稿高") + private BigDecimal height; + + @Schema(description = "预览图") + private String previewImage; + + @Schema(description = "动态属性 json动态属性") + private String propInfo; + + @Schema(description = "规格 json完整信息") + private String specInfo; + + @Schema(description = "宽(mm)") + private BigDecimal specSizeWidth; + + @Schema(description = "高(mm)") + private BigDecimal specSizeHeight; + + @Schema(description = "厚度(mm)") + private BigDecimal specSizeThk; + + @Schema(description = "材质") + private String specMaterial; + + @Schema(description = "主色风格") + private String mainColor; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java index 02b527f..93abe1d 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java @@ -1,5 +1,6 @@ package cn.hangtag.module.oms.dal.dataobject.productinfo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -55,6 +56,7 @@ public class ProductInfoDO extends BaseDO { * 设计稿列表 json数据带名称 */ private String draftDesignList; + /** * 启用状态 */ @@ -68,10 +70,45 @@ public class ProductInfoDO extends BaseDO { */ private String details; + /** + * 简述 + */ + private String summary; + + /** + * 规格尺寸宽度 + */ + private Double specSizeWidth; + + /** + * 规格尺寸高度 + */ + private Double specSizeHeight; + + /** + * 规格厚度 + */ + @TableField("spec_size_thk") + private Double specSizeThk; + + /** + * 规格材质 + */ + @TableField("spec_material") + private String specMaterial; + + + /** * 品牌名称 */ @TableField(exist = false) private String brandName; + /** + * 类型名称 + */ + @TableField(exist = false) + private String productTypeName; + } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productprocess/ProductProcessDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productprocess/ProductProcessDO.java new file mode 100644 index 0000000..9cd114a --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productprocess/ProductProcessDO.java @@ -0,0 +1,47 @@ +package cn.hangtag.module.oms.dal.dataobject.productprocess; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; + +/** + * 产品工艺 DO + * + * @author 管理员 + */ +@TableName("oms_product_process") +@KeySequence("oms_product_process_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProductProcessDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 名称 + */ + private String name; + /** + * 说明 + */ + private String remark; + /** + * 工序 + */ + private Integer step; + /** + * 产品id oms_product_info + */ + private Long productInfoId; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java index 0ecd889..561b5f5 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java @@ -1,5 +1,8 @@ package cn.hangtag.module.oms.dal.dataobject.saleorder; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO; +import cn.hutool.core.bean.BeanUtil; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.math.BigDecimal; @@ -9,6 +12,7 @@ import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.*; import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; @@ -121,4 +125,45 @@ public class SaleOrderDO extends BaseDO { */ private LocalDateTime auditorTime; + /** + * 订单号 + */ + private String orderCode; + /** + * 联系人名称 + */ + private String contactName; + /** + * 固定电话 + */ + private String tel; + /** + * 合同编码 + */ + private String contractCode; + /** + * 零售商单号 + */ + private String retailerCode; + /** + * 发票地址 + */ + private String invoiceAddress; + + + /** + * 品牌id + */ + private Integer brandId; + + /** + * 是否分批交货 分批交货以明细表中的交货日期为准 + */ + private Boolean isBatch; + + + + public SaleOrderDO(CreateSaleOrderDTO dto) { + BeanUtil.copyProperties(dto, this,"bizdate","plansenddate"); + } } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderEntryDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java similarity index 93% rename from hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderEntryDO.java rename to hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java index 4a89eaf..260b4b7 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderEntryDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java @@ -1,7 +1,8 @@ package cn.hangtag.module.oms.dal.dataobject.saleorderentry; import lombok.*; -import java.util.*; + +import java.time.LocalDateTime; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.*; import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; @@ -59,4 +60,7 @@ public class SaleOrderEntryDO extends BaseDO { */ private BigDecimal amount; + // + private LocalDateTime deliveryDate; + } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java new file mode 100644 index 0000000..af06fa6 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java @@ -0,0 +1,100 @@ +package cn.hangtag.module.oms.dal.dataobject.saleordersku; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; + +/** + * 销售订单产品属性表 DO + * + * @author 管理员 + */ +@TableName("oms_sale_order_sku") +@KeySequence("oms_sale_order_sku_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SaleOrderSkuDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 销售订单分表id oms_saleorder_entry + */ + private Long entryId; + /** + * 数据key + */ + private String itemKey; + /** + * 销售订单id oms_saleorder + */ + private Long saleOrderId; + /** + * 产品id oms_product_info + */ + private Long productId; + /** + * 数量 + */ + private Integer orderQty; + /** + * 设计稿id oms_draft_design_data + */ + private Long draftDesignId; + /** + * 设计稿宽 + */ + private BigDecimal width; + /** + * 设计稿高 + */ + private BigDecimal height; + /** + * 预览图 + */ + private String previewImage; + /** + * 动态属性 json动态属性 + */ + private String propInfo; + /** + * 规格 json完整信息 + */ + private String specInfo; + /** + * 宽(mm) + */ + private BigDecimal specSizeWidth; + /** + * 高(mm) + */ + private BigDecimal specSizeHeight; + /** + * 厚度(mm) + */ + private BigDecimal specSizeThk; + /** + * 材质 + */ + private String specMaterial; + /** + * 主色风格 + */ + private String mainColor; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productprocess/ProductProcessMapper.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productprocess/ProductProcessMapper.java new file mode 100644 index 0000000..cc1d5c4 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/productprocess/ProductProcessMapper.java @@ -0,0 +1,30 @@ +package cn.hangtag.module.oms.dal.mysql.productprocess; + +import java.util.*; + +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.hangtag.framework.mybatis.core.mapper.BaseMapperX; +import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO; +import org.apache.ibatis.annotations.Mapper; +import cn.hangtag.module.oms.controller.admin.productprocess.vo.*; + +/** + * 产品工艺 Mapper + * + * @author 管理员 + */ +@Mapper +public interface ProductProcessMapper extends BaseMapperX { + + default PageResult selectPage(ProductProcessPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ProductProcessDO::getName, reqVO.getName()) + .eqIfPresent(ProductProcessDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProductProcessDO::getStep, reqVO.getStep()) + .eqIfPresent(ProductProcessDO::getProductInfoId, reqVO.getProductInfoId()) + .betweenIfPresent(ProductProcessDO::getCreateTime, reqVO.getCreateTime()) + .orderByAsc(ProductProcessDO::getStep)); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/saleordersku/SaleOrderSkuMapper.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/saleordersku/SaleOrderSkuMapper.java new file mode 100644 index 0000000..65f6383 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/mysql/saleordersku/SaleOrderSkuMapper.java @@ -0,0 +1,42 @@ +package cn.hangtag.module.oms.dal.mysql.saleordersku; + +import java.util.*; + +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.hangtag.framework.mybatis.core.mapper.BaseMapperX; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import org.apache.ibatis.annotations.Mapper; +import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; + +/** + * 销售订单产品属性表 Mapper + * + * @author 管理员 + */ +@Mapper +public interface SaleOrderSkuMapper extends BaseMapperX { + + default PageResult selectPage(SaleOrderSkuPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SaleOrderSkuDO::getEntryId, reqVO.getEntryId()) + .eqIfPresent(SaleOrderSkuDO::getItemKey, reqVO.getItemKey()) + .eqIfPresent(SaleOrderSkuDO::getSaleOrderId, reqVO.getSaleOrderId()) + .eqIfPresent(SaleOrderSkuDO::getProductId, reqVO.getProductId()) + .eqIfPresent(SaleOrderSkuDO::getOrderQty, reqVO.getOrderQty()) + .eqIfPresent(SaleOrderSkuDO::getDraftDesignId, reqVO.getDraftDesignId()) + .eqIfPresent(SaleOrderSkuDO::getWidth, reqVO.getWidth()) + .eqIfPresent(SaleOrderSkuDO::getHeight, reqVO.getHeight()) + .eqIfPresent(SaleOrderSkuDO::getPreviewImage, reqVO.getPreviewImage()) + .eqIfPresent(SaleOrderSkuDO::getPropInfo, reqVO.getPropInfo()) + .eqIfPresent(SaleOrderSkuDO::getSpecInfo, reqVO.getSpecInfo()) + .eqIfPresent(SaleOrderSkuDO::getSpecSizeWidth, reqVO.getSpecSizeWidth()) + .eqIfPresent(SaleOrderSkuDO::getSpecSizeHeight, reqVO.getSpecSizeHeight()) + .eqIfPresent(SaleOrderSkuDO::getSpecSizeThk, reqVO.getSpecSizeThk()) + .eqIfPresent(SaleOrderSkuDO::getSpecMaterial, reqVO.getSpecMaterial()) + .eqIfPresent(SaleOrderSkuDO::getMainColor, reqVO.getMainColor()) + .betweenIfPresent(SaleOrderSkuDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SaleOrderSkuDO::getId)); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productinfo/ProductInfoServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productinfo/ProductInfoServiceImpl.java index f3277e0..0faf156 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productinfo/ProductInfoServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productinfo/ProductInfoServiceImpl.java @@ -4,9 +4,15 @@ import cn.hangtag.framework.common.exception.ServiceException; import cn.hangtag.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.hangtag.framework.common.util.FuncUtil; import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; +import cn.hangtag.module.oms.base.dal.dataobject.producttype.ProductTypeDO; +import cn.hangtag.module.oms.base.dal.mysql.producttype.ProductTypeMapper; +import cn.hangtag.module.oms.controller.admin.productinfo.dto.ProductInfoPageDTO; +import cn.hangtag.module.oms.controller.admin.productprocess.vo.ProductProcessSaveReqVO; import cn.hangtag.module.oms.dal.dataobject.brand.BrandDO; import cn.hangtag.module.oms.dal.dataobject.draftdesigndata.DraftDesignDataDO; +import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO; import cn.hangtag.module.oms.dal.mysql.brand.BrandMapper; +import cn.hangtag.module.oms.dal.mysql.productprocess.ProductProcessMapper; import cn.hangtag.module.oms.serialnumber.CodingRulesUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.AllArgsConstructor; @@ -43,6 +49,8 @@ public class ProductInfoServiceImpl implements ProductInfoService { private final ProductInfoMapper productInfoMapper; private final BrandMapper brandMapper; + private final ProductTypeMapper productTypeMapper; + private final ProductProcessMapper productProcessMapper; @Override public Long createProductInfo(ProductInfoSaveReqVO createReqVO) { @@ -55,7 +63,20 @@ public class ProductInfoServiceImpl implements ProductInfoService { productInfo.setCode(getNewCode()); } productInfoMapper.insert(productInfo); - // 返回 + + List productProcessList = createReqVO.getProductProcessList(); + if(FuncUtil.isNotEmpty(productProcessList)){ + List subList = new ArrayList<>(); + for (ProductProcessSaveReqVO reqVO : productProcessList) { + ProductProcessDO processDO = new ProductProcessDO(); + processDO.setProductInfoId(productInfo.getId()); + processDO.setName(reqVO.getName()); + processDO.setRemark(reqVO.getRemark()); + processDO.setStep(reqVO.getStep()); + subList.add(processDO); + } + productProcessMapper.insertBatch(subList); + } return productInfo.getId(); } @@ -70,7 +91,30 @@ public class ProductInfoServiceImpl implements ProductInfoService { }else { updateReqVO.setCode(getNewCode()); } - + List productProcessList = updateReqVO.getProductProcessList(); + if(FuncUtil.isNotEmpty(productProcessList)){ + List addList = new ArrayList<>(); + List updateList = new ArrayList<>(); + for (ProductProcessSaveReqVO reqVO : productProcessList) { + ProductProcessDO processDO = new ProductProcessDO(); + processDO.setProductInfoId(updateReqVO.getId()); + processDO.setName(reqVO.getName()); + processDO.setRemark(reqVO.getRemark()); + processDO.setStep(reqVO.getStep()); + if(FuncUtil.isEmpty(reqVO.getId())){ + addList.add(processDO); + }else{ + processDO.setId(reqVO.getId()); + updateList.add(processDO); + } + } + if(FuncUtil.isNotEmpty(addList)){ + productProcessMapper.insertBatch(addList); + } + if(FuncUtil.isNotEmpty(updateList)){ + productProcessMapper.updateBatch(updateList); + } + } // 更新 ProductInfoDO updateObj = BeanUtils.toBean(updateReqVO, ProductInfoDO.class); productInfoMapper.updateById(updateObj); @@ -106,7 +150,14 @@ public class ProductInfoServiceImpl implements ProductInfoService { productInfoDO.setBrandName(brandDO.getName()); } } + if(FuncUtil.isNotEmpty(productInfoDO.getProductTypeId())){ + ProductTypeDO productTypeDO = productTypeMapper.selectById(productInfoDO.getProductTypeId()); + if(FuncUtil.isNotEmpty(productTypeDO)){ + productInfoDO.setProductTypeName(productTypeDO.getLabel()); + } + } }); + productInfoDOPageResult.setList(list); return productInfoDOPageResult; } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessService.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessService.java new file mode 100644 index 0000000..bd30305 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessService.java @@ -0,0 +1,55 @@ +package cn.hangtag.module.oms.service.productprocess; + +import java.util.*; +import javax.validation.*; +import cn.hangtag.module.oms.controller.admin.productprocess.vo.*; +import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.PageParam; + +/** + * 产品工艺 Service 接口 + * + * @author 管理员 + */ +public interface ProductProcessService { + + /** + * 创建产品工艺 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProductProcess(@Valid ProductProcessSaveReqVO createReqVO); + + /** + * 更新产品工艺 + * + * @param updateReqVO 更新信息 + */ + void updateProductProcess(@Valid ProductProcessSaveReqVO updateReqVO); + + /** + * 删除产品工艺 + * + * @param id 编号 + */ + void deleteProductProcess(Long id); + + /** + * 获得产品工艺 + * + * @param id 编号 + * @return 产品工艺 + */ + ProductProcessDO getProductProcess(Long id); + + /** + * 获得产品工艺 分页 + * + * @param pageReqVO 分页查询 + * @return 产品工艺 分页 + */ + PageResult getProductProcessPage(ProductProcessPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessServiceImpl.java new file mode 100644 index 0000000..17e0005 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/productprocess/ProductProcessServiceImpl.java @@ -0,0 +1,74 @@ +package cn.hangtag.module.oms.service.productprocess; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.hangtag.module.oms.controller.admin.productprocess.vo.*; +import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.PageParam; +import cn.hangtag.framework.common.util.object.BeanUtils; + +import cn.hangtag.module.oms.dal.mysql.productprocess.ProductProcessMapper; + +import static cn.hangtag.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*; + +/** + * 产品工艺 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class ProductProcessServiceImpl implements ProductProcessService { + + @Resource + private ProductProcessMapper productProcessMapper; + + @Override + public Long createProductProcess(ProductProcessSaveReqVO createReqVO) { + // 插入 + ProductProcessDO productProcess = BeanUtils.toBean(createReqVO, ProductProcessDO.class); + productProcessMapper.insert(productProcess); + // 返回 + return productProcess.getId(); + } + + @Override + public void updateProductProcess(ProductProcessSaveReqVO updateReqVO) { + // 校验存在 + validateProductProcessExists(updateReqVO.getId()); + // 更新 + ProductProcessDO updateObj = BeanUtils.toBean(updateReqVO, ProductProcessDO.class); + productProcessMapper.updateById(updateObj); + } + + @Override + public void deleteProductProcess(Long id) { + // 校验存在 + validateProductProcessExists(id); + // 删除 + productProcessMapper.deleteById(id); + } + + private void validateProductProcessExists(Long id) { + if (productProcessMapper.selectById(id) == null) { + throw exception(PRODUCT_PROCESS_NOT_EXISTS); + } + } + + @Override + public ProductProcessDO getProductProcess(Long id) { + return productProcessMapper.selectById(id); + } + + @Override + public PageResult getProductProcessPage(ProductProcessPageReqVO pageReqVO) { + return productProcessMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java index 732348f..a07eaf0 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java @@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.*; import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.*; import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderSummaryRespVO; import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendReqVO; @@ -99,4 +100,14 @@ public interface SaleOrderService { Long getCountByBillStatus(String value, Long customerId); List> getOrderCountTrendComparison(TradeOrderTrendReqVO reqVO); + + /** + * 下订单 + * + * @param dto DTO + * @return {@link Long } + */ + Long placeOrder(CreateSaleOrderDTO dto); + + public String getNewOrderCode(); } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java index 053306e..c9eb700 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java @@ -1,14 +1,22 @@ package cn.hangtag.module.oms.service.saleorder; import cn.hangtag.framework.common.exception.ServiceException; +import cn.hangtag.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.util.FuncUtil; import cn.hangtag.framework.common.util.object.BeanUtils; +import cn.hangtag.framework.common.util.validation.AssertUtil; +import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; +import cn.hangtag.framework.security.core.LoginUser; import cn.hangtag.framework.security.core.util.SecurityFrameworkUtils; import cn.hangtag.module.oms.common.utils.NumberChineseFormatterUtils; import cn.hangtag.module.oms.common.utils.WKHtmlToPdfUtil; import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO; import cn.hangtag.module.oms.controller.admin.produceorder.vo.ProduceOrderSaveReqVO; import cn.hangtag.module.oms.controller.admin.product.vo.ProductPriceSaveReqVO; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.SaleOrderEntryItemDTO; +import cn.hangtag.module.oms.controller.admin.saleorder.dto.SaleOrderSkuDTO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO; @@ -23,25 +31,34 @@ import cn.hangtag.module.oms.dal.dataobject.salecontract.SaleContractDO; import cn.hangtag.module.oms.dal.dataobject.salecontractentry.SaleContractEntryDO; import cn.hangtag.module.oms.dal.dataobject.saleorder.SaleOrderDO; import cn.hangtag.module.oms.dal.dataobject.saleorderentry.SaleOrderEntryDO; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; import cn.hangtag.module.oms.dal.mysql.saleorder.SaleOrderMapper; import cn.hangtag.module.oms.dal.mysql.saleorderentry.SaleOrderEntryMapper; +import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper; import cn.hangtag.module.oms.enums.ErrorCodeConstants; import cn.hangtag.module.oms.enums.TimeRangeTypeEnum; import cn.hangtag.module.oms.enums.common.BillStatusEnum; import cn.hangtag.module.oms.enums.saleorder.SaleOrderStatusEnum; +import cn.hangtag.module.oms.enums.saleorder.SaleOrderTypeEnum; +import cn.hangtag.module.oms.serialnumber.CodingRulesUtils; import cn.hangtag.module.oms.service.customer.CustomerService; import cn.hangtag.module.oms.service.produceorder.ProduceOrderService; import cn.hangtag.module.oms.service.product.ProductPriceService; import cn.hangtag.module.oms.service.productinfo.ProductInfoService; import cn.hangtag.module.oms.service.salecontract.SaleContractService; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,6 +76,7 @@ import java.io.InputStream; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -76,24 +94,20 @@ import static cn.hangtag.module.oms.enums.ErrorCodeConstants.SALE_ORDER_NOT_EXIS @Service @Validated @Slf4j +@AllArgsConstructor public class SaleOrderServiceImpl implements SaleOrderService { - @Resource - private SaleOrderMapper saleOrderMapper; - @Resource - private SaleOrderEntryMapper saleOrderEntryMapper; - @Resource - private ProduceOrderService produceOrderService; - @Resource - private ProductInfoService productInfoService; - @Resource - private SaleContractService saleContractService; - @Resource - private CustomerService customerService; - @Resource - private ProductPriceService productPriceService; - @Resource - private TemplateEngine templateEngine; + + private final SaleOrderMapper saleOrderMapper; + private final SaleOrderEntryMapper saleOrderEntryMapper; + private final SaleOrderSkuMapper skuOrderSkuMapper; + private final ProduceOrderService produceOrderService; + private final ProductInfoService productInfoService; + private final SaleContractService saleContractService; + private final CustomerService customerService; + private final ProductPriceService productPriceService; + private final TemplateEngine templateEngine; + @Override @Transactional(rollbackFor = Exception.class) @@ -440,6 +454,113 @@ public class SaleOrderServiceImpl implements SaleOrderService { .collect(Collectors.toList()); } + public static void main(String[] args) { + long l = IdUtil.getSnowflake().nextId(); + System.out.println(l); + } + @Override + @Transactional(rollbackFor = Exception.class) + public Long placeOrder(CreateSaleOrderDTO dto) { + SaleOrderDO order = new SaleOrderDO(dto); + order = wrapperEntity(order, dto); + List saleOrderEntry = dto.getSaleOrderEntry(); + + List entryList = new ArrayList<>(); + List skuList = new ArrayList<>(); + // 转成订单条目 + for (SaleOrderEntryItemDTO itemDTO : saleOrderEntry) { + SaleOrderEntryDO entry = SaleOrderEntryDO.builder() + .id(FuncUtil.getNextId()) + .parentId(order.getId()) + .materialId(itemDTO.getProductId()) + .materialName(itemDTO.getProductName()) + .qty(itemDTO.getOrderQty()) + .deliveryDate(FuncUtil.parseDate(itemDTO.getDeliveryDate())).build(); + + entryList.add(entry); + List productSkuList = itemDTO.getProductSkuList(); + // sku + for (SaleOrderSkuDTO saleOrderSkuDTO : productSkuList) { + SaleOrderSkuDO saleOrderSkuDO = new SaleOrderSkuDO(); + BeanUtil.copyProperties(saleOrderSkuDTO,saleOrderSkuDO); + saleOrderSkuDO.setSaleOrderId(order.getId()); + saleOrderSkuDO.setEntryId(entry.getId()); + saleOrderSkuDO.setId(FuncUtil.getNextId()); + + skuList.add(saleOrderSkuDO); + } + + } + saleOrderMapper.insert(order); + saleOrderEntryMapper.insertBatch(entryList); + skuOrderSkuMapper.insertBatch(skuList); + System.out.println(order); + return order.getId(); + } + private static final long codeId = 6L; + @Override + public String getNewOrderCode() { + String s = ""; + int count = 10; + while (true){ + count --; + try { + s = CodingRulesUtils.generateCode(codeId, false); + checkCode(null,s); + return s; + }catch (ServiceException e){ + log.warn("重复或者下一个编码"); + if(count < 0){ + log.error("编码获取失败"); + return ""; + } + } + } + } + private void checkCode(Long id,String code){ + if(FuncUtil.isNotEmpty(code)){ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.select(SaleOrderDO::getId,SaleOrderDO::getOrderCode, BaseDO::getDeleted); + lambdaQueryWrapper.eq(SaleOrderDO::getOrderCode, code); + lambdaQueryWrapper.eq(SaleOrderDO::getDeleted,false); + List dos = saleOrderMapper.selectList(lambdaQueryWrapper); + if(FuncUtil.isEmpty(id) && FuncUtil.isNotEmpty(dos)){ + throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE); + } + if (FuncUtil.isNotEmpty(id) && FuncUtil.isNotEmpty(dos)) { + for (SaleOrderDO aDo : dos) { + // 出现重复并当前id 不一致 + if(!FuncUtil.equals(aDo.getId(), id)){ + throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE); + } + } + } + } + } + private SaleOrderDO wrapperEntity(SaleOrderDO order,CreateSaleOrderDTO dto){ + // 客户信息 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + AssertUtil.isEmpty(loginUser,"登录信息已过期,请重新登录"); + CustomerDO customer = customerService.getCustomerByUserId(loginUser.getId()); + AssertUtil.isEmpty(customer,"客户信息不存在"); + + order.setCustomerId(customer.getId()); + if(FuncUtil.isEmpty(order.getId())){ + order.setId(FuncUtil.getNextId()); + } + order.setBizdate(LocalDateTime.now()); + order.setPlansenddate( FuncUtil.parseDate(dto.getPlansenddate())); + // 设置订单状态 + order.setOrderStatus(SaleOrderStatusEnum.YXD.getValue()); + order.setBillStatus(BillStatusEnum.SAVE.getValue()); + String orderType = order.getOrderType(); + if(FuncUtil.isEmpty(orderType)){ + order.setOrderType(SaleOrderTypeEnum.NORMAL.getType()); + } + order.setBillno(getNewOrderCode()); + return order; + } + private List getOrderCountTrend(Integer timeRangeType, LocalDateTime beginTime, LocalDateTime endTime) { // 情况一:按年统计时,以月份分组 if (TimeRangeTypeEnum.YEAR.getType().equals(timeRangeType)) { diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java new file mode 100644 index 0000000..62113c0 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java @@ -0,0 +1,55 @@ +package cn.hangtag.module.oms.service.saleordersku; + +import java.util.*; +import javax.validation.*; +import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.PageParam; + +/** + * 销售订单产品属性表 Service 接口 + * + * @author 管理员 + */ +public interface SaleOrderSkuService { + + /** + * 创建销售订单产品属性表 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSaleOrderSku(@Valid SaleOrderSkuSaveReqVO createReqVO); + + /** + * 更新销售订单产品属性表 + * + * @param updateReqVO 更新信息 + */ + void updateSaleOrderSku(@Valid SaleOrderSkuSaveReqVO updateReqVO); + + /** + * 删除销售订单产品属性表 + * + * @param id 编号 + */ + void deleteSaleOrderSku(Long id); + + /** + * 获得销售订单产品属性表 + * + * @param id 编号 + * @return 销售订单产品属性表 + */ + SaleOrderSkuDO getSaleOrderSku(Long id); + + /** + * 获得销售订单产品属性表 分页 + * + * @param pageReqVO 分页查询 + * @return 销售订单产品属性表 分页 + */ + PageResult getSaleOrderSkuPage(SaleOrderSkuPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java new file mode 100644 index 0000000..7d8806f --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java @@ -0,0 +1,74 @@ +package cn.hangtag.module.oms.service.saleordersku; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import cn.hangtag.framework.common.pojo.PageResult; +import cn.hangtag.framework.common.pojo.PageParam; +import cn.hangtag.framework.common.util.object.BeanUtils; + +import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper; + +import static cn.hangtag.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*; + +/** + * 销售订单产品属性表 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class SaleOrderSkuServiceImpl implements SaleOrderSkuService { + + @Resource + private SaleOrderSkuMapper saleOrderSkuMapper; + + @Override + public Long createSaleOrderSku(SaleOrderSkuSaveReqVO createReqVO) { + // 插入 + SaleOrderSkuDO saleOrderSku = BeanUtils.toBean(createReqVO, SaleOrderSkuDO.class); + saleOrderSkuMapper.insert(saleOrderSku); + // 返回 + return saleOrderSku.getId(); + } + + @Override + public void updateSaleOrderSku(SaleOrderSkuSaveReqVO updateReqVO) { + // 校验存在 + validateSaleOrderSkuExists(updateReqVO.getId()); + // 更新 + SaleOrderSkuDO updateObj = BeanUtils.toBean(updateReqVO, SaleOrderSkuDO.class); + saleOrderSkuMapper.updateById(updateObj); + } + + @Override + public void deleteSaleOrderSku(Long id) { + // 校验存在 + validateSaleOrderSkuExists(id); + // 删除 + saleOrderSkuMapper.deleteById(id); + } + + private void validateSaleOrderSkuExists(Long id) { + if (saleOrderSkuMapper.selectById(id) == null) { + throw exception(SALE_ORDER_SKU_NOT_EXISTS); + } + } + + @Override + public SaleOrderSkuDO getSaleOrderSku(Long id) { + return saleOrderSkuMapper.selectById(id); + } + + @Override + public PageResult getSaleOrderSkuPage(SaleOrderSkuPageReqVO pageReqVO) { + return saleOrderSkuMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/productprocess/ProductProcessMapper.xml b/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/productprocess/ProductProcessMapper.xml new file mode 100644 index 0000000..9df31e7 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/productprocess/ProductProcessMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/saleordersku/SaleOrderSkuMapper.xml b/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/saleordersku/SaleOrderSkuMapper.xml new file mode 100644 index 0000000..f9df915 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/resources/mapper/saleordersku/SaleOrderSkuMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/test/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImplTest.java b/hangtag-module-oms/hangtag-module-oms-biz/src/test/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImplTest.java new file mode 100644 index 0000000..526ae18 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/test/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImplTest.java @@ -0,0 +1,194 @@ +package cn.hangtag.module.oms.service.saleordersku; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import cn.hangtag.framework.test.core.ut.BaseDbUnitTest; + +import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper; +import cn.hangtag.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*; +import static cn.hangtag.framework.test.core.util.AssertUtils.*; +import static cn.hangtag.framework.test.core.util.RandomUtils.*; +import static cn.hangtag.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.hangtag.framework.common.util.object.ObjectUtils.*; +import static cn.hangtag.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link SaleOrderSkuServiceImpl} 的单元测试类 + * + * @author 管理员 + */ +@Import(SaleOrderSkuServiceImpl.class) +public class SaleOrderSkuServiceImplTest extends BaseDbUnitTest { + + @Resource + private SaleOrderSkuServiceImpl saleOrderSkuService; + + @Resource + private SaleOrderSkuMapper saleOrderSkuMapper; + + @Test + public void testCreateSaleOrderSku_success() { + // 准备参数 + SaleOrderSkuSaveReqVO createReqVO = randomPojo(SaleOrderSkuSaveReqVO.class).setId(null); + + // 调用 + Long saleOrderSkuId = saleOrderSkuService.createSaleOrderSku(createReqVO); + // 断言 + assertNotNull(saleOrderSkuId); + // 校验记录的属性是否正确 + SaleOrderSkuDO saleOrderSku = saleOrderSkuMapper.selectById(saleOrderSkuId); + assertPojoEquals(createReqVO, saleOrderSku, "id"); + } + + @Test + public void testUpdateSaleOrderSku_success() { + // mock 数据 + SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class); + saleOrderSkuMapper.insert(dbSaleOrderSku);// @Sql: 先插入出一条存在的数据 + // 准备参数 + SaleOrderSkuSaveReqVO updateReqVO = randomPojo(SaleOrderSkuSaveReqVO.class, o -> { + o.setId(dbSaleOrderSku.getId()); // 设置更新的 ID + }); + + // 调用 + saleOrderSkuService.updateSaleOrderSku(updateReqVO); + // 校验是否更新正确 + SaleOrderSkuDO saleOrderSku = saleOrderSkuMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, saleOrderSku); + } + + @Test + public void testUpdateSaleOrderSku_notExists() { + // 准备参数 + SaleOrderSkuSaveReqVO updateReqVO = randomPojo(SaleOrderSkuSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> saleOrderSkuService.updateSaleOrderSku(updateReqVO), SALE_ORDER_SKU_NOT_EXISTS); + } + + @Test + public void testDeleteSaleOrderSku_success() { + // mock 数据 + SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class); + saleOrderSkuMapper.insert(dbSaleOrderSku);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbSaleOrderSku.getId(); + + // 调用 + saleOrderSkuService.deleteSaleOrderSku(id); + // 校验数据不存在了 + assertNull(saleOrderSkuMapper.selectById(id)); + } + + @Test + public void testDeleteSaleOrderSku_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> saleOrderSkuService.deleteSaleOrderSku(id), SALE_ORDER_SKU_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetSaleOrderSkuPage() { + // mock 数据 + SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class, o -> { // 等会查询到 + o.setEntryId(null); + o.setItemKey(null); + o.setSaleOrderId(null); + o.setProductId(null); + o.setOrderQty(null); + o.setDraftDesignId(null); + o.setWidth(null); + o.setHeight(null); + o.setPreviewImage(null); + o.setPropInfo(null); + o.setSpecInfo(null); + o.setSpecSizeWidth(null); + o.setSpecSizeHeight(null); + o.setSpecSizeThk(null); + o.setSpecMaterial(null); + o.setMainColor(null); + o.setCreateTime(null); + }); + saleOrderSkuMapper.insert(dbSaleOrderSku); + // 测试 entryId 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setEntryId(null))); + // 测试 itemKey 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setItemKey(null))); + // 测试 saleOrderId 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSaleOrderId(null))); + // 测试 productId 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setProductId(null))); + // 测试 orderQty 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setOrderQty(null))); + // 测试 draftDesignId 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setDraftDesignId(null))); + // 测试 width 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setWidth(null))); + // 测试 height 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setHeight(null))); + // 测试 previewImage 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setPreviewImage(null))); + // 测试 propInfo 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setPropInfo(null))); + // 测试 specInfo 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecInfo(null))); + // 测试 specSizeWidth 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeWidth(null))); + // 测试 specSizeHeight 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeHeight(null))); + // 测试 specSizeThk 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeThk(null))); + // 测试 specMaterial 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecMaterial(null))); + // 测试 mainColor 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setMainColor(null))); + // 测试 createTime 不匹配 + saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setCreateTime(null))); + // 准备参数 + SaleOrderSkuPageReqVO reqVO = new SaleOrderSkuPageReqVO(); + reqVO.setEntryId(null); + reqVO.setItemKey(null); + reqVO.setSaleOrderId(null); + reqVO.setProductId(null); + reqVO.setOrderQty(null); + reqVO.setDraftDesignId(null); + reqVO.setWidth(null); + reqVO.setHeight(null); + reqVO.setPreviewImage(null); + reqVO.setPropInfo(null); + reqVO.setSpecInfo(null); + reqVO.setSpecSizeWidth(null); + reqVO.setSpecSizeHeight(null); + reqVO.setSpecSizeThk(null); + reqVO.setSpecMaterial(null); + reqVO.setMainColor(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = saleOrderSkuService.getSaleOrderSkuPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbSaleOrderSku, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/hangtag-ui/hangtag-ui-admin/src/api/oms/productinfo/index.ts b/hangtag-ui/hangtag-ui-admin/src/api/oms/productinfo/index.ts index 6497f5f..6f6c8e6 100644 --- a/hangtag-ui/hangtag-ui-admin/src/api/oms/productinfo/index.ts +++ b/hangtag-ui/hangtag-ui-admin/src/api/oms/productinfo/index.ts @@ -10,9 +10,14 @@ export interface ProductInfoVO { enabled: boolean // 启用状态 remark: string // 备注 details: string // 详情介绍 - cover: string // 封面 + cover?: string // 封面 draftDesignList: string, // 设计稿列表 draftDesignDataId: string // 设计稿数据id + summary?: string + specSizeWidth: number | string + specSizeHeight: number | string + specSizeThk: number | string + specMaterial: string } // 产品资料 API diff --git a/hangtag-ui/hangtag-ui-admin/src/api/oms/productprocess/index.ts b/hangtag-ui/hangtag-ui-admin/src/api/oms/productprocess/index.ts new file mode 100644 index 0000000..ad9a3f5 --- /dev/null +++ b/hangtag-ui/hangtag-ui-admin/src/api/oms/productprocess/index.ts @@ -0,0 +1,44 @@ +import request from '@/config/axios' + +// 产品工艺 VO +export interface ProductProcessVO { + id: number // id + name: string // 名称 + key: string // 临时key + remark: string // 说明 + step: number // 工序 + productInfoId: number // 产品id oms_product_info +} + +// 产品工艺 API +export const ProductProcessApi = { + // 查询产品工艺 分页 + getProductProcessPage: async (params: any) => { + return await request.get({ url: `/oms/product-process/page`, params }) + }, + + // 查询产品工艺 详情 + getProductProcess: async (id: number) => { + return await request.get({ url: `/oms/product-process/get?id=` + id }) + }, + + // 新增产品工艺 + createProductProcess: async (data: ProductProcessVO) => { + return await request.post({ url: `/oms/product-process/create`, data }) + }, + + // 修改产品工艺 + updateProductProcess: async (data: ProductProcessVO) => { + return await request.put({ url: `/oms/product-process/update`, data }) + }, + + // 删除产品工艺 + deleteProductProcess: async (id: number) => { + return await request.delete({ url: `/oms/product-process/delete?id=` + id }) + }, + + // 导出产品工艺 Excel + exportProductProcess: async (params) => { + return await request.download({ url: `/oms/product-process/export-excel`, params }) + }, +} diff --git a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/BrandDataListDialog/index.vue b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/BrandDataListDialog/index.vue index 6b216e2..177ce3a 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/BrandDataListDialog/index.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/BrandDataListDialog/index.vue @@ -109,7 +109,7 @@ const dialogTitle = ref('设计稿件') // 弹窗的标题 const props = defineProps({ modelValue: { - type: String, + type: [String,Number], required: true }, dataKey: { @@ -165,23 +165,11 @@ const viewDetails = () => { openDialog(); } } -// 用监听属性变化无其他意义 -const tmp = computed(()=>{ - setTimeout(()=>{ - that.inputVal = toStr(props.modelValue,that.inputVal) - if (that.inputVal) { - initInput(); - } - },100) - return '' -},{ - deep: true -}) -const toStr = (data: any) => { +const toStr = (data: any,def = '') => { if (data !== null && data !== undefined) { return `${data}` } - return data + return def } let map = new Map(); const initInput = async () => { @@ -211,9 +199,31 @@ const initInput = async () => { showValue: that.showValue }) } + +// 用监听属性变化无其他意义 +const tmp = computed(()=>{ + setTimeout(()=>{ + that.inputVal = toStr(props.modelValue,that.inputVal) + if (that.inputVal) { + initInput(); + } + },100) + return '' +},{ + deep: true +}) + watch(() => props.visible, (newVal) => { that.visible = newVal; }) +watch(() => props.modelValue, (newVal)=>{ + that.inputVal = toStr(newVal,'') + if (that.inputVal) { + initInput(); + } +},{ + immediate: true +}) const clearData = () => { that.inputVal = ''; that.showValue = ''; diff --git a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignDataListDialog/index.vue b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignDataListDialog/index.vue index 89d0e49..fec4f70 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignDataListDialog/index.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignDataListDialog/index.vue @@ -18,7 +18,7 @@ - {{tmp}} + {{ tmp }} { } console.log("viewDetails", viewDetails) } -// 用监听属性变化无其他意义 -const tmp = computed(()=>{ - setTimeout(()=>{ - that.inputVal = toStr(props.modelValue,that.inputVal) - if (that.inputVal) { - initInput(); - } - },100) - return '' -},{ - deep: true -}) - -const toStr = (data: any) => { +const toStr = (data: any, def = '') => { if (data !== null && data !== undefined) { return `${data}` } - return data + return def } + let map = new Map(); const initInput = async () => { const dataKey = that.inputVal + ',' + props.dataKey + ',' + props.showKey + ',' + props.multiple; @@ -218,6 +206,27 @@ watch(() => props.visible, (newVal) => { that.visible = newVal; }) + +// 用监听属性变化无其他意义 +const tmp = computed(() => { + setTimeout(() => { + that.inputVal = toStr(props.modelValue, that.inputVal) + if (that.inputVal) { + initInput(); + } + }, 100) + return '' +}, { + deep: true +}) +watch(() => props.modelValue, (newVal) => { + that.inputVal = toStr(newVal, '') + if (that.inputVal) { + initInput(); + } +}, { + immediate: true +}) const clearData = () => { that.inputVal = ''; that.showValue = ''; @@ -237,12 +246,12 @@ const submit = () => { updateVisible(false) } const updateValue = () => { - console.log("that.inputVal",that.inputVal) + console.log("that.inputVal", that.inputVal) emit("update:modelValue", that.inputVal) } // const selectionChange = (row) => { - console.log("row",row) + console.log("row", row) if (row && row.length > 0) { if (props.multiple) { that.inputVal = row.map(item => item[props.dataKey || 'id']).join(',') diff --git a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignImageLibDialog/index.vue b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignImageLibDialog/index.vue index d9d1828..cf5d456 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignImageLibDialog/index.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/DraftDesignImageLibDialog/index.vue @@ -95,6 +95,7 @@ import {replaceDomain} from "@/utils"; import {ShapeType} from "@/components/DraftDesign/config"; import {Search} from "@element-plus/icons-vue"; import {createImageViewer} from "@/components/ImageViewer"; +import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi"; /** 稿件图片库 */ defineOptions({name: 'DraftDesignImageLibDialog'}) @@ -210,8 +211,13 @@ const updateVisible = (visible: boolean) => { defineExpose({}) // 提供 open 方法,用于打开弹窗 const submit = () => { - emit("update:modelValue", that.iconUrl) - updateVisible(false) + // 转成base64 + convertImageToBase64(that.iconUrl).then((res:string) => { + that.iconUrl = res; + emit("update:modelValue", that.iconUrl) + updateVisible(false) + }) + } const clearData = ()=>{ that.iconUrl = ''; diff --git a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/ProductInfoListDialog/index.vue b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/ProductInfoListDialog/index.vue index be83138..035650e 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/ProductInfoListDialog/index.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/Dialog/src/ProductInfoListDialog/index.vue @@ -95,7 +95,7 @@ \ No newline at end of file + diff --git a/hangtag-ui/hangtag-ui-admin/src/views/oms/brand/BrandForm.vue b/hangtag-ui/hangtag-ui-admin/src/views/oms/brand/BrandForm.vue index 529440b..8292fc7 100644 --- a/hangtag-ui/hangtag-ui-admin/src/views/oms/brand/BrandForm.vue +++ b/hangtag-ui/hangtag-ui-admin/src/views/oms/brand/BrandForm.vue @@ -1,5 +1,8 @@