From 2ccdf86ac2599562ca994bc4047ded2d925e8bae Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 29 十一月 2024 16:33:12 +0800 Subject: [PATCH] 开发确认购物车订单逻辑 --- ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java | 26 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java | 27 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java | 2 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java | 28 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java | 6 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java | 22 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java | 22 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java | 13 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java | 27 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java | 17 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java | 27 + ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java | 45 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java | 26 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java | 33 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java | 9 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java | 20 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java | 13 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java | 22 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java | 24 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java | 26 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java | 25 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java | 5 ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 7 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java | 25 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 39 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java | 3 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java | 7 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java | 26 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java | 20 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java | 23 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 307 +++++++++++++-- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java | 65 +++ ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java | 8 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java | 25 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java | 20 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java | 37 + ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 14 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java | 28 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java | 13 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java | 28 + 44 files changed, 1,045 insertions(+), 129 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java new file mode 100644 index 0000000..64c54a1 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java new file mode 100644 index 0000000..2e8b2dc --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java new file mode 100644 index 0000000..261c662 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java @@ -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); +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java new file mode 100644 index 0000000..8264f94 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java @@ -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); +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/CouponInfoVo.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java similarity index 96% rename from ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/CouponInfoVo.java rename to ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java index 28a838d..106134c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/CouponInfoVo.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/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; diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java new file mode 100644 index 0000000..a8ad0fe --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCoupon.java @@ -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; +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 332cd6d..975746c 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/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 \ No newline at end of file +com.ruoyi.account.api.factory.AppUserClientFallbackFactory +com.ruoyi.account.api.factory.UserAddressClientFallbackFactory +com.ruoyi.account.api.factory.UserCouponClientFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java new file mode 100644 index 0000000..9c26e4f --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/BaseSettingClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java new file mode 100644 index 0000000..b587851 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java index 110c0a0..1447469 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java +++ b/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()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java new file mode 100644 index 0000000..99214e9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderActivityInfoClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java index d15db4b..e54d7a6 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SeckillActivityInfoClientFallbackFactory.java +++ b/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(){ diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java new file mode 100644 index 0000000..15e3a89 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java new file mode 100644 index 0000000..7578e37 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/SystemConfigClientFallbackFactory.java @@ -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()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java new file mode 100644 index 0000000..79935d0 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/BaseSettingClient.java @@ -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); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java new file mode 100644 index 0000000..1b447e5 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java @@ -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); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java index f24bb8d..4384c32 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java +++ b/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); } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java new file mode 100644 index 0000000..6404f0d --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderActivityInfoClient.java @@ -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); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java new file mode 100644 index 0000000..3d35b9a --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java @@ -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); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java new file mode 100644 index 0000000..9eff59d --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/SystemConfigClient.java @@ -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); + +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 55fb60b..0c669d2 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -4,4 +4,9 @@ com.ruoyi.other.api.factory.GoodsVipClientFallbackFactory com.ruoyi.other.api.factory.SeckillActivityInfoClientFallbackFactory com.ruoyi.other.api.factory.GoodsBargainPriceClientFallbackFactory -com.ruoyi.other.api.factory.RemoteVipSettingFallbackFactory \ No newline at end of file +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 \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java index f4e88db..951d83d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java +++ b/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; + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java index c25a157..32e001d 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java index 0139d23..c0c0621 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java +++ b/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> @@ -15,6 +21,29 @@ @RestController @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); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java index 530f38b..5f62eed 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java +++ b/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); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java index b8c6555..96f9fec 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java +++ b/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); /** diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java index 988f9ed..5787042 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java +++ b/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> @@ -12,5 +17,11 @@ * @since 2024-11-21 */ public interface UserCouponService extends IService<UserCoupon> { - + + /** + * 获取用户支付页面的优惠券列表 + * @param userId + * @return + */ + List<CouponInfoVo> getUserCoupon(Long userId, BigDecimal orderMoney, Integer type); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index e85907f..953d74d 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java index 607932c..97fa4c6 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java +++ b/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> @@ -16,5 +27,57 @@ */ @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; + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java index b69d2be..1e239de 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/LoginVo.java +++ b/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; diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java index 7377ddb..e598dfa 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/NearbyReferrerVo.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java index aeaa5dc..8b28d1f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java index 2e414aa..9d62792 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java index 1f254ea..a3e1a00 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java +++ b/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; } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java index 7382984..b68c2f0 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java index f48ea43..c3c17a6 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ConfirmOrderVo.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java index bc3d266..defd541 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java index 02db9f0..268ac4c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java index 32ea9cf..7f360cb 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java +++ b/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); + } + + + + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java index e63b87b..75f6893 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java +++ b/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); + } + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java index aabd51b..91ea840 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java +++ b/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); + } + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java index 5ca965f..d94fa02 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java +++ b/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); + } + + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java index b4cb27a..9ff7b15 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java +++ b/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); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java index 5971bd0..5ae1bc6 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java +++ b/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); + } } -- Gitblit v1.7.1