From a53a1f481278f981bab8030853b353a823a9cd81 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 01 十一月 2024 18:41:57 +0800
Subject: [PATCH] 09.25心愿求购新增

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java                                  |   26 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java             |   26 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java                       |   27 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java         |   65 --
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java                                    |   28 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java                                       |   16 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java                                           |    5 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java          |  131 +++++
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java                            |   32 -
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java                                                   |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java                               |   17 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java |   19 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java              |    7 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java                    |  155 -----
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java         |   35 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java                                                |   15 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java           |   32 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java         |   32 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java    |   19 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java               |   45 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java                                             |    4 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java                          |   20 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java      |   29 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java       |   35 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java                  |   55 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java                                              |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java                                     |   15 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java                          |   46 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java                                   |   10 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java                                        |  119 ++++
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java                                       |    3 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java                                            |   27 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java                                      |    7 
 /dev/null                                                                                                                         |   54 --
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java         |    2 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java            |   68 ++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java                               |   69 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java                                        |    5 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java             |  105 ++++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java                                    |    2 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java      |   33 +
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java              |   57 -
 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml                                                                       |    4 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java                                                  |    4 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java                                     |   33 
 45 files changed, 1,131 insertions(+), 411 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java
index 4bba3e5..959e9b4 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java
@@ -24,7 +24,10 @@
     RETURN_ADDRESS_USER_ADDRESS("RETURN_ADDRESS_USER_ADDRESS",1,"退货地址"),
     RETURN_CYCLE("RETURN_CYCLE", 1, "退货周期,用户在收货后{}天可申请售后"),
     MEMBER_POINTS_MONEY("MEMBER_POINTS_MONEY", 1, "会员每实际消费{}元"),
-    MEMBER_POINTS_POINTS("MEMBER_POINTS_POINTS", 1, "可获得{}积分");
+    MEMBER_POINTS_POINTS("MEMBER_POINTS_POINTS", 1, "可获得{}积分"),
+    WISH_DESCRIPTION("WISH_DESCRIPTION", 1, "心愿求购说明配置"),
+    WISH_SHARE_TITLE("WISH_SHARE_TITLE", 1, "心愿求购分享标题"),
+    WISH_SHARE_IMG_URL("WISH_SHARE_IMG_URL", 1, "心愿求购分享图片");
     private final String key;
     private final Integer keyType;   //1=系统配置
     private final String keyName;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
index c5c6998..2db5e11 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
@@ -46,7 +46,7 @@
     @ApiModelProperty(value = "下单时间")
     private LocalDateTime orderTime;
 
-    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
+    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单 5=团购订单")
     private OrderFromEnum orderFrom;
     
     @ApiModelProperty(value = "拍卖订单类型 1=普通拍品 2=拍卖会拍品")
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java
index 8be38a9..07edb76 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java
@@ -1,20 +1,15 @@
 package com.ruoyi.system.api.domain.dto;
 
-import com.ruoyi.common.core.enums.OrderFromEnum;
-import com.ruoyi.common.core.enums.OrderStatusEnum;
-import com.ruoyi.common.core.enums.PaymentMethodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
-import java.math.BigDecimal;
 
 @Data
 @ApiModel(value = "用户订单详情传输对象", description = "用户订单详情传输对象")
 public class MemberOrderDTO {
     @ApiModelProperty("订单id")
     private Long id;
-    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
+    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单 5心愿求购")
     private Integer orderFrom;
 
     @ApiModelProperty(value = "会员id")
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java
index e8267c3..5186b62 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java
@@ -50,7 +50,7 @@
     private OrderStatusEnum orderStatus;
 
 
-    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
+    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单 5=心愿求购")
     @JsonInclude(JsonInclude.Include.ALWAYS)
     private OrderFromEnum orderFrom;
 
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java
new file mode 100644
index 0000000..61d931c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.api.domain.vo;
+
+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/10/29
+ */
+@Data
+@ApiModel(value = "心愿求购平台推荐商品视图对象")
+public class MgtPromotionWishRecommendVO {
+
+    @ApiModelProperty(value = "推荐商品id")
+    private Long id;
+
+    @ApiModelProperty(value = "心愿求购id")
+    private Long wishId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal sellingPrice;
+
+    @ApiModelProperty(value = "可购数量")
+    private Integer availableNum;
+
+    @ApiModelProperty(value = "商品图片")
+    private String goodsImageUrl;
+
+    @ApiModelProperty(value = "失效时间")
+    private LocalDateTime expireTime;
+
+    @ApiModelProperty(value = "回复状态 0用户未购买 1用户已购买")
+    private Integer purchaseStatus;
+
+    @ApiModelProperty(value = "用户已购数量")
+    private Integer purchasedNum;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java
index 7bbd847..d69eabb 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java
@@ -30,7 +30,7 @@
     @JsonInclude(JsonInclude.Include.ALWAYS)
     private LocalDateTime orderTime;
 
-    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
+    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单 5=心愿求购")
     @JsonInclude(JsonInclude.Include.ALWAYS)
     private OrderFromEnum orderFrom;
 
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 5dd115b..d175514 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
@@ -14,6 +14,7 @@
 import com.ruoyi.system.api.domain.dto.OrderDTO;
 import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
 import com.ruoyi.system.api.domain.dto.RefundDTO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.domain.vo.PayInfoVO;
 import com.ruoyi.system.api.feignClient.OrderClient;
@@ -177,15 +178,18 @@
 
             @Override
             public R<?> updateOrderStatusByMubres1(String formedGroupMubres, String source) {
-                return null;
+                return R.fail("修改订单展示状态失败" + cause.getMessage());
             }
 
             @Override
             public R<List<Order>> updateOrderStatusByMubres2(String formedGroupMubres, String source) {
-                return null;
+                return R.fail("修改订单展示状态失败" + cause.getMessage());
             }
 
-
+            @Override
+            public R<MgtPromotionWishRecommendVO> getWishDataBySkuId(Long id, String source) {
+                return R.fail("获取心愿求购订单数据失败" + cause.getMessage());
+            }
         };
 
     }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java
index 142e401..378cdf1 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.CouponMember;
 import com.ruoyi.system.api.domain.PromotionVideo;
+import com.ruoyi.system.api.domain.PromotionWishRecommend;
 import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
 import com.ruoyi.system.api.feignClient.PromotionClient;
 import java.util.List;
@@ -35,6 +36,22 @@
             public R<?> updCouponMember(CouponMemberDTO couponMemberDTO, String source) {
                 return R.fail("修改会员优惠券信息失败:" + cause.getMessage());
             }
