diff --git a/script/idea/http-client.env.json b/script/idea/http-client.env.json index e6e8a7c..f72c664 100644 --- a/script/idea/http-client.env.json +++ b/script/idea/http-client.env.json @@ -1,10 +1,10 @@ { "local": { - "baseUrl": "http://127.0.0.1:48080/admin-api", + "baseUrl": "http://127.0.0.1:8089/admin-api", "token": "test1", "adminTenantId": "1", - "appApi": "http://127.0.0.1:48080/app-api", + "appApi": "http://127.0.0.1:8089/app-api", "appToken": "test247", "appTenantId": "1" }, diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java index 167a0fc..898a36b 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java @@ -134,6 +134,10 @@ public interface BaseMapperX extends MPJBaseMapper { return selectCount(new LambdaQueryWrapper().eq(field, value)); } + default Long selectCount(SFunction field, Object value, SFunction field2, Object value2){ + return selectCount(new LambdaQueryWrapper().eq(field, value).eq(field2, value2)); + } + default List selectList() { return selectList(new QueryWrapper<>()); } @@ -214,5 +218,4 @@ public interface BaseMapperX extends MPJBaseMapper { default int delete(SFunction field, Object value) { return delete(new LambdaQueryWrapper().eq(field, value)); } - } diff --git a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/DictTypeConstants.java b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/DictTypeConstants.java index b96dde1..dbfc7e7 100644 --- a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/DictTypeConstants.java +++ b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/DictTypeConstants.java @@ -8,5 +8,6 @@ package cn.iocoder.yudao.module.product.enums; public interface DictTypeConstants { String PRODUCT_SPU_STATUS = "product_spu_status"; // 商品 SPU 状态 + String PRODUCT_SPU_TYPES = "product_spu_types"; // 商品 SPU 类型 } diff --git a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/spu/ProductSpuTypesEnum.java b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/spu/ProductSpuTypesEnum.java new file mode 100644 index 0000000..cf99d47 --- /dev/null +++ b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/spu/ProductSpuTypesEnum.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.product.enums.spu; + +import cn.iocoder.yudao.framework.common.core.ArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 商品 SPU 状态 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum ProductSpuTypesEnum implements ArrayValuable { + + DISABLE(0, "商城商品"), + ENABLE(1, "提货柜商品"); + + public static final Integer[] ARRAYS = Arrays.stream(values()).map(ProductSpuTypesEnum::getTypes).toArray(Integer[]::new); + + /** + * 状态 + */ + private final Integer types; + /** + * 状态名 + */ + private final String name; + + @Override + public Integer[] array() { + return ARRAYS; + } + + /** + * 判断是否是提货柜商品 + * + * @param types 状态 + * @return 是否是提货柜商品 + */ + public static boolean isEnable(Integer types) { + return ENABLE.getTypes().equals(types); + } + +} diff --git a/yudao-module-mall/yudao-module-product-biz/pom.xml b/yudao-module-mall/yudao-module-product-biz/pom.xml index c8bad46..e69e05d 100644 --- a/yudao-module-mall/yudao-module-product-biz/pom.xml +++ b/yudao-module-mall/yudao-module-product-biz/pom.xml @@ -58,6 +58,12 @@ cn.iocoder.boot yudao-spring-boot-starter-excel + + cn.iocoder.boot + yudao-module-system-biz + 2.4.1-jdk8-SNAPSHOT + compile + diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.http b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.http index 8b20673..0a9d638 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.http +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.http @@ -2,3 +2,13 @@ GET {{baseUrl}}/product/spu/get-detail?id=4 Authorization: Bearer {{token}} tenant-id: {{adminTenantId}} + +### 获得商品 SPU 分页(加上创建人) +GET {{baseUrl}}/product/spu/pageWithCreator?pageNo=1&pageSize=10&tabType=0 +Authorization: Bearer {{token}} +tenant-id: {{adminTenantId}} + +### 获得商品 SPU 分页 tab count +GET {{baseUrl}}/product/spu/get-count?types=0 +Authorization: Bearer {{token}} +tenant-id: {{adminTenantId}} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java index 0c30897..b6dd025 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*; import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; +import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; @@ -117,11 +118,20 @@ public class ProductSpuController { return success(BeanUtils.toBean(pageResult, ProductSpuRespVO.class)); } + @GetMapping("/pageWithCreator") + @Operation(summary = "获得商品 SPU 分页(加上创建人)") + @PreAuthorize("@ss.hasPermission('product:spu:query')") + public CommonResult> getSpuPageWithCreator(@Valid ProductSpuPageReqVO pageVO) { + PageResult pageResult = productSpuService.getSpuPageWithCreator(pageVO); + return success(BeanUtils.toBean(pageResult, ProductSpuWithCreatorRespVO.class)); + } + @GetMapping("/get-count") @Operation(summary = "获得商品 SPU 分页 tab count") + @Parameter(name = "types", description = "商品类型", required = true, example = "1") @PreAuthorize("@ss.hasPermission('product:spu:query')") - public CommonResult> getSpuCount() { - return success(productSpuService.getTabsCount()); + public CommonResult> getSpuCount(@RequestParam("types") Integer types) { + return success(productSpuService.getTabsCount(types)); } @GetMapping("/export") diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java index 81cff42..1f53e05 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -51,6 +52,12 @@ public class ProductSpuPageReqVO extends PageParam { @Schema(description = "商品分类编号", example = "1") private Long categoryId; + @Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer types; + + @Schema(description = "创建人id", example = "1") + private String creator; + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java index fbc7552..1ba6c23 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java @@ -61,6 +61,11 @@ public class ProductSpuRespVO { @DictFormat(DictTypeConstants.PRODUCT_SPU_STATUS) private Integer status; + @Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "商品类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PRODUCT_SPU_TYPES) + private Integer types; + @Schema(description = "商品创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-05-24 00:00:00") @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuSaveReqVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuSaveReqVO.java index 3408145..5f4243d 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuSaveReqVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.product.controller.admin.spu.vo; +import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTypesEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -51,6 +52,10 @@ public class ProductSpuSaveReqVO { @NotNull(message = "商品排序字段不能为空") private Integer sort; + @Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "商品类型字段不能为空") + private Integer types; + // ========== SKU 相关字段 ========= @Schema(description = "规格类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuWithCreatorRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuWithCreatorRespVO.java new file mode 100644 index 0000000..f25ac6f --- /dev/null +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuWithCreatorRespVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.product.controller.admin.spu.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 商品 SPU Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProductSpuWithCreatorRespVO extends ProductSpuRespVO { + + @Schema(description = "创建者ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("创建者ID") + private String creator; + + @Schema(description = "创建者姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("创建者姓名") + private String username; + +} diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http index 784c464..e4dc755 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http @@ -9,7 +9,7 @@ Authorization: Bearer {{appToken}} tenant-id: {{appTenantId}} ### 获得订单交易的分页(销售) -GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10&sortField=salesCount&sortAsc=true +GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10&creator=1&sortField=salesCount&sortAsc=true Authorization: Bearer {{appToken}} tenant-id: {{appTenantId}} diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuPageReqVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuPageReqVO.java index 1584dc6..d16c330 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuPageReqVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuPageReqVO.java @@ -24,6 +24,12 @@ public class AppProductSpuPageReqVO extends PageParam { @Schema(description = "商品 SPU 编号数组", example = "1,3,5") private List ids; + @Schema(description = "创建人id", example = "1") + private String creator; + + @Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer types; + @Schema(description = "分类编号", example = "1") private Long categoryId; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuCreatorDO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuCreatorDO.java new file mode 100644 index 0000000..49a0271 --- /dev/null +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuCreatorDO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.product.dal.dataobject.spu; + +import lombok.Data; + +/** + * 商品 SPU DO + * + * @author 芋道源码 + */ +@Data +public class ProductSpuCreatorDO extends ProductSpuDO { + /** + * 创建者姓名 + */ + private String username; +} diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java index d2b5195..17f63ee 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO; import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; +import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTypesEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -88,6 +89,13 @@ public class ProductSpuDO extends BaseDO { */ private Integer status; + /** + * 商品类型 + * + * 枚举 {@link ProductSpuTypesEnum} + */ + private Integer types; + // ========== SKU 相关字段 ========= /** diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java index a5926d1..c9b3028 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java @@ -4,13 +4,18 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; +import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.enums.ProductConstants; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import org.apache.ibatis.annotations.Mapper; +import org.apache.poi.ss.formula.functions.T; import java.util.Objects; import java.util.Set; @@ -29,6 +34,7 @@ public interface ProductSpuMapper extends BaseMapperX { LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() .likeIfPresent(ProductSpuDO::getName, reqVO.getName()) .eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId()) + .eqIfPresent(ProductSpuDO::getTypes, reqVO.getTypes()) .betweenIfPresent(ProductSpuDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(ProductSpuDO::getSort) .orderByDesc(ProductSpuDO::getId); @@ -41,12 +47,13 @@ public interface ProductSpuMapper extends BaseMapperX { * * @return 触发警戒库存的 SPU 数量 */ - default Long selectCount() { + default Long selectCount(SFunction field, Object value) { LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX<>(); // 库存小于等于警戒库存 queryWrapper.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK) // 如果库存触发警戒库存且状态为回收站的话则不计入触发警戒库存的个数 - .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()); + .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()) + .eq(field, value); return selectCount(queryWrapper); } @@ -55,6 +62,10 @@ public interface ProductSpuMapper extends BaseMapperX { */ default PageResult selectPage(AppProductSpuPageReqVO pageReqVO, Set categoryIds) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() + //根据创建人查询商品 + .eqIfPresent(ProductSpuDO::getCreator, pageReqVO.getCreator()) + //根据类型查询商品 + .eqIfPresent(ProductSpuDO::getTypes, pageReqVO.getTypes()) // 关键字匹配,目前只匹配商品名 .likeIfPresent(ProductSpuDO::getName, pageReqVO.getKeyword()) // 分类 @@ -146,4 +157,51 @@ public interface ProductSpuMapper extends BaseMapperX { update(null, updateWrapper); } + default PageResult selectPageWithCreator(ProductSpuPageReqVO pageReqVO){ + Integer tabType = pageReqVO.getTabType(); + MPJLambdaWrapperX query = new MPJLambdaWrapperX() + .selectAll(ProductSpuDO.class) + .selectAs(AdminUserDO::getUsername, ProductSpuCreatorDO::getUsername) + .likeIfPresent(ProductSpuDO::getName, pageReqVO.getName()) + .eqIfPresent(ProductSpuDO::getCategoryId, pageReqVO.getCategoryId()) + .eqIfPresent(ProductSpuDO::getTypes, pageReqVO.getTypes()) + .eqIfPresent(ProductSpuDO::getCreator, pageReqVO.getCreator()) + .betweenIfPresent(ProductSpuDO::getCreateTime, pageReqVO.getCreateTime()) + .orderByDesc(ProductSpuDO::getSort) + .orderByDesc(ProductSpuDO::getId); + query.leftJoin(AdminUserDO.class,AdminUserDO::getId, ProductSpuDO::getCreator); + appendTabQuery2(tabType, query); + return selectJoinPage(pageReqVO,ProductSpuCreatorDO.class, query); + } + + /** + * 添加后台 Tab 选项的查询条件 + * + * @param tabType 标签类型 + * @param query 查询条件 + */ + static void appendTabQuery2(Integer tabType, MPJLambdaWrapperX query) { + // 出售中商品 + if (ObjectUtil.equals(ProductSpuPageReqVO.FOR_SALE, tabType)) { + query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()); + } + // 仓储中商品 + if (ObjectUtil.equals(ProductSpuPageReqVO.IN_WAREHOUSE, tabType)) { + query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()); + } + // 已售空商品 + if (ObjectUtil.equals(ProductSpuPageReqVO.SOLD_OUT, tabType)) { + query.eqIfPresent(ProductSpuDO::getStock, 0); + } + // 警戒库存 + if (ObjectUtil.equals(ProductSpuPageReqVO.ALERT_STOCK, tabType)) { + query.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK) + // 如果库存触发警戒库存且状态为回收站的话则不在警戒库存列表展示 + .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()); + } + // 回收站 + if (ObjectUtil.equals(ProductSpuPageReqVO.RECYCLE_BIN, tabType)) { + query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()); + } + } } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java index 75ef927..55070e0 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReq import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReqVO; import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; +import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import org.springframework.scheduling.annotation.Async; @@ -113,7 +114,7 @@ public interface ProductSpuService { * * @return Count 数量 */ - Map getTabsCount(); + Map getTabsCount(Integer types); /** * 通过分类 categoryId 查询 SPU 个数 @@ -143,4 +144,5 @@ public interface ProductSpuService { @Async void updateBrowseCount(Long id, int incrCount); + PageResult getSpuPageWithCreator(ProductSpuPageReqVO pageVO); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java index ce80f9b..e8ae9e1 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReq import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; +import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; @@ -157,6 +158,11 @@ public class ProductSpuServiceImpl implements ProductSpuService { productSpuMapper.updateBrowseCount(id , incrCount); } + @Override + public PageResult getSpuPageWithCreator(ProductSpuPageReqVO pageVO) { + return productSpuMapper.selectPageWithCreator(pageVO); + } + @Override @Transactional(rollbackFor = Exception.class) public void deleteSpu(Long id) { @@ -248,23 +254,29 @@ public class ProductSpuServiceImpl implements ProductSpuService { } @Override - public Map getTabsCount() { + public Map getTabsCount(Integer types) { Map counts = Maps.newLinkedHashMapWithExpectedSize(5); // 查询销售中的商品数量 counts.put(ProductSpuPageReqVO.FOR_SALE, - productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus())); + productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus(), + ProductSpuDO::getTypes, types)); // 查询仓库中的商品数量 counts.put(ProductSpuPageReqVO.IN_WAREHOUSE, - productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus())); + productSpuMapper.selectCount( + ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus(), + ProductSpuDO::getTypes, types)); // 查询售空的商品数量 counts.put(ProductSpuPageReqVO.SOLD_OUT, - productSpuMapper.selectCount(ProductSpuDO::getStock, 0)); + productSpuMapper.selectCount( + ProductSpuDO::getStock, 0, + ProductSpuDO::getTypes, types)); // 查询触发警戒库存的商品数量 counts.put(ProductSpuPageReqVO.ALERT_STOCK, - productSpuMapper.selectCount()); + productSpuMapper.selectCount(ProductSpuDO::getTypes, types)); // 查询回收站中的商品数量 counts.put(ProductSpuPageReqVO.RECYCLE_BIN, - productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus())); + productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus() + ,ProductSpuDO::getTypes, types)); return counts; } diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 2745166..57e1ec0 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -1,5 +1,5 @@ server: - port: 48088 + port: 8089 --- #################### 数据库相关配置 #################### spring: @@ -46,7 +46,7 @@ spring: primary: master datasource: master: - url: jdbc:mysql://47.96.250.9:3306/ydsp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://121.40.41.196:3306/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 @@ -54,8 +54,8 @@ spring: # url: jdbc:dm://127.0.0.1:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 # url: jdbc:kingbase8://127.0.0.1:54321/test # 人大金仓 KingbaseES 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss 连接的示例 - username: ydsp - password: KriJww38zmszYE3w + username: xr + password: zd5ecNxeXHZxkWs8 # username: sa # SQL Server 连接的示例 # password: Yudao@2024 # SQL Server 连接的示例 # username: SYSDBA # DM 连接的示例 @@ -64,9 +64,9 @@ spring: # password: Yudao@2024 # OpenGauss 连接的示例 slave: # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://47.96.250.9:3306/ydsp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true - username: ydsp - password: KriJww38zmszYE3w + url: jdbc:mysql://121.40.41.196:3306/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true + username: xr + password: zd5ecNxeXHZxkWs8 # tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!) # url: jdbc:TAOS-RS://127.0.0.1:6041/ruoyi_vue_pro # driver-class-name: com.taosdata.jdbc.rs.RestfulDriver diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index b7a4c6a..22bd583 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -72,7 +72,7 @@ spring: host: 127.0.0.1 # 地址 port: 6379 # 端口 database: 2 # 数据库索引 - password: 123456 # 密码,建议生产环境开启 + password: 8mbsc1fRj # 密码,建议生产环境开启 --- #################### 定时任务相关配置 ####################