From e667f6e4612123a1441f33c9a882b2124018a4dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B4=94=E7=A6=8F=E6=B3=A2?=
<14587188+cui-fubo@user.noreply.gitee.com>
Date: Fri, 15 Nov 2024 11:55:33 +0800
Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=93=81=E7=89=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../muyu-group-buy-common/pom.xml | 27 ++++
.../com/muyu/product/domain/GroupBuy.java | 109 +++++++++++++++
.../product/domain/req/GroupBuyEditReq.java | 50 +++++++
.../product/domain/req/GroupBuyQueryReq.java | 50 +++++++
.../product/domain/req/GroupBuySaveReq.java | 60 +++++++++
.../muyu-group-buy-remote/pom.xml | 27 ++++
.../remote/RemoteProjectInfoService.java | 29 ++++
.../remote/RemoteProjectSkuService.java | 42 ++++++
.../product/remote/RemoteRuleAttrService.java | 34 +++++
.../product/remote/RemoteRuleService.java | 32 +++++
.../factory/RemoteProjectInfoFactory.java | 31 +++++
.../factory/RemoteProjectSkuFactory.java | 37 +++++
.../remote/factory/RemoteRuleAttrFactory.java | 34 +++++
.../remote/factory/RemoteRuleFactory.java | 31 +++++
...ot.autoconfigure.AutoConfiguration.imports | 4 +
.../muyu-group-buy-server/pom.xml | 127 ++++++++++++++++++
.../muyu/product/MuYuGroupBuyApplication.java | 23 ++++
.../controller/GroupBuyController.java | 111 +++++++++++++++
.../muyu/product/mapper/GroupBuyMapper.java | 15 +++
.../muyu/product/service/GroupBuyService.java | 22 +++
.../service/impl/GroupBuyServiceImpl.java | 56 ++++++++
.../src/main/resources/banner.txt | 2 +
.../src/main/resources/bootstrap.yml | 28 ++++
.../src/main/resources/logback.xml | 74 ++++++++++
.../main/resources/mapper/GroupBuyMapper.xml | 19 +++
muyu-modules/muyu-group-buy/pom.xml | 26 ++++
muyu-modules/muyu-group-buy/结构 | 26 ++++
.../domain/req/AttributeGroupEditReq.java | 3 +-
.../domain/req/CategoryInfoEditReq.java | 15 +++
.../product/domain/req/RuleInfoEditReq.java | 5 +
.../controller/CategoryInfoController.java | 10 +-
.../controller/RuleInfoController.java | 5 +-
.../product/mapper/CategoryInfoMapper.java | 6 +
.../product/service/CategoryInfoService.java | 7 +
.../muyu/product/service/RuleInfoService.java | 4 +
.../impl/AsCategoryAttributeServiceImpl.java | 2 +-
.../impl/AttributeGroupServiceImpl.java | 4 +-
.../service/impl/CategoryInfoServiceImpl.java | 55 ++++++++
.../service/impl/RuleInfoServiceImpl.java | 18 +++
.../mapper/product/CategoryInfoMapper.xml | 7 +
muyu-modules/pom.xml | 1 +
41 files changed, 1258 insertions(+), 10 deletions(-)
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-common/pom.xml
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/GroupBuy.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyEditReq.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyQueryReq.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuySaveReq.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/pom.xml
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/pom.xml
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/MuYuGroupBuyApplication.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/controller/GroupBuyController.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/mapper/GroupBuyMapper.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/GroupBuyService.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/impl/GroupBuyServiceImpl.java
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/banner.txt
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/bootstrap.yml
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/logback.xml
create mode 100644 muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/mapper/GroupBuyMapper.xml
create mode 100644 muyu-modules/muyu-group-buy/pom.xml
create mode 100644 muyu-modules/muyu-group-buy/结构
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-common/pom.xml b/muyu-modules/muyu-group-buy/muyu-group-buy-common/pom.xml
new file mode 100644
index 0000000..5662a02
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-common/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-group-buy
+ 3.6.3
+
+
+ muyu-group-buy-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ com.muyu
+ muyu-common-core
+
+
+
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/GroupBuy.java b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/GroupBuy.java
new file mode 100644
index 0000000..41f3671
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/GroupBuy.java
@@ -0,0 +1,109 @@
+package com.muyu.product.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.product.domain.req.GroupBuyQueryReq;
+import com.muyu.product.domain.req.GroupBuySaveReq;
+import com.muyu.product.domain.req.GroupBuyEditReq;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 拼团对象 group_buy
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("group_buy")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "GroupBuy", description = "拼团")
+public class GroupBuy extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+ @TableId(value = "id",type = IdType.AUTO)
+ @ApiModelProperty(name = "主键", value = "主键")
+ private Long id;
+
+ /** 外键,关联商品 */
+ @Excel(name = "外键,关联商品")
+ @ApiModelProperty(name = "外键,关联商品", value = "外键,关联商品")
+ private Long projectId;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "开始时间", value = "开始时间")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "结束时间", value = "结束时间")
+ private Date endTime;
+
+ /** 最小成团人数 */
+ @Excel(name = "最小成团人数")
+ @ApiModelProperty(name = "最小成团人数", value = "最小成团人数")
+ private String minMembers;
+
+ /** 活动状态 */
+ @Excel(name = "活动状态")
+ @ApiModelProperty(name = "活动状态", value = "活动状态")
+ private String status;
+
+ /**
+ * 查询构造器
+ */
+ public static GroupBuy queryBuild( GroupBuyQueryReq groupBuyQueryReq){
+ return GroupBuy.builder()
+ .projectId(groupBuyQueryReq.getProjectId())
+ .startTime(groupBuyQueryReq.getStartTime())
+ .endTime(groupBuyQueryReq.getEndTime())
+ .minMembers(groupBuyQueryReq.getMinMembers())
+ .status(groupBuyQueryReq.getStatus())
+ .build();
+ }
+
+ /**
+ * 添加构造器
+ */
+ public static GroupBuy saveBuild(GroupBuySaveReq groupBuySaveReq){
+ return GroupBuy.builder()
+ .projectId(groupBuySaveReq.getProjectId())
+ .startTime(groupBuySaveReq.getStartTime())
+ .endTime(groupBuySaveReq.getEndTime())
+ .minMembers(groupBuySaveReq.getMinMembers())
+ .status(groupBuySaveReq.getStatus())
+ .build();
+ }
+
+ /**
+ * 修改构造器
+ */
+ public static GroupBuy editBuild(Long id, GroupBuyEditReq groupBuyEditReq){
+ return GroupBuy.builder()
+ .id(id)
+ .projectId(groupBuyEditReq.getProjectId())
+ .startTime(groupBuyEditReq.getStartTime())
+ .endTime(groupBuyEditReq.getEndTime())
+ .minMembers(groupBuyEditReq.getMinMembers())
+ .status(groupBuyEditReq.getStatus())
+ .build();
+ }
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyEditReq.java b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyEditReq.java
new file mode 100644
index 0000000..48642ea
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyEditReq.java
@@ -0,0 +1,50 @@
+package com.muyu.product.domain.req;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 拼团对象 group_buy
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "GroupBuyEditReq", description = "拼团")
+public class GroupBuyEditReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 外键,关联商品 */
+ @ApiModelProperty(name = "外键,关联商品", value = "外键,关联商品")
+ private Long projectId;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(name = "开始时间", value = "开始时间")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(name = "结束时间", value = "结束时间")
+ private Date endTime;
+
+ /** 最小成团人数 */
+ @ApiModelProperty(name = "最小成团人数", value = "最小成团人数")
+ private String minMembers;
+
+ /** 活动状态 */
+ @ApiModelProperty(name = "活动状态", value = "活动状态")
+ private String status;
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyQueryReq.java b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyQueryReq.java
new file mode 100644
index 0000000..76e3ec8
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuyQueryReq.java
@@ -0,0 +1,50 @@
+package com.muyu.product.domain.req;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 拼团对象 group_buy
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "GroupBuyQueryReq", description = "拼团")
+public class GroupBuyQueryReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 外键,关联商品 */
+ @ApiModelProperty(name = "外键,关联商品", value = "外键,关联商品")
+ private Long projectId;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(name = "开始时间", value = "开始时间")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(name = "结束时间", value = "结束时间")
+ private Date endTime;
+
+ /** 最小成团人数 */
+ @ApiModelProperty(name = "最小成团人数", value = "最小成团人数")
+ private String minMembers;
+
+ /** 活动状态 */
+ @ApiModelProperty(name = "活动状态", value = "活动状态")
+ private String status;
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuySaveReq.java b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuySaveReq.java
new file mode 100644
index 0000000..e8a9cdb
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-common/src/main/java/com/muyu/product/domain/req/GroupBuySaveReq.java
@@ -0,0 +1,60 @@
+package com.muyu.product.domain.req;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 拼团对象 group_buy
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "GroupBuySaveReq", description = "拼团")
+public class GroupBuySaveReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+
+ @ApiModelProperty(name = "主键", value = "主键")
+ private Long id;
+
+ /** 外键,关联商品 */
+
+ @ApiModelProperty(name = "外键,关联商品", value = "外键,关联商品")
+ private Long projectId;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+
+ @ApiModelProperty(name = "开始时间", value = "开始时间")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+
+ @ApiModelProperty(name = "结束时间", value = "结束时间")
+ private Date endTime;
+
+ /** 最小成团人数 */
+
+ @ApiModelProperty(name = "最小成团人数", value = "最小成团人数")
+ private String minMembers;
+
+ /** 活动状态 */
+
+ @ApiModelProperty(name = "活动状态", value = "活动状态")
+ private String status;
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/pom.xml b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/pom.xml
new file mode 100644
index 0000000..d45335c
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-group-buy
+ 3.6.3
+
+
+ muyu-group-buy-remote
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ com.muyu
+ muyu-product-common
+
+
+
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java
new file mode 100644
index 0000000..fd88ca8
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java
@@ -0,0 +1,29 @@
+package com.muyu.product.remote;
+
+import com.muyu.common.core.constant.ServiceNameConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.remote.factory.RemoteProjectInfoFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * @author DongZl
+ * @description: 规格远程调用业务层
+ * @Date 2024-4-7 上午 10:58
+ */
+@FeignClient(
+ contextId = "remoteProjectInfoService",
+ value = ServiceNameConstants.PRODUCT_SERVICE,
+ fallbackFactory = RemoteProjectInfoFactory.class,
+ path = "/info"
+)
+public interface RemoteProjectInfoService {
+ /**
+ * 获取商品信息详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public Result getInfo(@PathVariable("id") Long id) ;
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java
new file mode 100644
index 0000000..177ced8
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java
@@ -0,0 +1,42 @@
+package com.muyu.product.remote;
+
+import com.muyu.common.core.constant.ServiceNameConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.remote.factory.RemoteProjectSkuFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author DongZl
+ * @description: 远程调用业务层
+ * @Date 2024-4-7 上午 10:58
+ */
+@FeignClient(
+ contextId = "remoteProjectSkuService",
+ value = ServiceNameConstants.PRODUCT_SERVICE,
+ fallbackFactory = RemoteProjectSkuFactory.class,
+ path = "/sku"
+)
+public interface RemoteProjectSkuService {
+
+ /**
+ * 通过商品ID和SKU获取SKU信息
+ * @param projectId 商品ID
+ * @param projectSku 商品SKU
+ * @return 商品SKU信息
+ */
+ @GetMapping("/info/{projectId}/{projectSku}")
+ public Result getInfoByProjectIdAndSku(@PathVariable("projectId") Long projectId,
+ @PathVariable("projectSku") String projectSku);
+ /**
+ * 通过商品ID和SKU获取SKU信息
+ * @param projectId 商品ID
+ * @return 商品SKU信息
+ */
+ @GetMapping("/list/{projectId}")
+ public Result> listByProjectId(@PathVariable("projectId") Long projectId);
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java
new file mode 100644
index 0000000..6268dd2
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java
@@ -0,0 +1,34 @@
+package com.muyu.product.remote;
+
+import com.muyu.common.core.constant.ServiceNameConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.domain.RuleAttrInfo;
+import com.muyu.product.remote.factory.RemoteProjectSkuFactory;
+import com.muyu.product.remote.factory.RemoteRuleAttrFactory;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author DongZl
+ * @description: 规格信息远程调用业务层
+ * @Date 2024-4-7 上午 10:58
+ */
+@FeignClient(
+ contextId = "remoteRuleAttrService",
+ value = ServiceNameConstants.PRODUCT_SERVICE,
+ fallbackFactory = RemoteRuleAttrFactory.class,
+ path = "/ruleAttr"
+)
+public interface RemoteRuleAttrService {
+ /**
+ * 获取规格详情详细信息
+ */
+ @GetMapping(value = "/list/ruleId/{ruleId}")
+ public Result> getInfoByRuleId(@PathVariable("ruleId") Long id);
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java
new file mode 100644
index 0000000..14a5ad3
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java
@@ -0,0 +1,32 @@
+package com.muyu.product.remote;
+
+import com.muyu.common.core.constant.ServiceNameConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.domain.RuleInfo;
+import com.muyu.product.remote.factory.RemoteProjectSkuFactory;
+import com.muyu.product.remote.factory.RemoteRuleFactory;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * @author DongZl
+ * @description: 规格远程调用业务层
+ * @Date 2024-4-7 上午 10:58
+ */
+@FeignClient(
+ contextId = "remoteRuleService",
+ value = ServiceNameConstants.PRODUCT_SERVICE,
+ fallbackFactory = RemoteRuleFactory.class,
+ path = "/rule"
+)
+public interface RemoteRuleService {
+ /**
+ * 获取商品规格详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public Result getInfo(@PathVariable("id") Long id);
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java
new file mode 100644
index 0000000..e07d42f
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java
@@ -0,0 +1,31 @@
+package com.muyu.product.remote.factory;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.domain.RuleInfo;
+import com.muyu.product.remote.RemoteProjectInfoService;
+import com.muyu.product.remote.RemoteRuleService;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+/**
+ * @author DongZl
+ * @description: 规格远程调熔断器
+ * @Date 2024-4-7 上午 10:59
+ */
+public class RemoteProjectInfoFactory implements FallbackFactory {
+ @Override
+ public RemoteProjectInfoService create (Throwable cause) {
+ return new RemoteProjectInfoService() {
+
+ /**
+ * 获取商品规格详细信息
+ *
+ * @param id
+ */
+ @Override
+ public Result getInfo (Long id) {
+ return Result.error(cause.getMessage());
+ }
+ };
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java
new file mode 100644
index 0000000..78fab1b
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java
@@ -0,0 +1,37 @@
+package com.muyu.product.remote.factory;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.remote.RemoteProjectSkuService;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+import java.util.List;
+
+/**
+ * @author DongZl
+ * @description: 远程调熔断器
+ * @Date 2024-4-7 上午 10:59
+ */
+public class RemoteProjectSkuFactory implements FallbackFactory {
+ @Override
+ public RemoteProjectSkuService create (Throwable cause) {
+ return new RemoteProjectSkuService() {
+ @Override
+ public Result getInfoByProjectIdAndSku (Long projectId, String projectSku) {
+ return Result.error(cause.getMessage());
+ }
+
+ /**
+ * 通过商品ID和SKU获取SKU信息
+ *
+ * @param projectId 商品ID
+ *
+ * @return 商品SKU信息
+ */
+ @Override
+ public Result> listByProjectId (Long projectId) {
+ return Result.error(cause.getMessage());
+ }
+ };
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java
new file mode 100644
index 0000000..2a11137
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java
@@ -0,0 +1,34 @@
+package com.muyu.product.remote.factory;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.domain.RuleAttrInfo;
+import com.muyu.product.remote.RemoteProjectSkuService;
+import com.muyu.product.remote.RemoteRuleAttrService;
+import com.muyu.product.remote.RemoteRuleService;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+import java.util.List;
+
+/**
+ * @author DongZl
+ * @description: 规格详情远程调熔断器
+ * @Date 2024-4-7 上午 10:59
+ */
+public class RemoteRuleAttrFactory implements FallbackFactory {
+ @Override
+ public RemoteRuleAttrService create (Throwable cause) {
+ return new RemoteRuleAttrService() {
+
+ /**
+ * 获取规格详情详细信息
+ *
+ * @param id
+ */
+ @Override
+ public Result> getInfoByRuleId (Long id) {
+ return Result.error(cause.getMessage());
+ }
+ };
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java
new file mode 100644
index 0000000..9a99497
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java
@@ -0,0 +1,31 @@
+package com.muyu.product.remote.factory;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.domain.RuleInfo;
+import com.muyu.product.remote.RemoteProjectSkuService;
+import com.muyu.product.remote.RemoteRuleService;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+/**
+ * @author DongZl
+ * @description: 规格远程调熔断器
+ * @Date 2024-4-7 上午 10:59
+ */
+public class RemoteRuleFactory implements FallbackFactory {
+ @Override
+ public RemoteRuleService create (Throwable cause) {
+ return new RemoteRuleService() {
+
+ /**
+ * 获取商品规格详细信息
+ *
+ * @param id
+ */
+ @Override
+ public Result getInfo (Long id) {
+ return Result.error(cause.getMessage());
+ }
+ };
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..2d16640
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1,4 @@
+com.muyu.product.remote.factory.RemoteProjectSkuFactory
+com.muyu.product.remote.factory.RemoteRuleAttrFactory
+com.muyu.product.remote.factory.RemoteRuleFactory
+com.muyu.product.remote.factory.RemoteProjectInfoFactory
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/pom.xml b/muyu-modules/muyu-group-buy/muyu-group-buy-server/pom.xml
new file mode 100644
index 0000000..340ef25
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/pom.xml
@@ -0,0 +1,127 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-group-buy
+ 3.6.3
+
+
+ muyu-group-buy-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+
+
+ com.muyu
+ muyu-group-buy-common
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ muyu-common-datasource
+
+
+
+
+ com.muyu
+ muyu-common-datascope
+
+
+
+
+ com.muyu
+ muyu-common-log
+
+
+
+
+ com.muyu
+ muyu-common-swagger
+
+
+ com.muyu
+ muyu-group-buy-common
+ 3.6.3
+ compile
+
+
+ com.muyu
+ muyu-group-buy-common
+ 3.6.3
+ compile
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/MuYuGroupBuyApplication.java b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/MuYuGroupBuyApplication.java
new file mode 100644
index 0000000..35d0577
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/MuYuGroupBuyApplication.java
@@ -0,0 +1,23 @@
+package com.muyu.product;
+
+import com.muyu.common.security.annotation.EnableCustomConfig;
+import com.muyu.common.security.annotation.EnableMyFeignClients;
+import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author DongZl
+ * @description: 商品启动类
+ * @Date 2024-2-26 下午 04:07
+ */
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableMyFeignClients
+@SpringBootApplication
+public class MuYuGroupBuyApplication {
+ public static void main (String[] args) {
+ SpringApplication.run(MuYuGroupBuyApplication.class, args);
+ }
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/controller/GroupBuyController.java b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/controller/GroupBuyController.java
new file mode 100644
index 0000000..9c7566d
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/controller/GroupBuyController.java
@@ -0,0 +1,111 @@
+package com.muyu.product.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.product.domain.GroupBuy;
+import com.muyu.product.domain.req.GroupBuyQueryReq;
+import com.muyu.product.domain.req.GroupBuySaveReq;
+import com.muyu.product.domain.req.GroupBuyEditReq;
+import com.muyu.product.service.GroupBuyService;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 拼团Controller
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Api(tags = "拼团")
+@RestController
+@RequestMapping("/buy")
+public class GroupBuyController extends BaseController {
+ @Autowired
+ private GroupBuyService groupBuyService;
+
+ /**
+ * 查询拼团列表
+ */
+ @ApiOperation("获取拼团列表")
+ @RequiresPermissions("product:buy:list")
+ @GetMapping("/list")
+ public Result> list(GroupBuyQueryReq groupBuyQueryReq) {
+ startPage();
+ List list = groupBuyService.list(GroupBuy.queryBuild(groupBuyQueryReq));
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出拼团列表
+ */
+ @ApiOperation("导出拼团列表")
+ @RequiresPermissions("product:buy:export")
+ @Log(title = "拼团", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GroupBuy groupBuy) {
+ List list = groupBuyService.list(groupBuy);
+ ExcelUtil util = new ExcelUtil(GroupBuy.class);
+ util.exportExcel(response, list, "拼团数据");
+ }
+
+ /**
+ * 获取拼团详细信息
+ */
+ @ApiOperation("获取拼团详细信息")
+ @RequiresPermissions("product:buy:query")
+ @GetMapping(value = "/{id}")
+ @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
+ public Result getInfo(@PathVariable("id") Long id) {
+ return Result.success(groupBuyService.getById(id));
+ }
+
+ /**
+ * 新增拼团
+ */
+ @RequiresPermissions("product:buy:add")
+ @Log(title = "拼团", businessType = BusinessType.INSERT)
+ @PostMapping
+ @ApiOperation("新增拼团")
+ public Result add(@RequestBody GroupBuySaveReq groupBuySaveReq) {
+ return toAjax(groupBuyService.save(GroupBuy.saveBuild(groupBuySaveReq)));
+ }
+
+ /**
+ * 修改拼团
+ */
+ @RequiresPermissions("product:buy:edit")
+ @Log(title = "拼团", businessType = BusinessType.UPDATE)
+ @PutMapping("/{id}")
+ @ApiOperation("修改拼团")
+ public Result edit(@PathVariable Long id, @RequestBody GroupBuyEditReq groupBuyEditReq) {
+ return toAjax(groupBuyService.updateById(GroupBuy.editBuild(id,groupBuyEditReq)));
+ }
+
+ /**
+ * 删除拼团
+ */
+ @RequiresPermissions("product:buy:remove")
+ @Log(title = "拼团", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ @ApiOperation("删除拼团")
+ @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
+ public Result remove(@PathVariable List ids) {
+ return toAjax(groupBuyService.removeBatchByIds(ids));
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/mapper/GroupBuyMapper.java b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/mapper/GroupBuyMapper.java
new file mode 100644
index 0000000..602bdf3
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/mapper/GroupBuyMapper.java
@@ -0,0 +1,15 @@
+package com.muyu.product.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.product.domain.GroupBuy;
+
+/**
+ * 拼团Mapper接口
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+public interface GroupBuyMapper extends BaseMapper {
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/GroupBuyService.java b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/GroupBuyService.java
new file mode 100644
index 0000000..8fbd093
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/GroupBuyService.java
@@ -0,0 +1,22 @@
+package com.muyu.product.service;
+
+import java.util.List;
+import com.muyu.product.domain.GroupBuy;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 拼团Service接口
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+public interface GroupBuyService extends IService {
+ /**
+ * 查询拼团列表
+ *
+ * @param groupBuy 拼团
+ * @return 拼团集合
+ */
+ public List list(GroupBuy groupBuy);
+
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/impl/GroupBuyServiceImpl.java b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/impl/GroupBuyServiceImpl.java
new file mode 100644
index 0000000..541cf82
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/java/com/muyu/product/service/impl/GroupBuyServiceImpl.java
@@ -0,0 +1,56 @@
+package com.muyu.product.service.impl;
+
+import java.util.List;
+
+import com.muyu.common.core.utils.ObjUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import com.muyu.product.mapper.GroupBuyMapper;
+import com.muyu.product.domain.GroupBuy;
+import com.muyu.product.service.GroupBuyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+/**
+ * 拼团Service业务层处理
+ *
+ * @author DongZeLiang
+ * @date 2024-11-14
+ */
+@Slf4j
+@Service
+public class GroupBuyServiceImpl extends ServiceImpl implements GroupBuyService {
+
+ /**
+ * 查询拼团列表
+ *
+ * @param groupBuy 拼团
+ * @return 拼团
+ */
+ @Override
+ public List list(GroupBuy groupBuy) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+
+
+ if (ObjUtils.notNull(groupBuy.getProjectId())){
+ queryWrapper.eq(GroupBuy::getProjectId, groupBuy.getProjectId());
+ }
+
+ if (ObjUtils.notNull(groupBuy.getStartTime())){
+ queryWrapper.eq(GroupBuy::getStartTime, groupBuy.getStartTime());
+ }
+
+ if (ObjUtils.notNull(groupBuy.getEndTime())){
+ queryWrapper.eq(GroupBuy::getEndTime, groupBuy.getEndTime());
+ }
+
+ if (ObjUtils.notNull(groupBuy.getMinMembers())){
+ queryWrapper.eq(GroupBuy::getMinMembers, groupBuy.getMinMembers());
+ }
+
+ if (ObjUtils.notNull(groupBuy.getStatus())){
+ queryWrapper.eq(GroupBuy::getStatus, groupBuy.getStatus());
+ }
+ return list(queryWrapper);
+ }
+}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/banner.txt b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/banner.txt
new file mode 100644
index 0000000..0dd5eee
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/banner.txt
@@ -0,0 +1,2 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/bootstrap.yml b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..3e7c168
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/bootstrap.yml
@@ -0,0 +1,28 @@
+# Tomcat
+server:
+ port: 9308
+
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: muyu-group-buy
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 10.10.10.132:8848
+ config:
+ # 配置中心地址
+ server-addr: 10.10.10.132:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+logging:
+ level:
+ com.muyu.product.mapper: DEBUG
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/logback.xml b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/logback.xml
new file mode 100644
index 0000000..69fb68b
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/mapper/GroupBuyMapper.xml b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/mapper/GroupBuyMapper.xml
new file mode 100644
index 0000000..47f117d
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/muyu-group-buy-server/src/main/resources/mapper/GroupBuyMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_id, start_time, end_time, min_members, status from group_buy
+
+
diff --git a/muyu-modules/muyu-group-buy/pom.xml b/muyu-modules/muyu-group-buy/pom.xml
new file mode 100644
index 0000000..2ac62ca
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-modules
+ 3.6.3
+
+
+ muyu-group-buy
+ pom
+
+ muyu-group-buy-common
+ muyu-group-buy-remote
+ muyu-group-buy-server
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/muyu-modules/muyu-group-buy/结构 b/muyu-modules/muyu-group-buy/结构
new file mode 100644
index 0000000..f4f14d7
--- /dev/null
+++ b/muyu-modules/muyu-group-buy/结构
@@ -0,0 +1,26 @@
+{ 基本信息: {
+ name: "",
+ introduction: "",
+ mianType: "",
+ parentType: "",
+ type: "",
+ image: "",
+ carouselImages: "",
+ status: "",
+ ruleId: "",
+ branId: "",
+ remark: ""
+ },
+ 品类属性: [ {
+ id: "",
+ value: "",
+ } …………
+ ],
+ 商品规格: [ {
+ SKU: "",(所有的规格属性拼接而成)
+ "images": "",
+ 库存: "",
+ 价格: "",
+ } …………
+ ]
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
index 936bde6..cfb0e1a 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
@@ -4,6 +4,7 @@ import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.muyu.product.domain.AttributeInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -36,5 +37,5 @@ public class AttributeGroupEditReq extends BaseEntity {
@ApiModelProperty(name = "状态", value = "状态", required = true)
private String states;
- private List attributeIdList ;
+ private List attributeIdList ;
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoEditReq.java
index 023446a..a5536ab 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoEditReq.java
@@ -8,6 +8,8 @@ import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.TreeEntity;
+import java.util.List;
+
/**
* 品类信息对象 category_info
*
@@ -38,5 +40,18 @@ public class CategoryInfoEditReq extends TreeEntity {
/** 介绍 */
@ApiModelProperty(name = "介绍", value = "介绍")
private String introduction;
+ /**
+ * 商品属性组关联ID
+ */
+ private List attributeGroupIdList;
+ /**
+ * 商品属性关联ID
+ */
+ private List attributeIdList;
+
+ /**
+ * 商品品牌组关联ID
+ */
+ private List brandIdList;
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
index bc9d602..b2bc4d0 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
@@ -1,5 +1,6 @@
package com.muyu.product.domain.req;
+import com.muyu.product.domain.model.RuleAttrAddModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -8,6 +9,8 @@ import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.BaseEntity;
+import java.util.List;
+
/**
* 商品规格对象 rule_info
*
@@ -31,4 +34,6 @@ public class RuleInfoEditReq extends BaseEntity {
@ApiModelProperty(name = "规格状态", value = "规格状态")
private String status;
+ private List ruleAttrList;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
index 55dbaef..c942196 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
@@ -112,8 +112,9 @@ public class CategoryInfoController extends BaseController {
@Log(title = "品类信息", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改品类信息")
- public Result edit(@PathVariable Long id, @RequestBody CategoryInfoEditReq categoryInfoEditReq) {
- return toAjax(categoryInfoService.updateById(CategoryInfo.editBuild(id,categoryInfoEditReq)));
+ public boolean edit(@PathVariable Long id, @RequestBody CategoryInfoEditReq categoryInfoEditReq) {
+ boolean b = categoryInfoService.updateById(id, categoryInfoEditReq);
+ return b;
}
/**
@@ -124,8 +125,9 @@ public class CategoryInfoController extends BaseController {
@DeleteMapping("/{ids}")
@ApiOperation("删除品类信息")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
- public Result remove(@PathVariable List ids) {
- return toAjax(categoryInfoService.removeBatchByIds(ids));
+ public int remove(@PathVariable Long ids) {
+ int i = categoryInfoService.removeBatchById(ids);
+ return i;
}
/**
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java
index bb03272..d4a1a5c 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java
@@ -101,8 +101,9 @@ public class RuleInfoController extends BaseController {
@Log(title = "商品规格", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改商品规格")
- public Result edit(@PathVariable Long id, @RequestBody RuleInfoEditReq ruleInfoEditReq) {
- return toAjax(ruleInfoService.updateById(RuleInfo.editBuild(id,ruleInfoEditReq)));
+ public boolean edit(@PathVariable Long id, @RequestBody RuleInfoEditReq ruleInfoEditReq) {
+ boolean b = ruleInfoService.updateById(id, ruleInfoEditReq);
+ return b;
}
/**
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/CategoryInfoMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/CategoryInfoMapper.java
index 6ed8f75..47f4817 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/CategoryInfoMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/CategoryInfoMapper.java
@@ -3,6 +3,8 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.CategoryInfo;
+import com.muyu.product.domain.ProjectInfo;
+import org.apache.ibatis.annotations.Param;
/**
* 品类信息Mapper接口
@@ -12,4 +14,8 @@ import com.muyu.product.domain.CategoryInfo;
*/
public interface CategoryInfoMapper extends BaseMapper {
+
+ List selByParentId(@Param("id") Long id);
+
+ List selectByProjectInfo(@Param("parentId") Long parentId);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
index 9b99d9d..8924a61 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
@@ -2,12 +2,14 @@ package com.muyu.product.service;
import java.util.List;
+import com.muyu.common.core.domain.Result;
import com.muyu.product.domain.AttributeGroup;
import com.muyu.product.domain.AttributeInfo;
import com.muyu.product.domain.BrandInfo;
import com.muyu.product.domain.CategoryInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.product.domain.model.CategoryInfoSaveModel;
+import com.muyu.product.domain.req.CategoryInfoEditReq;
import com.muyu.product.domain.resp.CategoryCommonElementResp;
import com.muyu.product.domain.resp.CategoryParentCommonElementResp;
@@ -69,4 +71,9 @@ public interface CategoryInfoService extends IService {
CategoryCommonElementResp getTemplateAttributeByCateGoryId (Long cateGoryId);
public List getCommon (Long categoryId, IService iService, IService bsiService);
+
+ boolean updateById(Long id, CategoryInfoEditReq categoryInfoEditReq);
+
+
+ int removeBatchById(Long id);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java
index d177b0d..3544305 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java
@@ -6,6 +6,7 @@ import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.product.domain.RuleInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.product.domain.model.RuleInfoAddModel;
+import com.muyu.product.domain.req.RuleInfoEditReq;
import com.muyu.product.domain.req.RuleInfoQueryReq;
import com.muyu.product.domain.resp.RuleAttributeResp;
import com.muyu.product.domain.resp.RuleInfoResp;
@@ -37,4 +38,7 @@ public interface RuleInfoService extends IService {
RuleInfoUpdResp getUpdById(Long id);
+
+ boolean updateById(Long id, RuleInfoEditReq ruleInfoEditReq);
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsCategoryAttributeServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsCategoryAttributeServiceImpl.java
index 48e263d..a2a7083 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsCategoryAttributeServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsCategoryAttributeServiceImpl.java
@@ -4,6 +4,7 @@ import java.util.List;
import com.muyu.common.core.utils.ObjUtils;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.muyu.product.mapper.AsCategoryAttributeMapper;
import com.muyu.product.domain.AsCategoryAttribute;
@@ -20,7 +21,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@Slf4j
@Service
public class AsCategoryAttributeServiceImpl extends ServiceImpl implements AsCategoryAttributeService {
-
/**
* 查询品类属性中间列表
*
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java
index 22b8ab9..c2bbae4 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java
@@ -128,8 +128,8 @@ public class AttributeGroupServiceImpl extends ServiceImpl longs = attributeGroupEditReq.getAttributeIdList().stream().map(AttributeInfo::getId).toList();
+ attributeGroupMapper.install(id,longs);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
index 2d6b4d5..c3320c4 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.ObjUtils;
+import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.product.domain.*;
import com.muyu.product.domain.base.CategoryBase;
import com.muyu.product.domain.model.CategoryInfoSaveModel;
import com.muyu.product.domain.model.TemplateAttributeGroupModel;
import com.muyu.product.domain.model.TemplateAttributeModel;
+import com.muyu.product.domain.req.CategoryInfoEditReq;
import com.muyu.product.domain.resp.CategoryCommonElementResp;
import com.muyu.product.domain.resp.CategoryParentCommonElementResp;
import com.muyu.product.mapper.CategoryInfoMapper;
@@ -19,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -57,6 +61,8 @@ public class CategoryInfoServiceImpl extends ServiceImpl().eq(AsCategoryAttribute::getCategoryId, id));
+ this.asCategoryAttributeGroupService.remove(new LambdaQueryWrapper().eq(AsCategoryAttributeGroup::getCategoryId, id));
+ this. asCategoryBrandService.remove(new LambdaQueryWrapper().eq(AsCategoryBrand::getCategoryId, id));
+
+ asCategoryAttributeService.saveBatch(
+ categoryInfoEditReq.getAttributeIdList().stream()
+ .map(categoryAttributeId -> AsCategoryAttribute.categoryBuild(categoryAttributeId,id))
+ .toList()
+ );
+ asCategoryAttributeGroupService.saveBatch(
+ categoryInfoEditReq.getAttributeIdList().stream()
+ .map(categoryGoryAttributeGroupId -> AsCategoryAttributeGroup.categoryBuild(categoryGoryAttributeGroupId,id))
+ .toList()
+ );
+ asCategoryBrandService.saveBatch(
+ categoryInfoEditReq.getAttributeIdList().stream()
+ .map(categoryBrandId -> AsCategoryBrand.categoryBuild(categoryBrandId,id))
+ .toList()
+ );
+
+ }
+
+ return b;
+ }
+
+
+ @Override
+ public int removeBatchById(Long id) {
+ CategoryInfo categoryInfo = categoryInfoMapper.selectById(id);
+ List categoryInfos = categoryInfoMapper.selByParentId(categoryInfo.getId());
+
+ if(categoryInfos.size() != 0){
+ throw new SecurityException("不能删除还有子集");
+ }
+
+ List projectInfos = categoryInfoMapper.selectByProjectInfo(categoryInfo.getParentId());
+ if(projectInfos.size() != 0){
+ throw new SecurityException("不能删除与商品关联");
+ }
+ int i = categoryInfoMapper.deleteById(id);
+ return i;
+ }
+
+
/**
* 通过品类ID获取父级以上的属性、属性组、品牌集合
*
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java
index 035837e..bfcea3a 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java
@@ -16,6 +16,7 @@ import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.product.domain.RuleAttrInfo;
import com.muyu.product.domain.model.RuleAttrAddModel;
import com.muyu.product.domain.model.RuleInfoAddModel;
+import com.muyu.product.domain.req.RuleInfoEditReq;
import com.muyu.product.domain.req.RuleInfoQueryReq;
import com.muyu.product.domain.resp.RuleAttributeResp;
import com.muyu.product.domain.resp.RuleInfoResp;
@@ -127,6 +128,23 @@ public class RuleInfoServiceImpl extends ServiceImpl
.build();
}
+ @Override
+ public boolean updateById(Long id, RuleInfoEditReq ruleInfoEditReq) {
+ boolean update = this.updateById(RuleInfo.editBuild(id, ruleInfoEditReq));
+ if(update){
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RuleAttrInfo::getRuleId,id);
+ this.ruleAttrInfoService.remove(queryWrapper);
+
+ ruleAttrInfoService.saveBatch(
+ ruleInfoEditReq.getRuleAttrList().stream()
+ .map(ruleAttrAddModel -> RuleAttrInfo.addModelBuild(ruleAttrAddModel, () -> id, SecurityUtils::getUsername))
+ .toList()
+ );
+ }
+ return update;
+ }
+
// RuleInfo byId = this.getById(id);
//
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/CategoryInfoMapper.xml b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/CategoryInfoMapper.xml
index 99be65b..308945b 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/CategoryInfoMapper.xml
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/CategoryInfoMapper.xml
@@ -21,4 +21,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, name, image, parent_id, start, introduction, remark, create_by, create_time, update_by, update_time from category_info
+
+
+
diff --git a/muyu-modules/pom.xml b/muyu-modules/pom.xml
index b9faa97..9cb767e 100644
--- a/muyu-modules/pom.xml
+++ b/muyu-modules/pom.xml
@@ -15,6 +15,7 @@
muyu-file
muyu-product
muyu-shop-cart
+ muyu-group-buy