diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java index 9953935a..cf60b5ce 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java @@ -78,6 +78,8 @@ public interface ErrorCodeConstants { // ========== 主体跟进管理 TODO 补充编号 ========== ErrorCode SUBJECT_FOLLOW_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002004018, "主体跟进管理不存在"); + // ========== 商品表 TODO 补充编号 ========== + ErrorCode PRODUCT_NOT_EXISTS = new ErrorCode(1002004019, "商品不存在"); /** * 合同 使用 1-005-000-000 段 diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/ProductController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/ProductController.java new file mode 100644 index 00000000..2a694a7c --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/ProductController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product; + +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 com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; +import com.yunxi.scm.module.xxjj.convert.product.ProductConvert; +import com.yunxi.scm.module.xxjj.service.product.ProductService; + +@Tag(name = "管理后台 - 商品") +@RestController +@RequestMapping("/xxjj/product") +@Validated +public class ProductController { + + @Resource + private ProductService productService; + + @PostMapping("/create") + @Operation(summary = "创建商品") + @PreAuthorize("@ss.hasPermission('xxjj:product:create')") + public CommonResult createProduct(@Valid @RequestBody ProductCreateReqVO createReqVO) { + return success(productService.createProduct(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品") + @PreAuthorize("@ss.hasPermission('xxjj:product:update')") + public CommonResult updateProduct(@Valid @RequestBody ProductUpdateReqVO updateReqVO) { + productService.updateProduct(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:product:delete')") + public CommonResult deleteProduct(@RequestParam("id") Long id) { + productService.deleteProduct(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:product:query')") + public CommonResult getProduct(@RequestParam("id") Long id) { + ProductDO product = productService.getProduct(id); + return success(ProductConvert.INSTANCE.convert(product)); + } + + @GetMapping("/list") + @Operation(summary = "获得商品列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:product:query')") + public CommonResult> getProductList(@RequestParam("ids") Collection ids) { + List list = productService.getProductList(ids); + return success(ProductConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品分页") + @PreAuthorize("@ss.hasPermission('xxjj:product:query')") + public CommonResult> getProductPage(@Valid ProductPageReqVO pageVO) { + PageResult pageResult = productService.getProductPage(pageVO); + return success(ProductConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:product:export')") + @OperateLog(type = EXPORT) + public void exportProductExcel(@Valid ProductExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = productService.getProductList(exportReqVO); + // 导出 Excel + List datas = ProductConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "商品.xls", "数据", ProductExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductBaseVO.java new file mode 100644 index 00000000..1bef12c0 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductBaseVO.java @@ -0,0 +1,290 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 商品 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class ProductBaseVO { + + @Schema(description = "商品图片") + private String photo; + + @Schema(description = "商品编码") + private String code; + + @Schema(description = "商品名称", example = "芋艿") + private String name; + + @Schema(description = "商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架)不能为空") + private String productStatus; + + @Schema(description = "商品类型(1:实物商品 2:虚拟商品 3:电子卡券 4:设备/器材 5:耗材/辅材)", example = "2") + private String productType; + + @Schema(description = "商品简称", example = "王五") + private String shortName; + + @Schema(description = "商品条码") + private String barCode; + + @Schema(description = "箱面号") + private String boxSurfaceNum; + + @Schema(description = "商品规格") + private String spec; + + @Schema(description = "存货类型(1:原材料 2:半成品 3:产成品)", example = "2") + private String inventoryType; + + @Schema(description = "品牌id", example = "18685") + private Long brandId; + + @Schema(description = "地区") + private String area; + + @Schema(description = "关联商品分类id", example = "2990") + private String productTypeId; + + @Schema(description = "商品类目") + private String areaCategory; + + @Schema(description = "危险品(0:否 1:是)") + private String dangerousFlag; + + @Schema(description = "进口商品(0:否 1:是)") + private String importedFlag; + + @Schema(description = "关联一级供应商id", example = "25211") + private Long firstSupplierId; + + @Schema(description = "结算主体") + private String settlementEntity; + + @Schema(description = "销项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String outputTaxRate; + + @Schema(description = "进项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String inputTaxRate; + + @Schema(description = "配送方式(1:仓配 2:直送 3:直达)", example = "1") + private String deliveryType; + + @Schema(description = "开启多单位(0:否 1:是)") + private String manyUnitFlag; + + @Schema(description = "库存单位", example = "7634") + private Long inventoryUnitId; + + @Schema(description = "订货主单位", example = "31591") + private Long orderMainUnitId; + + @Schema(description = "其他订货单位", example = "8935") + private String orderOtherUnitId; + + @Schema(description = "销售主单位", example = "25267") + private Long salesMainUnitId; + + @Schema(description = "其他销售单位", example = "27531") + private String salesOtherUnitId; + + @Schema(description = "操作单位", example = "16932") + private Long operateUnitId; + + @Schema(description = "计价单位", example = "30762") + private Long pricingUnitId; + + @Schema(description = "采购订货量下限") + private String purchaseOrderQuantityDown; + + @Schema(description = "采购订货量上限") + private String purchaseOrderQuantityUpper; + + @Schema(description = "采购订货倍数") + private String purchaseOrderMultiple; + + @Schema(description = "采购起订金额") + private String purchaseInitialAmount; + + @Schema(description = "允许超收比例") + private String purchaseAllowOverchargingRatio; + + @Schema(description = "采购订货时间开始") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime purchaseOrderStart; + + @Schema(description = "采购订货时间结束") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime purchaseOrderEnd; + + @Schema(description = "采购模式(1:以采定销 2:以销定采)") + private String purchaseMode; + + @Schema(description = "销售订货量下限") + private String salesOrderQuantityDown; + + @Schema(description = "销售订货量上限") + private String salesOrderQuantityUpper; + + @Schema(description = "销售订货倍数") + private String salesOrderMultiple; + + @Schema(description = "销售起订金额") + private String salesInitialAmount; + + @Schema(description = "允许超收比例") + private String salesAllowOverchargingRatio; + + @Schema(description = "销售时间开始") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime salesStart; + + @Schema(description = "销售时间结束") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime salesEnd; + + @Schema(description = "开售模式(1:立即开售 2:定时开售)") + private String salesModeStart; + + @Schema(description = "售卖方式(1:现货 2:预售)") + private String salesMode; + + @Schema(description = "送货时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime deliverGoodsDate; + + @Schema(description = "下单成功后几天后送货") + private String delayNum; + + @Schema(description = "安全库存") + private String safetyStock; + + @Schema(description = "库存天数下限") + private String inventoryDayDown; + + @Schema(description = "库存天数上限") + private String inventoryDayUpper; + + @Schema(description = "库存下限") + private String inventoryDown; + + @Schema(description = "库存上限") + private String inventoryUpper; + + @Schema(description = "固定补货数量") + private String fixedReplenishmentQuantity; + + @Schema(description = "可售库存") + private String availableInventory; + + @Schema(description = "使用在途库存(0:不使用 1:使用)") + private String transitInventory; + + @Schema(description = "管理库存(0:关闭 1:开启)") + private String manageInventory; + + @Schema(description = "追溯(0:关闭 1:开启)") + private String fromInventory; + + @Schema(description = "批次管理(0:关闭 1:开启)") + private String manageBatches; + + @Schema(description = "层数/板(运输)") + private String transportStoreyBoardNum; + + @Schema(description = "箱数/层(运输)") + private String transportBoxStoreyNum; + + @Schema(description = "箱数/板(运输)") + private String transportBoxBoardNum; + + @Schema(description = "温层(运输)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String transportTemperature; + + @Schema(description = "运输温度下限") + private String transportTemperatureDown; + + @Schema(description = "运输温度上限") + private String transportTemperatureUpper; + + @Schema(description = "层数/板(存储)") + private String storageStoreyBoardNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxStoreyNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxBoardNum; + + @Schema(description = "温层(存储)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String storageTemperature; + + @Schema(description = "存储温度下限") + private String storageTemperatureDown; + + @Schema(description = "存储温度上限") + private String storageTemperatureUpper; + + @Schema(description = "质检比例") + private String qualityInspectionRatio; + + @Schema(description = "质检频次") + private String qualityInspectionFrequency; + + @Schema(description = "质检报告") + private String qualityInspectionReport; + + @Schema(description = "质检报告有效期开始") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime qualityInspectionReportStart; + + @Schema(description = "质检报告有效期结束") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime qualityInspectionReportEnd; + + @Schema(description = "质量控制(0:关闭 1:开启)") + private String qualityControl; + + @Schema(description = "质检标准") + private String qualityInspectionStandards; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "预留字段1") + private String reservedFields1; + + @Schema(description = "预留字段2") + private String reservedFields2; + + @Schema(description = "预留字段3") + private String reservedFields3; + + @Schema(description = "预留字段4") + private String reservedFields4; + + @Schema(description = "预留字段5") + private String reservedFields5; + + @Schema(description = "预留字段6") + private String reservedFields6; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductCreateReqVO.java new file mode 100644 index 00000000..f6cb9486 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 商品创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProductCreateReqVO extends ProductBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExcelVO.java new file mode 100644 index 00000000..204565a5 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExcelVO.java @@ -0,0 +1,306 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import com.yunxi.scm.framework.excel.core.convert.DictConvert; + + +/** + * 商品 Excel VO + * + * @author 长江云息 + */ +@Data +public class ProductExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("商品图片") + private String photo; + + @ExcelProperty("商品编码") + private String code; + + @ExcelProperty("商品名称") + private String name; + + @ExcelProperty(value = "商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架)", converter = DictConvert.class) + @DictFormat("product_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String productStatus; + + @ExcelProperty(value = "商品类型(1:实物商品 2:虚拟商品 3:电子卡券 4:设备/器材 5:耗材/辅材)", converter = DictConvert.class) + @DictFormat("product_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String productType; + + @ExcelProperty("商品简称") + private String shortName; + + @ExcelProperty("商品条码") + private String barCode; + + @ExcelProperty("箱面号") + private String boxSurfaceNum; + + @ExcelProperty("商品规格") + private String spec; + + @ExcelProperty(value = "存货类型(1:原材料 2:半成品 3:产成品)", converter = DictConvert.class) + @DictFormat("save_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String inventoryType; + + @ExcelProperty("品牌id") + private Long brandId; + + @ExcelProperty("地区") + private String area; + + @ExcelProperty("关联商品分类id") + private String productTypeId; + + @ExcelProperty("商品类目") + private String areaCategory; + + @ExcelProperty(value = "危险品(0:否 1:是)", converter = DictConvert.class) + @DictFormat("dangerous_flag") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String dangerousFlag; + + @ExcelProperty(value = "进口商品(0:否 1:是)", converter = DictConvert.class) + @DictFormat("imported_flag") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String importedFlag; + + @ExcelProperty("关联一级供应商id") + private Long firstSupplierId; + + @ExcelProperty("结算主体") + private String settlementEntity; + + @ExcelProperty("销项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String outputTaxRate; + + @ExcelProperty("进项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String inputTaxRate; + + @ExcelProperty("配送方式(1:仓配 2:直送 3:直达)") + private String deliveryType; + + @ExcelProperty(value = "开启多单位(0:否 1:是)", converter = DictConvert.class) + @DictFormat("many_unit_flag") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String manyUnitFlag; + + @ExcelProperty("库存单位") + private Long inventoryUnitId; + + @ExcelProperty("订货主单位") + private Long orderMainUnitId; + + @ExcelProperty("其他订货单位") + private String orderOtherUnitId; + + @ExcelProperty("销售主单位") + private Long salesMainUnitId; + + @ExcelProperty("其他销售单位") + private String salesOtherUnitId; + + @ExcelProperty("操作单位") + private Long operateUnitId; + + @ExcelProperty("计价单位") + private Long pricingUnitId; + + @ExcelProperty("采购订货量下限") + private String purchaseOrderQuantityDown; + + @ExcelProperty("采购订货量上限") + private String purchaseOrderQuantityUpper; + + @ExcelProperty("采购订货倍数") + private String purchaseOrderMultiple; + + @ExcelProperty("采购起订金额") + private String purchaseInitialAmount; + + @ExcelProperty("允许超收比例") + private String purchaseAllowOverchargingRatio; + + @ExcelProperty("采购订货时间开始") + private LocalDateTime purchaseOrderStart; + + @ExcelProperty("采购订货时间结束") + private LocalDateTime purchaseOrderEnd; + + @ExcelProperty(value = "采购模式(1:以采定销 2:以销定采)", converter = DictConvert.class) + @DictFormat("purchase_way") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String purchaseMode; + + @ExcelProperty("销售订货量下限") + private String salesOrderQuantityDown; + + @ExcelProperty("销售订货量上限") + private String salesOrderQuantityUpper; + + @ExcelProperty("销售订货倍数") + private String salesOrderMultiple; + + @ExcelProperty("销售起订金额") + private String salesInitialAmount; + + @ExcelProperty("允许超收比例") + private String salesAllowOverchargingRatio; + + @ExcelProperty("销售时间开始") + private LocalDateTime salesStart; + + @ExcelProperty("销售时间结束") + private LocalDateTime salesEnd; + + @ExcelProperty(value = "开售模式(1:立即开售 2:定时开售)", converter = DictConvert.class) + @DictFormat("sales_mode_start") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String salesModeStart; + + @ExcelProperty(value = "售卖方式(1:现货 2:预售)", converter = DictConvert.class) + @DictFormat("sales_mode") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String salesMode; + + @ExcelProperty("送货时间") + private LocalDateTime deliverGoodsDate; + + @ExcelProperty("下单成功后几天后送货") + private String delayNum; + + @ExcelProperty("安全库存") + private String safetyStock; + + @ExcelProperty("库存天数下限") + private String inventoryDayDown; + + @ExcelProperty("库存天数上限") + private String inventoryDayUpper; + + @ExcelProperty("库存下限") + private String inventoryDown; + + @ExcelProperty("库存上限") + private String inventoryUpper; + + @ExcelProperty("固定补货数量") + private String fixedReplenishmentQuantity; + + @ExcelProperty("可售库存") + private String availableInventory; + + @ExcelProperty(value = "使用在途库存(0:不使用 1:使用)", converter = DictConvert.class) + @DictFormat("transit_inventory") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String transitInventory; + + @ExcelProperty(value = "管理库存(0:关闭 1:开启)", converter = DictConvert.class) + @DictFormat("manage_inventory") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String manageInventory; + + @ExcelProperty(value = "追溯(0:关闭 1:开启)", converter = DictConvert.class) + @DictFormat("manage_inventory") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String fromInventory; + + @ExcelProperty(value = "批次管理(0:关闭 1:开启)", converter = DictConvert.class) + @DictFormat("manage_inventory") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String manageBatches; + + @ExcelProperty("层数/板(运输)") + private String transportStoreyBoardNum; + + @ExcelProperty("箱数/层(运输)") + private String transportBoxStoreyNum; + + @ExcelProperty("箱数/板(运输)") + private String transportBoxBoardNum; + + @ExcelProperty(value = "温层(运输)(1:常温 2:恒温 3:冷藏 4:冷冻)", converter = DictConvert.class) + @DictFormat("transport_temperature") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String transportTemperature; + + @ExcelProperty("运输温度下限") + private String transportTemperatureDown; + + @ExcelProperty("运输温度上限") + private String transportTemperatureUpper; + + @ExcelProperty("层数/板(存储)") + private String storageStoreyBoardNum; + + @ExcelProperty("层数/板(存储)") + private String storageBoxStoreyNum; + + @ExcelProperty("层数/板(存储)") + private String storageBoxBoardNum; + + @ExcelProperty(value = "温层(存储)(1:常温 2:恒温 3:冷藏 4:冷冻)", converter = DictConvert.class) + @DictFormat("transport_temperature") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String storageTemperature; + + @ExcelProperty("存储温度下限") + private String storageTemperatureDown; + + @ExcelProperty("存储温度上限") + private String storageTemperatureUpper; + + @ExcelProperty("质检比例") + private String qualityInspectionRatio; + + @ExcelProperty("质检频次") + private String qualityInspectionFrequency; + + @ExcelProperty("质检报告") + private String qualityInspectionReport; + + @ExcelProperty("质检报告有效期开始") + private LocalDateTime qualityInspectionReportStart; + + @ExcelProperty("质检报告有效期结束") + private LocalDateTime qualityInspectionReportEnd; + + @ExcelProperty(value = "质量控制(0:关闭 1:开启)", converter = DictConvert.class) + @DictFormat("manage_inventory") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String qualityControl; + + @ExcelProperty("质检标准") + private String qualityInspectionStandards; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("预留字段1") + private String reservedFields1; + + @ExcelProperty("预留字段2") + private String reservedFields2; + + @ExcelProperty("预留字段3") + private String reservedFields3; + + @ExcelProperty("预留字段4") + private String reservedFields4; + + @ExcelProperty("预留字段5") + private String reservedFields5; + + @ExcelProperty("预留字段6") + private String reservedFields6; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExportReqVO.java new file mode 100644 index 00000000..a7dc594e --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductExportReqVO.java @@ -0,0 +1,276 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品 Excel 导出 Request VO,参数和 ProductPageReqVO 是一致的") +@Data +public class ProductExportReqVO { + + @Schema(description = "商品图片") + private String photo; + + @Schema(description = "商品编码") + private String code; + + @Schema(description = "商品名称", example = "芋艿") + private String name; + + @Schema(description = "商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架)", example = "1") + private String productStatus; + + @Schema(description = "商品类型(1:实物商品 2:虚拟商品 3:电子卡券 4:设备/器材 5:耗材/辅材)", example = "2") + private String productType; + + @Schema(description = "商品简称", example = "王五") + private String shortName; + + @Schema(description = "商品条码") + private String barCode; + + @Schema(description = "箱面号") + private String boxSurfaceNum; + + @Schema(description = "商品规格") + private String spec; + + @Schema(description = "存货类型(1:原材料 2:半成品 3:产成品)", example = "2") + private String inventoryType; + + @Schema(description = "品牌id", example = "18685") + private Long brandId; + + @Schema(description = "地区") + private String area; + + @Schema(description = "关联商品分类id", example = "2990") + private String productTypeId; + + @Schema(description = "商品类目") + private String areaCategory; + + @Schema(description = "危险品(0:否 1:是)") + private String dangerousFlag; + + @Schema(description = "进口商品(0:否 1:是)") + private String importedFlag; + + @Schema(description = "关联一级供应商id", example = "25211") + private Long firstSupplierId; + + @Schema(description = "结算主体") + private String settlementEntity; + + @Schema(description = "销项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String outputTaxRate; + + @Schema(description = "进项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String inputTaxRate; + + @Schema(description = "配送方式(1:仓配 2:直送 3:直达)", example = "1") + private String deliveryType; + + @Schema(description = "开启多单位(0:否 1:是)") + private String manyUnitFlag; + + @Schema(description = "库存单位", example = "7634") + private Long inventoryUnitId; + + @Schema(description = "订货主单位", example = "31591") + private Long orderMainUnitId; + + @Schema(description = "其他订货单位", example = "8935") + private String orderOtherUnitId; + + @Schema(description = "销售主单位", example = "25267") + private Long salesMainUnitId; + + @Schema(description = "其他销售单位", example = "27531") + private String salesOtherUnitId; + + @Schema(description = "操作单位", example = "16932") + private Long operateUnitId; + + @Schema(description = "计价单位", example = "30762") + private Long pricingUnitId; + + @Schema(description = "采购订货量下限") + private String purchaseOrderQuantityDown; + + @Schema(description = "采购订货量上限") + private String purchaseOrderQuantityUpper; + + @Schema(description = "采购订货倍数") + private String purchaseOrderMultiple; + + @Schema(description = "采购起订金额") + private String purchaseInitialAmount; + + @Schema(description = "允许超收比例") + private String purchaseAllowOverchargingRatio; + + @Schema(description = "采购订货时间开始") + private LocalDateTime purchaseOrderStart; + + @Schema(description = "采购订货时间结束") + private LocalDateTime purchaseOrderEnd; + + @Schema(description = "采购模式(1:以采定销 2:以销定采)") + private String purchaseMode; + + @Schema(description = "销售订货量下限") + private String salesOrderQuantityDown; + + @Schema(description = "销售订货量上限") + private String salesOrderQuantityUpper; + + @Schema(description = "销售订货倍数") + private String salesOrderMultiple; + + @Schema(description = "销售起订金额") + private String salesInitialAmount; + + @Schema(description = "允许超收比例") + private String salesAllowOverchargingRatio; + + @Schema(description = "销售时间开始") + private LocalDateTime salesStart; + + @Schema(description = "销售时间结束") + private LocalDateTime salesEnd; + + @Schema(description = "开售模式(1:立即开售 2:定时开售)") + private String salesModeStart; + + @Schema(description = "售卖方式(1:现货 2:预售)") + private String salesMode; + + @Schema(description = "送货时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deliverGoodsDate; + + @Schema(description = "下单成功后几天后送货") + private String delayNum; + + @Schema(description = "安全库存") + private String safetyStock; + + @Schema(description = "库存天数下限") + private String inventoryDayDown; + + @Schema(description = "库存天数上限") + private String inventoryDayUpper; + + @Schema(description = "库存下限") + private String inventoryDown; + + @Schema(description = "库存上限") + private String inventoryUpper; + + @Schema(description = "固定补货数量") + private String fixedReplenishmentQuantity; + + @Schema(description = "可售库存") + private String availableInventory; + + @Schema(description = "使用在途库存(0:不使用 1:使用)") + private String transitInventory; + + @Schema(description = "管理库存(0:关闭 1:开启)") + private String manageInventory; + + @Schema(description = "追溯(0:关闭 1:开启)") + private String fromInventory; + + @Schema(description = "批次管理(0:关闭 1:开启)") + private String manageBatches; + + @Schema(description = "层数/板(运输)") + private String transportStoreyBoardNum; + + @Schema(description = "箱数/层(运输)") + private String transportBoxStoreyNum; + + @Schema(description = "箱数/板(运输)") + private String transportBoxBoardNum; + + @Schema(description = "温层(运输)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String transportTemperature; + + @Schema(description = "运输温度下限") + private String transportTemperatureDown; + + @Schema(description = "运输温度上限") + private String transportTemperatureUpper; + + @Schema(description = "层数/板(存储)") + private String storageStoreyBoardNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxStoreyNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxBoardNum; + + @Schema(description = "温层(存储)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String storageTemperature; + + @Schema(description = "存储温度下限") + private String storageTemperatureDown; + + @Schema(description = "存储温度上限") + private String storageTemperatureUpper; + + @Schema(description = "质检比例") + private String qualityInspectionRatio; + + @Schema(description = "质检频次") + private String qualityInspectionFrequency; + + @Schema(description = "质检报告") + private String qualityInspectionReport; + + @Schema(description = "质检报告有效期开始") + private LocalDateTime qualityInspectionReportStart; + + @Schema(description = "质检报告有效期结束") + private LocalDateTime qualityInspectionReportEnd; + + @Schema(description = "质量控制(0:关闭 1:开启)") + private String qualityControl; + + @Schema(description = "质检标准") + private String qualityInspectionStandards; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "预留字段1") + private String reservedFields1; + + @Schema(description = "预留字段2") + private String reservedFields2; + + @Schema(description = "预留字段3") + private String reservedFields3; + + @Schema(description = "预留字段4") + private String reservedFields4; + + @Schema(description = "预留字段5") + private String reservedFields5; + + @Schema(description = "预留字段6") + private String reservedFields6; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductPageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductPageReqVO.java new file mode 100644 index 00000000..75c6743e --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductPageReqVO.java @@ -0,0 +1,278 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.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 ProductPageReqVO extends PageParam { + + @Schema(description = "商品图片") + private String photo; + + @Schema(description = "商品编码") + private String code; + + @Schema(description = "商品名称", example = "芋艿") + private String name; + + @Schema(description = "商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架)", example = "1") + private String productStatus; + + @Schema(description = "商品类型(1:实物商品 2:虚拟商品 3:电子卡券 4:设备/器材 5:耗材/辅材)", example = "2") + private String productType; + + @Schema(description = "商品简称", example = "王五") + private String shortName; + + @Schema(description = "商品条码") + private String barCode; + + @Schema(description = "箱面号") + private String boxSurfaceNum; + + @Schema(description = "商品规格") + private String spec; + + @Schema(description = "存货类型(1:原材料 2:半成品 3:产成品)", example = "2") + private String inventoryType; + + @Schema(description = "品牌id", example = "18685") + private Long brandId; + + @Schema(description = "地区") + private String area; + + @Schema(description = "关联商品分类id", example = "2990") + private String productTypeId; + + @Schema(description = "商品类目") + private String areaCategory; + + @Schema(description = "危险品(0:否 1:是)") + private String dangerousFlag; + + @Schema(description = "进口商品(0:否 1:是)") + private String importedFlag; + + @Schema(description = "关联一级供应商id", example = "25211") + private Long firstSupplierId; + + @Schema(description = "结算主体") + private String settlementEntity; + + @Schema(description = "销项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String outputTaxRate; + + @Schema(description = "进项税率(1:0% 2:1% 3:2% 4:3% 5:4%)") + private String inputTaxRate; + + @Schema(description = "配送方式(1:仓配 2:直送 3:直达)", example = "1") + private String deliveryType; + + @Schema(description = "开启多单位(0:否 1:是)") + private String manyUnitFlag; + + @Schema(description = "库存单位", example = "7634") + private Long inventoryUnitId; + + @Schema(description = "订货主单位", example = "31591") + private Long orderMainUnitId; + + @Schema(description = "其他订货单位", example = "8935") + private String orderOtherUnitId; + + @Schema(description = "销售主单位", example = "25267") + private Long salesMainUnitId; + + @Schema(description = "其他销售单位", example = "27531") + private String salesOtherUnitId; + + @Schema(description = "操作单位", example = "16932") + private Long operateUnitId; + + @Schema(description = "计价单位", example = "30762") + private Long pricingUnitId; + + @Schema(description = "采购订货量下限") + private String purchaseOrderQuantityDown; + + @Schema(description = "采购订货量上限") + private String purchaseOrderQuantityUpper; + + @Schema(description = "采购订货倍数") + private String purchaseOrderMultiple; + + @Schema(description = "采购起订金额") + private String purchaseInitialAmount; + + @Schema(description = "允许超收比例") + private String purchaseAllowOverchargingRatio; + + @Schema(description = "采购订货时间开始") + private LocalDateTime purchaseOrderStart; + + @Schema(description = "采购订货时间结束") + private LocalDateTime purchaseOrderEnd; + + @Schema(description = "采购模式(1:以采定销 2:以销定采)") + private String purchaseMode; + + @Schema(description = "销售订货量下限") + private String salesOrderQuantityDown; + + @Schema(description = "销售订货量上限") + private String salesOrderQuantityUpper; + + @Schema(description = "销售订货倍数") + private String salesOrderMultiple; + + @Schema(description = "销售起订金额") + private String salesInitialAmount; + + @Schema(description = "允许超收比例") + private String salesAllowOverchargingRatio; + + @Schema(description = "销售时间开始") + private LocalDateTime salesStart; + + @Schema(description = "销售时间结束") + private LocalDateTime salesEnd; + + @Schema(description = "开售模式(1:立即开售 2:定时开售)") + private String salesModeStart; + + @Schema(description = "售卖方式(1:现货 2:预售)") + private String salesMode; + + @Schema(description = "送货时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deliverGoodsDate; + + @Schema(description = "下单成功后几天后送货") + private String delayNum; + + @Schema(description = "安全库存") + private String safetyStock; + + @Schema(description = "库存天数下限") + private String inventoryDayDown; + + @Schema(description = "库存天数上限") + private String inventoryDayUpper; + + @Schema(description = "库存下限") + private String inventoryDown; + + @Schema(description = "库存上限") + private String inventoryUpper; + + @Schema(description = "固定补货数量") + private String fixedReplenishmentQuantity; + + @Schema(description = "可售库存") + private String availableInventory; + + @Schema(description = "使用在途库存(0:不使用 1:使用)") + private String transitInventory; + + @Schema(description = "管理库存(0:关闭 1:开启)") + private String manageInventory; + + @Schema(description = "追溯(0:关闭 1:开启)") + private String fromInventory; + + @Schema(description = "批次管理(0:关闭 1:开启)") + private String manageBatches; + + @Schema(description = "层数/板(运输)") + private String transportStoreyBoardNum; + + @Schema(description = "箱数/层(运输)") + private String transportBoxStoreyNum; + + @Schema(description = "箱数/板(运输)") + private String transportBoxBoardNum; + + @Schema(description = "温层(运输)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String transportTemperature; + + @Schema(description = "运输温度下限") + private String transportTemperatureDown; + + @Schema(description = "运输温度上限") + private String transportTemperatureUpper; + + @Schema(description = "层数/板(存储)") + private String storageStoreyBoardNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxStoreyNum; + + @Schema(description = "层数/板(存储)") + private String storageBoxBoardNum; + + @Schema(description = "温层(存储)(1:常温 2:恒温 3:冷藏 4:冷冻)") + private String storageTemperature; + + @Schema(description = "存储温度下限") + private String storageTemperatureDown; + + @Schema(description = "存储温度上限") + private String storageTemperatureUpper; + + @Schema(description = "质检比例") + private String qualityInspectionRatio; + + @Schema(description = "质检频次") + private String qualityInspectionFrequency; + + @Schema(description = "质检报告") + private String qualityInspectionReport; + + @Schema(description = "质检报告有效期开始") + private LocalDateTime qualityInspectionReportStart; + + @Schema(description = "质检报告有效期结束") + private LocalDateTime qualityInspectionReportEnd; + + @Schema(description = "质量控制(0:关闭 1:开启)") + private String qualityControl; + + @Schema(description = "质检标准") + private String qualityInspectionStandards; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "预留字段1") + private String reservedFields1; + + @Schema(description = "预留字段2") + private String reservedFields2; + + @Schema(description = "预留字段3") + private String reservedFields3; + + @Schema(description = "预留字段4") + private String reservedFields4; + + @Schema(description = "预留字段5") + private String reservedFields5; + + @Schema(description = "预留字段6") + private String reservedFields6; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductRespVO.java new file mode 100644 index 00000000..49fd4b78 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProductRespVO extends ProductBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25337") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductUpdateReqVO.java new file mode 100644 index 00000000..c7842387 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/product/vo/ProductUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.product.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 商品更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProductUpdateReqVO extends ProductBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25337") + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/product/ProductConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/product/ProductConvert.java new file mode 100644 index 00000000..78344ac1 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/product/ProductConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.product; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; + +/** + * 商品 Convert + * + * @author 长江云息 + */ +@Mapper +public interface ProductConvert { + + ProductConvert INSTANCE = Mappers.getMapper(ProductConvert.class); + + ProductDO convert(ProductCreateReqVO bean); + + ProductDO convert(ProductUpdateReqVO bean); + + ProductRespVO convert(ProductDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/product/ProductDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/product/ProductDO.java new file mode 100644 index 00000000..b4b0e992 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/product/ProductDO.java @@ -0,0 +1,410 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.product; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 商品 DO + * + * @author 长江云息 + */ +@TableName("xxjj_product") +@KeySequence("xxjj_product_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProductDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 商品图片 + */ + private String photo; + /** + * 商品编码 + */ + private String code; + /** + * 商品名称 + */ + private String name; + /** + * 商品状态(0:待提交 1:待审核 2:待上架 3:已上架 4:已下架) + * + * 枚举 {@link TODO product_status 对应的类} + */ + private String productStatus; + /** + * 商品类型(1:实物商品 2:虚拟商品 3:电子卡券 4:设备/器材 5:耗材/辅材) + * + * 枚举 {@link TODO product_type 对应的类} + */ + private String productType; + /** + * 商品简称 + */ + private String shortName; + /** + * 商品条码 + */ + private String barCode; + /** + * 箱面号 + */ + private String boxSurfaceNum; + /** + * 商品规格 + */ + private String spec; + /** + * 存货类型(1:原材料 2:半成品 3:产成品) + * + * 枚举 {@link TODO save_type 对应的类} + */ + private String inventoryType; + /** + * 品牌id + */ + private Long brandId; + /** + * 地区 + */ + private String area; + /** + * 关联商品分类id + */ + private String productTypeId; + /** + * 商品类目 + */ + private String areaCategory; + /** + * 危险品(0:否 1:是) + * + * 枚举 {@link TODO dangerous_flag 对应的类} + */ + private String dangerousFlag; + /** + * 进口商品(0:否 1:是) + * + * 枚举 {@link TODO imported_flag 对应的类} + */ + private String importedFlag; + /** + * 关联一级供应商id + */ + private Long firstSupplierId; + /** + * 结算主体 + */ + private String settlementEntity; + /** + * 销项税率(1:0% 2:1% 3:2% 4:3% 5:4%) + */ + private String outputTaxRate; + /** + * 进项税率(1:0% 2:1% 3:2% 4:3% 5:4%) + */ + private String inputTaxRate; + /** + * 配送方式(1:仓配 2:直送 3:直达) + */ + private String deliveryType; + /** + * 开启多单位(0:否 1:是) + * + * 枚举 {@link TODO many_unit_flag 对应的类} + */ + private String manyUnitFlag; + /** + * 库存单位 + */ + private Long inventoryUnitId; + /** + * 订货主单位 + */ + private Long orderMainUnitId; + /** + * 其他订货单位 + */ + private String orderOtherUnitId; + /** + * 销售主单位 + */ + private Long salesMainUnitId; + /** + * 其他销售单位 + */ + private String salesOtherUnitId; + /** + * 操作单位 + */ + private Long operateUnitId; + /** + * 计价单位 + */ + private Long pricingUnitId; + /** + * 采购订货量下限 + */ + private String purchaseOrderQuantityDown; + /** + * 采购订货量上限 + */ + private String purchaseOrderQuantityUpper; + /** + * 采购订货倍数 + */ + private String purchaseOrderMultiple; + /** + * 采购起订金额 + */ + private String purchaseInitialAmount; + /** + * 允许超收比例 + */ + private String purchaseAllowOverchargingRatio; + /** + * 采购订货时间开始 + */ + private LocalDateTime purchaseOrderStart; + /** + * 采购订货时间结束 + */ + private LocalDateTime purchaseOrderEnd; + /** + * 采购模式(1:以采定销 2:以销定采) + * + * 枚举 {@link TODO purchase_way 对应的类} + */ + private String purchaseMode; + /** + * 销售订货量下限 + */ + private String salesOrderQuantityDown; + /** + * 销售订货量上限 + */ + private String salesOrderQuantityUpper; + /** + * 销售订货倍数 + */ + private String salesOrderMultiple; + /** + * 销售起订金额 + */ + private String salesInitialAmount; + /** + * 允许超收比例 + */ + private String salesAllowOverchargingRatio; + /** + * 销售时间开始 + */ + private LocalDateTime salesStart; + /** + * 销售时间结束 + */ + private LocalDateTime salesEnd; + /** + * 开售模式(1:立即开售 2:定时开售) + * + * 枚举 {@link TODO sales_mode_start 对应的类} + */ + private String salesModeStart; + /** + * 售卖方式(1:现货 2:预售) + * + * 枚举 {@link TODO sales_mode 对应的类} + */ + private String salesMode; + /** + * 送货时间 + */ + private LocalDateTime deliverGoodsDate; + /** + * 下单成功后几天后送货 + */ + private String delayNum; + /** + * 安全库存 + */ + private String safetyStock; + /** + * 库存天数下限 + */ + private String inventoryDayDown; + /** + * 库存天数上限 + */ + private String inventoryDayUpper; + /** + * 库存下限 + */ + private String inventoryDown; + /** + * 库存上限 + */ + private String inventoryUpper; + /** + * 固定补货数量 + */ + private String fixedReplenishmentQuantity; + /** + * 可售库存 + */ + private String availableInventory; + /** + * 使用在途库存(0:不使用 1:使用) + * + * 枚举 {@link TODO transit_inventory 对应的类} + */ + private String transitInventory; + /** + * 管理库存(0:关闭 1:开启) + * + * 枚举 {@link TODO manage_inventory 对应的类} + */ + private String manageInventory; + /** + * 追溯(0:关闭 1:开启) + * + * 枚举 {@link TODO manage_inventory 对应的类} + */ + private String fromInventory; + /** + * 批次管理(0:关闭 1:开启) + * + * 枚举 {@link TODO manage_inventory 对应的类} + */ + private String manageBatches; + /** + * 层数/板(运输) + */ + private String transportStoreyBoardNum; + /** + * 箱数/层(运输) + */ + private String transportBoxStoreyNum; + /** + * 箱数/板(运输) + */ + private String transportBoxBoardNum; + /** + * 温层(运输)(1:常温 2:恒温 3:冷藏 4:冷冻) + * + * 枚举 {@link TODO transport_temperature 对应的类} + */ + private String transportTemperature; + /** + * 运输温度下限 + */ + private String transportTemperatureDown; + /** + * 运输温度上限 + */ + private String transportTemperatureUpper; + /** + * 层数/板(存储) + */ + private String storageStoreyBoardNum; + /** + * 层数/板(存储) + */ + private String storageBoxStoreyNum; + /** + * 层数/板(存储) + */ + private String storageBoxBoardNum; + /** + * 温层(存储)(1:常温 2:恒温 3:冷藏 4:冷冻) + * + * 枚举 {@link TODO transport_temperature 对应的类} + */ + private String storageTemperature; + /** + * 存储温度下限 + */ + private String storageTemperatureDown; + /** + * 存储温度上限 + */ + private String storageTemperatureUpper; + /** + * 质检比例 + */ + private String qualityInspectionRatio; + /** + * 质检频次 + */ + private String qualityInspectionFrequency; + /** + * 质检报告 + */ + private String qualityInspectionReport; + /** + * 质检报告有效期开始 + */ + private LocalDateTime qualityInspectionReportStart; + /** + * 质检报告有效期结束 + */ + private LocalDateTime qualityInspectionReportEnd; + /** + * 质量控制(0:关闭 1:开启) + * + * 枚举 {@link TODO manage_inventory 对应的类} + */ + private String qualityControl; + /** + * 质检标准 + */ + private String qualityInspectionStandards; + /** + * 备注 + */ + private String remark; + /** + * 预留字段1 + */ + private String reservedFields1; + /** + * 预留字段2 + */ + private String reservedFields2; + /** + * 预留字段3 + */ + private String reservedFields3; + /** + * 预留字段4 + */ + private String reservedFields4; + /** + * 预留字段5 + */ + private String reservedFields5; + /** + * 预留字段6 + */ + private String reservedFields6; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/product/ProductMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/product/ProductMapper.java new file mode 100644 index 00000000..1371cf8f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/product/ProductMapper.java @@ -0,0 +1,202 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.product; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; + +/** + * 商品 Mapper + * + * @author 长江云息 + */ +@Mapper +public interface ProductMapper extends BaseMapperX { + + default PageResult selectPage(ProductPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ProductDO::getPhoto, reqVO.getPhoto()) + .eqIfPresent(ProductDO::getCode, reqVO.getCode()) + .likeIfPresent(ProductDO::getName, reqVO.getName()) + .eqIfPresent(ProductDO::getProductStatus, reqVO.getProductStatus()) + .eqIfPresent(ProductDO::getProductType, reqVO.getProductType()) + .likeIfPresent(ProductDO::getShortName, reqVO.getShortName()) + .eqIfPresent(ProductDO::getBarCode, reqVO.getBarCode()) + .eqIfPresent(ProductDO::getBoxSurfaceNum, reqVO.getBoxSurfaceNum()) + .eqIfPresent(ProductDO::getSpec, reqVO.getSpec()) + .eqIfPresent(ProductDO::getInventoryType, reqVO.getInventoryType()) + .eqIfPresent(ProductDO::getBrandId, reqVO.getBrandId()) + .eqIfPresent(ProductDO::getArea, reqVO.getArea()) + .eqIfPresent(ProductDO::getProductTypeId, reqVO.getProductTypeId()) + .eqIfPresent(ProductDO::getAreaCategory, reqVO.getAreaCategory()) + .eqIfPresent(ProductDO::getDangerousFlag, reqVO.getDangerousFlag()) + .eqIfPresent(ProductDO::getImportedFlag, reqVO.getImportedFlag()) + .eqIfPresent(ProductDO::getFirstSupplierId, reqVO.getFirstSupplierId()) + .eqIfPresent(ProductDO::getSettlementEntity, reqVO.getSettlementEntity()) + .eqIfPresent(ProductDO::getOutputTaxRate, reqVO.getOutputTaxRate()) + .eqIfPresent(ProductDO::getInputTaxRate, reqVO.getInputTaxRate()) + .eqIfPresent(ProductDO::getDeliveryType, reqVO.getDeliveryType()) + .eqIfPresent(ProductDO::getManyUnitFlag, reqVO.getManyUnitFlag()) + .eqIfPresent(ProductDO::getInventoryUnitId, reqVO.getInventoryUnitId()) + .eqIfPresent(ProductDO::getOrderMainUnitId, reqVO.getOrderMainUnitId()) + .eqIfPresent(ProductDO::getOrderOtherUnitId, reqVO.getOrderOtherUnitId()) + .eqIfPresent(ProductDO::getSalesMainUnitId, reqVO.getSalesMainUnitId()) + .eqIfPresent(ProductDO::getSalesOtherUnitId, reqVO.getSalesOtherUnitId()) + .eqIfPresent(ProductDO::getOperateUnitId, reqVO.getOperateUnitId()) + .eqIfPresent(ProductDO::getPricingUnitId, reqVO.getPricingUnitId()) + .eqIfPresent(ProductDO::getPurchaseOrderQuantityDown, reqVO.getPurchaseOrderQuantityDown()) + .eqIfPresent(ProductDO::getPurchaseOrderQuantityUpper, reqVO.getPurchaseOrderQuantityUpper()) + .eqIfPresent(ProductDO::getPurchaseOrderMultiple, reqVO.getPurchaseOrderMultiple()) + .eqIfPresent(ProductDO::getPurchaseInitialAmount, reqVO.getPurchaseInitialAmount()) + .eqIfPresent(ProductDO::getPurchaseAllowOverchargingRatio, reqVO.getPurchaseAllowOverchargingRatio()) + .eqIfPresent(ProductDO::getPurchaseOrderStart, reqVO.getPurchaseOrderStart()) + .eqIfPresent(ProductDO::getPurchaseOrderEnd, reqVO.getPurchaseOrderEnd()) + .eqIfPresent(ProductDO::getPurchaseMode, reqVO.getPurchaseMode()) + .eqIfPresent(ProductDO::getSalesOrderQuantityDown, reqVO.getSalesOrderQuantityDown()) + .eqIfPresent(ProductDO::getSalesOrderQuantityUpper, reqVO.getSalesOrderQuantityUpper()) + .eqIfPresent(ProductDO::getSalesOrderMultiple, reqVO.getSalesOrderMultiple()) + .eqIfPresent(ProductDO::getSalesInitialAmount, reqVO.getSalesInitialAmount()) + .eqIfPresent(ProductDO::getSalesAllowOverchargingRatio, reqVO.getSalesAllowOverchargingRatio()) + .eqIfPresent(ProductDO::getSalesStart, reqVO.getSalesStart()) + .eqIfPresent(ProductDO::getSalesEnd, reqVO.getSalesEnd()) + .eqIfPresent(ProductDO::getSalesModeStart, reqVO.getSalesModeStart()) + .eqIfPresent(ProductDO::getSalesMode, reqVO.getSalesMode()) + .betweenIfPresent(ProductDO::getDeliverGoodsDate, reqVO.getDeliverGoodsDate()) + .eqIfPresent(ProductDO::getDelayNum, reqVO.getDelayNum()) + .eqIfPresent(ProductDO::getSafetyStock, reqVO.getSafetyStock()) + .eqIfPresent(ProductDO::getInventoryDayDown, reqVO.getInventoryDayDown()) + .eqIfPresent(ProductDO::getInventoryDayUpper, reqVO.getInventoryDayUpper()) + .eqIfPresent(ProductDO::getInventoryDown, reqVO.getInventoryDown()) + .eqIfPresent(ProductDO::getInventoryUpper, reqVO.getInventoryUpper()) + .eqIfPresent(ProductDO::getFixedReplenishmentQuantity, reqVO.getFixedReplenishmentQuantity()) + .eqIfPresent(ProductDO::getAvailableInventory, reqVO.getAvailableInventory()) + .eqIfPresent(ProductDO::getTransitInventory, reqVO.getTransitInventory()) + .eqIfPresent(ProductDO::getManageInventory, reqVO.getManageInventory()) + .eqIfPresent(ProductDO::getFromInventory, reqVO.getFromInventory()) + .eqIfPresent(ProductDO::getManageBatches, reqVO.getManageBatches()) + .eqIfPresent(ProductDO::getTransportStoreyBoardNum, reqVO.getTransportStoreyBoardNum()) + .eqIfPresent(ProductDO::getTransportBoxStoreyNum, reqVO.getTransportBoxStoreyNum()) + .eqIfPresent(ProductDO::getTransportBoxBoardNum, reqVO.getTransportBoxBoardNum()) + .eqIfPresent(ProductDO::getTransportTemperature, reqVO.getTransportTemperature()) + .eqIfPresent(ProductDO::getTransportTemperatureDown, reqVO.getTransportTemperatureDown()) + .eqIfPresent(ProductDO::getTransportTemperatureUpper, reqVO.getTransportTemperatureUpper()) + .eqIfPresent(ProductDO::getStorageStoreyBoardNum, reqVO.getStorageStoreyBoardNum()) + .eqIfPresent(ProductDO::getStorageBoxStoreyNum, reqVO.getStorageBoxStoreyNum()) + .eqIfPresent(ProductDO::getStorageBoxBoardNum, reqVO.getStorageBoxBoardNum()) + .eqIfPresent(ProductDO::getStorageTemperature, reqVO.getStorageTemperature()) + .eqIfPresent(ProductDO::getStorageTemperatureDown, reqVO.getStorageTemperatureDown()) + .eqIfPresent(ProductDO::getStorageTemperatureUpper, reqVO.getStorageTemperatureUpper()) + .eqIfPresent(ProductDO::getQualityInspectionRatio, reqVO.getQualityInspectionRatio()) + .eqIfPresent(ProductDO::getQualityInspectionFrequency, reqVO.getQualityInspectionFrequency()) + .eqIfPresent(ProductDO::getQualityInspectionReport, reqVO.getQualityInspectionReport()) + .eqIfPresent(ProductDO::getQualityInspectionReportStart, reqVO.getQualityInspectionReportStart()) + .eqIfPresent(ProductDO::getQualityInspectionReportEnd, reqVO.getQualityInspectionReportEnd()) + .eqIfPresent(ProductDO::getQualityControl, reqVO.getQualityControl()) + .eqIfPresent(ProductDO::getQualityInspectionStandards, reqVO.getQualityInspectionStandards()) + .eqIfPresent(ProductDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProductDO::getReservedFields1, reqVO.getReservedFields1()) + .eqIfPresent(ProductDO::getReservedFields2, reqVO.getReservedFields2()) + .eqIfPresent(ProductDO::getReservedFields3, reqVO.getReservedFields3()) + .eqIfPresent(ProductDO::getReservedFields4, reqVO.getReservedFields4()) + .eqIfPresent(ProductDO::getReservedFields5, reqVO.getReservedFields5()) + .eqIfPresent(ProductDO::getReservedFields6, reqVO.getReservedFields6()) + .betweenIfPresent(ProductDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ProductDO::getId)); + } + + default List selectList(ProductExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(ProductDO::getPhoto, reqVO.getPhoto()) + .eqIfPresent(ProductDO::getCode, reqVO.getCode()) + .likeIfPresent(ProductDO::getName, reqVO.getName()) + .eqIfPresent(ProductDO::getProductStatus, reqVO.getProductStatus()) + .eqIfPresent(ProductDO::getProductType, reqVO.getProductType()) + .likeIfPresent(ProductDO::getShortName, reqVO.getShortName()) + .eqIfPresent(ProductDO::getBarCode, reqVO.getBarCode()) + .eqIfPresent(ProductDO::getBoxSurfaceNum, reqVO.getBoxSurfaceNum()) + .eqIfPresent(ProductDO::getSpec, reqVO.getSpec()) + .eqIfPresent(ProductDO::getInventoryType, reqVO.getInventoryType()) + .eqIfPresent(ProductDO::getBrandId, reqVO.getBrandId()) + .eqIfPresent(ProductDO::getArea, reqVO.getArea()) + .eqIfPresent(ProductDO::getProductTypeId, reqVO.getProductTypeId()) + .eqIfPresent(ProductDO::getAreaCategory, reqVO.getAreaCategory()) + .eqIfPresent(ProductDO::getDangerousFlag, reqVO.getDangerousFlag()) + .eqIfPresent(ProductDO::getImportedFlag, reqVO.getImportedFlag()) + .eqIfPresent(ProductDO::getFirstSupplierId, reqVO.getFirstSupplierId()) + .eqIfPresent(ProductDO::getSettlementEntity, reqVO.getSettlementEntity()) + .eqIfPresent(ProductDO::getOutputTaxRate, reqVO.getOutputTaxRate()) + .eqIfPresent(ProductDO::getInputTaxRate, reqVO.getInputTaxRate()) + .eqIfPresent(ProductDO::getDeliveryType, reqVO.getDeliveryType()) + .eqIfPresent(ProductDO::getManyUnitFlag, reqVO.getManyUnitFlag()) + .eqIfPresent(ProductDO::getInventoryUnitId, reqVO.getInventoryUnitId()) + .eqIfPresent(ProductDO::getOrderMainUnitId, reqVO.getOrderMainUnitId()) + .eqIfPresent(ProductDO::getOrderOtherUnitId, reqVO.getOrderOtherUnitId()) + .eqIfPresent(ProductDO::getSalesMainUnitId, reqVO.getSalesMainUnitId()) + .eqIfPresent(ProductDO::getSalesOtherUnitId, reqVO.getSalesOtherUnitId()) + .eqIfPresent(ProductDO::getOperateUnitId, reqVO.getOperateUnitId()) + .eqIfPresent(ProductDO::getPricingUnitId, reqVO.getPricingUnitId()) + .eqIfPresent(ProductDO::getPurchaseOrderQuantityDown, reqVO.getPurchaseOrderQuantityDown()) + .eqIfPresent(ProductDO::getPurchaseOrderQuantityUpper, reqVO.getPurchaseOrderQuantityUpper()) + .eqIfPresent(ProductDO::getPurchaseOrderMultiple, reqVO.getPurchaseOrderMultiple()) + .eqIfPresent(ProductDO::getPurchaseInitialAmount, reqVO.getPurchaseInitialAmount()) + .eqIfPresent(ProductDO::getPurchaseAllowOverchargingRatio, reqVO.getPurchaseAllowOverchargingRatio()) + .eqIfPresent(ProductDO::getPurchaseOrderStart, reqVO.getPurchaseOrderStart()) + .eqIfPresent(ProductDO::getPurchaseOrderEnd, reqVO.getPurchaseOrderEnd()) + .eqIfPresent(ProductDO::getPurchaseMode, reqVO.getPurchaseMode()) + .eqIfPresent(ProductDO::getSalesOrderQuantityDown, reqVO.getSalesOrderQuantityDown()) + .eqIfPresent(ProductDO::getSalesOrderQuantityUpper, reqVO.getSalesOrderQuantityUpper()) + .eqIfPresent(ProductDO::getSalesOrderMultiple, reqVO.getSalesOrderMultiple()) + .eqIfPresent(ProductDO::getSalesInitialAmount, reqVO.getSalesInitialAmount()) + .eqIfPresent(ProductDO::getSalesAllowOverchargingRatio, reqVO.getSalesAllowOverchargingRatio()) + .eqIfPresent(ProductDO::getSalesStart, reqVO.getSalesStart()) + .eqIfPresent(ProductDO::getSalesEnd, reqVO.getSalesEnd()) + .eqIfPresent(ProductDO::getSalesModeStart, reqVO.getSalesModeStart()) + .eqIfPresent(ProductDO::getSalesMode, reqVO.getSalesMode()) + .betweenIfPresent(ProductDO::getDeliverGoodsDate, reqVO.getDeliverGoodsDate()) + .eqIfPresent(ProductDO::getDelayNum, reqVO.getDelayNum()) + .eqIfPresent(ProductDO::getSafetyStock, reqVO.getSafetyStock()) + .eqIfPresent(ProductDO::getInventoryDayDown, reqVO.getInventoryDayDown()) + .eqIfPresent(ProductDO::getInventoryDayUpper, reqVO.getInventoryDayUpper()) + .eqIfPresent(ProductDO::getInventoryDown, reqVO.getInventoryDown()) + .eqIfPresent(ProductDO::getInventoryUpper, reqVO.getInventoryUpper()) + .eqIfPresent(ProductDO::getFixedReplenishmentQuantity, reqVO.getFixedReplenishmentQuantity()) + .eqIfPresent(ProductDO::getAvailableInventory, reqVO.getAvailableInventory()) + .eqIfPresent(ProductDO::getTransitInventory, reqVO.getTransitInventory()) + .eqIfPresent(ProductDO::getManageInventory, reqVO.getManageInventory()) + .eqIfPresent(ProductDO::getFromInventory, reqVO.getFromInventory()) + .eqIfPresent(ProductDO::getManageBatches, reqVO.getManageBatches()) + .eqIfPresent(ProductDO::getTransportStoreyBoardNum, reqVO.getTransportStoreyBoardNum()) + .eqIfPresent(ProductDO::getTransportBoxStoreyNum, reqVO.getTransportBoxStoreyNum()) + .eqIfPresent(ProductDO::getTransportBoxBoardNum, reqVO.getTransportBoxBoardNum()) + .eqIfPresent(ProductDO::getTransportTemperature, reqVO.getTransportTemperature()) + .eqIfPresent(ProductDO::getTransportTemperatureDown, reqVO.getTransportTemperatureDown()) + .eqIfPresent(ProductDO::getTransportTemperatureUpper, reqVO.getTransportTemperatureUpper()) + .eqIfPresent(ProductDO::getStorageStoreyBoardNum, reqVO.getStorageStoreyBoardNum()) + .eqIfPresent(ProductDO::getStorageBoxStoreyNum, reqVO.getStorageBoxStoreyNum()) + .eqIfPresent(ProductDO::getStorageBoxBoardNum, reqVO.getStorageBoxBoardNum()) + .eqIfPresent(ProductDO::getStorageTemperature, reqVO.getStorageTemperature()) + .eqIfPresent(ProductDO::getStorageTemperatureDown, reqVO.getStorageTemperatureDown()) + .eqIfPresent(ProductDO::getStorageTemperatureUpper, reqVO.getStorageTemperatureUpper()) + .eqIfPresent(ProductDO::getQualityInspectionRatio, reqVO.getQualityInspectionRatio()) + .eqIfPresent(ProductDO::getQualityInspectionFrequency, reqVO.getQualityInspectionFrequency()) + .eqIfPresent(ProductDO::getQualityInspectionReport, reqVO.getQualityInspectionReport()) + .eqIfPresent(ProductDO::getQualityInspectionReportStart, reqVO.getQualityInspectionReportStart()) + .eqIfPresent(ProductDO::getQualityInspectionReportEnd, reqVO.getQualityInspectionReportEnd()) + .eqIfPresent(ProductDO::getQualityControl, reqVO.getQualityControl()) + .eqIfPresent(ProductDO::getQualityInspectionStandards, reqVO.getQualityInspectionStandards()) + .eqIfPresent(ProductDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProductDO::getReservedFields1, reqVO.getReservedFields1()) + .eqIfPresent(ProductDO::getReservedFields2, reqVO.getReservedFields2()) + .eqIfPresent(ProductDO::getReservedFields3, reqVO.getReservedFields3()) + .eqIfPresent(ProductDO::getReservedFields4, reqVO.getReservedFields4()) + .eqIfPresent(ProductDO::getReservedFields5, reqVO.getReservedFields5()) + .eqIfPresent(ProductDO::getReservedFields6, reqVO.getReservedFields6()) + .betweenIfPresent(ProductDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ProductDO::getId)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductService.java new file mode 100644 index 00000000..d15cb7c7 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.product; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 商品 Service 接口 + * + * @author 长江云息 + */ +public interface ProductService { + + /** + * 创建商品 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProduct(@Valid ProductCreateReqVO createReqVO); + + /** + * 更新商品 + * + * @param updateReqVO 更新信息 + */ + void updateProduct(@Valid ProductUpdateReqVO updateReqVO); + + /** + * 删除商品 + * + * @param id 编号 + */ + void deleteProduct(Long id); + + /** + * 获得商品 + * + * @param id 编号 + * @return 商品 + */ + ProductDO getProduct(Long id); + + /** + * 获得商品列表 + * + * @param ids 编号 + * @return 商品列表 + */ + List getProductList(Collection ids); + + /** + * 获得商品分页 + * + * @param pageReqVO 分页查询 + * @return 商品分页 + */ + PageResult getProductPage(ProductPageReqVO pageReqVO); + + /** + * 获得商品列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 商品列表 + */ + List getProductList(ProductExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImpl.java new file mode 100644 index 00000000..0cae7e4f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImpl.java @@ -0,0 +1,82 @@ +package com.yunxi.scm.module.xxjj.service.product; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.product.ProductConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.product.ProductMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 商品 Service 实现类 + * + * @author 长江云息 + */ +@Service +@Validated +public class ProductServiceImpl implements ProductService { + + @Resource + private ProductMapper productMapper; + + @Override + public Long createProduct(ProductCreateReqVO createReqVO) { + // 插入 + ProductDO product = ProductConvert.INSTANCE.convert(createReqVO); + productMapper.insert(product); + // 返回 + return product.getId(); + } + + @Override + public void updateProduct(ProductUpdateReqVO updateReqVO) { + // 校验存在 + validateProductExists(updateReqVO.getId()); + // 更新 + ProductDO updateObj = ProductConvert.INSTANCE.convert(updateReqVO); + productMapper.updateById(updateObj); + } + + @Override + public void deleteProduct(Long id) { + // 校验存在 + validateProductExists(id); + // 删除 + productMapper.deleteById(id); + } + + private void validateProductExists(Long id) { + if (productMapper.selectById(id) == null) { + throw exception(PRODUCT_NOT_EXISTS); + } + } + + @Override + public ProductDO getProduct(Long id) { + return productMapper.selectById(id); + } + + @Override + public List getProductList(Collection ids) { + return productMapper.selectBatchIds(ids); + } + + @Override + public PageResult getProductPage(ProductPageReqVO pageReqVO) { + return productMapper.selectPage(pageReqVO); + } + + @Override + public List getProductList(ProductExportReqVO exportReqVO) { + return productMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/product/ProductMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/product/ProductMapper.xml new file mode 100644 index 00000000..7f9859b0 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/product/ProductMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImplTest.java new file mode 100644 index 00000000..26356024 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/product/ProductServiceImplTest.java @@ -0,0 +1,831 @@ +package com.yunxi.scm.module.xxjj.service.product; + +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 com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.product.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.product.ProductDO; +import com.yunxi.scm.module.xxjj.dal.mysql.product.ProductMapper; +import com.yunxi.scm.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 com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link ProductServiceImpl} 的单元测试类 + * + * @author 长江云息 + */ +@Import(ProductServiceImpl.class) +public class ProductServiceImplTest extends BaseDbUnitTest { + + @Resource + private ProductServiceImpl productService; + + @Resource + private ProductMapper productMapper; + + @Test + public void testCreateProduct_success() { + // 准备参数 + ProductCreateReqVO reqVO = randomPojo(ProductCreateReqVO.class); + + // 调用 + Long productId = productService.createProduct(reqVO); + // 断言 + assertNotNull(productId); + // 校验记录的属性是否正确 + ProductDO product = productMapper.selectById(productId); + assertPojoEquals(reqVO, product); + } + + @Test + public void testUpdateProduct_success() { + // mock 数据 + ProductDO dbProduct = randomPojo(ProductDO.class); + productMapper.insert(dbProduct);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ProductUpdateReqVO reqVO = randomPojo(ProductUpdateReqVO.class, o -> { + o.setId(dbProduct.getId()); // 设置更新的 ID + }); + + // 调用 + productService.updateProduct(reqVO); + // 校验是否更新正确 + ProductDO product = productMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, product); + } + + @Test + public void testUpdateProduct_notExists() { + // 准备参数 + ProductUpdateReqVO reqVO = randomPojo(ProductUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> productService.updateProduct(reqVO), PRODUCT_NOT_EXISTS); + } + + @Test + public void testDeleteProduct_success() { + // mock 数据 + ProductDO dbProduct = randomPojo(ProductDO.class); + productMapper.insert(dbProduct);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbProduct.getId(); + + // 调用 + productService.deleteProduct(id); + // 校验数据不存在了 + assertNull(productMapper.selectById(id)); + } + + @Test + public void testDeleteProduct_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> productService.deleteProduct(id), PRODUCT_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetProductPage() { + // mock 数据 + ProductDO dbProduct = randomPojo(ProductDO.class, o -> { // 等会查询到 + o.setPhoto(null); + o.setCode(null); + o.setName(null); + o.setProductStatus(null); + o.setProductType(null); + o.setShortName(null); + o.setBarCode(null); + o.setBoxSurfaceNum(null); + o.setSpec(null); + o.setInventoryType(null); + o.setBrandId(null); + o.setArea(null); + o.setProductTypeId(null); + o.setAreaCategory(null); + o.setDangerousFlag(null); + o.setImportedFlag(null); + o.setFirstSupplierId(null); + o.setSettlementEntity(null); + o.setOutputTaxRate(null); + o.setInputTaxRate(null); + o.setDeliveryType(null); + o.setManyUnitFlag(null); + o.setInventoryUnitId(null); + o.setOrderMainUnitId(null); + o.setOrderOtherUnitId(null); + o.setSalesMainUnitId(null); + o.setSalesOtherUnitId(null); + o.setOperateUnitId(null); + o.setPricingUnitId(null); + o.setPurchaseOrderQuantityDown(null); + o.setPurchaseOrderQuantityUpper(null); + o.setPurchaseOrderMultiple(null); + o.setPurchaseInitialAmount(null); + o.setPurchaseAllowOverchargingRatio(null); + o.setPurchaseOrderStart(null); + o.setPurchaseOrderEnd(null); + o.setPurchaseMode(null); + o.setSalesOrderQuantityDown(null); + o.setSalesOrderQuantityUpper(null); + o.setSalesOrderMultiple(null); + o.setSalesInitialAmount(null); + o.setSalesAllowOverchargingRatio(null); + o.setSalesStart(null); + o.setSalesEnd(null); + o.setSalesModeStart(null); + o.setSalesMode(null); + o.setDeliverGoodsDate(null); + o.setDelayNum(null); + o.setSafetyStock(null); + o.setInventoryDayDown(null); + o.setInventoryDayUpper(null); + o.setInventoryDown(null); + o.setInventoryUpper(null); + o.setFixedReplenishmentQuantity(null); + o.setAvailableInventory(null); + o.setTransitInventory(null); + o.setManageInventory(null); + o.setFromInventory(null); + o.setManageBatches(null); + o.setTransportStoreyBoardNum(null); + o.setTransportBoxStoreyNum(null); + o.setTransportBoxBoardNum(null); + o.setTransportTemperature(null); + o.setTransportTemperatureDown(null); + o.setTransportTemperatureUpper(null); + o.setStorageStoreyBoardNum(null); + o.setStorageBoxStoreyNum(null); + o.setStorageBoxBoardNum(null); + o.setStorageTemperature(null); + o.setStorageTemperatureDown(null); + o.setStorageTemperatureUpper(null); + o.setQualityInspectionRatio(null); + o.setQualityInspectionFrequency(null); + o.setQualityInspectionReport(null); + o.setQualityInspectionReportStart(null); + o.setQualityInspectionReportEnd(null); + o.setQualityControl(null); + o.setQualityInspectionStandards(null); + o.setRemark(null); + o.setReservedFields1(null); + o.setReservedFields2(null); + o.setReservedFields3(null); + o.setReservedFields4(null); + o.setReservedFields5(null); + o.setReservedFields6(null); + o.setCreateTime(null); + }); + productMapper.insert(dbProduct); + // 测试 photo 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPhoto(null))); + // 测试 code 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setCode(null))); + // 测试 name 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setName(null))); + // 测试 productStatus 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductStatus(null))); + // 测试 productType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductType(null))); + // 测试 shortName 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setShortName(null))); + // 测试 barCode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBarCode(null))); + // 测试 boxSurfaceNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBoxSurfaceNum(null))); + // 测试 spec 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSpec(null))); + // 测试 inventoryType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryType(null))); + // 测试 brandId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBrandId(null))); + // 测试 area 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setArea(null))); + // 测试 productTypeId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductTypeId(null))); + // 测试 areaCategory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setAreaCategory(null))); + // 测试 dangerousFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDangerousFlag(null))); + // 测试 importedFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setImportedFlag(null))); + // 测试 firstSupplierId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFirstSupplierId(null))); + // 测试 settlementEntity 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSettlementEntity(null))); + // 测试 outputTaxRate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOutputTaxRate(null))); + // 测试 inputTaxRate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInputTaxRate(null))); + // 测试 deliveryType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDeliveryType(null))); + // 测试 manyUnitFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManyUnitFlag(null))); + // 测试 inventoryUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryUnitId(null))); + // 测试 orderMainUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOrderMainUnitId(null))); + // 测试 orderOtherUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOrderOtherUnitId(null))); + // 测试 salesMainUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesMainUnitId(null))); + // 测试 salesOtherUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOtherUnitId(null))); + // 测试 operateUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOperateUnitId(null))); + // 测试 pricingUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPricingUnitId(null))); + // 测试 purchaseOrderQuantityDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderQuantityDown(null))); + // 测试 purchaseOrderQuantityUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderQuantityUpper(null))); + // 测试 purchaseOrderMultiple 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderMultiple(null))); + // 测试 purchaseInitialAmount 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseInitialAmount(null))); + // 测试 purchaseAllowOverchargingRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseAllowOverchargingRatio(null))); + // 测试 purchaseOrderStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderStart(null))); + // 测试 purchaseOrderEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderEnd(null))); + // 测试 purchaseMode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseMode(null))); + // 测试 salesOrderQuantityDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderQuantityDown(null))); + // 测试 salesOrderQuantityUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderQuantityUpper(null))); + // 测试 salesOrderMultiple 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderMultiple(null))); + // 测试 salesInitialAmount 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesInitialAmount(null))); + // 测试 salesAllowOverchargingRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesAllowOverchargingRatio(null))); + // 测试 salesStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesStart(null))); + // 测试 salesEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesEnd(null))); + // 测试 salesModeStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesModeStart(null))); + // 测试 salesMode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesMode(null))); + // 测试 deliverGoodsDate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDeliverGoodsDate(null))); + // 测试 delayNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDelayNum(null))); + // 测试 safetyStock 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSafetyStock(null))); + // 测试 inventoryDayDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDayDown(null))); + // 测试 inventoryDayUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDayUpper(null))); + // 测试 inventoryDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDown(null))); + // 测试 inventoryUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryUpper(null))); + // 测试 fixedReplenishmentQuantity 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFixedReplenishmentQuantity(null))); + // 测试 availableInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setAvailableInventory(null))); + // 测试 transitInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransitInventory(null))); + // 测试 manageInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManageInventory(null))); + // 测试 fromInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFromInventory(null))); + // 测试 manageBatches 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManageBatches(null))); + // 测试 transportStoreyBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportStoreyBoardNum(null))); + // 测试 transportBoxStoreyNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportBoxStoreyNum(null))); + // 测试 transportBoxBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportBoxBoardNum(null))); + // 测试 transportTemperature 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperature(null))); + // 测试 transportTemperatureDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperatureDown(null))); + // 测试 transportTemperatureUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperatureUpper(null))); + // 测试 storageStoreyBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageStoreyBoardNum(null))); + // 测试 storageBoxStoreyNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageBoxStoreyNum(null))); + // 测试 storageBoxBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageBoxBoardNum(null))); + // 测试 storageTemperature 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperature(null))); + // 测试 storageTemperatureDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperatureDown(null))); + // 测试 storageTemperatureUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperatureUpper(null))); + // 测试 qualityInspectionRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionRatio(null))); + // 测试 qualityInspectionFrequency 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionFrequency(null))); + // 测试 qualityInspectionReport 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReport(null))); + // 测试 qualityInspectionReportStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReportStart(null))); + // 测试 qualityInspectionReportEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReportEnd(null))); + // 测试 qualityControl 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityControl(null))); + // 测试 qualityInspectionStandards 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionStandards(null))); + // 测试 remark 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setRemark(null))); + // 测试 reservedFields1 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields1(null))); + // 测试 reservedFields2 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields2(null))); + // 测试 reservedFields3 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields3(null))); + // 测试 reservedFields4 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields4(null))); + // 测试 reservedFields5 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields5(null))); + // 测试 reservedFields6 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields6(null))); + // 测试 createTime 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setCreateTime(null))); + // 准备参数 + ProductPageReqVO reqVO = new ProductPageReqVO(); + reqVO.setPhoto(null); + reqVO.setCode(null); + reqVO.setName(null); + reqVO.setProductStatus(null); + reqVO.setProductType(null); + reqVO.setShortName(null); + reqVO.setBarCode(null); + reqVO.setBoxSurfaceNum(null); + reqVO.setSpec(null); + reqVO.setInventoryType(null); + reqVO.setBrandId(null); + reqVO.setArea(null); + reqVO.setProductTypeId(null); + reqVO.setAreaCategory(null); + reqVO.setDangerousFlag(null); + reqVO.setImportedFlag(null); + reqVO.setFirstSupplierId(null); + reqVO.setSettlementEntity(null); + reqVO.setOutputTaxRate(null); + reqVO.setInputTaxRate(null); + reqVO.setDeliveryType(null); + reqVO.setManyUnitFlag(null); + reqVO.setInventoryUnitId(null); + reqVO.setOrderMainUnitId(null); + reqVO.setOrderOtherUnitId(null); + reqVO.setSalesMainUnitId(null); + reqVO.setSalesOtherUnitId(null); + reqVO.setOperateUnitId(null); + reqVO.setPricingUnitId(null); + reqVO.setPurchaseOrderQuantityDown(null); + reqVO.setPurchaseOrderQuantityUpper(null); + reqVO.setPurchaseOrderMultiple(null); + reqVO.setPurchaseInitialAmount(null); + reqVO.setPurchaseAllowOverchargingRatio(null); + reqVO.setPurchaseOrderStart(null); + reqVO.setPurchaseOrderEnd(null); + reqVO.setPurchaseMode(null); + reqVO.setSalesOrderQuantityDown(null); + reqVO.setSalesOrderQuantityUpper(null); + reqVO.setSalesOrderMultiple(null); + reqVO.setSalesInitialAmount(null); + reqVO.setSalesAllowOverchargingRatio(null); + reqVO.setSalesStart(null); + reqVO.setSalesEnd(null); + reqVO.setSalesModeStart(null); + reqVO.setSalesMode(null); + reqVO.setDeliverGoodsDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDelayNum(null); + reqVO.setSafetyStock(null); + reqVO.setInventoryDayDown(null); + reqVO.setInventoryDayUpper(null); + reqVO.setInventoryDown(null); + reqVO.setInventoryUpper(null); + reqVO.setFixedReplenishmentQuantity(null); + reqVO.setAvailableInventory(null); + reqVO.setTransitInventory(null); + reqVO.setManageInventory(null); + reqVO.setFromInventory(null); + reqVO.setManageBatches(null); + reqVO.setTransportStoreyBoardNum(null); + reqVO.setTransportBoxStoreyNum(null); + reqVO.setTransportBoxBoardNum(null); + reqVO.setTransportTemperature(null); + reqVO.setTransportTemperatureDown(null); + reqVO.setTransportTemperatureUpper(null); + reqVO.setStorageStoreyBoardNum(null); + reqVO.setStorageBoxStoreyNum(null); + reqVO.setStorageBoxBoardNum(null); + reqVO.setStorageTemperature(null); + reqVO.setStorageTemperatureDown(null); + reqVO.setStorageTemperatureUpper(null); + reqVO.setQualityInspectionRatio(null); + reqVO.setQualityInspectionFrequency(null); + reqVO.setQualityInspectionReport(null); + reqVO.setQualityInspectionReportStart(null); + reqVO.setQualityInspectionReportEnd(null); + reqVO.setQualityControl(null); + reqVO.setQualityInspectionStandards(null); + reqVO.setRemark(null); + reqVO.setReservedFields1(null); + reqVO.setReservedFields2(null); + reqVO.setReservedFields3(null); + reqVO.setReservedFields4(null); + reqVO.setReservedFields5(null); + reqVO.setReservedFields6(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = productService.getProductPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbProduct, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetProductList() { + // mock 数据 + ProductDO dbProduct = randomPojo(ProductDO.class, o -> { // 等会查询到 + o.setPhoto(null); + o.setCode(null); + o.setName(null); + o.setProductStatus(null); + o.setProductType(null); + o.setShortName(null); + o.setBarCode(null); + o.setBoxSurfaceNum(null); + o.setSpec(null); + o.setInventoryType(null); + o.setBrandId(null); + o.setArea(null); + o.setProductTypeId(null); + o.setAreaCategory(null); + o.setDangerousFlag(null); + o.setImportedFlag(null); + o.setFirstSupplierId(null); + o.setSettlementEntity(null); + o.setOutputTaxRate(null); + o.setInputTaxRate(null); + o.setDeliveryType(null); + o.setManyUnitFlag(null); + o.setInventoryUnitId(null); + o.setOrderMainUnitId(null); + o.setOrderOtherUnitId(null); + o.setSalesMainUnitId(null); + o.setSalesOtherUnitId(null); + o.setOperateUnitId(null); + o.setPricingUnitId(null); + o.setPurchaseOrderQuantityDown(null); + o.setPurchaseOrderQuantityUpper(null); + o.setPurchaseOrderMultiple(null); + o.setPurchaseInitialAmount(null); + o.setPurchaseAllowOverchargingRatio(null); + o.setPurchaseOrderStart(null); + o.setPurchaseOrderEnd(null); + o.setPurchaseMode(null); + o.setSalesOrderQuantityDown(null); + o.setSalesOrderQuantityUpper(null); + o.setSalesOrderMultiple(null); + o.setSalesInitialAmount(null); + o.setSalesAllowOverchargingRatio(null); + o.setSalesStart(null); + o.setSalesEnd(null); + o.setSalesModeStart(null); + o.setSalesMode(null); + o.setDeliverGoodsDate(null); + o.setDelayNum(null); + o.setSafetyStock(null); + o.setInventoryDayDown(null); + o.setInventoryDayUpper(null); + o.setInventoryDown(null); + o.setInventoryUpper(null); + o.setFixedReplenishmentQuantity(null); + o.setAvailableInventory(null); + o.setTransitInventory(null); + o.setManageInventory(null); + o.setFromInventory(null); + o.setManageBatches(null); + o.setTransportStoreyBoardNum(null); + o.setTransportBoxStoreyNum(null); + o.setTransportBoxBoardNum(null); + o.setTransportTemperature(null); + o.setTransportTemperatureDown(null); + o.setTransportTemperatureUpper(null); + o.setStorageStoreyBoardNum(null); + o.setStorageBoxStoreyNum(null); + o.setStorageBoxBoardNum(null); + o.setStorageTemperature(null); + o.setStorageTemperatureDown(null); + o.setStorageTemperatureUpper(null); + o.setQualityInspectionRatio(null); + o.setQualityInspectionFrequency(null); + o.setQualityInspectionReport(null); + o.setQualityInspectionReportStart(null); + o.setQualityInspectionReportEnd(null); + o.setQualityControl(null); + o.setQualityInspectionStandards(null); + o.setRemark(null); + o.setReservedFields1(null); + o.setReservedFields2(null); + o.setReservedFields3(null); + o.setReservedFields4(null); + o.setReservedFields5(null); + o.setReservedFields6(null); + o.setCreateTime(null); + }); + productMapper.insert(dbProduct); + // 测试 photo 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPhoto(null))); + // 测试 code 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setCode(null))); + // 测试 name 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setName(null))); + // 测试 productStatus 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductStatus(null))); + // 测试 productType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductType(null))); + // 测试 shortName 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setShortName(null))); + // 测试 barCode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBarCode(null))); + // 测试 boxSurfaceNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBoxSurfaceNum(null))); + // 测试 spec 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSpec(null))); + // 测试 inventoryType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryType(null))); + // 测试 brandId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setBrandId(null))); + // 测试 area 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setArea(null))); + // 测试 productTypeId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setProductTypeId(null))); + // 测试 areaCategory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setAreaCategory(null))); + // 测试 dangerousFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDangerousFlag(null))); + // 测试 importedFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setImportedFlag(null))); + // 测试 firstSupplierId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFirstSupplierId(null))); + // 测试 settlementEntity 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSettlementEntity(null))); + // 测试 outputTaxRate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOutputTaxRate(null))); + // 测试 inputTaxRate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInputTaxRate(null))); + // 测试 deliveryType 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDeliveryType(null))); + // 测试 manyUnitFlag 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManyUnitFlag(null))); + // 测试 inventoryUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryUnitId(null))); + // 测试 orderMainUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOrderMainUnitId(null))); + // 测试 orderOtherUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOrderOtherUnitId(null))); + // 测试 salesMainUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesMainUnitId(null))); + // 测试 salesOtherUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOtherUnitId(null))); + // 测试 operateUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setOperateUnitId(null))); + // 测试 pricingUnitId 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPricingUnitId(null))); + // 测试 purchaseOrderQuantityDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderQuantityDown(null))); + // 测试 purchaseOrderQuantityUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderQuantityUpper(null))); + // 测试 purchaseOrderMultiple 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderMultiple(null))); + // 测试 purchaseInitialAmount 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseInitialAmount(null))); + // 测试 purchaseAllowOverchargingRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseAllowOverchargingRatio(null))); + // 测试 purchaseOrderStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderStart(null))); + // 测试 purchaseOrderEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseOrderEnd(null))); + // 测试 purchaseMode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setPurchaseMode(null))); + // 测试 salesOrderQuantityDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderQuantityDown(null))); + // 测试 salesOrderQuantityUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderQuantityUpper(null))); + // 测试 salesOrderMultiple 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesOrderMultiple(null))); + // 测试 salesInitialAmount 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesInitialAmount(null))); + // 测试 salesAllowOverchargingRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesAllowOverchargingRatio(null))); + // 测试 salesStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesStart(null))); + // 测试 salesEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesEnd(null))); + // 测试 salesModeStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesModeStart(null))); + // 测试 salesMode 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSalesMode(null))); + // 测试 deliverGoodsDate 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDeliverGoodsDate(null))); + // 测试 delayNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setDelayNum(null))); + // 测试 safetyStock 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setSafetyStock(null))); + // 测试 inventoryDayDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDayDown(null))); + // 测试 inventoryDayUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDayUpper(null))); + // 测试 inventoryDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryDown(null))); + // 测试 inventoryUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setInventoryUpper(null))); + // 测试 fixedReplenishmentQuantity 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFixedReplenishmentQuantity(null))); + // 测试 availableInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setAvailableInventory(null))); + // 测试 transitInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransitInventory(null))); + // 测试 manageInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManageInventory(null))); + // 测试 fromInventory 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setFromInventory(null))); + // 测试 manageBatches 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setManageBatches(null))); + // 测试 transportStoreyBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportStoreyBoardNum(null))); + // 测试 transportBoxStoreyNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportBoxStoreyNum(null))); + // 测试 transportBoxBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportBoxBoardNum(null))); + // 测试 transportTemperature 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperature(null))); + // 测试 transportTemperatureDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperatureDown(null))); + // 测试 transportTemperatureUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setTransportTemperatureUpper(null))); + // 测试 storageStoreyBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageStoreyBoardNum(null))); + // 测试 storageBoxStoreyNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageBoxStoreyNum(null))); + // 测试 storageBoxBoardNum 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageBoxBoardNum(null))); + // 测试 storageTemperature 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperature(null))); + // 测试 storageTemperatureDown 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperatureDown(null))); + // 测试 storageTemperatureUpper 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setStorageTemperatureUpper(null))); + // 测试 qualityInspectionRatio 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionRatio(null))); + // 测试 qualityInspectionFrequency 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionFrequency(null))); + // 测试 qualityInspectionReport 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReport(null))); + // 测试 qualityInspectionReportStart 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReportStart(null))); + // 测试 qualityInspectionReportEnd 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionReportEnd(null))); + // 测试 qualityControl 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityControl(null))); + // 测试 qualityInspectionStandards 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setQualityInspectionStandards(null))); + // 测试 remark 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setRemark(null))); + // 测试 reservedFields1 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields1(null))); + // 测试 reservedFields2 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields2(null))); + // 测试 reservedFields3 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields3(null))); + // 测试 reservedFields4 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields4(null))); + // 测试 reservedFields5 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields5(null))); + // 测试 reservedFields6 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setReservedFields6(null))); + // 测试 createTime 不匹配 + productMapper.insert(cloneIgnoreId(dbProduct, o -> o.setCreateTime(null))); + // 准备参数 + ProductExportReqVO reqVO = new ProductExportReqVO(); + reqVO.setPhoto(null); + reqVO.setCode(null); + reqVO.setName(null); + reqVO.setProductStatus(null); + reqVO.setProductType(null); + reqVO.setShortName(null); + reqVO.setBarCode(null); + reqVO.setBoxSurfaceNum(null); + reqVO.setSpec(null); + reqVO.setInventoryType(null); + reqVO.setBrandId(null); + reqVO.setArea(null); + reqVO.setProductTypeId(null); + reqVO.setAreaCategory(null); + reqVO.setDangerousFlag(null); + reqVO.setImportedFlag(null); + reqVO.setFirstSupplierId(null); + reqVO.setSettlementEntity(null); + reqVO.setOutputTaxRate(null); + reqVO.setInputTaxRate(null); + reqVO.setDeliveryType(null); + reqVO.setManyUnitFlag(null); + reqVO.setInventoryUnitId(null); + reqVO.setOrderMainUnitId(null); + reqVO.setOrderOtherUnitId(null); + reqVO.setSalesMainUnitId(null); + reqVO.setSalesOtherUnitId(null); + reqVO.setOperateUnitId(null); + reqVO.setPricingUnitId(null); + reqVO.setPurchaseOrderQuantityDown(null); + reqVO.setPurchaseOrderQuantityUpper(null); + reqVO.setPurchaseOrderMultiple(null); + reqVO.setPurchaseInitialAmount(null); + reqVO.setPurchaseAllowOverchargingRatio(null); + reqVO.setPurchaseOrderStart(null); + reqVO.setPurchaseOrderEnd(null); + reqVO.setPurchaseMode(null); + reqVO.setSalesOrderQuantityDown(null); + reqVO.setSalesOrderQuantityUpper(null); + reqVO.setSalesOrderMultiple(null); + reqVO.setSalesInitialAmount(null); + reqVO.setSalesAllowOverchargingRatio(null); + reqVO.setSalesStart(null); + reqVO.setSalesEnd(null); + reqVO.setSalesModeStart(null); + reqVO.setSalesMode(null); + reqVO.setDeliverGoodsDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDelayNum(null); + reqVO.setSafetyStock(null); + reqVO.setInventoryDayDown(null); + reqVO.setInventoryDayUpper(null); + reqVO.setInventoryDown(null); + reqVO.setInventoryUpper(null); + reqVO.setFixedReplenishmentQuantity(null); + reqVO.setAvailableInventory(null); + reqVO.setTransitInventory(null); + reqVO.setManageInventory(null); + reqVO.setFromInventory(null); + reqVO.setManageBatches(null); + reqVO.setTransportStoreyBoardNum(null); + reqVO.setTransportBoxStoreyNum(null); + reqVO.setTransportBoxBoardNum(null); + reqVO.setTransportTemperature(null); + reqVO.setTransportTemperatureDown(null); + reqVO.setTransportTemperatureUpper(null); + reqVO.setStorageStoreyBoardNum(null); + reqVO.setStorageBoxStoreyNum(null); + reqVO.setStorageBoxBoardNum(null); + reqVO.setStorageTemperature(null); + reqVO.setStorageTemperatureDown(null); + reqVO.setStorageTemperatureUpper(null); + reqVO.setQualityInspectionRatio(null); + reqVO.setQualityInspectionFrequency(null); + reqVO.setQualityInspectionReport(null); + reqVO.setQualityInspectionReportStart(null); + reqVO.setQualityInspectionReportEnd(null); + reqVO.setQualityControl(null); + reqVO.setQualityInspectionStandards(null); + reqVO.setRemark(null); + reqVO.setReservedFields1(null); + reqVO.setReservedFields2(null); + reqVO.setReservedFields3(null); + reqVO.setReservedFields4(null); + reqVO.setReservedFields5(null); + reqVO.setReservedFields6(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = productService.getProductList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbProduct, list.get(0)); + } + +} diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/product/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/product/index.ts new file mode 100644 index 00000000..aff9c64f --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/product/index.ts @@ -0,0 +1,120 @@ +import request from '@/config/axios' + +export interface ProductVO { + id: number + photo: string + code: string + name: string + productStatus: string + productType: string + shortName: string + barCode: string + boxSurfaceNum: string + spec: string + inventoryType: string + brandId: number + area: string + productTypeId: string + areaCategory: string + dangerousFlag: string + importedFlag: string + firstSupplierId: number + settlementEntity: string + outputTaxRate: string + inputTaxRate: string + deliveryType: string + manyUnitFlag: string + inventoryUnitId: number + orderMainUnitId: number + orderOtherUnitId: string + salesMainUnitId: number + salesOtherUnitId: string + operateUnitId: number + pricingUnitId: number + purchaseOrderQuantityDown: string + purchaseOrderQuantityUpper: string + purchaseOrderMultiple: string + purchaseInitialAmount: string + purchaseAllowOverchargingRatio: string + purchaseOrderStart: Date + purchaseOrderEnd: Date + purchaseMode: string + salesOrderQuantityDown: string + salesOrderQuantityUpper: string + salesOrderMultiple: string + salesInitialAmount: string + salesAllowOverchargingRatio: string + salesStart: Date + salesEnd: Date + salesModeStart: string + salesMode: string + deliverGoodsDate: Date + delayNum: string + safetyStock: string + inventoryDayDown: string + inventoryDayUpper: string + inventoryDown: string + inventoryUpper: string + fixedReplenishmentQuantity: string + availableInventory: string + transitInventory: string + manageInventory: string + fromInventory: string + manageBatches: string + transportStoreyBoardNum: string + transportBoxStoreyNum: string + transportBoxBoardNum: string + transportTemperature: string + transportTemperatureDown: string + transportTemperatureUpper: string + storageStoreyBoardNum: string + storageBoxStoreyNum: string + storageBoxBoardNum: string + storageTemperature: string + storageTemperatureDown: string + storageTemperatureUpper: string + qualityInspectionRatio: string + qualityInspectionFrequency: string + qualityInspectionReport: string + qualityInspectionReportStart: Date + qualityInspectionReportEnd: Date + qualityControl: string + qualityInspectionStandards: string + remark: string + reservedFields1: string + reservedFields2: string + reservedFields3: string + reservedFields4: string + reservedFields5: string + reservedFields6: string +} + +// 查询商品列表 +export const getProductPage = async (params) => { + return await request.get({ url: `/xxjj/product/page`, params }) +} + +// 查询商品详情 +export const getProduct = async (id: number) => { + return await request.get({ url: `/xxjj/product/get?id=` + id }) +} + +// 新增商品 +export const createProduct = async (data: ProductVO) => { + return await request.post({ url: `/xxjj/product/create`, data }) +} + +// 修改商品 +export const updateProduct = async (data: ProductVO) => { + return await request.put({ url: `/xxjj/product/update`, data }) +} + +// 删除商品 +export const deleteProduct = async (id: number) => { + return await request.delete({ url: `/xxjj/product/delete?id=` + id }) +} + +// 导出商品 Excel +export const exportProduct = async (params) => { + return await request.download({ url: `/xxjj/product/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/utils/dict.ts b/yunxi-ui-admin-vue3/src/utils/dict.ts index 79042c11..4531e413 100644 --- a/yunxi-ui-admin-vue3/src/utils/dict.ts +++ b/yunxi-ui-admin-vue3/src/utils/dict.ts @@ -204,4 +204,19 @@ export enum DICT_TYPE { enterpriseNature = 'enterprise_nature', //客户星级 XUELI = 'XUELI', //学历 ENTERPRISE_OPERATE_TYPE = 'enterprise_operate_type', //客户星级 + + // ============= PRODUCT 模块================= + PRODUCT_STATUS = 'product_status', //商品状态 + PRODUCT_TYPE = 'product_type', //商品类型 + SAVE_TYPE = 'save_type', //存货类型 + DANGEROUS_FLAG = 'dangerous_flag', //危险品 + IMPORTED_FLAG = 'imported_flag', //进口商品 + MANY_UNIT_FLAG = 'many_unit_flag', //开启多单位 + PURCHASE_WAY = 'purchase_mode', //采购模式 + SALES_MODE_START = 'sales_mode_start', //开售模式 + SALES_MODE = 'sales_mode', //售卖方式 + TRANSIT_INVENTORY = 'transit_inventory', //使用在途库存 + MANAGE_INVENTORY = 'manage_inventory', //管理库存 + TRANSPORT_TEMPERATURE = 'transport_temperature', //温层 + OUTPUT_TAX_RATE = 'output_tax_rate', //商品进销税率 } diff --git a/yunxi-ui-admin-vue3/src/views/system/enterpriseBranch/index.vue b/yunxi-ui-admin-vue3/src/views/system/enterpriseBranch/index.vue index 8d824d91..97d69f85 100644 --- a/yunxi-ui-admin-vue3/src/views/system/enterpriseBranch/index.vue +++ b/yunxi-ui-admin-vue3/src/views/system/enterpriseBranch/index.vue @@ -201,6 +201,8 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/product/index.vue b/yunxi-ui-admin-vue3/src/views/xxjj/product/index.vue new file mode 100644 index 00000000..a750b647 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/product/index.vue @@ -0,0 +1,361 @@ + + + + + \ No newline at end of file diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/product/index111.vue b/yunxi-ui-admin-vue3/src/views/xxjj/product/index111.vue new file mode 100644 index 00000000..eff01fa7 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/product/index111.vue @@ -0,0 +1,421 @@ + + +