mitao
2024-11-01 a53a1f481278f981bab8030853b353a823a9cd81
09.25心愿求购新增
2 文件已重命名
25个文件已修改
1个文件已删除
17个文件已添加
1542 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/ConfigEnum.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderDTO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderListVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/domain/R.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderFromEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartOrderController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionWishListController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishListController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishListVO.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWishList.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishListService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishListServiceImpl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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=拍卖会拍品")
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")
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;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPromotionWishRecommendVO.java
New file
@@ -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;
}
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;
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());
            }
        };
    }
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());
            }
        };
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);
}
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);
}
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)
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
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));
    }
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));
    }
}
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);
}
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;
    }
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionVideoController.java
File was renamed from ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionVideoController.java
@@ -14,7 +14,7 @@
 */
@RestController
@RequestMapping("/forepart/promotion-video")
public class FrepartPromotionVideoController {
public class ForepartPromotionVideoController {
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishController.java
New file
@@ -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();
    }
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishListController.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/ForepartPromotionWishRecommendController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/FrepartPromotionWishListController.java
File was deleted
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishDTO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/dto/ForepartPromotionWishListDTO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPopupVO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishBulletVO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishListVO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishRecommendVO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/ForepartPromotionWishVO.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/inner/PromotionWishRecommendController.java
New file
@@ -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();
    }
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishController.java
New file
@@ -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();
    }
}
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();
    }
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtPromotionWishRecommendController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishQuery.java
File was renamed from ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishListQuery.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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/dto/MgtPromotionWishRecommendDTO.java
New file
@@ -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;
}
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;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/MgtPromotionWishVO.java
New file
@@ -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;
}
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;
}
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);
}
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);
    }
}
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();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/WishSettingVO.java
New file
@@ -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;
}
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;
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);
}
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));
    }
}
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}