Pu Zhibing
2024-11-29 2ccdf86ac2599562ca994bc4047ded2d925e8bae
开发确认购物车订单逻辑
1 文件已重命名
28个文件已修改
15个文件已添加
1162 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java 307 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.account.api.factory;
import com.ruoyi.account.api.feignClient.UserAddressClient;
import com.ruoyi.account.api.model.UserAddress;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FallbackFactory;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 11:55
 */
public class UserAddressClientFallbackFactory implements FallbackFactory<UserAddressClient> {
    @Override
    public UserAddressClient create(Throwable cause) {
        return new UserAddressClient(){
            @Override
            public R<UserAddress> getDefaultUserAddress(Long userId) {
                return R.fail("获取用户默认地址失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.account.api.factory;
import com.ruoyi.account.api.feignClient.UserCouponClient;
import com.ruoyi.account.api.vo.CouponInfoVo;
import com.ruoyi.account.api.vo.PaymentUserCoupon;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 14:23
 */
public class UserCouponClientFallbackFactory implements FallbackFactory<UserCouponClient> {
    @Override
    public UserCouponClient create(Throwable cause) {
        return new UserCouponClient() {
            @Override
            public R<List<CouponInfoVo>> getPaymentUserCoupon(PaymentUserCoupon paymentUserCoupon) {
                return R.fail("根据id获取优惠券数据失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.account.api.feignClient;
import com.ruoyi.account.api.factory.UserAddressClientFallbackFactory;
import com.ruoyi.account.api.model.UserAddress;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 11:54
 */
@FeignClient(contextId = "UserAddressClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = UserAddressClientFallbackFactory.class)
public interface UserAddressClient {
    /**
     * 获取用户默认地址
     * @param userId
     * @return
     */
    @PostMapping("/user-address/getDefaultUserAddress")
    R<UserAddress> getDefaultUserAddress(@RequestParam("userId") Long userId);
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.account.api.feignClient;
import com.ruoyi.account.api.factory.UserCouponClientFallbackFactory;
import com.ruoyi.account.api.vo.CouponInfoVo;
import com.ruoyi.account.api.vo.PaymentUserCoupon;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 14:22
 */
@FeignClient(contextId = "UserCouponClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = UserCouponClientFallbackFactory.class)
public interface UserCouponClient {
    /**
     * 根据id获取优惠券数据
     * @param paymentUserCoupon
     * @return
     */
    @PostMapping("/user-coupon/getPaymentUserCoupon")
    R<List<CouponInfoVo>> getPaymentUserCoupon(@RequestBody PaymentUserCoupon paymentUserCoupon);
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
File was renamed from ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/CouponInfoVo.java
@@ -1,4 +1,4 @@
package com.ruoyi.order.vo;
package com.ruoyi.account.api.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.account.api.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 14:32
 */
@Data
public class PaymentUserCoupon {
    /**
     * 用户id
     */
    private Long userId;
    /**
     * 订单金额
     */
    private BigDecimal orderMoney;
    /**
     * 商品类型(1=服务,2=实体商品)
     */
    private Integer type;
}
ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1,3 @@
com.ruoyi.account.api.factory.AppUserClientFallbackFactory
com.ruoyi.account.api.factory.UserAddressClientFallbackFactory
com.ruoyi.account.api.factory.UserCouponClientFallbackFactory
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.BaseSetting;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.api.feignClient.BaseSettingClient;
import com.ruoyi.other.api.feignClient.ShopClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
@Slf4j
public class BaseSettingClientFallbackFactory implements FallbackFactory<BaseSettingClient> {
    @Override
    public BaseSettingClient create(Throwable cause) {
        return new BaseSettingClient(){
            @Override
            public R<BaseSetting> getBaseSetting(Integer id) {
                return R.fail("获取基础配置失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.CouponInfo;
import com.ruoyi.other.api.feignClient.CouponInfoClient;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 14:37
 */
public class CouponInfoClientFallbackFactory implements FallbackFactory<CouponInfoClient> {
    @Override
    public CouponInfoClient create(Throwable cause) {
        return new CouponInfoClient() {
            @Override
            public R<List<CouponInfo>> getCouponInfoList(List<Integer> ids) {
                return R.fail("根据id集合获取优惠券数据失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java
@@ -24,6 +24,11 @@
            public R<List<Goods>> getGoodsByType(Integer type) {
                return R.fail("根据类型(1=服务商品,2=单品商品)获取商品数据失败:" + cause.getMessage());
            }
            @Override
            public R<Goods> getGoodsById(Integer id) {
                return R.fail("根据id获取商品详情失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.OrderActivityInfo;
import com.ruoyi.other.api.feignClient.OrderActivityInfoClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
@Slf4j
public class OrderActivityInfoClientFallbackFactory implements FallbackFactory<OrderActivityInfoClient> {
    @Override
    public OrderActivityInfoClient create(Throwable cause) {
        return new OrderActivityInfoClient(){
            @Override
            public R<OrderActivityInfo> getNowOrderActivityInfo(Integer vip) {
                return R.fail("获取当前生效的活动失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java
@@ -5,9 +5,10 @@
import com.ruoyi.other.api.feignClient.SeckillActivityInfoClient;
import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
@Slf4j
public class SeckillActivityInfoClientFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<SeckillActivityInfoClient> {
public class SeckillActivityInfoClientFallbackFactory implements FallbackFactory<SeckillActivityInfoClient> {
    @Override
    public SeckillActivityInfoClient create(Throwable cause) {
        return new SeckillActivityInfoClient(){
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.api.feignClient.ShopClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
@Slf4j
public class ShopClientFallbackFactory implements FallbackFactory<ShopClient> {
    @Override
    public ShopClient create(Throwable cause) {
        return new ShopClient(){
            @Override
            public R<Shop> getShopById(Integer id) {
                return R.fail("根据id获取门店信息失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.SystemConfig;
import com.ruoyi.other.api.feignClient.SystemConfigClient;
import org.springframework.cloud.openfeign.FallbackFactory;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 15:58
 */
public class SystemConfigClientFallbackFactory implements FallbackFactory<SystemConfigClient> {
    @Override
    public SystemConfigClient create(Throwable cause) {
        return new SystemConfigClient() {
            @Override
            public R<SystemConfig> getSystemConfig(Integer type) {
                return R.fail("根据类型获取系统配置失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.BaseSetting;
import com.ruoyi.other.api.factory.BaseSettingClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 11:34
 */
@FeignClient(contextId = "BaseSettingClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = BaseSettingClientFallbackFactory.class)
public interface BaseSettingClient {
    /**
     * 获取基础配置
     * @param id
     * @return
     */
    @PostMapping("/base-setting/getBaseSetting")
    R<BaseSetting> getBaseSetting(@RequestParam("id") Integer id);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.CouponInfo;
import com.ruoyi.other.api.factory.CouponInfoClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 14:36
 */
@FeignClient(contextId = "CouponInfoClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = CouponInfoClientFallbackFactory.class)
public interface CouponInfoClient {
    /**
     * 根据id集合获取优惠券数据
     * @param ids
     * @return
     */
    @PostMapping("/coupon-info/getCouponInfoList")
    R<List<CouponInfo>> getCouponInfoList(@RequestParam("ids") List<Integer> ids);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java
@@ -26,4 +26,12 @@
    @PostMapping("/goods/getGoodsByType")
    R<List<Goods>> getGoodsByType(@RequestParam("type") Integer type);
    
    /**
     * 根据id获取商品详情
     * @param id
     * @return
     */
    @PostMapping("/goods/getGoodsById")
    R<Goods> getGoodsById(@RequestParam("id") Integer id);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.OrderActivityInfo;
import com.ruoyi.other.api.factory.OrderActivityInfoClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 10:55
 */
@FeignClient(contextId = "OrderActivityInfoClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = OrderActivityInfoClientFallbackFactory.class)
public interface OrderActivityInfoClient {
    /**
     * 获取当前生效的活动
     * @param vip
     * @return
     */
    @PostMapping("/order-activity-info/getNowOrderActivityInfo")
    R<OrderActivityInfo> getNowOrderActivityInfo(@RequestParam("vip") Integer vip);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.api.factory.ShopClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 10:28
 */
@FeignClient(contextId = "ShopClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = ShopClientFallbackFactory.class)
public interface ShopClient {
    /**
     * 根据id获取门店信息
     * @param id
     * @return
     */
    @PostMapping("/shop/getShopById")
    R<Shop> getShopById(@RequestParam("id") Integer id);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.SystemConfig;
import com.ruoyi.other.api.factory.SystemConfigClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @author zhibing.pu
 * @Date 2024/11/29 15:58
 */
@FeignClient(contextId = "SystemConfigClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = SystemConfigClientFallbackFactory.class)
public interface SystemConfigClient {
    /**
     * 根据类型获取系统配置
     * @param type
     * @return
     */
    @PostMapping("/system-config/getSystemConfig")
    R<SystemConfig> getSystemConfig(@RequestParam("type") Integer type);
}
ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -5,3 +5,8 @@
com.ruoyi.other.api.factory.SeckillActivityInfoClientFallbackFactory
com.ruoyi.other.api.factory.GoodsBargainPriceClientFallbackFactory
com.ruoyi.other.api.factory.RemoteVipSettingFallbackFactory
com.ruoyi.other.api.factory.ShopClientFallbackFactory
com.ruoyi.other.api.factory.OrderActivityInfoClientFallbackFactory
com.ruoyi.other.api.factory.BaseSettingClientFallbackFactory
com.ruoyi.other.api.factory.CouponInfoClientFallbackFactory
com.ruoyi.other.api.factory.SystemConfigClientFallbackFactory
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java
@@ -4,28 +4,24 @@
import java.util.Objects;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 操作消息提醒
 * 
 * @author ruoyi
 */
@ApiModel
public class AjaxResult<T> extends HashMap {
public class AjaxResult<T> extends HashMap<String, Object>
{
    private static final long serialVersionUID = 1L;
    /** 状态码 */
    @ApiModelProperty("状态码")
    private int code;
    public static final String CODE_TAG = "code";
    /** 返回内容 */
    @ApiModelProperty("描述内容")
    private String msg = "";
    public static final String MSG_TAG = "msg";
    /** 数据对象 */
    @ApiModelProperty("结果集")
    private T data;
    public static final String DATA_TAG = "data";
    /**
     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
@@ -42,8 +38,8 @@
     */
    public AjaxResult(int code, String msg)
    {
        this.code = code;
        this.msg = msg;
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
    }
    /**
@@ -53,12 +49,12 @@
     * @param msg 返回内容
     * @param data 数据对象
     */
    public AjaxResult(int code, String msg, T data)
    public AjaxResult(int code, String msg, Object data)
    {
        this.code = code;
        this.msg = msg;
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
        if (StringUtils.isNotNull(data)) {
            this.data = data;
            super.put(DATA_TAG, data);
        }
    }
@@ -185,7 +181,7 @@
     */
    public boolean isSuccess()
    {
        return Objects.equals(HttpStatus.SUCCESS, this.code);
        return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
    }
    /**
@@ -199,4 +195,19 @@
    }
    /**
     * 方便链式调用
     *
     * @param key
     * @param value
     * @return
     */
    @Override
    public AjaxResult put(String key, Object value)
    {
        super.put(key, value);
        return this;
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -4,8 +4,8 @@
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.vo.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -39,7 +39,7 @@
    @ResponseBody
    @PostMapping("/appletLogin")
    @ApiOperation(value = "小程序一键登录")
    public AjaxResult<LoginVo> appletLogin(@RequestBody AppletLogin appletLogin){
    public R<LoginVo> appletLogin(@RequestBody AppletLogin appletLogin){
        return appUserService.appletLogin(appletLogin);
    }
    
@@ -47,7 +47,7 @@
    @ResponseBody
    @PostMapping("/mobileLogin")
    @ApiOperation(value = "手机号登录")
    public AjaxResult<LoginVo> mobileLogin(@RequestBody MobileLogin mobileLogin){
    public R<LoginVo> mobileLogin(@RequestBody MobileLogin mobileLogin){
        return appUserService.mobileLogin(mobileLogin);
    }
    
@@ -56,7 +56,7 @@
    @ResponseBody
    @PostMapping("/getSMSCode")
    @ApiOperation(value = "获取短信验证码")
    public AjaxResult getSMSCode(@RequestBody SMSCode smsCode){
    public R getSMSCode(@RequestBody SMSCode smsCode){
        return appUserService.getSMSCode(smsCode);
    }
    
@@ -65,7 +65,7 @@
    @ResponseBody
    @PostMapping("/registerAccount")
    @ApiOperation(value = "注册新账号")
    public AjaxResult<LoginVo> registerAccount(@RequestBody RegisterAccount registerAccount){
    public R<LoginVo> registerAccount(@RequestBody RegisterAccount registerAccount){
        return appUserService.registerAccount(registerAccount);
    }
    
@@ -76,11 +76,11 @@
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "推荐人id", required = true, dataType = "long")
    })
    public AjaxResult<String> getReferrer(@PathVariable("id") Long id){
    public R<String> getReferrer(@PathVariable("id") Long id){
        AppUser appUser = appUserService.getById(id);
        String phone = appUser.getPhone();
        phone = phone.substring(0, 3) + "****" + phone.substring(7);
        return AjaxResult.success(appUser.getName() + "-" + phone);
        return R.ok(appUser.getName() + "-" + phone);
    }
    
    
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
@@ -1,8 +1,14 @@
package com.ruoyi.account.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.account.api.model.UserAddress;
import com.ruoyi.account.service.UserAddressService;
import com.ruoyi.common.core.domain.R;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -16,5 +22,28 @@
@RequestMapping("/user-address")
public class UserAddressController {
    @Resource
    private UserAddressService userAddressService;
    /**
     * 获取用户默认地址
     * @param userId
     * @return
     */
    @ResponseBody
    @PostMapping("/getDefaultUserAddress")
    public R<UserAddress> getDefaultUserAddress(@RequestParam("userId") Long userId){
        List<UserAddress> list = userAddressService.list(new LambdaQueryWrapper<UserAddress>().eq(UserAddress::getAppUserId, userId).eq(UserAddress::getDelFlag, 0));
        if(list.size() == 0){
            return R.ok();
        }
        UserAddress userAddress = list.stream().filter(s -> s.getIsDefault() == 1).findFirst().get();
        if(null == userAddress){
            userAddress = list.get(0);
        }
        return R.ok(userAddress);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -1,9 +1,15 @@
package com.ruoyi.account.controller;
import com.ruoyi.account.api.vo.CouponInfoVo;
import com.ruoyi.account.api.vo.PaymentUserCoupon;
import com.ruoyi.account.service.UserCouponService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -17,9 +23,21 @@
@RequestMapping("/user-coupon")
public class UserCouponController {
    @Resource
    private UserCouponService userCouponService;
    /**
     * 获取支付页面用户优惠券列表数据
     * @param paymentUserCoupon
     * @return
     */
    @ResponseBody
    @PostMapping("/getPaymentUserCoupon")
    public R<List<CouponInfoVo>> getPaymentUserCoupon(@RequestBody PaymentUserCoupon paymentUserCoupon){
        List<CouponInfoVo> userCoupon = userCouponService.getUserCoupon(paymentUserCoupon.getUserId(), paymentUserCoupon.getOrderMoney(), paymentUserCoupon.getType());
        return R.ok(userCoupon);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.vo.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import java.util.List;
@@ -23,7 +24,7 @@
     * @param appletLogin
     * @return
     */
    AjaxResult appletLogin(AppletLogin appletLogin);
    R appletLogin(AppletLogin appletLogin);
    
    
    /**
@@ -31,7 +32,7 @@
     * @param mobileLogin
     * @return
     */
    AjaxResult<LoginVo> mobileLogin(MobileLogin mobileLogin);
    R<LoginVo> mobileLogin(MobileLogin mobileLogin);
    
    
    /**
@@ -39,7 +40,7 @@
     * @param smsCode
     * @return
     */
    AjaxResult getSMSCode(SMSCode smsCode);
    R getSMSCode(SMSCode smsCode);
    
    
    /**
@@ -47,7 +48,7 @@
     * @param registerAccount
     * @return
     */
    AjaxResult<LoginVo> registerAccount(RegisterAccount registerAccount);
    R<LoginVo> registerAccount(RegisterAccount registerAccount);
    
    
    /**
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.account.api.model.UserCoupon;
import com.ruoyi.account.api.vo.CouponInfoVo;
import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,10 @@
 */
public interface UserCouponService extends IService<UserCoupon> {
    /**
     * 获取用户支付页面的优惠券列表
     * @param userId
     * @return
     */
    List<CouponInfoVo> getUserCoupon(Long userId, BigDecimal orderMoney, Integer type);
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.util.weChat.WeChatUtil;
import com.ruoyi.account.vo.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
@@ -47,12 +48,12 @@
     * @return
     */
    @Override
    public AjaxResult appletLogin(AppletLogin appletLogin) {
    public R appletLogin(AppletLogin appletLogin) {
        //使用jscode获取微信openid
        Map<String, Object> map = weChatUtil.code2Session(appletLogin.getJscode());
        Integer errcode = Integer.valueOf(map.get("errcode").toString());
        if(0 != errcode){
            return AjaxResult.error(map.get("msg").toString());
            return R.fail(map.get("msg").toString());
        }
        String openid = map.get("openid").toString();
        //查询用户是否注册,没有注册则跳转到注册页面
@@ -60,11 +61,11 @@
        if(null == appUser){
            LoginVo loginVo = new LoginVo();
            loginVo.setSkipPage(2);
            return AjaxResult.success(loginVo);
            return R.ok(loginVo);
        }
        //账户被冻结,给出提示
        if(2 == appUser.getStatus()){
            return AjaxResult.error("账户已被冻结,请联系管理员!");
            return R.fail("账户已被冻结,请联系管理员!");
        }
        LoginVo loginVo = new LoginVo();
        loginVo.setSkipPage(1);
@@ -77,7 +78,7 @@
        Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
        loginVo.setToken(tokenApplet.get("access_token").toString());
        loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
        return AjaxResult.success(loginVo);
        return R.ok(loginVo);
    }
    
    
@@ -87,11 +88,11 @@
     * @return
     */
    @Override
    public AjaxResult<LoginVo> mobileLogin(MobileLogin mobileLogin) {
    public R<LoginVo> mobileLogin(MobileLogin mobileLogin) {
        //校验验证码
        String code = redisService.getCacheObject(mobileLogin.getPhone());
        if(null == code || !code.equals(mobileLogin.getCode())){
            return AjaxResult.error("验证码错误");
            return R.fail("验证码错误");
        }
        
        //查询用户是否注册,没有注册则跳转到注册页面
@@ -99,11 +100,11 @@
        if(null == appUser){
            LoginVo loginVo = new LoginVo();
            loginVo.setSkipPage(2);
            return AjaxResult.success(loginVo);
            return R.ok(loginVo);
        }
        //账户被冻结,给出提示
        if(2 == appUser.getStatus()){
            return AjaxResult.error("账户已被冻结,请联系管理员!");
            return R.fail("账户已被冻结,请联系管理员!");
        }
        LoginVo loginVo = new LoginVo();
        loginVo.setSkipPage(1);
@@ -116,7 +117,7 @@
        Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
        loginVo.setToken(tokenApplet.get("access_token").toString());
            loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
        return AjaxResult.success(loginVo);
        return R.ok(loginVo);
    }
    
    
@@ -126,7 +127,7 @@
     * @return
     */
    @Override
    public AjaxResult getSMSCode(SMSCode smsCode) {
    public R getSMSCode(SMSCode smsCode) {
        //校验验证码获取评率(1分钟5次)
        String key = smsCode.getType() + "&" + smsCode.getPhone();
        Map<String, Object> cacheMap = redisService.getCacheMap(key);
@@ -134,7 +135,7 @@
            Integer number = Integer.valueOf(cacheMap.get("number").toString()) + 1;
            Long startTime = Long.valueOf(cacheMap.get("startTime").toString());
            if(number > 5 && (System.currentTimeMillis() - startTime) < 60000){
                return AjaxResult.error("获取验证码太频繁,请稍后重试!");
                return R.fail("获取验证码太频繁,请稍后重试!");
            }
            if(number <= 5){
                cacheMap.put("number", number);
@@ -156,7 +157,7 @@
            code += Double.valueOf(Math.random() * 10).intValue();
        }
        //发送短信 todo 待对接短信
        return AjaxResult.success();
        return R.ok();
    }
    
    
@@ -166,27 +167,27 @@
     * @return
     */
    @Override
    public AjaxResult<LoginVo> registerAccount(RegisterAccount registerAccount) {
    public R<LoginVo> registerAccount(RegisterAccount registerAccount) {
        //校验验证码
        String code = redisService.getCacheObject(registerAccount.getPhone());
        if(null == code || !code.equals(registerAccount.getCode())){
            return AjaxResult.error("验证码错误");
            return R.fail("验证码错误");
        }
        //使用jscode获取微信openid
        Map<String, Object> map = weChatUtil.code2Session(registerAccount.getJscode());
        Integer errcode = Integer.valueOf(map.get("errcode").toString());
        if(0 != errcode){
            return AjaxResult.error(map.get("msg").toString());
            return R.fail(map.get("msg").toString());
        }
        String openid = map.get("openid").toString();
        //查询用户是否注册
        AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getWxOpenid, openid).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
        if(null != appUser){
            return AjaxResult.error("此微信号已注册,请直接登录!");
            return R.fail("此微信号已注册,请直接登录!");
        }
        AppUser appUser1 = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, registerAccount.getPhone()).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
        if(null != appUser1){
            return AjaxResult.error("手机号已注册,请直接登录!");
            return R.fail("手机号已注册,请直接登录!");
        }
        if(null == appUser){
            appUser = new AppUser();
@@ -242,7 +243,7 @@
        Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
        loginVo.setToken(tokenApplet.get("access_token").toString());
        loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
        return AjaxResult.success(loginVo);
        return R.ok(loginVo);
    }
    
    
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java
@@ -1,10 +1,21 @@
package com.ruoyi.account.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.vo.CouponInfoVo;
import com.ruoyi.account.mapper.UserCouponMapper;
import com.ruoyi.account.api.model.UserCoupon;
import com.ruoyi.account.service.UserCouponService;
import com.ruoyi.other.api.domain.CouponInfo;
import com.ruoyi.other.api.feignClient.CouponInfoClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -17,4 +28,56 @@
@Service
public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService {
    @Resource
    private CouponInfoClient couponInfoClient;
    /**
     * 获取支付页面的优惠券列表数据
     * @param userId
     * @param orderMoney
     * @return
     */
    @Override
    public List<CouponInfoVo> getUserCoupon(Long userId, BigDecimal orderMoney, Integer type) {
        List<UserCoupon> list = this.list(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getAppUserId, userId).eq(UserCoupon::getDelFlag, 0)
                .last(" and now() between start_time and end_time"));
        List<Integer> couponIds = list.stream().map(UserCoupon::getCouponId).collect(Collectors.toList());
        if(couponIds.size() == 0){
            return null;
        }
        List<CouponInfo> couponInfoList = couponInfoClient.getCouponInfoList(couponIds).getData();
        //构建返回数据
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        List<CouponInfoVo> infoVoList = new ArrayList<>();
        for (UserCoupon userCoupon : list) {
            CouponInfo couponInfo = couponInfoList.stream().filter(s -> s.getId().equals(userCoupon.getCouponId())).findFirst().get();
            CouponInfoVo couponInfoVo = new CouponInfoVo();
            couponInfoVo.setId(userCoupon.getId());
            couponInfoVo.setName(couponInfo.getCouponName());
            couponInfoVo.setCouponType(couponInfo.getCouponType());
            couponInfoVo.setConditionAmount(couponInfo.getConditionAmount());
            couponInfoVo.setDiscountAmount(couponInfo.getDiscountAmount());
            couponInfoVo.setMoneyAmount(couponInfo.getMoneyAmount());
            couponInfoVo.setDiscount(couponInfo.getDiscount());
            couponInfoVo.setPeriodEndTime(couponInfo.getPeriodStartTime().format(formatter));
            couponInfoVo.setPeriodEndTime(couponInfo.getPeriodEndTime().format(formatter));
            couponInfoVo.setAvailable(false);
            //满减券
            if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){
                couponInfoVo.setAvailable(true);
            }
            //代金券和折扣券
            if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
                couponInfoVo.setAvailable(true);
            }
            //商品券
            if(4 == couponInfo.getCouponType() && 2 == type){
                couponInfoVo.setAvailable(true);
            }
            infoVoList.add(couponInfoVo);
        }
        return infoVoList;
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java
@@ -9,7 +9,7 @@
 * @Date 2024/11/25 9:39
 */
@Data
@ApiModel
@ApiModel("登录结果")
public class LoginVo {
    @ApiModelProperty("token")
    private String token;
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java
@@ -11,7 +11,7 @@
 * @Date 2024/11/25 10:42
 */
@Data
@ApiModel
@ApiModel("附近推荐人")
public class NearbyReferrerVo {
    @ApiModelProperty("id")
    private String id;
@@ -21,6 +21,6 @@
    private String name;
    @ApiModelProperty("会员类型名称")
    private String vip;
    @ApiModelProperty("距离(km)")
    @ApiModelProperty("距离(m)")
    private BigDecimal distance;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.service.ShoppingCartService;
import com.ruoyi.order.vo.*;
import io.swagger.annotations.Api;
@@ -22,6 +23,12 @@
    @Resource
    private ShoppingCartService shoppingCartService;
    @Resource
    private TokenService tokenService;
    
    @ResponseBody
@@ -47,27 +54,43 @@
    @ResponseBody
    @PostMapping("/setGoodsNumber")
    @ApiOperation(value = "修改购物车数量", tags = {"商城-购物车-小程序"})
    public AjaxResult setGoodsNumber(@RequestBody SetGoodsNumber setGoodsNumber){
    public R setGoodsNumber(@RequestBody SetGoodsNumber setGoodsNumber){
        return shoppingCartService.setGoodsNumber(setGoodsNumber);
    }
    
    
    
    @ResponseBody
    @DeleteMapping("/delShoppingCart")
    @ApiOperation(value = "删除购物车", tags = {"商城-购物车-小程序"})
    public R delShoppingCart(Long id){
        Long userid = tokenService.getLoginUserApplet().getUserid();
        ShoppingCart shoppingCart = shoppingCartService.getById(id);
        if(!userid.equals(shoppingCart.getAppUserId())){
            return R.fail("权限不足,不允许此操作");
        }
        shoppingCartService.removeById(id);
        return R.ok();
    }
    @ResponseBody
    @PostMapping("/confirmOrder")
    @ApiOperation(value = "确定购物车订单", tags = {"商城-购物车-小程序"})
    public AjaxResult<ConfirmOrderVo> confirmOrder(@RequestBody ConfirmOrder confirmOrder){
        // todo 待完善 pu
        return AjaxResult.success();
    public R<ConfirmOrderVo> confirmOrder(@RequestBody ConfirmOrder confirmOrder){
        ConfirmOrderVo confirmOrderVo = shoppingCartService.confirmOrder(confirmOrder);
        return R.ok(confirmOrderVo);
    }
    
    
    @ResponseBody
    @PostMapping("/shoppingCartPayment")
    @ApiOperation(value = "购物车订单支付", tags = {"商城-购物车-小程序"})
    public AjaxResult<Void> shoppingCartPayment(@RequestBody ShoppingCartPayment shoppingCartPayment){
        // todo 待完善 pu
        return AjaxResult.success();
    public R<Void> shoppingCartPayment(@RequestBody ShoppingCartPayment shoppingCartPayment){
        return shoppingCartService.shoppingCartPayment(shoppingCartPayment);
    }
    
    
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java
@@ -1,9 +1,9 @@
package com.ruoyi.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.order.vo.MyShoppingCartVo;
import com.ruoyi.order.vo.SetGoodsNumber;
import com.ruoyi.order.vo.*;
import model.ShoppingCart;
import org.springframework.web.bind.annotation.RequestBody;
@@ -32,5 +32,21 @@
     * @param setGoodsNumber
     * @return
     */
    AjaxResult setGoodsNumber(SetGoodsNumber setGoodsNumber);
    R setGoodsNumber(SetGoodsNumber setGoodsNumber);
    /**
     * 确认购物车订单
     * @param confirmOrder
     * @return
     */
    ConfirmOrderVo confirmOrder(ConfirmOrder confirmOrder);
    /**
     * 购物车支付操作
     * @param shoppingCartPayment
     * @return
     */
    R shoppingCartPayment(ShoppingCartPayment shoppingCartPayment);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -1,26 +1,41 @@
package com.ruoyi.order.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.UserAddressClient;
import com.ruoyi.account.api.feignClient.UserCouponClient;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.UserAddress;
import com.ruoyi.account.api.vo.CouponInfoVo;
import com.ruoyi.account.api.vo.PaymentUserCoupon;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.mapper.ShoppingCartMapper;
import com.ruoyi.order.service.OrderGoodService;
import com.ruoyi.order.service.OrderService;
import com.ruoyi.order.service.ShoppingCartService;
import com.ruoyi.order.vo.MyShoppingCartVo;
import com.ruoyi.order.vo.SetGoodsNumber;
import com.ruoyi.order.vo.*;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.other.api.vo.GetGoodsBargainPrice;
import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import model.Order;
import model.OrderGood;
import model.ShoppingCart;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -52,6 +67,30 @@
    @Resource
    private GoodsBargainPriceClient goodsBargainPriceClient;
    
    @Resource
    private OrderService orderService;
    @Resource
    private OrderGoodService orderGoodService;
    @Resource
    private ShopClient shopClient;
    @Resource
    private OrderActivityInfoClient orderActivityInfoClient;
    @Resource
    private BaseSettingClient baseSettingClient;
    @Resource
    private UserAddressClient userAddressClient;
    @Resource
    private UserCouponClient userCouponClient;
    @Resource
    private SystemConfigClient systemConfigClient;
    
    
    
@@ -75,44 +114,8 @@
        List<Long> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList());
        //查询符合商品类型的商品数据
        List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds));
        List<MyShoppingCartVo> page = new ArrayList<>();
        //构建返回数据
        for (ShoppingCart shoppingCart : list) {
            Goods goods = data.stream().filter(s -> s.getId().equals(shoppingCart.getGoodsId())).findFirst().get();
            MyShoppingCartVo vo = new MyShoppingCartVo();
            vo.setId(shoppingCart.getId());
            vo.setHomePicture(goods.getHomePagePicture());
            vo.setName(goods.getName());
            //获取支付价格
            Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
            if(null == price){
                //使用商品的基础价格
                price.setCash(1 == goods.getCashPayment() ? goods.getSellingPrice() : null);
                price.setPoint(1 == goods.getPointPayment() ? goods.getIntegral() : null);
            }
            //构建价格展示内容
            String sellingPrice = "";
            if(null != price.getCash() && null != price.getPoint()){
                sellingPrice = price.getCash() + "或" + price.getPoint() + "积分";
            }
            if(null != price.getCash() && null == price.getPoint()){
                sellingPrice = price.getCash() + "";
            }
            if(null == price.getCash() && null != price.getPoint()){
                sellingPrice = price.getPoint() + "积分";
            }
            vo.setSellingPrice(sellingPrice);
            vo.setEndTime(price.getEndTime());
            vo.setOriginalPrice(goods.getOriginalPrice().toString());
            vo.setNumber(shoppingCart.getNumber());
            GoodsShop goodsShop = new GoodsShop();
            goodsShop.setGoodsId(shoppingCart.getGoodsId());
            goodsShop.setShopId(shopId);
            GoodsShop goodsShop1 = goodsShopClient.getGoodsShop(goodsShop).getData();
            vo.setVerifiable(null == goodsShop1 ? false : true);
            page.add(vo);
        }
        List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list, null);
        return page;
    }
    
@@ -157,14 +160,30 @@
                    }else{
                        price.setCash(goodsVip.getSellingPrice());
                        price.setPoint(goodsVip.getIntegral());
                        price.setCashPayment(goodsVip.getCashPayment() == 1 ? true : false);
                        price.setPointPayment(goodsVip.getPointPayment() == 1 ? true : false);
                        price.setEarnSpendingPoints(goodsVip.getEarnSpendingPoints());
                    }
                }else{
                    price.setCash(goodsArea.getSellingPrice());
                    price.setPoint(goodsArea.getIntegral());
                    price.setCashPayment(goodsArea.getCashPayment() == 1 ? true : false);
                    price.setPointPayment(goodsArea.getPointPayment() == 1 ? true : false);
                    price.setEarnSpendingPoints(goodsArea.getEarnSpendingPoints());
                }
            }else{
                price.setCash(bargainPriceDetail.getSellingPrice());
                price.setPoint(bargainPriceDetail.getIntegral());
                price.setCashPayment(bargainPriceDetail.getSellingPrice() != null ? true : false);
                price.setPointPayment(bargainPriceDetail.getIntegral() != null ? true : false);
                //门店特价,消费积分使用会员等级的消费积分
                GoodsArea area = new GoodsArea();
                area.setDistrictsCode(appUser.getDistrictCode());
                area.setCityCode(appUser.getCityCode());
                area.setProvinceCode(appUser.getProvinceCode());
                area.setVip(appUser.getVipId());
                GoodsArea goodsArea = goodsAreaClient.getGoodsArea(area).getData();
                price.setEarnSpendingPoints(goodsArea.getEarnSpendingPoints());
            }
        }else{
            //构建价格数据
@@ -178,7 +197,10 @@
            if(goodsSeckill.getCashPayment() == 0 && goodsSeckill.getPointPayment() == 1){
                price.setPoint(goodsSeckill.getIntegral());
            }
            price.setCashPayment(goodsSeckill.getCashPayment() == 1 ? true : false);
            price.setPointPayment(goodsSeckill.getPointPayment() == 1 ? true : false);
            price.setEndTime(goodsSeckill.getEndTime());
            price.setEarnSpendingPoints(goodsSeckill.getEarnSpendingPoints());
        }
        return price;
    }
@@ -198,6 +220,18 @@
         * 获取结束时间
         */
        private Long endTime;
        /**
         * 现金支付
         */
        private Boolean cashPayment;
        /**
         * 积分支付
         */
        private Boolean pointPayment;
        /**
         * 可获得消费积分
         */
        private Integer earnSpendingPoints;
    }
    
@@ -215,15 +249,204 @@
     * @return
     */
    @Override
    public AjaxResult setGoodsNumber(SetGoodsNumber setGoodsNumber) {
    public R setGoodsNumber(SetGoodsNumber setGoodsNumber) {
        if(0 >= setGoodsNumber.getNumber()){
            return AjaxResult.error("修改数量不能小于等于0");
            return R.fail("修改数量不能小于等于0");
        }
        ShoppingCart shoppingCart = this.getById(setGoodsNumber.getId());
        Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
        if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && goods.getPurchaseLimit() < setGoodsNumber.getNumber()){
            return R.fail("修改数量不能大于限购数量");
        }
        if(null != shoppingCart){
            shoppingCart.setNumber(setGoodsNumber.getNumber());
            this.updateById(shoppingCart);
        }
        return AjaxResult.success();
        return R.ok();
    }
    /**
     * 确认购物车订单
     * @param confirmOrder
     * @return
     */
    @Override
    public ConfirmOrderVo confirmOrder(ConfirmOrder confirmOrder) {
        Long userid = tokenService.getLoginUserApplet().getUserid();
        AppUser appUser = appUserClient.getAppUserById(userid);
        Integer shopId = confirmOrder.getShopId();
        Shop shop = shopClient.getShopById(shopId).getData();
        String goodsJson = confirmOrder.getGoodsJson();
        List<Long> ids = new ArrayList<>();
        JSONArray objects = JSON.parseArray(goodsJson);
        for (int i = 0; i < objects.size(); i++) {
            Long id = objects.getJSONObject(i).getLong("id");
            ids.add(id);
        }
        List<ShoppingCart> list = this.listByIds(ids);
        ConfirmOrderVo confirmOrderVo = new ConfirmOrderVo();
        //构建商品明细列表
        List<MyShoppingCartVo> goodsList = buildDetail(appUser, shopId, list, objects);
        confirmOrderVo.setGoodsList(goodsList);
        confirmOrderVo.setShopId(confirmOrder.getShopId());
        confirmOrderVo.setShopName(shop.getName());
        //现金支付
        if(confirmOrder.getPaymentType() == 1){
            BigDecimal bigDecimal = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get();
            confirmOrderVo.setOrderMoney(bigDecimal);
        }else{
            int sum = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum();
            confirmOrderVo.setOrderPoint(sum);
        }
        //查询当前是否有订单活动
        OrderActivityInfo orderActivityInfo = orderActivityInfoClient.getNowOrderActivityInfo(appUser.getVipId()).getData();
        BigDecimal orderMoney = confirmOrderVo.getOrderMoney();
        BigDecimal paymentMoney = orderMoney;
        //满XX才打折,只有现金才能优惠
        if(null != orderActivityInfo && confirmOrder.getPaymentType() == 1 && orderActivityInfo.getConditionAmount().compareTo(orderMoney) <= 0){
            confirmOrderVo.setActivityName(orderActivityInfo.getActivityName());
            paymentMoney = orderActivityInfo.getDiscount().divide(new BigDecimal(10)).multiply(orderMoney);
            confirmOrderVo.setDiscountAmount(orderMoney.subtract(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
        }
        BaseSetting baseSetting = baseSettingClient.getBaseSetting(4).getData();
        confirmOrderVo.setUseSimultaneously(baseSetting.getContent().equals("1") ? true : false);
        int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
        confirmOrderVo.setEarnPoint(earnPoint);
        //支付金额,订单金额-订单优惠
        confirmOrderVo.setPayMoney(paymentMoney);
        confirmOrderVo.setResidualPoint(appUser.getLavePoint().intValue());
        //获取默认收货地址
        UserAddress userAddress = userAddressClient.getDefaultUserAddress(userid).getData();
        confirmOrderVo.setUserAddress(userAddress);
        confirmOrderVo.setPaymentType(confirmOrder.getPaymentType());
        //获取用户优惠券,用户全部优惠券,不能使用的需要标识出来置灰展示
        PaymentUserCoupon paymentUserCoupon = new PaymentUserCoupon();
        paymentUserCoupon.setUserId(userid);
        paymentUserCoupon.setOrderMoney(orderMoney);
        paymentUserCoupon.setType(confirmOrder.getType());
        List<CouponInfoVo> data = userCouponClient.getPaymentUserCoupon(paymentUserCoupon).getData();
        confirmOrderVo.setCoupon(data);
        //获取快递策略
        SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData();
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        confirmOrderVo.setExpressFee(jsonObject.getBigDecimal("expressFee"));
        List<Integer> vip = jsonObject.getJSONArray("vip").toList(Integer.class);
        //包邮条件(所有会员或者满足条件的会员)
        if(vip.get(0) == -1 || vip.contains(appUser.getVipId())){
            if(confirmOrder.getPaymentType() == 1){
                //现金支付,支付金额满足包邮条件
                BigDecimal cash = jsonObject.getBigDecimal("cash");
                if(confirmOrderVo.getPayMoney().compareTo(cash) >= 0){
                    confirmOrderVo.setExpressFee(BigDecimal.ZERO);
                }
            }else{
                //积分支付,支付积分是否满足包邮条件
                Integer point = jsonObject.getInteger("point");
                if(confirmOrderVo.getOrderPoint().compareTo(point) >= 0){
                    confirmOrderVo.setExpressFee(BigDecimal.ZERO);
                }
            }
        }
        return confirmOrderVo;
    }
    /**
     * 构建购物车商品列表
     * @param appUser
     * @param shopId
     * @param list
     * @param objects
     * @return
     */
    private List<MyShoppingCartVo> buildDetail(AppUser appUser, Integer shopId, List<ShoppingCart> list, JSONArray objects){
        List<MyShoppingCartVo> page = new ArrayList<>();
        for (ShoppingCart shoppingCart : list) {
            Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
            MyShoppingCartVo vo = new MyShoppingCartVo();
            vo.setId(shoppingCart.getId());
            vo.setHomePicture(goods.getHomePagePicture());
            vo.setName(goods.getName());
            int num = shoppingCart.getNumber();
            if(null != objects){
                for (int i = 0; i < objects.size(); i++) {
                    Long id = objects.getJSONObject(i).getLong("id");
                    if(id.equals(shoppingCart.getId())){
                        num = objects.getJSONObject(i).getInteger("num");
                        break;
                    }
                }
            }
            //获取支付价格
            Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
            if(null == price){
                //使用商品的基础价格
                price.setCash(1 == goods.getCashPayment() ? goods.getSellingPrice() : null);
                price.setPoint(1 == goods.getPointPayment() ? goods.getIntegral() : null);
                price.setCashPayment(goods.getCashPayment() == 1 ? true : false);
                price.setPointPayment(goods.getPointPayment() == 1 ? true : false);
            }
            vo.setCash(price.getCash());
            vo.setPoint(price.getPoint());
            vo.setCashPayment(price.getCashPayment());
            vo.setPointPayment(price.getPointPayment());
            vo.setEndTime(price.getEndTime());
            vo.setOriginalPrice(goods.getOriginalPrice().toString());
            vo.setNumber(num);
            GoodsShop goodsShop = new GoodsShop();
            goodsShop.setGoodsId(shoppingCart.getGoodsId());
            goodsShop.setShopId(shopId);
            GoodsShop goodsShop1 = goodsShopClient.getGoodsShop(goodsShop).getData();
            vo.setVerifiable(null == goodsShop1 ? false : true);
            //判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
            if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){
                vo.setPurchaseLimit(false);
            }else{
                List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8)));
                List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
                int sum = 0;
                if(orderIds.size() > 0){
                    List<OrderGood> orderGoodList = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().in(OrderGood::getOrderId, orderIds)
                            .eq(OrderGood::getGoodsId, shoppingCart.getGoodsId()).eq(OrderGood::getDelFlag, 0));
                    sum = orderGoodList.stream().mapToInt(OrderGood::getNum).sum();
                }
                vo.setPurchaseLimit((num + sum) > goods.getPurchaseLimit() ? true : false);
            }
            vo.setEarnSpendingPoints(price.getEarnSpendingPoints());
            vo.setDistributionMode(goods.getDistributionMode());
            page.add(vo);
        }
        return page;
    }
    /**
     * 购物车支付操作
     * @param shoppingCartPayment
     * @return
     */
    @Override
    public R shoppingCartPayment(ShoppingCartPayment shoppingCartPayment) {
        Long userid = tokenService.getLoginUserApplet().getUserid();
        AppUser appUser = appUserClient.getAppUserById(userid);
        Integer shopId = shoppingCartPayment.getShopId();
        Shop shop = shopClient.getShopById(shopId).getData();
        String goodsJson = shoppingCartPayment.getGoodsJson();
        List<Long> ids = new ArrayList<>();
        JSONArray objects = JSON.parseArray(goodsJson);
        for (int i = 0; i < objects.size(); i++) {
            Long id = objects.getJSONObject(i).getLong("id");
            ids.add(id);
        }
        List<ShoppingCart> list = this.listByIds(ids);
        ConfirmOrderVo confirmOrderVo = new ConfirmOrderVo();
        //构建商品明细列表
        List<MyShoppingCartVo> goodsList = buildDetail(appUser, shopId, list, objects);
        return null;
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java
@@ -11,10 +11,12 @@
@Data
@ApiModel
public class ConfirmOrder {
    @ApiModelProperty(value = "购物商品id JSON", required = true)
    @ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2}]", required = true)
    private String goodsJson;
    @ApiModelProperty(value = "支付方式(1=现金,2=积分)", required = true)
    private Integer paymentType;
    @ApiModelProperty(value = "核销门店id", required = true)
    private Integer shopId;
    @ApiModelProperty(value = "商品类型(1=服务商品,2=单品商品)", required = true)
    private Integer type;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java
@@ -1,6 +1,7 @@
package com.ruoyi.order.vo;
import com.ruoyi.account.api.model.UserAddress;
import com.ruoyi.account.api.vo.CouponInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -31,14 +32,18 @@
    private Integer earnPoint;
    @ApiModelProperty("支付金额")
    private BigDecimal payMoney;
    @ApiModelProperty("订单总金额")
    @ApiModelProperty("订单总积分")
    private Integer orderPoint;
    @ApiModelProperty("剩余积分")
    private Integer residualPoint;
    @ApiModelProperty("收货地址")
    private UserAddress userAddress;
    @ApiModelProperty("快递费")
    private BigDecimal expressFee;
    @ApiModelProperty("支付方式(1=现金,2=积分)")
    private Integer paymentType;
    @ApiModelProperty("活动是否可以和优惠券同时使用")
    private Boolean useSimultaneously;
    @ApiModelProperty("优惠券列表")
    private List<CouponInfoVo> coupon;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java
@@ -4,6 +4,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2024/11/25 11:51
@@ -17,8 +19,10 @@
    private String homePicture;
    @ApiModelProperty("商品名称")
    private String name;
    @ApiModelProperty("售价")
    private String sellingPrice;
    @ApiModelProperty("售价现金")
    private BigDecimal cash;
    @ApiModelProperty("售价积分")
    private Integer point;
    @ApiModelProperty("原价")
    private String originalPrice;
    @ApiModelProperty("购买数量")
@@ -27,4 +31,16 @@
    private Long endTime;
    @ApiModelProperty("是否可核销(0=否,1=是)")
    private Boolean verifiable;
    @ApiModelProperty("是否超出限购数量")
    private Boolean purchaseLimit;
    @ApiModelProperty("现金支付")
    private Boolean cashPayment;
    @ApiModelProperty("积分支付")
    private Boolean pointPayment;
    @ApiModelProperty("配送方式(1=自提,2=快递)")
    private Integer distributionMode;
    /**
     * 可获得消费积分
     */
    private Integer earnSpendingPoints;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
@@ -11,7 +11,7 @@
@Data
@ApiModel
public class ShoppingCartPayment {
    @ApiModelProperty(value = "购物商品id JSON", required = true)
    @ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2}]", required = true)
    private String goodsJson;
    @ApiModelProperty(value = "支付方式(1=现金,2=积分)", required = true)
    private Integer paymentType;
@@ -19,4 +19,8 @@
    private Integer shopId;
    @ApiModelProperty(value = "优惠券id", required = false)
    private String userCouponId;
    @ApiModelProperty(value = "配送方式(1=自提,2=快递)", required = false)
    private Integer distributionMode;
    @ApiModelProperty(value = "配送地址id", required = false)
    private Integer userAddressId;
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java
@@ -1,8 +1,12 @@
package com.ruoyi.other.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.BaseSetting;
import com.ruoyi.other.service.BaseSettingService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * <p>
@@ -16,5 +20,24 @@
@RequestMapping("/base-setting")
public class BaseSettingController {
    @Resource
    private BaseSettingService baseSettingService;
    /**
     * 获取基础配置
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping("/getBaseSetting")
    public R<BaseSetting> getBaseSetting(@RequestParam("id") Integer id){
        BaseSetting baseSetting = baseSettingService.getById(id);
        return R.ok(baseSetting);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -1,8 +1,13 @@
package com.ruoyi.other.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.CouponInfo;
import com.ruoyi.other.service.CouponInfoService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -16,5 +21,21 @@
@RequestMapping("/coupon-info")
public class CouponInfoController {
    @Resource
    private CouponInfoService couponInfoService;
    /**
     * 根据id获取优惠券数据
     * @param ids
     * @return
     */
    @ResponseBody
    @PostMapping("/getCouponInfoList")
    public R<List<CouponInfo>> getCouponInfoList(@RequestParam("ids") List<Integer> ids){
        List<CouponInfo> couponInfos = couponInfoService.listByIds(ids);
        return R.ok(couponInfos);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -74,5 +74,18 @@
        return R.ok(list);
    }
    
    /**
     * 根据id获取商品信息
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping("/getGoodsById")
    public R<Goods> getGoodsById(@RequestParam("id") Integer id){
        Goods goods = goodsService.getById(id);
        return R.ok(goods);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
@@ -1,8 +1,13 @@
package com.ruoyi.other.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.OrderActivityInfo;
import com.ruoyi.other.service.OrderActivityInfoService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * <p>
@@ -16,5 +21,23 @@
@RequestMapping("/order-activity-info")
public class OrderActivityInfoController {
    @Resource
    private OrderActivityInfoService orderActivityInfoService;
    /**
     * 获取当前生效的活动
     * @param vip
     * @return
     */
    @ResponseBody
    @PostMapping("/getNowOrderActivityInfo")
    public R<OrderActivityInfo> getNowOrderActivityInfo(@RequestParam("vip") Integer vip){
        OrderActivityInfo one = orderActivityInfoService.getOne(new LambdaQueryWrapper<OrderActivityInfo>().eq(OrderActivityInfo::getDelFlag, 0)
                .last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) limit 0, 1"));
        return R.ok(one);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -93,5 +93,18 @@
        // todo 待完善 pu
        return R.ok();
    }
    /**
     * 根据id获取门店信息
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping("/getShopById")
    public R<Shop> getShopById(@RequestParam("id") Integer id){
        Shop shop = shopService.getById(id);
        return R.ok(shop);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java
@@ -4,9 +4,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.SystemConfig;
import com.ruoyi.other.service.SystemConfigService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -31,5 +29,18 @@
        SystemConfig one = systemConfigService.lambdaQuery().eq(SystemConfig::getType, type).last("limit 1").one();
        return R.ok(one);
    }
    /**
     * 根据类型获取系统配置
     * @param type
     * @return
     */
    @ResponseBody
    @PostMapping("/getSystemConfig")
    public R<SystemConfig> getSystemConfig(@RequestParam("type") Integer type){
        SystemConfig one = systemConfigService.lambdaQuery().eq(SystemConfig::getType, type).last("limit 1").one();
        return R.ok(one);
    }
}