From c217a5094b0c0aa308d960c0b2e8b8295a5361a3 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 22 五月 2024 20:02:37 +0800
Subject: [PATCH] Merge branch 'dev-mitao'
---
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