+
+            @Override
+            public R<PromotionWishRecommend> getPromotionWishRecommend(Long id, String source) {
+                return R.fail("获取推荐商品失败:" + cause.getMessage());
+            }
+
+            @Override
+            public R<Integer> subRecommendAvailableNum(Integer goodsQuantity, Long id,
+                    String source) {
+                return R.fail("扣减推荐商品可购数量失败:" + cause.getMessage());
+            }
+
+            @Override
+            public R<?> addRecommendAvailableNum(Integer goodsQuantity, Long id, String source) {
+                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 7e841dd..2e7746f 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
@@ -16,6 +16,7 @@
 import com.ruoyi.system.api.domain.dto.OrderDTO;
 import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
 import com.ruoyi.system.api.domain.dto.RefundDTO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.domain.vo.PayInfoVO;
 import com.ruoyi.system.api.factory.OrderFallbackFactory;
@@ -212,4 +213,8 @@
     @PostMapping("/order/updOrderStatusByMubres2")
     R<List<Order>> updateOrderStatusByMubres2(@RequestBody String formedGroupMubres,
                                     @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/order/getWishDataBySkuId/{id}")
+    R<MgtPromotionWishRecommendVO> getWishDataBySkuId(@PathVariable("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java
index 1d41793..440d15c 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java
@@ -5,13 +5,16 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.CouponMember;
 import com.ruoyi.system.api.domain.PromotionVideo;
+import com.ruoyi.system.api.domain.PromotionWishRecommend;
 import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
 import com.ruoyi.system.api.factory.PromotionFallbackFactory;
 import java.util.List;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(contextId = "promotionClient", value = ServiceNameConstants.RUOYI_PROMOTION, fallbackFactory = PromotionFallbackFactory.class)
 public interface PromotionClient {
@@ -34,4 +37,29 @@
     R<?> updCouponMember(@RequestBody CouponMemberDTO couponMemberDTO,
                                     @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
+    /**
+     * 获取推荐商品
+     * @param id
+     * @param source
+     * @return
+     */
+    @PostMapping("/inner/promotion-wish-recommend/{id}")
+    R<PromotionWishRecommend> getPromotionWishRecommend(@PathVariable("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    /**
+     * 扣减推荐商品库存
+     * @param goodsQuantity
+     * @param id
+     * @return
+     */
+    @PostMapping("/inner/promotion-wish-recommend/subAvailableNum")
+    R<Integer> subRecommendAvailableNum(@RequestParam("goodsQuantity") Integer goodsQuantity,
+            @RequestParam("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @PostMapping("/inner/promotion-wish-recommend/addAvailableNum")
+    R<?> addRecommendAvailableNum(@RequestParam("goodsQuantity") Integer goodsQuantity,
+            @RequestParam("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java
index 0003b19..2cba4fa 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java
@@ -1,7 +1,7 @@
 package com.ruoyi.common.core.domain;
 
-import java.io.Serializable;
 import com.ruoyi.common.core.constant.Constants;
+import java.io.Serializable;
 
 /**
  * 响应信息主体
@@ -26,7 +26,7 @@
 
     public static <T> R<T> ok()
     {
-        return restResult(null, SUCCESS, null);
+        return restResult(null, SUCCESS, "操作成功");
     }
 
     public static <T> R<T> ok(T data)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java
index 977b12b..048b837 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java
@@ -15,7 +15,8 @@
     COMMODITY_ORDER(1, "商品"),
     SNAP_ORDERS(2, "秒杀"),
     GROUP_PURCHASE_ORDERS(3, "团购"),
-    AUCTION_ORDERS(4, "拍卖");
+    AUCTION_ORDERS(4, "拍卖"),
+    WISH_ORDER(5, "心愿求购");
     @EnumValue
     private final int code;
     @JsonValue
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java
index 71973b6..9484a56 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java
@@ -1,25 +1,27 @@
 package com.ruoyi.order.controller.forepart;
 
 
-import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.order.service.IOrderService;
 import com.ruoyi.order.vo.HomeGoodsSkuDTO1;
 import com.ruoyi.order.vo.WdOrderVO;
-import com.ruoyi.system.api.domain.Order;
-import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.MemberOrderDTO;
 import com.ruoyi.system.api.domain.dto.MemberOrderListDTO;
-import com.ruoyi.system.api.domain.vo.*;
+import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
+import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
+import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
+import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import javax.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
@@ -43,13 +45,13 @@
     private GoodsSkuClient goodsSkuClient;
 
     @PostMapping("/saveMemberOrder")
-    @ApiOperation(value = "用户端-立即下单")
+    @ApiOperation(value = "【09.25改】用户端-立即下单")
     public R<MemberTiOrderVO> saveMemberOrder(@RequestBody MemberOrderDTO memberOrderDTO) {
         return R.ok(orderService.saveMemberOrder(memberOrderDTO));
     }
 
     @PostMapping("/updMemberOrder")
-    @ApiOperation(value = "用户端-修改订单")
+    @ApiOperation(value = "【09.25改】用户端-修改订单")
     public R<MemberTiOrderVO> updMemberOrder(@RequestBody MemberOrderDTO memberOrderDTO) {
         return R.ok(orderService.updMemberOrder(memberOrderDTO));
     }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
index 48aae1e..0f06313 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
@@ -12,7 +12,9 @@
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
 import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
+import com.ruoyi.system.api.feignClient.PromotionClient;
 import java.util.Collection;
 import java.util.List;
 import lombok.RequiredArgsConstructor;
@@ -43,6 +45,7 @@
 public class OrderController {
 
     private final IOrderService orderService;
+    private final PromotionClient promotionClient;
     @PostMapping("/saveOrderOne")
     @ResponseBody
     @InnerAuth
@@ -247,4 +250,16 @@
         orderService.updateOrderStatusByMubres2(formedGroupMubres);
         return R.ok();
     }
+
+    /**
+     * 根据skuId获取心愿求购详情数据
+     *
+     * @param id
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/getWishDataBySkuId/{id}")
+    R<MgtPromotionWishRecommendVO> getWishDataBySkuId(@PathVariable("id") Long id) {
+        return R.ok(orderService.getWishDataBySkuId(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 c4a86d5..5fe5e37 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
@@ -12,8 +12,11 @@
 import com.ruoyi.system.api.domain.dto.MemberOrderDTO;
 import com.ruoyi.system.api.domain.dto.MemberOrderListDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
-import com.ruoyi.system.api.domain.vo.*;
-
+import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
+import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
+import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
+import com.ruoyi.system.api.domain.vo.OrderVO;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
@@ -158,4 +161,12 @@
     void updateOrderStatusByMubres1(String formedGroupMubres);
 
     List<Order> updateOrderStatusByMubres2(@RequestBody String formedGroupMubres);
+
+    /**
+     * 根据skuId获取心愿求购详情数据
+     *
+     * @param id
+     * @return
+     */
+    MgtPromotionWishRecommendVO getWishDataBySkuId(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 042c48e..a6c20d4 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
@@ -56,6 +56,7 @@
 import com.ruoyi.system.api.domain.MemberAddress;
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
+import com.ruoyi.system.api.domain.PromotionWishRecommend;
 import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
@@ -71,6 +72,7 @@
 import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
 import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
 import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
@@ -317,6 +319,10 @@
             order.setOrderNo(OrderUtil.getOrderNoForPrefix("TG"));
             order.setIsOrder(2);
         }
+        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+            order.setOrderFrom(OrderFromEnum.WISH_ORDER);
+            order.setOrderNo(OrderUtil.getOrderNoForPrefix("QG"));
+        }
         if (memberOrderDTO.getPaymentMethod()==1){
             order.setPaymentMethod(PaymentMethodEnum.WECHAT);
         }if (memberOrderDTO.getPaymentMethod()==2){
@@ -461,6 +467,33 @@
             order.setSjPrice(goodsSku.getPrice());
             order.setGoodsId(goodsSku.getId());
         }
+        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+            // 远程调用营销服务,获取推荐商品信息
+            PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
+                    memberOrderDTO.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            if (Objects.isNull(recommend)) {
+                throw new ServiceException("推荐商品不存在");
+            }
+            if (recommend.getExpireTime().isBefore(LocalDateTime.now())) {
+                throw new ServiceException("推荐商品已过期");
+            }
+            if (recommend.getAvailableNum().compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
+                throw new ServiceException("推荐商品可购数量不足");
+            }
+            // 远程调用,更新可购数量
+            Integer res = promotionClient.subRecommendAvailableNum(
+                    memberOrderDTO.getGoodsQuantity(),
+                    recommend.getId(), SecurityConstants.INNER).getData();
+            if (res == 0) {
+                throw new ServiceException("推荐商品可购数量不足");
+            }
+            memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
+            memberOrderVO.setPrice(recommend.getSellingPrice());
+            memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
+            memberOrderVO.setSkuName(recommend.getGoodsName());
+            pice = recommend.getSellingPrice();
+        }
         order.setOrderRemark(memberOrderDTO.getOrderRemark());
         order.setMemberId(memberOrderDTO.getMemberId());
         order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
@@ -574,8 +607,6 @@
                     memberOrderVO.setCoverPic(goodsSku.getCoverPic());
                     memberOrderVO.setSkuName(goodsSku.getSkuName());
                 }
-
-
             if (order.getOrderFrom().getCode()==2){
                 MemberOrderDTO memberOrderDTO1=new MemberOrderDTO();
                 memberOrderDTO1.setMemberId(order.getMemberId());
@@ -629,8 +660,8 @@
                     memberOrderVO.setYouhiPrice(data.getSeckillPrice());
 
 
-
-        }  if (order.getOrderFrom().getCode()==3){
+            }
+            if (order.getOrderFrom().getCode() == 3) {
                 order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
                 GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
                 GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
@@ -660,6 +691,40 @@
                         }
                     }
                 }
+            }
+            if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+                // 远程调用营销服务,获取推荐商品信息
+                PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
+                        memberOrderDTO.getGoodsSkuId(),
+                        SecurityConstants.INNER).getData();
+                if (Objects.isNull(recommend)) {
+                    throw new ServiceException("推荐商品不存在");
+                }
+                Integer availableNum = recommend.getAvailableNum() + order.getGoodsQuantity();
+                if (availableNum.compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
+                    throw new ServiceException("推荐商品可购数量不足");
+                }
+                // 如果最新购买数比锁定库存数大,则扣减多出来的商品数量,否则恢复多出的锁定库存
+                if (memberOrderDTO.getGoodsQuantity().compareTo(order.getGoodsQuantity()) > 0) {
+                    // 远程调用,更新可购数量
+                    Integer res = promotionClient.subRecommendAvailableNum(
+                            memberOrderDTO.getGoodsQuantity() - order.getGoodsQuantity(),
+                            recommend.getId(), SecurityConstants.INNER).getData();
+                    if (res == 0) {
+                        throw new ServiceException("推荐商品可购数量不足");
+                    }
+                } else {
+                    promotionClient.addRecommendAvailableNum(
+                            order.getGoodsQuantity() - memberOrderDTO.getGoodsQuantity(),
+                            recommend.getId(), SecurityConstants.INNER);
+                }
+                order.setTotalAmount(recommend.getSellingPrice()
+                        .multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
+                order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
+                memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
+                memberOrderVO.setPrice(recommend.getSellingPrice());
+                memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
+                memberOrderVO.setSkuName(recommend.getGoodsName());
             }
         }
         if (memberOrderDTO.getGoodsQuantity()!=null){
@@ -824,7 +889,10 @@
         Map<Long, GoodsSku> goodsUnitMap = getGoodsUnitMap(list);
         for (MemberOrderListVO MemberOrderList:list){
             if (MemberOrderList.getOrderStatus().getCode()==1){
-                if (MemberOrderList.getOrderFrom().getCode()==1||MemberOrderList.getOrderFrom().getCode()==2||MemberOrderList.getOrderFrom().getCode()==3){
+                if (MemberOrderList.getOrderFrom().getCode() == 1
+                        || MemberOrderList.getOrderFrom().getCode() == 2
+                        || MemberOrderList.getOrderFrom().getCode() == 3
+                        || MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                     LocalDateTime localDateTime = MemberOrderList.getOrderTime().plusMinutes(30);
                     if (LocalDateTime.now().isAfter(localDateTime)) {
                         // dateTime1 在 dateTime2 之后
@@ -865,7 +933,12 @@
                             }
                             goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
                         }
-
+                        // 恢复推荐商品可购数量
+                        if (MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                            promotionClient.addRecommendAvailableNum(
+                                    MemberOrderList.getGoodsQuantity(),
+                                    MemberOrderList.getGoodsSkuId(), SecurityConstants.INNER);
+                        }
 
                         this.updateById(order);
                     }
@@ -1138,6 +1211,11 @@
 
                 }
             }
+            // 恢复可购数量
+            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                promotionClient.addRecommendAvailableNum(
+                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
+            }
 
         }
         if (order.getOrderStatus().getCode() == 2) {
@@ -1181,7 +1259,11 @@
 
                 }
             }
-
+            // 恢复可购数量
+            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                promotionClient.addRecommendAvailableNum(
+                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
+            }
             if (order.getCouponId()!=0){
                 CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                 couponMemberDTO1.setId(order.getCouponId());
@@ -2042,4 +2124,27 @@
         List<Order> page1 = this.list(wrapper);
         return page1;
     }
+
+    /**
+     * 根据skuId获取心愿求购详情数据
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public MgtPromotionWishRecommendVO getWishDataBySkuId(Long id) {
+        MgtPromotionWishRecommendVO vo = null;
+        List<Order> list = this.lambdaQuery().eq(Order::getGoodsSkuId, id)
+                .eq(Order::getOrderFrom, OrderFromEnum.WISH_ORDER)
+                .ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).list();
+        if (CollUtils.isNotEmpty(list)) {
+            vo = new MgtPromotionWishRecommendVO();
+            Integer purchasedNum = list.stream().map(Order::getGoodsQuantity)
+                    .reduce(0, Integer::sum);
+            String orderNo = list.stream().map(Order::getOrderNo).collect(Collectors.joining(","));
+            vo.setPurchasedNum(purchasedNum);
+            vo.setOrderNo(orderNo);
+        }
+        return vo;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionVideoController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java
similarity index 87%
rename from ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionVideoController.java
rename to ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java
index aefa4a9..491bd77 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionVideoController.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java
@@ -14,7 +14,7 @@
  */
 @RestController
 @RequestMapping("/forepart/promotion-video")
-public class FrepartPromotionVideoController {
+public class ForepartPromotionVideoController {
 
 
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java
new file mode 100644
index 0000000..84ac153
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java
@@ -0,0 +1,131 @@
+package com.ruoyi.promotion.controller.forepart;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.promotion.controller.forepart.dto.ForepartPromotionWishDTO;
+import com.ruoyi.promotion.controller.forepart.vo.ForepartPopupVO;
+import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishBulletVO;
+import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishVO;
+import com.ruoyi.promotion.service.IPromotionWishService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-10-29
+ */
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/forepart/promotion-wish")
+@Api(value = "用户端-心愿求购相关接口", tags = "【09.25】用户端-心愿求购相关接口")
+public class ForepartPromotionWishController {
+
+    private final IPromotionWishService promotionWishService;
+
+    /**
+     * 个人中心-获取推荐商品可购买数
+     * @return
+     */
+    @GetMapping("/getRecommendNum")
+    @ApiOperation(value = "个人中心-获取推荐商品可购买数")
+    public R<Integer> getRecommendNum() {
+        return R.ok(promotionWishService.getRecommendNum());
+    }
+
+    /**
+     * 获取首页弹幕数据
+     * @return
+     */
+    @GetMapping("/bulletList")
+    @ApiOperation(value = "获取首页弹幕数据", notes = "达成心愿数为数组长度")
+    public R<List<ForepartPromotionWishBulletVO>> getBulletList() {
+        return R.ok(promotionWishService.getBulletList());
+    }
+
+    /**
+     * 求购历史-达成心愿数
+     * @return
+     */
+    @GetMapping("/getCompletedWishCount")
+    @ApiOperation(value = "求购历史-达成心愿数")
+    public R<Long> getCompletedWishCount() {
+        return R.ok(promotionWishService.getCompletedWishCount());
+    }
+
+    /**
+     * 获取弹窗信息
+     * @return
+     */
+    @GetMapping("/popup")
+    @ApiOperation(value = "获取弹窗信息", notes = "获取弹窗信息")
+    public R<ForepartPopupVO> getPopup() {
+        return R.ok(promotionWishService.getPopup());
+    }
+
+    /**
+     * 求购历史
+     * @param page
+     * @return
+     */
+    @PostMapping("/wishHistory")
+    @ApiOperation(value = "求购历史")
+    public R<PageDTO<ForepartPromotionWishVO>> getWishHistory(@Valid @RequestBody BasePage page) {
+        return R.ok(promotionWishService.getWishHistory(page));
+    }
+
+    /**
+     * 发布求购
+     * @param dto
+     * @return
+     */
+    @PostMapping("/publish")
+    @ApiOperation(value = "发布求购")
+    public R<Long> publish(@Valid @RequestBody ForepartPromotionWishDTO dto) {
+        return R.ok(promotionWishService.publish(dto));
+    }
+
+    /**
+     * 心愿求购详情
+     * @param id
+     * @return
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "心愿求购详情")
+    public R<ForepartPromotionWishVO> getDetails(
+            @ApiParam(name = "id", value = "心愿求购id", required = true) @NotNull(message = "心愿求购id不能为空") @PathVariable("id") Long id) {
+        return R.ok(promotionWishService.getPromotionWishDetails(id));
+    }
+
+    /**
+     * 撤回求购
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "撤回心愿求购")
+    public R<?> delete(
+            @ApiParam(name = "id", value = "心愿求购id", required = true) @NotNull(message = "心愿求购id不能为空") @PathVariable("id") Long id) {
+        promotionWishService.deleteById(id);
+        return R.ok();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java
new file mode 100644
index 0000000..53b88a6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java
@@ -0,0 +1,29 @@
+package com.ruoyi.promotion.controller.forepart;
+
+
+import com.ruoyi.promotion.service.IPromotionWishListService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-16
+ */
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/forepart/promotion-wish-list")
+@Api(value = "【09.25】用户端-心愿求购相关接口", tags = "用户端-心愿求购相关接口", description = "用户端-心愿单相关接口")
+public class ForepartPromotionWishListController {
+
+    private final IPromotionWishListService promotionWishListService;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java
new file mode 100644
index 0000000..eb4bfa0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java
@@ -0,0 +1,19 @@
+package com.ruoyi.promotion.controller.forepart;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购平台推荐商品 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-10-29
+ */
+@RestController
+@RequestMapping("/promotion-wish-recommend")
+public class ForepartPromotionWishRecommendController {
+
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionWishListController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionWishListController.java
deleted file mode 100644
index 1266995..0000000
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionWishListController.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.ruoyi.promotion.controller.forepart;
-
-
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.system.api.domain.dto.PromotionWishListDTO;
-import com.ruoyi.promotion.domain.PromotionWishList;
-import com.ruoyi.promotion.service.IPromotionWishListService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import javax.annotation.Resource;
-import org.apache.poi.ss.formula.functions.T;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * <p>
- * 心愿求购表 前端控制器
- * </p>
- *
- * @author mitao
- * @since 2024-05-16
- */
-@RestController
-@RequestMapping("/forepart/promotion-wish-list")
-@Api(value = "用户端-心愿单相关接口", tags = "用户端-心愿单相关接口", description = "用户端-心愿单相关接口")
-public class FrepartPromotionWishListController {
-    @Resource
-    private IPromotionWishListService iPromotionWishListService;
-     @PostMapping("/getPromotionWishList")
-    @ApiOperation(value = "用户端-获取心愿单列表")
-    public R<PageDTO<PromotionWishList>> getPromotionWishList(@RequestBody PromotionWishListDTO promotionWishListDTO) {
-        return R.ok(iPromotionWishListService.getPromotionWishList(promotionWishListDTO));
-    }
-
-     @PostMapping("/savePromotionWishList")
-    @ApiOperation(value = "用户端-添加心愿单列表")
-    public R<T> savePromotionWishList(@RequestBody PromotionWishListDTO promotionWishListDTO) {
-        iPromotionWishListService.savePromotionWishList(promotionWishListDTO);
-        return R.ok();
-    }
-
-     @PostMapping("/getPromotionWishOne")
-    @ApiOperation(value = "用户端-获取心愿单个")
-    public R<PromotionWishList> getPromotionWishOne(@RequestBody PromotionWishListDTO promotionWishListDTO) {
-        return R.ok(iPromotionWishListService.getPromotionWishOne(promotionWishListDTO));
-    }
-
-     @PostMapping("/delPromotionWishOne")
-    @ApiOperation(value = "用户端-删除心愿单个")
-    public R<T> delPromotionWishOne(@RequestBody PromotionWishListDTO promotionWishListDTO) {
-        iPromotionWishListService.delPromotionWishOne(promotionWishListDTO);
-        return R.ok();
-    }
-}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java
new file mode 100644
index 0000000..a18dbe4
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.promotion.controller.forepart.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.Valid;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/30
+ */
+@Data
+@ApiModel(value = "用户端-心愿求购数据传输对象")
+public class ForepartPromotionWishDTO {
+
+    @ApiModelProperty(value = "联系方式")
+    private String phone;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "求购商品列表")
+    @Valid
+    private List<ForepartPromotionWishListDTO> wishList;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java
new file mode 100644
index 0000000..52305cb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.promotion.controller.forepart.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/30
+ */
+@Data
+@ApiModel(value = "心愿求购商品数据传输对象")
+public class ForepartPromotionWishListDTO {
+
+    @ApiModelProperty(value = "商品品牌")
+    @NotBlank(message = "商品品牌不能为空")
+    private String goodsBrand;
+
+    @ApiModelProperty(value = "商品名称")
+    @NotBlank(message = "商品名称不能为空")
+    private String goodsName;
+
+    @ApiModelProperty(value = "期望年份")
+    private String expectedYear;
+
+    @ApiModelProperty(value = "求购数量 1瓶 1箱")
+    private String goodsNum;
+
+    @ApiModelProperty(value = "商品图片,多张图片使用英文逗号拼接")
+    private String goodsImageUrl;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java
new file mode 100644
index 0000000..477933e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.promotion.controller.forepart.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/29
+ */
+@Data
+@ApiModel(value = "心愿求购弹窗视图对象")
+public class ForepartPopupVO {
+
+    @ApiModelProperty(value = "是否弹出 1:是 0:否")
+    private Integer showPopup;
+
+    @ApiModelProperty(value = "弹窗类型 1:恭喜您心愿达成 2:您有有心愿进行中")
+    private Integer popupType;
+
+    @ApiModelProperty(value = "未推荐心愿数量")
+    private Integer wishNum;
+
+    @ApiModelProperty(value = "推荐商品列表")
+    private List<ForepartPromotionWishRecommendVO> recommendList;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java
new file mode 100644
index 0000000..62e5be2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java
@@ -0,0 +1,35 @@
+package com.ruoyi.promotion.controller.forepart.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/29
+ */
+@Data
+@ApiModel(value = "首页弹幕数据视图对象")
+public class ForepartPromotionWishBulletVO {
+
+    @ApiModelProperty(value = "用户id")
+    private Long memberId;
+    
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "求购用户")
+    private String nickname;
+
+    @ApiModelProperty(value = "发起时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "期望年份")
+    private String expectedYear;
+
+    @ApiModelProperty(value = "求购商品")
+    private String goodsName;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java
new file mode 100644
index 0000000..95ede6a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.promotion.controller.forepart.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/30
+ */
+@Data
+public class ForepartPromotionWishListVO {
+
+    @ApiModelProperty(value = "心愿求购商品id")
+    private Long id;
+
+    @ApiModelProperty(value = "商品品牌")
+    private String goodsBrand;
+
+    @ApiModelProperty(value = "商品名称")
+    @NotBlank(message = "商品名称不能为空")
+    private String goodsName;
+
+    @ApiModelProperty(value = "期望年份")
+    private String expectedYear;
+
+    @ApiModelProperty(value = "求购数量")
+    private String goodsNum;
+
+    @ApiModelProperty(value = "商品图片,多张图片使用英文逗号拼接")
+    private String goodsImageUrl;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java
new file mode 100644
index 0000000..4625a6e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java
@@ -0,0 +1,33 @@
+package com.ruoyi.promotion.controller.forepart.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/29
+ */
+@Data
+public class ForepartPromotionWishRecommendVO {
+
+    @ApiModelProperty(value = "推荐商品id")
+    private Long id;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal sellingPrice;
+
+    @ApiModelProperty(value = "可购数量")
+    private Integer availableNum;
+
+    @ApiModelProperty(value = "商品图片")
+    private String goodsImageUrl;
+
+    @ApiModelProperty(value = "失效时间")
+    private LocalDateTime expireTime;
+
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java
new file mode 100644
index 0000000..b1bc046
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java
@@ -0,0 +1,45 @@
+package com.ruoyi.promotion.controller.forepart.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/30
+ */
+@Data
+@ApiModel(value = "用户端-心愿求购视图对象")
+public class ForepartPromotionWishVO {
+
+    @ApiModelProperty(value = "心愿求购id")
+    private Long id;
+
+    @ApiModelProperty(value = "用户id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "联系方式")
+    private String phone;
+
+    @ApiModelProperty(value = "推荐状态 0:未推荐商品 1:已推荐商品")
+    private Integer recommendStatus;
+
+    @ApiModelProperty(value = "求购商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "发布时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "推荐商品列表")
+    private List<ForepartPromotionWishRecommendVO> recommendList;
+
+    @ApiModelProperty(value = "求购商品列表")
+    private List<ForepartPromotionWishListVO> wishList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java
new file mode 100644
index 0000000..a568327
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.promotion.controller.inner;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.InnerAuth;
+import com.ruoyi.promotion.service.IPromotionWishRecommendService;
+import com.ruoyi.system.api.domain.PromotionWishRecommend;
+import lombok.RequiredArgsConstructor;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购平台推荐商品 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-10-29
+ */
+@RestController
+@RequestMapping("/inner/promotion-wish-recommend")
+@RequiredArgsConstructor
+public class PromotionWishRecommendController {
+
+    private final IPromotionWishRecommendService promotionWishRecommendService;
+
+    /**
+     *
+     * @param id
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/{id}")
+    public R<PromotionWishRecommend> getById(@PathVariable("id") Long id) {
+        return R.ok(promotionWishRecommendService.getById(id));
+    }
+
+    /**
+     * 扣减推荐商品库存
+     * @param goodsQuantity
+     * @param id
+     * @return
+     */
+    @InnerAuth
+    @PostMapping("/subAvailableNum")
+    R<Integer> subRecommendAvailableNum(@RequestParam("goodsQuantity") Integer goodsQuantity,
+            @RequestParam("id") Long id) {
+        return R.ok(promotionWishRecommendService.subRecommendAvailableNum(goodsQuantity, id));
+    }
+
+    /**
+     * 恢复荐商品可购数量
+     * @param goodsQuantity
+     * @param id
+     * @return
+     */
+    @InnerAuth
+    @PostMapping("/addAvailableNum")
+    R<?> addRecommendAvailableNum(@RequestParam("goodsQuantity") Integer goodsQuantity,
+            @RequestParam("id") Long id) {
+        promotionWishRecommendService.addRecommendAvailableNum(goodsQuantity, id);
+        return R.ok();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java
new file mode 100644
index 0000000..e18e475
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.promotion.controller.management;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishQuery;
+import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishRecommendDTO;
+import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishVO;
+import com.ruoyi.promotion.service.IPromotionWishService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-10-29
+ */
+@Validated
+@RestController
+@RequiredArgsConstructor
+@Api(tags = {"【09.25】管理后台心愿求购管理相关接口"})
+@RequestMapping("/mgt/promotion-wish")
+public class MgtPromotionWishController {
+
+    private final IPromotionWishService promotionWishService;
+
+    /**
+     * 获取心愿求购列表
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "获取心愿求购列表")
+    public R<PageDTO<MgtPromotionWishVO>> queryPage(
+            @Valid @RequestBody MgtPromotionWishQuery query) {
+        return R.ok(promotionWishService.queryPage(query));
+    }
+
+    /**
+     * 查看详情
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/{id}")
+    @ApiOperation(value = "查看详情")
+    public R<MgtPromotionWishVO> getDetails(
+            @ApiParam(name = "id", value = "心愿求购id", required = true) @NotNull(message = "心愿求购id不能为空") @PathVariable("id") Long id) {
+        return R.ok(promotionWishService.getDetails(id));
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除心愿求购")
+    public R<?> deleteById(
+            @ApiParam(name = "id", value = "心愿求购id", required = true) @NotNull(message = "心愿求购id不能为空") @PathVariable("id") Long id) {
+        promotionWishService.deleteById(id);
+        return R.ok();
+    }
+
+    /**
+     * 推荐商品
+     * @param dto
+     * @return
+     */
+    @PostMapping("/recommend")
+    @ApiOperation(value = "推荐商品")
+    public R<?> recommend(@Valid @RequestBody MgtPromotionWishRecommendDTO dto) {
+        promotionWishService.recommend(dto);
+        return R.ok();
+    }
+
+    /**
+     * 删除推荐商品
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/recommend/{id}")
+    @ApiOperation(value = "删除推荐商品")
+    public R<?> deleteRecommend(
+            @ApiParam(name = "id", value = "推荐商品id", required = true) @NotNull(message = "推荐商品id不能为空") @PathVariable("id") Long id) {
+        promotionWishService.deleteRecommend(id);
+        return R.ok();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java
index 0982f34..8b40de3 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java
@@ -1,23 +1,9 @@
 package com.ruoyi.promotion.controller.management;
 
 
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishListDTO;
-import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishListQuery;
-import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishListVO;
 import com.ruoyi.promotion.service.IPromotionWishListService;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-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;
 
@@ -37,54 +23,5 @@
 
     private final IPromotionWishListService promotionWishListService;
 
-    /**
-     * 获取心愿求购列表的分页数据
-     *
-     * @param query 心愿求购管理查询对象
-     * @return PageDTO<MgtPromotionWishListVO>
-     */
-    @ApiOperation("获取心愿求购列表的分页数据")
-    @PostMapping("page")
-    public R<PageDTO<MgtPromotionWishListVO>> getPromotionWishListPage(
-            @Validated @RequestBody MgtPromotionWishListQuery query) {
-        return R.ok(promotionWishListService.getPromotionWishListPage(query));
-    }
-
-    /**
-     * 查看详情
-     *
-     * @param id 心愿求购id
-     * @return MgtPromotionWishListVO
-     */
-    @ApiOperation("查看详情")
-    @GetMapping("/detail/{id}")
-    public R<MgtPromotionWishListVO> getPromotionWishDetail(
-            @ApiParam(value = "心愿求购id", required = true) @PathVariable("id") Long id) {
-        return R.ok(promotionWishListService.getPromotionWishDetail(id));
-    }
-
-    /**
-     * 回复
-     *
-     * @param dto 心愿求购数据传输对象
-     */
-    @ApiOperation("回复")
-    @PutMapping("/reply")
-    public R<?> reply(@Validated @RequestBody MgtPromotionWishListDTO dto) {
-        promotionWishListService.reply(dto);
-        return R.ok();
-    }
-
-    /**
-     * 删除
-     *
-     * @param id 心愿求购id
-     */
-    @ApiOperation("删除")
-    @DeleteMapping("/{id}")
-    public R<?> delete(
-            @ApiParam(name = "id", value = "心愿求购id", required = true) @PathVariable("id") Long id) {
-        promotionWishListService.removeById(id);
-        return R.ok();
-    }
+   
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java
new file mode 100644
index 0000000..2859ef4
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java
@@ -0,0 +1,19 @@
+package com.ruoyi.promotion.controller.management;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 心愿求购平台推荐商品 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-10-29
+ */
+@RestController
+@RequestMapping("/promotion-wish-recommend")
+public class MgtPromotionWishRecommendController {
+
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishListQuery.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java
similarity index 75%
rename from ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishListQuery.java
rename to ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java
index e2c8c35..6efaa16 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishListQuery.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java
@@ -1,6 +1,5 @@
 package com.ruoyi.promotion.controller.management.dto;
 
-import com.ruoyi.common.core.enums.ReplyStatusEnum;
 import com.ruoyi.common.core.web.page.BasePage;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -14,7 +13,7 @@
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "心愿求购管理查询对象", description = "心愿求购管理查询对象")
-public class MgtPromotionWishListQuery extends BasePage {
+public class MgtPromotionWishQuery extends BasePage {
 
     private static final long serialVersionUID = -2289707074791860720L;
 
@@ -24,6 +23,6 @@
     @ApiModelProperty(value = "联系电话")
     private String phone;
 
-    @ApiModelProperty(value = "回复状态 未回复 已回复")
-    private ReplyStatusEnum replyStatus;
+    @ApiModelProperty(value = "状态 0:未推荐商品 1:已推荐商品", notes = "全部不传")
+    private Integer recommendStatus;
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java
new file mode 100644
index 0000000..e7fb992
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java
@@ -0,0 +1,35 @@
+package com.ruoyi.promotion.controller.management.dto;
+
+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/10/29
+ */
+@Data
+@ApiModel(value = "推荐商品数据传输对象")
+public class MgtPromotionWishRecommendDTO {
+
+    @ApiModelProperty(value = "心愿求购id")
+    private Long wishId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal sellingPrice;
+
+    @ApiModelProperty(value = "可购数量")
+    private Integer availableNum;
+
+    @ApiModelProperty(value = "商品图片")
+    private String goodsImageUrl;
+
+    @ApiModelProperty(value = "失效时间")
+    private LocalDateTime expireTime;
+
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java
index 2e23de9..a6fc076 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java
@@ -1,62 +1,35 @@
 package com.ruoyi.promotion.controller.management.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.common.core.enums.ReplyStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 /**
- * <p>
- * 心愿求购表
- * </p>
- *
  * @author mitao
- * @since 2024-05-16
+ * @date 2024/10/29
  */
 @Data
-@EqualsAndHashCode(callSuper = false)
-@ApiModel(value = "管理后台-心愿求购视图对象", description = "管理后台-心愿求购视图对象")
-public class MgtPromotionWishListVO implements Serializable {
+@ApiModel(value = "管理后台-心愿求购商品视图对象")
+public class MgtPromotionWishListVO {
 
-    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "心愿求购商品id")
+    private Long id;
 
     @ApiModelProperty(value = "心愿求购id")
-    private Long id;
+    private Long wishId;
+
+    @ApiModelProperty(value = "商品品牌")
+    private String goodsBrand;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
 
-    @ApiModelProperty(value = "期望价格")
-    private BigDecimal expectedPrice;
+    @ApiModelProperty(value = "期望年份")
+    private String expectedYear;
 
-    @ApiModelProperty(value = "商品图片 ['a','b','c','d','e']")
+    @ApiModelProperty(value = "求购数量")
+    private String goodsNum;
+
+    @ApiModelProperty(value = "商品图片,多张图片使用英文逗号拼接")
     private String goodsImageUrl;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-    @ApiModelProperty(value = "平台回复")
-    private String replies;
-
-    @ApiModelProperty(value = "回复状态 0未回复 1已回复")
-    private ReplyStatusEnum replyStatus;
-
-    @ApiModelProperty(value = "创建时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "会员id")
-    private Long memberId;
-
-    @ApiModelProperty(value = "会员昵称")
-    private String nickname;
-
-    @ApiModelProperty(value = "联系电话")
-    private String phone;
-
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java
new file mode 100644
index 0000000..33e7975
--- /dev/null
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java
@@ -0,0 +1,55 @@
+package com.ruoyi.promotion.controller.management.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 心愿求购表
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "管理后台-心愿求购视图对象", description = "管理后台-心愿求购视图对象")
+public class MgtPromotionWishVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "心愿求购id")
+    private Long id;
+
+    @ApiModelProperty(value = "求购用户")
+    private String nickname;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "状态 0:未推荐商品 1:已推荐商品")
+    private Integer recommendStatus;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "发起时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "求购商品列表")
+    private List<MgtPromotionWishListVO> wishListVOList;
+
+    @ApiModelProperty(value = "推荐商品列表")
+    private List<MgtPromotionWishRecommendVO> recommendListVOList;
+}
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java
index fc28275..887b243 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java
@@ -6,11 +6,9 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.ruoyi.common.core.enums.ReplyStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -33,27 +31,27 @@
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "心愿求购id")
+    @ApiModelProperty(value = "心愿求购商品id")
     @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
+
+    @ApiModelProperty(value = "心愿求购id")
+    private Long wishId;
+
+    @ApiModelProperty(value = "商品品牌")
+    private String goodsBrand;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
 
-    @ApiModelProperty(value = "期望价格")
-    private BigDecimal expectedPrice;
+    @ApiModelProperty(value = "期望年份")
+    private String expectedYear;
 
-    @ApiModelProperty(value = "商品图片 ['a','b','c','d','e']")
+    @ApiModelProperty(value = "求购数量 1瓶 1箱")
+    private String goodsNum;
+
+    @ApiModelProperty(value = "商品图片,多张图片使用英文逗号拼接")
     private String goodsImageUrl;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-    @ApiModelProperty(value = "平台回复")
-    private String replies;
-
-    @ApiModelProperty(value = "回复状态 0未回复 1已回复")
-    private ReplyStatusEnum replyStatus;
 
     @ApiModelProperty(value = "创建者")
     @TableField(value = "create_by", fill = FieldFill.INSERT)
@@ -74,9 +72,4 @@
     @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
     @TableLogic
     private Integer delFlag;
-
-    @ApiModelProperty(value = "会员id")
-    @TableField(value = "member_id")
-    private  Long memberId;
-
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java
index f78c710..6ebeb1b 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java
@@ -1,12 +1,7 @@
 package com.ruoyi.promotion.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishListDTO;
-import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishListQuery;
-import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishListVO;
 import com.ruoyi.promotion.domain.PromotionWishList;
-import com.ruoyi.system.api.domain.dto.PromotionWishListDTO;
 
 /**
  * <p>
@@ -18,32 +13,5 @@
  */
 public interface IPromotionWishListService extends IService<PromotionWishList> {
 
-    PageDTO<PromotionWishList> getPromotionWishList(PromotionWishListDTO promotionWishListDTO);
-    PromotionWishList getPromotionWishOne(PromotionWishListDTO promotionWishListDTO);
-    void savePromotionWishList(PromotionWishListDTO promotionWishListDTO);
 
-   void delPromotionWishOne(PromotionWishListDTO promotionWishListDTO);
-
-    /**
-     * 获取心愿求购列表的分页数据
-     *
-     * @param query 心愿求购管理查询对象
-     * @return PageDTO<MgtPromotionWishListVO>
-     */
-    PageDTO<MgtPromotionWishListVO> getPromotionWishListPage(MgtPromotionWishListQuery query);
-
-    /**
-     * 查看详情
-     *
-     * @param id 心愿求购id
-     * @return MgtPromotionWishListVO
-     */
-    MgtPromotionWishListVO getPromotionWishDetail(Long id);
-
-    /**
-     * 回复
-     *
-     * @param dto 心愿求购数据传输对象
-     */
-    void reply(MgtPromotionWishListDTO dto);
 }
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java
index f5afd23..060420f 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java
@@ -1,30 +1,10 @@
 package com.ruoyi.promotion.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.collect.Lists;
-import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.enums.ReplyStatusEnum;
-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.promotion.controller.management.dto.MgtPromotionWishListDTO;
-import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishListQuery;
-import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishListVO;
 import com.ruoyi.promotion.domain.PromotionWishList;
 import com.ruoyi.promotion.mapper.PromotionWishListMapper;
 import com.ruoyi.promotion.service.IPromotionWishListService;
-import com.ruoyi.system.api.domain.Member;
-import com.ruoyi.system.api.domain.dto.MemberDTO;
-import com.ruoyi.system.api.domain.dto.PromotionWishListDTO;
 import com.ruoyi.system.api.feignClient.MemberClient;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -42,140 +22,5 @@
 
     private final MemberClient memberClient;
 
-    @Override
-    public PageDTO<PromotionWishList> getPromotionWishList(PromotionWishListDTO promotionWishListDTO) {
 
-        Page<PromotionWishList> page = new Page<>(promotionWishListDTO.getPageCurr(), promotionWishListDTO.getPageSize());
-        LambdaQueryWrapper<PromotionWishList> wrapper= Wrappers.lambdaQuery();
-        wrapper.eq(PromotionWishList::getMemberId,promotionWishListDTO.getMemberId());
-        wrapper.orderByDesc(PromotionWishList::getCreateTime);
-        Page<PromotionWishList> page1 = this.page(page, wrapper);
-        return PageDTO.of(page1);
-    }
-
-    @Override
-    public void savePromotionWishList(PromotionWishListDTO promotionWishListDTO) {
-        PromotionWishList promotionWishList=new PromotionWishList();
-        promotionWishList.setExpectedPrice(promotionWishListDTO.getExpectedPrice());
-        promotionWishList.setGoodsName(promotionWishListDTO.getGoodsName());
-        promotionWishList.setRemark(promotionWishListDTO.getRemark());
-        promotionWishList.setGoodsImageUrl(promotionWishListDTO.getGoodsImageUrl());
-        promotionWishList.setMemberId(promotionWishListDTO.getMemberId());
-        this.save(promotionWishList);
-    }
-
-    @Override
-    public void delPromotionWishOne(PromotionWishListDTO promotionWishListDTO) {
-        this.removeById(promotionWishListDTO.getRomotionWishId());
-    }
-
-    @Override
-    public PromotionWishList getPromotionWishOne(PromotionWishListDTO promotionWishListDTO) {
-        LambdaQueryWrapper<PromotionWishList> wrapper= Wrappers.lambdaQuery();
-        wrapper.eq(PromotionWishList::getId,promotionWishListDTO.getRomotionWishId());
-        wrapper.eq(PromotionWishList::getDelFlag,0);
-        return this.getOne(wrapper);
-    }
-
-    /**
-     * 获取心愿求购列表的分页数据
-     *
-     * @param query 心愿求购管理查询对象
-     * @return PageDTO<MgtPromotionWishListVO>
-     */
-    @Override
-    public PageDTO<MgtPromotionWishListVO> getPromotionWishListPage(
-            MgtPromotionWishListQuery query) {
-        // 封装会员条件查询对象
-        MemberDTO memberDTO = null;
-        Set<Long> memberIdSet = null;
-        Page<PromotionWishList> page = new Page<>(query.getPageCurr(), query
-                .getPageSize());
-        if (StringUtils.isNotBlank(query.getNickname()) || StringUtils.isNotBlank(
-                query.getPhone())) {
-            memberDTO = new MemberDTO();
-            memberDTO.setNickname(query.getNickname());
-            memberDTO.setPhone(query.getPhone());
-        }
-        if (StringUtils.isNotNull(memberDTO)) {
-            // 远程调用会员服务进行条件查询
-            List<Member> memberList = memberClient.getMemberListByCondition(memberDTO,
-                    SecurityConstants.INNER).getData();
-            if (StringUtils.isEmpty(memberList)) {
-                return PageDTO.empty(page);
-            }
-            memberIdSet = memberList.stream().map(Member::getId)
-                    .collect(Collectors.toSet());
-        }
-
-        // 分页查询心愿求购列表
-        page = this.lambdaQuery()
-                .eq(StringUtils.isNotNull(query.getReplyStatus()),
-                        PromotionWishList::getReplyStatus, query.getReplyStatus())
-                .in(StringUtils.isNotEmpty(memberIdSet), PromotionWishList::getMemberId,
-                        memberIdSet).orderByDesc(PromotionWishList::getCreateTime).page(page);
-        if (StringUtils.isEmpty(page.getRecords())) {
-            return PageDTO.empty(page);
-        }
-        // 封装VO
-        PageDTO<MgtPromotionWishListVO> pageVO = PageDTO.of(page,
-                MgtPromotionWishListVO.class);
-        List<MgtPromotionWishListVO> MgtPromotionWishListVOList = pageVO.getList();
-        Set<Long> memberIdSets = MgtPromotionWishListVOList.stream()
-                .map(MgtPromotionWishListVO::getMemberId)
-                .collect(Collectors.toSet());
-        if (StringUtils.isNotEmpty(memberIdSets)) {
-            List<Member> data = memberClient.getMemberListByIds(memberIdSets,
-                    SecurityConstants.INNER).getData();
-            if (StringUtils.isNotEmpty(data)) {
-                Map<Long, Member> memberMap = data.stream()
-                        .collect(Collectors.toMap(Member::getId, member -> member));
-                for (MgtPromotionWishListVO mgtPromotionWishListVO : MgtPromotionWishListVOList) {
-                    Member member = memberMap.get(mgtPromotionWishListVO.getMemberId());
-                    if (StringUtils.isNotNull(member)) {
-                        mgtPromotionWishListVO.setNickname(member.getNickname());
-                        mgtPromotionWishListVO.setPhone(member.getPhone());
-                    }
-                }
-            }
-        }
-        return pageVO;
-    }
-
-    /**
-     * 查看详情
-     *
-     * @param id 心愿求购id
-     * @return MgtPromotionWishListVO
-     */
-    @Override
-    public MgtPromotionWishListVO getPromotionWishDetail(Long id) {
-        PromotionWishList promotionWishList = this.getById(id);
-        if (StringUtils.isNull(promotionWishList)) {
-            throw new ServiceException("该心愿求购不存在");
-        }
-        MgtPromotionWishListVO mgtPromotionWishListVO = BeanUtils.copyBean(promotionWishList,
-                MgtPromotionWishListVO.class);
-        List<Member> data = memberClient.getMemberListByIds(
-                Lists.newArrayList(promotionWishList.getMemberId()),
-                SecurityConstants.INNER).getData();
-        if (StringUtils.isNotEmpty(data)) {
-            mgtPromotionWishListVO.setPhone(data.get(0).getPhone());
-            mgtPromotionWishListVO.setNickname(data.get(0).getNickname());
-        }
-        return mgtPromotionWishListVO;
-    }
-
-    /**
-     * 回复
-     *
-     * @param dto 心愿求购数据传输对象
-     */
-    @Override
-    public void reply(MgtPromotionWishListDTO dto) {
-        PromotionWishList promotionWishList = this.getById(dto.getId());
-        promotionWishList.setReplies(dto.getReplies());
-        promotionWishList.setReplyStatus(ReplyStatusEnum.REPLIED);
-        this.updateById(promotionWishList);
-    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java
index ba8ec76..71872ff 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java
@@ -8,12 +8,14 @@
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.domain.dto.PointsConfigDTO;
 import com.ruoyi.system.domain.vo.CustomConfigVO;
+import com.ruoyi.system.domain.vo.WishSettingVO;
 import com.ruoyi.system.service.ICustomConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -31,6 +33,7 @@
  * @author mitao
  * @since 2024-05-21
  */
+@Validated
 @RestController
 @RequestMapping("/custom-config")
 @Api(value = "系统配置接口", tags = "系统配置接口")
@@ -153,4 +156,27 @@
         iCustomConfigService.deleteServicePhone(phone);
         return R.ok();
     }
+
+    /**
+     * 获取心愿求购说明
+     *
+     * @return
+     */
+    @ApiOperation("获取心愿求购说明、分享配置")
+    @GetMapping("/wish-setting")
+    public R<WishSettingVO> getWishSetting() {
+        return R.ok(iCustomConfigService.getWishSetting());
+    }
+
+    /**
+     * 保存心愿求购设置
+     *
+     * @param vo 保存心愿求购设置
+     */
+    @ApiOperation(value = "保存心愿设置")
+    @PostMapping("/save-wish-setting")
+    public R<?> saveWishDescription(@Valid @RequestBody WishSettingVO vo) {
+        iCustomConfigService.saveWishDescription(vo);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java
new file mode 100644
index 0000000..1a22d39
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/10/30
+ */
+@Data
+@ApiModel(value = "心愿求购基础设置视图对象")
+public class WishSettingVO {
+
+    @ApiModelProperty(value = "说明")
+    @NotBlank(message = "说明不能为空")
+    private String description;
+
+    @ApiModelProperty(value = "分享标题")
+    @NotBlank(message = "分享标题不能为空")
+    private String shareTitle;
+
+    @ApiModelProperty(value = "分享图片")
+    @NotBlank(message = "分享图片不能为空")
+    private String shareImgUrl;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
index d33fffd..ac18647 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
@@ -7,12 +7,10 @@
 import com.ruoyi.system.api.constants.DelayTaskEnum;
 import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
+import com.ruoyi.system.api.feignClient.OrderClient;
 import java.util.Date;
 import javax.annotation.Resource;
-
-import com.ruoyi.system.api.feignClient.OrderClient;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.annotation.Order;
 import org.springframework.data.redis.connection.Message;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
index edbfbd1..050ffda 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
@@ -5,6 +5,7 @@
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.domain.dto.PointsConfigDTO;
 import com.ruoyi.system.domain.vo.CustomConfigVO;
+import com.ruoyi.system.domain.vo.WishSettingVO;
 
 /**
  * <p>
@@ -79,4 +80,19 @@
      * @param phone 客服电话
      */
     void deleteServicePhone(String phone);
+
+    /**
+     * 获取心愿求购设置
+     *
+     * @return
+     */
+    WishSettingVO getWishSetting();
+
+    /**
+     * 保存心愿求购设置
+     *
+     * @param vo 保存心愿求购设置
+     */
+    void saveWishDescription(WishSettingVO vo);
+
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java
index a8c1ab7..ad6c4d3 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java
@@ -10,6 +10,7 @@
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.domain.dto.PointsConfigDTO;
 import com.ruoyi.system.domain.vo.CustomConfigVO;
+import com.ruoyi.system.domain.vo.WishSettingVO;
 import com.ruoyi.system.mapper.CustomConfigMapper;
 import com.ruoyi.system.service.ICustomConfigService;
 import java.math.BigDecimal;
@@ -265,4 +266,72 @@
             }
         }
     }
+
+    /**
+     * 获取心愿求购设置
+     *
+     * @return
+     */
+    @Override
+    public WishSettingVO getWishSetting() {
+        WishSettingVO vo = new WishSettingVO();
+        CustomConfig customConfig = getCustomConfigByKey(
+                ConfigEnum.WISH_DESCRIPTION.getKey()).orElse(new CustomConfig());
+        List<CustomConfig> list = this.lambdaQuery()
+                .in(CustomConfig::getConfigKey, ConfigEnum.WISH_DESCRIPTION.getKey(),
+                        ConfigEnum.WISH_SHARE_TITLE.getKey(),
+                        ConfigEnum.WISH_SHARE_IMG_URL.getKey())
+                .eq(CustomConfig::getDelFlag, 0).list();
+        for (CustomConfig config : list) {
+            if (ConfigEnum.WISH_DESCRIPTION.getKey().equals(config.getConfigKey())) {
+                vo.setDescription(customConfig.getConfigValue());
+            } else if (ConfigEnum.WISH_SHARE_TITLE.getKey().equals(config.getConfigKey())) {
+                vo.setShareTitle(config.getConfigValue());
+            } else if (ConfigEnum.WISH_SHARE_IMG_URL.getKey().equals(config.getConfigKey())) {
+                vo.setShareImgUrl(config.getConfigValue());
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 保存心愿求购说明
+     *
+     * @param vo 保存心愿求购说明
+     */
+    @Override
+    public void saveWishDescription(WishSettingVO vo) {
+        String description = vo.getDescription();
+        String shareTitle = vo.getShareTitle();
+        String shareImgUrl = vo.getShareImgUrl();
+        CustomConfig wishDescription = getCustomConfigByKey(
+                ConfigEnum.WISH_DESCRIPTION.getKey()).orElseGet(() -> {
+            CustomConfig customConfig = new CustomConfig();
+            customConfig.setConfigKey(ConfigEnum.WISH_DESCRIPTION.getKey());
+            customConfig.setConfigName(ConfigEnum.WISH_DESCRIPTION.getKeyName());
+            customConfig.setConfigType(ConfigEnum.WISH_DESCRIPTION.getKeyType());
+            return customConfig;
+        });
+        wishDescription.setConfigValue(description);
+        CustomConfig wishShareTitle = getCustomConfigByKey(
+                ConfigEnum.WISH_SHARE_TITLE.getKey()).orElseGet(() -> {
+            CustomConfig customConfig = new CustomConfig();
+            customConfig.setConfigKey(ConfigEnum.WISH_SHARE_TITLE.getKey());
+            customConfig.setConfigName(ConfigEnum.WISH_SHARE_TITLE.getKeyName());
+            customConfig.setConfigType(ConfigEnum.WISH_SHARE_TITLE.getKeyType());
+            return customConfig;
+        });
+        wishShareTitle.setConfigValue(shareTitle);
+        CustomConfig wishShareImgUrl = getCustomConfigByKey(
+                ConfigEnum.WISH_SHARE_IMG_URL.getKey()).orElseGet(() -> {
+            CustomConfig customConfig = new CustomConfig();
+            customConfig.setConfigKey(ConfigEnum.WISH_SHARE_IMG_URL.getKey());
+            customConfig.setConfigName(ConfigEnum.WISH_SHARE_IMG_URL.getKeyName());
+            customConfig.setConfigType(ConfigEnum.WISH_SHARE_IMG_URL.getKeyType());
+            return customConfig;
+        });
+        wishShareImgUrl.setConfigValue(shareImgUrl);
+        saveOrUpdateBatch(
+                Lists.newArrayList(wishDescription, wishShareTitle, wishShareImgUrl));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
index 703e36c..4dfcf15 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -17,13 +17,13 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.188:8848
+        server-addr: 127.0.0.1:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
       config:
         # 配置中心地址
-        server-addr: 192.168.110.188:8848
+        server-addr: 127.0.0.1:8848
         namespace: 689e0f09-d102-460c-ac5c-5ea50a3174be
         group: DEFAULT_GROUP
         name: ${spring.application.name}

--
Gitblit v1.7.1