From 5dfc1d9e5c891225a69ec88a74ba7f83153adaf6 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 22 五月 2024 20:00:48 +0800 Subject: [PATCH] 1.提交【管理后台】团购管理模块接口 2.延时任务部分代码 --- ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 16 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/DelayTask.java | 53 ++++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java | 2 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java | 11 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSeckillController.java | 6 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java | 42 +++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java | 89 ++++++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java | 2 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java | 64 ++++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/VO/GoodsGroupPurchaseVO.java | 68 +++++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java | 50 +++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DelayTaskServiceImpl.java | 67 +++++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/DelayTaskService.java | 44 +++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsSkuQuery.java | 7 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java | 8 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsGroupPurchaseMapper.java | 10 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml | 11 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/DelayTaskMapper.xml | 6 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java | 35 ++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java | 5 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java | 22 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 26 + ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java | 3 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseQuery.java | 24 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java | 9 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 12 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java | 34 ++ ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml | 14 + ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsGroupPurchase.java | 4 29 files changed, 715 insertions(+), 29 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java new file mode 100644 index 0000000..fcdc58a --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.api.constants; + +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.HashMap; +import java.util.Map; +import lombok.Getter; + +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +@Getter +public enum DelayTaskEnum { + + ORDER_AUTOMATIC_CANCEL("订单延时任务-自动关闭", "超时订单自动关闭"), + SECKILL_START_TASK("秒杀商品延时任务", "定时开始任务"), + SECKILL_END_TASK("秒杀商品延时任务", "定时结束任务"), + GROUP_PURCHASES_START_TASK("团购商品延时任务", "定时开始任务"), + GROUP_PURCHASES_END_TASK("团购商品延时任务", "定时结束任务"), + ; + + String name; + String code; + + private static Map<String, DelayTaskEnum> valueMap = new HashMap<>(); + + static { + for (DelayTaskEnum gender : DelayTaskEnum.values()) { + valueMap.put(gender.name, gender); + } + } + + DelayTaskEnum(String name, String code) { + this.code = code; + this.name = name; + } + + public static String getByName(String name) { + DelayTaskEnum result = valueMap.get(name); + if (result == null) { + throw new IllegalArgumentException("No element matches " + name); + } + return result.code; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/DelayTask.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/DelayTask.java new file mode 100644 index 0000000..9078c6b --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/DelayTask.java @@ -0,0 +1,53 @@ +package com.ruoyi.system.api.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * + * </p> + * + * @author jqs + * @since 2023-05-29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_delay_task") +public class DelayTask implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 延时任务id + */ + @TableId(value = "task_id", type = IdType.AUTO) + private Long taskId; + /** + * 删除标记 + */ + @TableField("del_flag") + private Integer delFlag; + /** + * 键值 + */ + @TableField("redis_key") + private String redisKey; + /** + * 执行时间 + */ + @TableField("end_time") + private Date endTime; + + @TableField("create_time") + private Date createTime; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java index 135b40b..de129fb 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java @@ -30,6 +30,11 @@ public R<Integer> getSeckillMembers(Long id) { return R.fail("获取秒杀商品已购会员数失败:" + cause.getMessage()); } + + @Override + public R<Integer> getGroupPurchasesGoodsNum(Long id) { + return R.fail("获取团购商品已购数量失败:" + cause.getMessage()); + } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java index c5012aa..9612ed5 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java @@ -29,4 +29,13 @@ */ @GetMapping("/order/seckill-members/{id}") R<Integer> getSeckillMembers(@PathVariable("id") Long id); + + /** + * 获取团购商品已购数量 + * + * @param id 团购商品id + * @return 团购商品已购数量 + */ + @GetMapping("/order/group-purchase-num/{id}") + R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java index 2b9bca3..9422961 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java @@ -6,6 +6,7 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 系统模块 @@ -16,6 +17,7 @@ @MapperScan({"com.ruoyi.goods.mapper"}) @EnableCustomSwagger2 @EnableRyFeignClients +@EnableScheduling @SpringBootApplication public class RuoYiGoodsApplication { diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java new file mode 100644 index 0000000..a6b6421 --- /dev/null +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java @@ -0,0 +1,50 @@ +package com.ruoyi.goods.controller.management.DTO; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * @author mitao + * @date 2024/5/22 + */ +@Data +@ApiModel(value = "团购商品数据传输对象", description = "团购商品数据传输对象") +public class GoodsGroupPurchaseDTO { + + @ApiModelProperty(value = "团购商品id", notes = "添加不传,更新必传") + private Long id; + + @ApiModelProperty(value = "商品id", notes = "添加必传,更新不传") + private Long goodsSkuId; + + @ApiModelProperty(value = "分享标题") + private String shareTitle; + + @ApiModelProperty(value = "分享图片") + private String sharePic; + + @ApiModelProperty(value = "团购价格") + private BigDecimal groupPurchasePrice; + + @ApiModelProperty(value = "成团人数") + private Integer groupSize; + + @ApiModelProperty(value = "限购数量") + private Integer limitNumber; + + @ApiModelProperty(value = "团购开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + + @ApiModelProperty(value = "团购结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty(value = "参团说明") + private String description; + +} diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseQuery.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseQuery.java new file mode 100644 index 0000000..c2dcda3 --- /dev/null +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseQuery.java @@ -0,0 +1,24 @@ +package com.ruoyi.goods.controller.management.DTO; + + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author mitao + * @date 2024/5/22 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "团购商品查询对象", description = "团购商品查询对象") +public class GoodsGroupPurchaseQuery extends BasePage { + + private static final long serialVersionUID = -5336934411126155565L; + + @ApiModelProperty("商品名称") + private String goodsSkuName; + +} diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsSkuQuery.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsSkuQuery.java index af83848..0788b95 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsSkuQuery.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsSkuQuery.java @@ -4,8 +4,10 @@ import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; /** * @author mitao @@ -23,4 +25,9 @@ @ApiModelProperty(value = "上架状态 上架中 已下架", notes = "参数传文字") private ListingStatusEnum listingStatus; + + @ApiModelProperty(value = "查询类型 1=仅上架商品 2=全部") + @NotNull(message = "查询类型不能为空") + @Range(min = 1, max = 2, message = "查询类型必须为1或2") + private Integer queryType; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java index 18fdf83..dea8bed 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java @@ -1,9 +1,23 @@ package com.ruoyi.goods.controller.management; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseQuery; +import com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO; +import com.ruoyi.goods.service.IGoodsGroupPurchaseService; +import com.ruoyi.system.api.domain.dto.ListStatusDTO; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -22,4 +36,54 @@ @Api(value = "管理后台商品团购相关接口", tags = {"管理后台接口"}) public class MgtGoodsGroupPurchaseController { + private final IGoodsGroupPurchaseService goodsGroupPurchaseService; + + /** + * 获取团购商品列表的分页数据 + * + * @param query 团购商品查询对象 + * @return PageDTO < GoodsGroupPurchaseVO> + */ + @ApiOperation(value = "获取团购商品列表的分页数据", notes = "获取团购商品列表的分页数据") + @PostMapping("/page") + public R<PageDTO<GoodsGroupPurchaseVO>> getGoodsGroupPurchasePage( + GoodsGroupPurchaseQuery query) { + return R.ok(goodsGroupPurchaseService.getGoodsGroupPurchasePage(query)); + } + + /** + * 添加/编辑 团购商品 + * + * @param dto 团购商品数据传输对象 + */ + @ApiOperation(value = "添加/编辑 团购商品", notes = "添加/编辑 团购商品") + @PostMapping("/save") + public R<Void> saveGoodsGroupPurchase(GoodsGroupPurchaseDTO dto) { + goodsGroupPurchaseService.saveGoodsGroupPurchase(dto); + return R.ok(); + } + + /** + * 查看详情 + * + * @param id 团购商品id + * @return GoodsGroupPurchaseVO + */ + @ApiOperation(value = " 查看详情", notes = "查看详情") + @GetMapping("/detail/{id}") + public R<GoodsGroupPurchaseVO> getGoodsGroupPurchaseDetail(@PathVariable("id") Long id) { + return R.ok(goodsGroupPurchaseService.getGoodsGroupPurchaseDetail(id)); + } + + /** + * 下架/上架 团购商品 + * + * @param dto 商品上下架状态对象 + */ + @ApiOperation(value = "下架/上架 团购商品", notes = "下架 /上架 团购商品") + @PutMapping("/upd-status") + public R<Void> updStatus(@Validated @RequestBody ListStatusDTO dto) { + goodsGroupPurchaseService.updStatus(dto); + return R.ok(); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSeckillController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSeckillController.java index cd9caa8..976e2ed 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSeckillController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSeckillController.java @@ -88,6 +88,12 @@ return R.ok(); } + /** + * 查看详情 + * + * @param id 秒杀商品id + * @return GoodsSeckillVO 商品秒杀视图对象 + */ @ApiOperation("查看详情") @GetMapping("/detail/{id}") public R<GoodsSeckillVO> getDetail(@PathVariable("id") Long id) { diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/VO/GoodsGroupPurchaseVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/VO/GoodsGroupPurchaseVO.java new file mode 100644 index 0000000..ff5d7d1 --- /dev/null +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/VO/GoodsGroupPurchaseVO.java @@ -0,0 +1,68 @@ +package com.ruoyi.goods.controller.management.VO; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.core.enums.GroupStatusEnum; +import com.ruoyi.common.core.enums.ListingStatusEnum; +import com.ruoyi.common.core.enums.StartStatusEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * @author mitao + * @date 2024/5/22 + */ +@Data +@ApiModel(value = "团购商品视图对象", description = "团购商品视图对象") +public class GoodsGroupPurchaseVO { + + @ApiModelProperty(value = "商品团购id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @ApiModelProperty(value = "商品名称") + private String goodsSkuName; + + @ApiModelProperty(value = "团购价格") + private BigDecimal groupPurchasePrice; + + @ApiModelProperty(value = "成团人数") + private Integer groupSize; + + @ApiModelProperty(value = "当前人数") + private Integer currentNumber; + + @ApiModelProperty(value = "限购数量") + private Integer limitNumber; + + @ApiModelProperty(value = "已购商品数") + private Integer buyNumber; + + @ApiModelProperty(value = "团购开始时间") + private LocalDateTime startTime; + + @ApiModelProperty(value = "团购结束时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "参团说明") + private String description; + + @ApiModelProperty(value = "分享标题") + private String shareTitle; + + @ApiModelProperty(value = "分享图片") + private String sharePic; + + @ApiModelProperty(value = "开始状态 0=未开始 1=已开始 2=已结束 ") + private StartStatusEnum startStatus; + + @ApiModelProperty(value = "上架状态 0=已上架 1=已下架") + private ListingStatusEnum listingStatus; + + @ApiModelProperty(value = "成团状态 0=待成团 1=已成团 2=成团失败") + private GroupStatusEnum groupStatus; + +} diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsGroupPurchase.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsGroupPurchase.java index 015ddbb..66e10de 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsGroupPurchase.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsGroupPurchase.java @@ -67,6 +67,10 @@ @TableField("limit_number") private Integer limitNumber; + @ApiModelProperty(value = "当前人数") + @TableField("current_number") + private Integer currentNumber; + @ApiModelProperty(value = "团购开始时间") @TableField("start_time") private LocalDateTime startTime; diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsGroupPurchaseMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsGroupPurchaseMapper.java index d09c12f..4189e3a 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsGroupPurchaseMapper.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsGroupPurchaseMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.goods.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO; import com.ruoyi.goods.domain.GoodsGroupPurchase; +import org.apache.ibatis.annotations.Param; /** * <p> @@ -13,4 +16,11 @@ */ public interface GoodsGroupPurchaseMapper extends BaseMapper<GoodsGroupPurchase> { + /** + * @param goodsSkuName 商品名称 + * @param page 分页参数 + * @return Page<GoodsGroupPurchaseVO> + */ + Page<GoodsGroupPurchaseVO> getGoodsGroupPurchasePage(@Param("goodsSkuName") String goodsSkuName, + @Param("page") Page<GoodsGroupPurchaseVO> page); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java index 812ac44..eebd533 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java @@ -1,7 +1,12 @@ package com.ruoyi.goods.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseQuery; +import com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO; import com.ruoyi.goods.domain.GoodsGroupPurchase; +import com.ruoyi.system.api.domain.dto.ListStatusDTO; /** * <p> @@ -13,4 +18,33 @@ */ public interface IGoodsGroupPurchaseService extends IService<GoodsGroupPurchase> { + /** + * 获取团购商品列表的分页数据 + * + * @param query 团购商品查询对象 + * @return PageDTO < GoodsGroupPurchaseVO> + */ + PageDTO<GoodsGroupPurchaseVO> getGoodsGroupPurchasePage(GoodsGroupPurchaseQuery query); + + /** + * 添加/编辑 团购商品 + * + * @param dto 团购商品数据传输对象 + */ + void saveGoodsGroupPurchase(GoodsGroupPurchaseDTO dto); + + /** + * 查看详情 + * + * @param id 团购商品id + * @return GoodsGroupPurchaseVO 团购商品视图对象 + */ + GoodsGroupPurchaseVO getGoodsGroupPurchaseDetail(Long id); + + /** + * 下架/上架 团购商品 + * + * @param dto 商品上下架状态对象 + */ + void updStatus(ListStatusDTO dto); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java index 8b52fbf..71ffec0 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java @@ -41,7 +41,18 @@ */ void updGoodsSeckill(GoodsSeckillUpd upd); + /** + * 上架/下架 秒杀商品 + * + * @param dto 商品上下架状态对象 + */ void updStatus(ListStatusDTO dto); + /** + * 查看详情 + * + * @param id 秒杀商品id + * @return GoodsSeckillVO 商品秒杀视图对象 + */ GoodsSeckillVO getDetail(Long id); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java index b14f61a..94cf0d9 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java @@ -41,6 +41,6 @@ * @param dto 数据传输对象,包含需要更新的SKU的ID和新的上架状态。 其中,ID用于指定要更新的具体SKU,listingStatus用于指定新的上架状态。 * @return 无返回值。 */ - void updStatus(ListStatusDTO dto); + void updStatus(ListStatusDTO dto) throws Exception; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java index 0537e97..722fcbc 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java @@ -50,7 +50,7 @@ Page<GoodsBrand> page = this.lambdaQuery() .like(StringUtils.isNotEmpty(query.getBrandName()), GoodsBrand::getBrandName, query.getBrandName()) - .page(new Page<GoodsBrand>(query.getPageCurr(), query.getPageSize())); + .page(new Page<>(query.getPageCurr(), query.getPageSize())); if (StringUtils.isEmpty(page.getRecords())) { return PageDTO.empty(page.getTotal(), page.getPages()); } @@ -63,7 +63,6 @@ * * @param dto 商品品牌数据传输对象,包含商品品牌的信息。 如果dto中的id为空,则认为是新品牌,调用save方法保存; * 如果id不为空,则认为是更新已有品牌,调用updateById方法更新。 - * @return 无返回值 */ @Override public void saveGoodsBrand(GoodsBrandDTO dto) { diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java index 0e5c883..905f7d9 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java @@ -1,9 +1,22 @@ package com.ruoyi.goods.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.enums.ListingStatusEnum; +import com.ruoyi.common.core.enums.StartStatusEnum; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.page.BeanUtils; +import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseDTO; +import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseQuery; +import com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO; import com.ruoyi.goods.domain.GoodsGroupPurchase; import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper; import com.ruoyi.goods.service.IGoodsGroupPurchaseService; +import com.ruoyi.system.api.domain.dto.ListStatusDTO; +import com.ruoyi.system.api.feignClient.OrderClient; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; /** @@ -15,6 +28,82 @@ * @since 2024-05-16 */ @Service +@RequiredArgsConstructor public class GoodsGroupPurchaseServiceImpl extends ServiceImpl<GoodsGroupPurchaseMapper, GoodsGroupPurchase> implements IGoodsGroupPurchaseService { + private final OrderClient orderClient; + + /** + * 获取团购商品列表的分页数据 + * + * @param query 团购商品查询对象 + * @return PageDTO < GoodsGroupPurchaseVO> + */ + @Override + public PageDTO<GoodsGroupPurchaseVO> getGoodsGroupPurchasePage(GoodsGroupPurchaseQuery query) { + return PageDTO.of( + baseMapper.getGoodsGroupPurchasePage(query.getGoodsSkuName(), + new Page<>(query.getPageCurr(), query.getPageSize()))); + } + + /** + * 添加/编辑 团购商品 + * + * @param dto 团购商品数据传输对象 + */ + @Override + public void saveGoodsGroupPurchase(GoodsGroupPurchaseDTO dto) { + GoodsGroupPurchase goodsGroupPurchase = BeanUtils.copyBean(dto, GoodsGroupPurchase.class); + if (StringUtils.isNull(dto.getId())) { + this.save(goodsGroupPurchase); + } else { + GoodsGroupPurchase groupPurchase = this.getById(dto.getId()); + if (StringUtils.isNull(groupPurchase)) { + throw new ServiceException("团购商品不存在"); + } + this.updateById(goodsGroupPurchase); + } + //TODO 添加调度任务 处理团购商品开始结束 + } + + /** + * 查看详情 + * + * @param id 团购商品id + * @return GoodsGroupPurchaseVO 团购商品视图对象 + */ + @Override + public GoodsGroupPurchaseVO getGoodsGroupPurchaseDetail(Long id) { + GoodsGroupPurchase groupPurchase = this.getById(id); + if (StringUtils.isNull(groupPurchase)) { + throw new ServiceException("团购商品不存在"); + } + GoodsGroupPurchaseVO vo = BeanUtils.copyBean(groupPurchase, + GoodsGroupPurchaseVO.class); + //远程调用订单服务查询商品购买总数 + Integer num = orderClient.getGroupPurchasesGoodsNum(groupPurchase.getId()).getData(); + vo.setBuyNumber(num); + return vo; + } + + /** + * 下架/上架 团购商品 + * + * @param dto 商品上下架状态对象 + */ + @Override + public void updStatus(ListStatusDTO dto) { + GoodsGroupPurchase groupPurchase = this.getById(dto.getId()); + if (StringUtils.isNull(groupPurchase)) { + throw new ServiceException("团购商品不存在"); + } + //判断商品状态 + if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF) + && groupPurchase.getStartStatus().equals(StartStatusEnum.STARTED)) { + throw new ServiceException("该商品已开始团购,不能下架"); + } + //修改状态 + groupPurchase.setListingStatus(dto.getListingStatus()); + this.updateById(groupPurchase); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java index 2f8268b..e39abe7 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java @@ -9,7 +9,6 @@ import com.ruoyi.goods.controller.management.DTO.GoodsSeckillDTO; import com.ruoyi.goods.controller.management.DTO.GoodsSeckillQuery; import com.ruoyi.goods.controller.management.DTO.GoodsSeckillUpd; -import com.ruoyi.goods.controller.management.DTO.GoodsSkuInfoDTO; import com.ruoyi.goods.controller.management.VO.GoodsSeckillVO; import com.ruoyi.goods.domain.GoodsSeckill; import com.ruoyi.goods.domain.GoodsSku; @@ -44,7 +43,6 @@ @Override @Transactional(rollbackFor = Exception.class) public void addGoodsSeckill(GoodsSeckillDTO dto) { - List<GoodsSkuInfoDTO> goodsSkuList = dto.getGoodsSkuList(); List<GoodsSeckill> goodsSeckills = BeanUtils.copyList(dto.getGoodsSkuList(), GoodsSeckill.class); for (GoodsSeckill goodsSeckill : goodsSeckills) { @@ -55,20 +53,20 @@ goodsSeckill.setStartStatus(StartStatusEnum.NOT_STARTED); } this.saveBatch(goodsSeckills); + //TODO 添加调度任务控制开始结束 } /** * 获取秒杀商品列表的分页数据 * * @param query 秒杀商品查询对象 - * @return + * @return PageDTO<GoodsSeckillVO> */ @Override public PageDTO<GoodsSeckillVO> getGoodsSeckillPage(GoodsSeckillQuery query) { - Page<GoodsSeckillVO> page = baseMapper.getGoodsSeckillPage(query.getGoodsSkuName(), - new Page<GoodsSeckillVO>(query.getPageCurr(), query.getPageSize()) - ); - return PageDTO.of(page); + return PageDTO.of(baseMapper.getGoodsSeckillPage(query.getGoodsSkuName(), + new Page<>(query.getPageCurr(), query.getPageSize()) + )); } /** @@ -100,6 +98,12 @@ .update(); } + /** + * 查看详情 + * + * @param id 秒杀商品id + * @return GoodsSeckillVO 商品秒杀视图对象 + */ @Override public GoodsSeckillVO getDetail(Long id) { GoodsSeckill goodsSeckill = this.getById(id); @@ -108,9 +112,7 @@ } GoodsSeckillVO vo = BeanUtils.copyBean(goodsSeckill, GoodsSeckillVO.class); GoodsSku goods = goodsSkuService.getById(goodsSeckill.getGoodsSkuId()); - Optional.of(goods).ifPresent(goodsSku -> { - vo.setGoodsSkuName(goodsSku.getSkuName()); - }); + Optional.of(goods).ifPresent(goodsSku -> vo.setGoodsSkuName(goodsSku.getSkuName())); Integer num = orderClient.getSeckillMembers(goodsSeckill.getGoodsSkuId()).getData(); vo.setNumberOfPurchasedMembers(num); return vo; diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java index 7503e73..41eaf12 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.common.core.enums.ListingStatusEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; @@ -14,10 +15,14 @@ import com.ruoyi.goods.controller.management.DTO.GoodsSkuDTO; import com.ruoyi.goods.controller.management.DTO.GoodsSkuQuery; import com.ruoyi.goods.controller.management.VO.GoodsSkuVO; +import com.ruoyi.goods.domain.GoodsGroupPurchase; import com.ruoyi.goods.domain.GoodsInfoTitleValue; +import com.ruoyi.goods.domain.GoodsSeckill; import com.ruoyi.goods.domain.GoodsSku; import com.ruoyi.goods.mapper.GoodsSkuMapper; +import com.ruoyi.goods.service.IGoodsGroupPurchaseService; import com.ruoyi.goods.service.IGoodsInfoTitleValueService; +import com.ruoyi.goods.service.IGoodsSeckillService; import com.ruoyi.goods.service.IGoodsSkuService; import com.ruoyi.system.api.domain.dto.ListStatusDTO; import java.util.List; @@ -25,6 +30,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -41,6 +47,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> implements IGoodsSkuService { private final IGoodsInfoTitleValueService goodsInfoTitleValueService; + private final IGoodsSeckillService goodsSeckillService; + private final IGoodsGroupPurchaseService goodsGroupPurchaseService; private static final ObjectMapper objectMapper = new ObjectMapper(); /** @@ -140,8 +148,9 @@ query.getSkuName()) .eq(StringUtils.isNotNull(query.getListingStatus() ), GoodsSku::getListingStatus, query.getListingStatus()) - .page(new Page<GoodsSku>(query.getPageCurr(), query.getPageSize())); - + .eq(query.getQueryType().equals(1), GoodsSku::getListingStatus, + ListingStatusEnum.ON_SHELVES) + .page(new Page<>(query.getPageCurr(), query.getPageSize())); return PageDTO.of(page, GoodsSkuVO.class); } @@ -149,13 +158,31 @@ * 更新商品SKU的状态。 * * @param dto 数据传输对象,包含需要更新的SKU的ID和新的上架状态。 其中,ID用于指定要更新的具体SKU,listingStatus用于指定新的上架状态。 - * @return 无返回值。 */ @Override - public void updStatus(ListStatusDTO dto) { + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + public void updStatus(ListStatusDTO dto) throws Exception { this.lambdaUpdate() .eq(GoodsSku::getId, dto.getId()) .set(GoodsSku::getListingStatus, dto.getListingStatus()) .update(); + //关联的秒杀商品和团购商品同步下架 + if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)) { + updateGoodsStatus(dto); + } + } + + private void updateGoodsStatus(ListStatusDTO dto) { + goodsSeckillService.lambdaUpdate() + .set(GoodsSeckill::getListingStatus, + ListingStatusEnum.REMOVED_FROM_THE_SHELF) + .eq(GoodsSeckill::getListingStatus, ListingStatusEnum.ON_SHELVES) + .eq(GoodsSeckill::getGoodsSkuId, dto.getId()).update(); + goodsGroupPurchaseService.lambdaUpdate() + .set(GoodsGroupPurchase::getListingStatus, + ListingStatusEnum.REMOVED_FROM_THE_SHELF) + .eq(GoodsGroupPurchase::getListingStatus, + ListingStatusEnum.ON_SHELVES) + .eq(GoodsGroupPurchase::getGoodsSkuId, dto.getId()).update(); } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml index 50539ba..bdb2669 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml +++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml @@ -2,4 +2,18 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper"> + <select id="getGoodsGroupPurchasePage" + resultType="com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO"> + SELECT + tgp.*, + tgs.goods_sku_name + FROM + t_goods_group_purchase tgp + LEFT JOIN t_goods_sku tgs ON tgp.goods_sku_id = tgs.id + <where> + <if test="goodsSkuName != null and goodsSkuName != ''"> + AND tgs.goods_sku_name LIKE CONCAT('%',#{goodsSkuName},'%') + </if> + </where> + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml index ea6cddb..992ef00 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml +++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsSeckillMapper.xml @@ -3,7 +3,7 @@ <mapper namespace="com.ruoyi.goods.mapper.GoodsSeckillMapper"> <select id="getGoodsSeckillPage" resultType="com.ruoyi.goods.controller.management.VO.GoodsSeckillVO"> - select + SELECT gs.id, gsku.goods_sku_name, gs.seckill_price, @@ -16,13 +16,14 @@ gs.start_time, gs.end_time, gs.start_status - from t_goods_seckill gs - left join t_goods_sku gsku on gs.goods_sku_id = gsku.id + FROM + t_goods_seckill gs + LEFT JOIN t_goods_sku gsku ON gs.goods_sku_id = gsku.id <where> <if test="goodsSkuName != null and goodsSkuName != ''"> - and gsku.goods_sku_name like concat('%',#{goodsSkuName},'%') + AND gsku.goods_sku_name LIKE CONCAT('%',#{goodsSkuName},'%') </if> </where> - order by gs.create_time desc + ORDER BY gs.create_time DESC </select> </mapper> diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index 6ec68f8..a8dcc67 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java @@ -52,4 +52,16 @@ R<Integer> getSeckillMembers(@PathVariable("id") Long id) { return R.ok(orderService.getSeckillMembers(id)); } + + /** + * 获取团购商品已购数量 + * + * @param id 团购商品id + * @return 团购商品已购数量 + */ + @InnerAuth + @GetMapping("/group-purchase-num/{id}") + R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id) { + return R.ok(orderService.getGroupPurchasesGoodsNum(id)); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java index 0e25900..37a1954 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java @@ -17,4 +17,12 @@ void saveOrderOne(OrderDTO OrderDTO); Integer getSeckillMembers(Long id); + + /** + * 获取团购商品已购数量 + * + * @param id 团购商品id + * @return 团购商品已购数量 + */ + Integer getGroupPurchasesGoodsNum(Long id); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 07cb825..520643c 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -3,10 +3,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.OrderStatusEnum; import com.ruoyi.order.domain.pojo.Order; +import com.ruoyi.order.domain.pojo.OrderMall; import com.ruoyi.order.mapper.OrderMapper; +import com.ruoyi.order.service.IOrderMallService; import com.ruoyi.order.service.IOrderService; import com.ruoyi.order.util.OrderUtil; import com.ruoyi.system.api.domain.dto.OrderDTO; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; @@ -24,6 +29,8 @@ @Resource private IOrderService orderService; + @Resource + private IOrderMallService orderMallService; @Override public void saveOrderOne(OrderDTO OrderDTO) { Order order=new Order(); @@ -47,5 +54,22 @@ public Integer getSeckillMembers(Long id) { return baseMapper.getSeckillMembers(id); } - + + /** + * 获取团购商品已购数量 + * + * @param id 团购商品id + * @return 团购商品已购数量 + */ + @Override + public Integer getGroupPurchasesGoodsNum(Long id) { + Set<Long> orderIdSet = orderMallService.lambdaQuery().eq(OrderMall::getActivityId, id) + .list() + .stream().map(OrderMall::getOrderId).collect( + Collectors.toSet()); + List<Order> list = this.lambdaQuery().in(Order::getId, orderIdSet) + .in(Order::getOrderStatus, OrderStatusEnum.TO_BE_SHIPPED, + OrderStatusEnum.GOODS_TO_BE_RECEIVED, OrderStatusEnum.FINISHED).list(); + return list.stream().map(Order::getGoodsQuantity).reduce(0, Integer::sum); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 5e5619a..e86ecaf 100644 --- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -3,11 +3,15 @@ <mapper namespace="com.ruoyi.order.mapper.OrderMapper"> <select id="getSeckillMembers" resultType="java.lang.Integer"> - select ifnull(count(1), 0) - form t_order_mall left om join t_order o - on om.order_id = o.id - where om.goods_sku_id = #{id} - group by o.member_id + SELECT ifnull(count(1), 0) form t_order_mall LEFT om + JOIN t_order o + ON om.order_id = o.id + WHERE + om.goods_sku_id = #{id} + AND o.order_status IN (2 + , 3 + , 4) + GROUP BY + o.member_id </select> -</select> </mapper> diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/DelayTaskService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/DelayTaskService.java new file mode 100644 index 0000000..d819d27 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/DelayTaskService.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.api.domain.DelayTask; + +; + +/** + * <p> + * 服务类 + * </p> + * + * @author jqs + * @since 2023-05-29 + */ +public interface DelayTaskService extends IService<DelayTask> { + + /** + * @param key + * @return DelayTask + * @description + * @author jqs + * @date 2023/7/12 11:39 + */ + DelayTask getDelayTask(String key); + + /** + * @param delayTask + * @return void + * @description + * @author jqs + * @date 2023/7/12 11:37 + */ + void addDelayTask(DelayTask delayTask); + + /** + * @param key + * @return DelayTask + * @description + * @author jqs + * @date 2023/7/12 11:39 + */ + void deleteDelayTask(String key); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DelayTaskServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DelayTaskServiceImpl.java new file mode 100644 index 0000000..dadfc19 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DelayTaskServiceImpl.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.api.domain.DelayTask; +import com.ruoyi.system.mapper.DelayTaskMapper; +import com.ruoyi.system.service.DelayTaskService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 服务实现类 + * </p> + * + * @author jqs + * @since 2023-05-29 + */ +@Service +public class DelayTaskServiceImpl extends ServiceImpl<DelayTaskMapper, DelayTask> implements + DelayTaskService { + + + /** + * @param key + * @return DelayTask + * @description + * @author jqs + * @date 2023/7/12 11:38 + */ + @Override + public DelayTask getDelayTask(String key) { + LambdaQueryWrapper<DelayTask> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DelayTask::getDelFlag, 0); + queryWrapper.eq(DelayTask::getRedisKey, key); + DelayTask delayTask = this.getOne(queryWrapper, false); + return delayTask; + } + + /** + * @param delayTask + * @return void + * @description + * @author jqs + * @date 2023/7/12 11:37 + */ + @Override + public void addDelayTask(DelayTask delayTask) { + this.saveOrUpdate(delayTask); + } + + /** + * @param key + * @return DelayTask + * @description + * @author jqs + * @date 2023/7/12 11:39 + */ + @Override + public void deleteDelayTask(String key) { + LambdaUpdateWrapper<DelayTask> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(DelayTask::getDelFlag, 0); + updateWrapper.eq(DelayTask::getRedisKey, key); + updateWrapper.set(DelayTask::getDelFlag, 1); + this.update(updateWrapper); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/DelayTaskMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/DelayTaskMapper.xml new file mode 100644 index 0000000..5ff1188 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/DelayTaskMapper.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.config.DelayTaskMapper"> + + +</mapper> -- Gitblit v1.7.1