From cfd0118ef446a66f91999afc7b1e46ca607adf50 Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期四, 13 七月 2023 20:32:35 +0800 Subject: [PATCH] 定时任务 统计 --- ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml | 10 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 7 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java | 2 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java | 47 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java | 2 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java | 39 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java | 5 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AGStockChangeDto.java | 34 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticleGetVo.java | 34 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java | 31 + ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java | 99 ++- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticlePageVo.java | 28 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java | 26 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml | 14 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java | 28 + ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml | 26 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java | 1 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 13 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java | 20 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java | 15 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java | 11 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java | 9 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java | 16 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java | 10 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml | 11 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java | 21 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java | 13 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java | 10 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java | 4 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java | 17 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java | 24 ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java | 13 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java | 3 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java | 24 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java | 10 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml | 6 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java | 9 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java | 15 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticleGetVo.java | 41 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java | 7 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java | 10 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java | 3 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java | 42 + ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java | 6 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java | 13 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java | 22 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java | 25 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java | 37 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java | 10 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java | 6 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ActivityTotalChangeDto.java | 39 + ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java | 3 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java | 20 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java | 109 +++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java | 24 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java | 2 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 428 ++++++++++++++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppArticlePageDto.java | 20 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java | 20 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java | 9 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java | 6 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppClassListVo.java | 23 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java | 3 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java | 18 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java | 4 65 files changed, 1,551 insertions(+), 106 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java index f8a74b0..fa576f5 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java @@ -22,7 +22,7 @@ String INTEGRAL_USE_FAILED = "积分不够支付"; - String CANCEL_ERROR_ORDER = "只能取消未支付订单"; + String CANCEL_ERROR_ORDER = "已核销订单不能取消"; String SALESPRICE_MIN = "设置价格不能低于最低限价"; @@ -89,4 +89,6 @@ String COUPON_GET_ALL = "该优惠券已领取完"; String DOUBLE_INTEGRAL_TASK = "任务已完成,请勿重复提交"; + + String ACTIVITY_TIME_ERROR = "只能选择大于当前时间作为开始时间"; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java index bcb5027..43f2194 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/SecurityConstant.java @@ -46,4 +46,14 @@ */ String ACTIVITY_GOODS = "ACTIVITY_GOODS"; + /** + * 自动取消订单时间 + */ + String AUTO_CANCEL_ORDER_TIME = "AUTO_CANCEL_ORDER_TIME"; + + /** + * 自动取消订单时间 + */ + String PAY_MONEY_INTEGRAL = "PAY_MONEY_INTEGRAL"; + } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AGStockChangeDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AGStockChangeDto.java new file mode 100644 index 0000000..5a39d4d --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AGStockChangeDto.java @@ -0,0 +1,34 @@ +package com.ruoyi.system.api.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName ActivityGoodsStockChangeDto + * @Description TODO + * @Author jqs + * @Date 2023/7/13 14:02 + * @Version 1.0 + */ +@Data +public class AGStockChangeDto { + + + @ApiModelProperty(value = "活动id") + private String activityId; + + @ApiModelProperty(value = "活动id") + private String goodsId; + + @ApiModelProperty(value = "变化类型1加2减") + private Integer changeType; + + @ApiModelProperty(value = "变化数量") + private Integer changeNum; + + @ApiModelProperty(value = "商户id") + private Long shopId; + + @ApiModelProperty(value = "用户id") + private Long userId; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ActivityTotalChangeDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ActivityTotalChangeDto.java new file mode 100644 index 0000000..99ae074 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ActivityTotalChangeDto.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.api.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @ClassName ActivityGoodsStockChangeDto + * @Description TODO + * @Author jqs + * @Date 2023/7/13 14:02 + * @Version 1.0 + */ +@Data +public class ActivityTotalChangeDto { + + + @ApiModelProperty(value = "活动id") + private String activityId; + + @ApiModelProperty(value = "1下单2退款") + private Integer changeType; + + @ApiModelProperty(value = "数量变化") + private Integer changeNum; + + @ApiModelProperty(value = "金额变化") + private BigDecimal money; + + @ApiModelProperty(value = "人数变化") + private Integer personNum; + + @ApiModelProperty(value = "退款变化") + private Integer refundNum; + + @ApiModelProperty(value = "用户id") + private Long userId; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java index 30eccf6..79e0f6c 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBasePlatformDto.java @@ -46,5 +46,5 @@ private Integer activityType; @ApiModelProperty(value="活动id") - private Long activityId; + private String activityId; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java index 541144b..36786e6 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java @@ -19,6 +19,9 @@ @ApiModelProperty(value = "商户id") private Long shopId; + @ApiModelProperty(value = "1下单2取消") + private Integer orderType; + @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java index 2b33d1d..af61e72 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteActivityFallbackFactory.java @@ -1,7 +1,9 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; +import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import com.ruoyi.system.api.service.RemoteActivityService; @@ -49,6 +51,26 @@ public R<ActivityGoodsGetVo> getUserActivityGoods(ActivityGoodsGetDto activityGoodsGetDto) { return R.fail("获取用户活动商品信息失败:" + throwable.getMessage()); } + + @Override + public R changeActivityStock(AGStockChangeDto agStockChangeDto) { + return R.fail("更新活动库存失败:" + throwable.getMessage()); + } + + @Override + public R changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto) { + return R.fail("更新活动统计:" + throwable.getMessage()); + } + + @Override + public R startActivity(String activityId) { + return null; + } + + @Override + public R endActivity(String activityId) { + return null; + } }; } } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java index 411ae79..a05ecb1 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java @@ -50,6 +50,16 @@ return R.fail("定时发送"+couponId+"优惠券失败:" + throwable.getMessage()); } + @Override + public R useMemberCoupon(String memberCouponIds) { + return R.fail("使用优惠券失败" + throwable.getMessage()); + } + + @Override + public R backMemberCoupon(String memberCouponIds) { + return R.fail("回退优惠券失败" + throwable.getMessage()); + } + }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java index e57fde3..2f1a959 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java @@ -61,7 +61,12 @@ @Override public R sendGoodsGift(List<BirthdayGiftSendDto> giftSendDtoList) { - return null; + return R.fail("发送礼物失败:" + throwable.getMessage()); + } + + @Override + public R autoCancelOrder(String orderId) { + return R.fail("自动取消订单失败:" + throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java index 3383949..b8c0948 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteActivityService.java @@ -2,7 +2,9 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; +import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -55,4 +57,44 @@ */ @PostMapping("/activity/getUserActivityGoods") public R<ActivityGoodsGetVo> getUserActivityGoods(@RequestBody ActivityGoodsGetDto activityGoodsGetDto); + + /** + * @description 更新活动库存 + * @author jqs + * @date 2023/7/13 15:39 + * @param agStockChangeDto + * @return R + */ + @PostMapping("/activity/changeActivityStock") + public R changeActivityStock(@RequestBody AGStockChangeDto agStockChangeDto); + + /** + * @description 更新活动统计 + * @author jqs + * @date 2023/7/13 16:12 + * @param activityTotalChangeDto + * @return R + */ + @PostMapping("/activity/changeActivityTotal") + public R changeActivityTotal(@RequestBody ActivityTotalChangeDto activityTotalChangeDto); + + /** + * @description 开始活动 + * @author jqs + * @date 2023/7/12 20:30 + * @param activityId + * @return R + */ + @PostMapping("/startActivity") + public R startActivity(@RequestBody String activityId); + + /** + * @description 结束活动 + * @author jqs + * @date 2023/7/12 20:30 + * @param activityId + * @return R + */ + @PostMapping("/endActivity") + public R endActivity(@RequestBody String activityId); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java index abc238b..440d8e3 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java @@ -59,4 +59,24 @@ */ @PostMapping("/coupon/autoTimeSendCoupon") public R autoTimeSendCoupon(@RequestBody String couponId); + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return R + */ + @PostMapping("/coupon/useMemberCoupon") + public R useMemberCoupon(@RequestBody String memberCouponIds); + + /** + * @description 回退优惠券 + * @author jqs + * @date 2023/7/13 20:01 + * @param memberCouponIds + * @return R + */ + @PostMapping("/coupon/backMemberCoupon") + public R backMemberCoupon(@RequestBody String memberCouponIds); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java index d929ebc..c22ac62 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java @@ -66,4 +66,14 @@ */ @PostMapping("/order/sendGoodsGift") public R sendGoodsGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList); + + /** + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 + * @param orderId + * @return R + */ + @PostMapping("/order/autoCancelOrder") + public R autoCancelOrder(@RequestBody String orderId); } diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java index 8eec9aa..6eb6982 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java @@ -1,5 +1,8 @@ package com.ruoyi.common.redis.configure; +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.cache.annotation.CachingConfigurerSupport; @@ -12,6 +15,8 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.io.IOException; /** * redis配置 @@ -64,4 +69,16 @@ template.afterPropertiesSet(); return template; } + + @Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。 + public RedissonClient redisson() throws IOException { + // 1.创建配置 + Config config = new Config(); + // 集群模式 + // config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001"); + // 2.根据 Config 创建出 RedissonClient 示例。 + config.useSingleServer().setAddress("redis://47.109.78.184:10020").setPassword("hrt123456"); + return Redisson.create(config); + } + } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java index baeb30f..8844e7d 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/ActivityController.java @@ -4,7 +4,9 @@ import com.ruoyi.goods.service.activity.ActivityGoodsService; import com.ruoyi.goods.service.activity.ActivityRecordService; import com.ruoyi.goods.service.activity.ActivityService; +import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; +import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -116,4 +118,30 @@ activityService.endActivity(activityId); return R.ok(); } + + /** + * @description 更新活动库存 + * @author jqs + * @date 2023/7/13 15:39 + * @param agStockChangeDto + * @return R + */ + @PostMapping("/changeActivityStock") + public R changeActivityStock(@RequestBody AGStockChangeDto agStockChangeDto){ + activityService.changeActivityStock(agStockChangeDto); + return R.ok(); + } + + /** + * @description 更新活动统计 + * @author jqs + * @date 2023/7/13 16:12 + * @param activityTotalChangeDto + * @return R + */ + @PostMapping("/changeActivityTotal") + public R changeActivityTotal(@RequestBody ActivityTotalChangeDto activityTotalChangeDto){ + activityService.changeActivityTotal(activityTotalChangeDto); + return R.ok(); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java index 99fff22..ee540aa 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/MgtActivityEditDto.java @@ -1,5 +1,6 @@ package com.ruoyi.goods.domain.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.api.domain.dto.MgtBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -26,10 +27,15 @@ @NotNull(message = "活动名称不能为空") private String activityName; + @ApiModelProperty(value = "活动简介") + private String activityIntroduce; + @ApiModelProperty(value = "活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; @ApiModelProperty(value = "活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityEndTime; @ApiModelProperty(value = "成团人数") diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java index bbad7ef..73ba653 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java @@ -122,6 +122,12 @@ */ @TableField("recommend_flag") private Integer recommendFlag; + /** + * 活动简介 + */ + @TableField("activity_introduce") + private String activityIntroduce; + @Override protected Serializable pkVal() { diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java index efd0576..74a8eb4 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppActivityPageVo.java @@ -22,6 +22,10 @@ @ApiModelProperty(value = "活动名称") private String activityName; + @ApiModelProperty(value = "活动简介") + private String activityIntroduce; + + @ApiModelProperty(value = "活动开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java index 877fa7e..bd28c28 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java @@ -35,7 +35,7 @@ private String goodsTag; @ApiModelProperty(value = "商品调理问题") - private BigDecimal goodsNurses; + private String goodsNurses; @ApiModelProperty(value = "商品售价") private BigDecimal salesPrice; @@ -57,4 +57,13 @@ @ApiModelProperty(value = "结束时间") private Date endTime; + + @ApiModelProperty(value = "限购标记0否1是") + private Integer purchaseLimitationFlag; + + @ApiModelProperty(value = "限购数量") + private Integer limitNumber; + + @ApiModelProperty(value = "还可以购买数量") + private Integer availableBuyNum; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java index 2242f41..b82eb1e 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGetVo.java @@ -24,6 +24,9 @@ @ApiModelProperty(value = "活动名称") private String activityName; + @ApiModelProperty(value = "活动简介") + private String activityIntroduce; + @ApiModelProperty(value = "活动开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date activityStartTime; diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java index 741dab4..1cd14ff 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java @@ -6,6 +6,7 @@ import com.ruoyi.goods.domain.pojo.activity.Activity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.goods.domain.vo.*; +import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import org.apache.ibatis.annotations.Param; @@ -87,4 +88,24 @@ * @return List<AppActivityPageVo> */ List<AppActivityPageVo> pageAppActivity(Page page, @Param("shopId")Long shopId); + + /** + * @description 活动商品库存变化 + * @author jqs + * @date 2023/7/13 13:53 + * @param + * @return void + */ + void addActivityGoodsStock(@Param("param")AGStockChangeDto agStockChangeDto); + + void subActivityGoodsStock(@Param("param")AGStockChangeDto agStockChangeDto); + + /** + * @description 判断活动是否售罄 + * @author jqs + * @date 2023/7/13 15:35 + * @param activityId + * @return Integer + */ + Integer checkSellOut(@Param("activityId")String activityId); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java index acb8310..f044207 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java @@ -7,7 +7,9 @@ import com.ruoyi.goods.domain.dto.MgtActivityRecordPageDto; import com.ruoyi.goods.domain.pojo.activity.Activity; import com.ruoyi.goods.domain.vo.*; +import com.ruoyi.system.api.domain.dto.AGStockChangeDto; import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; +import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; @@ -150,4 +152,22 @@ * @return void */ void endActivity(String activityId); + + /** + * @description 活动商品库存变化 + * @author jqs + * @date 2023/7/13 13:53 + * @param + * @return void + */ + void changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto); + + /** + * @description 活动商品库存变化 + * @author jqs + * @date 2023/7/13 13:53 + * @param + * @return void + */ + void changeActivityStock(AGStockChangeDto agStockChangeDto); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java index 77d46a1..584441d 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java @@ -24,10 +24,7 @@ import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; -import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; -import com.ruoyi.system.api.domain.dto.MerPageDto; -import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; -import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; +import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; @@ -37,6 +34,9 @@ import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.service.RemoteShopService; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -84,6 +84,8 @@ @Resource private RedisService redisService; + @Autowired + private RedissonClient redissonClient; /** * @param mgtActivityEditDto @@ -130,13 +132,12 @@ // 根据当前时间和活动时间判断活动状态 if (nowTime.compareTo(activityStartTime) < 0) { activity.setActivityStatus(0); - } else if (nowTime.compareTo(activityStartTime) >= 0 && nowTime.compareTo(activityEndTime) <= 0) { - activity.setActivityStatus(1); - } else if (nowTime.compareTo(activityEndTime) > 0) { - activity.setActivityStatus(2); + } else { + throw new ServiceException(AppErrorConstant.ACTIVITY_TIME_ERROR); } // 设置活动信息 activity.setActivityName(mgtActivityEditDto.getActivityName()); + activity.setActivityIntroduce(mgtActivityEditDto.getActivityIntroduce()); activity.setActivityStartTime(activityStartTime); activity.setActivityEndTime(activityEndTime); activity.setGroupBuyNumber(mgtActivityEditDto.getGroupBuyNumber()); @@ -164,6 +165,7 @@ activityGoods.setActivityPrice(dto.getActivityPrice()); activityGoods.setActivitySubscription(dto.getActivitySubscription()); activityGoods.setActivityNumber(dto.getActivityNumber()); + activityGoods.setSalesNumber(0); activityGoods.setActivityDeadline(activity.getActivityEndTime()); activityGoods.setSellOutFlag(0); activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag()); @@ -173,6 +175,38 @@ ).collect(Collectors.toList()); if (!activityGoodsList.isEmpty()) { activityGoodsService.saveBatch(activityGoodsList); + } + } + //如果活动在1小时内生成自动开始任务的延时任务 + Date checkTime = DateUtils.addMinutes(new Date(),61); + if(checkTime.compareTo(activityStartTime)>0){ + String activityId = activity.getActivityId(); + long currentTimeMillis = System.currentTimeMillis(); + long startTimeDifference = currentTimeMillis - activityStartTime.getTime(); + long endTimeDifference = currentTimeMillis - activityEndTime.getTime(); + // 查询延时任务 + DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); + // 如果延时任务为空,创建延时任务控制活动定时开始和结束 + if (startDelayTask == null) { + redisService.setCacheObject(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId, activityStartTime, startTimeDifference, TimeUnit.MILLISECONDS); + startDelayTask = new DelayTask(); + startDelayTask.setDelFlag(0); + startDelayTask.setCreateTime(new Date()); + startDelayTask.setEndTime(activityStartTime); + startDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId); + remoteConfigService.addDelayTask(startDelayTask); + } + // 查询延时任务 + DelayTask endDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode() + "-" + activityId).getData(); + // 如果延时任务为空,创建延时任务控制活动定时开始和结束 + if (endDelayTask == null) { + redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS); + endDelayTask = new DelayTask(); + endDelayTask.setDelFlag(0); + endDelayTask.setCreateTime(new Date()); + endDelayTask.setEndTime(activityEndTime); + endDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId); + remoteConfigService.addDelayTask(endDelayTask); } } } @@ -469,4 +503,63 @@ this.saveOrUpdate(activity); } } + + /** + * @description 活动商品库存变化 + * @author jqs + * @date 2023/7/13 13:53 + * @param + * @return void + */ + @Override + public void changeActivityTotal(ActivityTotalChangeDto activityTotalChangeDto){ + + RLock lock = redissonClient.getLock("activity_clock_"+activityTotalChangeDto.getActivityId()); + try { + lock.lock(30, TimeUnit.SECONDS); + //判断活动商品是否售罄,是则停止活动 + /*Integer noSellOut = activityMapper.checkSellOut(activityTotalChangeDto.getActivityId()); + if(noSellOut==0){ + endActivity(activityTotalChangeDto.getActivityId()); + }*/ + //更新活动统计 + ActivityTotal activityTotal = activityTotalService.getById(activityTotalChangeDto.getActivityId()); + if(activityTotalChangeDto.getChangeType()==1){ + activityTotal.setOrderTotal(activityTotal.getOrderTotal()+activityTotalChangeDto.getChangeNum()); + activityTotal.setPersonTotal(activityTotal.getPersonTotal()+activityTotalChangeDto.getPersonNum()); + activityTotal.setOrderMoneyTotal(activityTotal.getOrderMoneyTotal().add(activityTotalChangeDto.getMoney())); + }else{ + activityTotal.setOrderTotal(activityTotal.getOrderTotal()-activityTotalChangeDto.getChangeNum()); + activityTotal.setPersonTotal(activityTotal.getPersonTotal()-activityTotalChangeDto.getPersonNum()); + activityTotal.setRefundTotal(activityTotal.getRefundTotal()+activityTotalChangeDto.getRefundNum()); + activityTotal.setOrderMoneyTotal(activityTotal.getOrderMoneyTotal().subtract(activityTotalChangeDto.getMoney())); + } + activityTotalService.saveOrUpdate(activityTotal); + } finally { + lock.unlock(); + } + } + + /** + * @description 活动商品库存变化 + * @author jqs + * @date 2023/7/13 13:53 + * @param + * @return void + */ + @Override + public void changeActivityStock(AGStockChangeDto agStockChangeDto){ + RLock lock = redissonClient.getLock("stock_clock_"+agStockChangeDto.getActivityId()+"_"+agStockChangeDto.getGoodsId()); + try { + lock.lock(30, TimeUnit.SECONDS); + if(agStockChangeDto.getChangeType()==1){ + activityMapper.addActivityGoodsStock(agStockChangeDto); + }else{ + //更新库存 + activityMapper.subActivityGoodsStock(agStockChangeDto); + } + } finally { + lock.unlock(); + } + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java index d086cb6..1e5f1b5 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java @@ -566,6 +566,12 @@ // 设置销售百分比和时间戳 appSimpleActivityGoodsVo.setSalesPercent(salesPercent); appSimpleActivityGoodsVo.setTimestamp(appSimpleActivityGoodsVo.getEndTime().getTime()); + //限购判断 + if(appSimpleActivityGoodsVo.getPurchaseLimitationFlag()==1){ + Integer buyNum = activityRecordService.getUserActivityGoodsNum(appSimpleActivityGoodsVo.getGoodsId(),appActivityGoodsPageDto.getActivityId(),appActivityGoodsPageDto.getUserId()); + Integer limitBuyNum = appSimpleActivityGoodsVo.getLimitNumber() - buyNum; + appSimpleActivityGoodsVo.setAvailableBuyNum(limitBuyNum); + } } // 返回结果 return appSimpleGoodsVoList; diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml index 284797e..7b50681 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml +++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml @@ -126,13 +126,35 @@ ta.activity_end_time activityEndTime, CASE ta.activity_status WHEN 0 THEN '未开始' - WHEN 1 THEN '进行中' + WHEN 1 THEN '抢购中' WHEN 2 THEN '已结束' END activityStatus, ta.propaganda_poster propagandaPoster, + ta.activity_introduce activityIntroduce FROM t_activity ta - WHERE ta.del_flag = 0 AND FIND_IN_SET(#{shopId}, ta.applicable_shop) > 0 + WHERE ta.del_flag = 0 AND (ta.shop_flag = 1 OR (ta.shop_flag = 2 AND FIND_IN_SET(#{shopId}, ta.applicable_shop) > 0)) group by ta.activity_id ORDER BY ta.activity_status ASC,ta.create_time DESC </select> + + <update id="addActivityGoodsStock"> + UPDATE t_activity_goods + SET sales_number = sales_number - #{param.changeNum}, + sell_out_flag = 0, + sell_out_time = NULL + WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} + </update> + + <update id="subActivityGoodsStock"> + UPDATE t_activity_goods + SET sales_number = sales_number + #{param.changeNum}, + sell_out_flag = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN 1 ELSE sell_out_flag END, + sell_out_time = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN NOW() ELSE sell_out_time END + WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} AND sales_number + #{param.changeNum} <= activity_number + </update> + + <select id="checkSellOut" resultType="java.lang.Integer"> + SELECT COUNT(ag_id) FROM t_activity_goods + WHERE del_flag = 0 AND activity_id = #{activityId} AND sell_out_flag = 0 + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml index 3c4e25e..9a8a9ef 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml @@ -263,7 +263,7 @@ END goodsTag, IFNULL(tsg.sales_price,tg.sales_price) salesPrice, tgf.file_url goodsPicture, - tg.goods_tags goodsNurses + tg.goods_nurses goodsNurses FROM t_goods tg LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId} @@ -290,7 +290,7 @@ GREATEST(tg.sales_price, IFNULL(tsg.sales_price, 0.00)) salesPrice, tag.activity_price activityPrice, tgf.file_url goodsPicture, - tg.goods_tags goodsNurses, + tg.goods_nurses goodsNurses, tag.activity_number activityNumber, tag.sales_number salesNumber, tag.activity_deadline endTime @@ -474,10 +474,12 @@ GREATEST(tg.sales_price, IFNULL(tsg.sales_price, 0.00)) salesPrice, tag.activity_price activityPrice, tgf.file_url goodsPicture, - tg.goods_tags goodsNurses, + tg.goods_nurses goodsNurses, tag.activity_number activityNumber, tag.sales_number salesNumber, - tag.activity_deadline endTime + tag.activity_deadline endTime, + tag.purchase_limitation_flag purchaseLimitationFlag, + tag.limit_number limitNumber FROM t_activity_goods tag INNER JOIN t_goods tg ON tg.goods_id = tag.goods_id LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java index 4de2aa3..a2d3a23 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java @@ -99,4 +99,29 @@ return R.ok(); } + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return R + */ + @PostMapping("/useMemberCoupon") + public R useMemberCoupon(@RequestBody String memberCouponIds){ + memberCouponService.useMemberCoupon(memberCouponIds); + return R.ok(); + } + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return R + */ + @PostMapping("/backMemberCoupon") + public R backMemberCoupon(@RequestBody String memberCouponIds){ + memberCouponService.backMemberCoupon(memberCouponIds); + return R.ok(); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java index d560ee6..3ab8f3f 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java @@ -46,4 +46,24 @@ * @return void */ void timingCheckMemberCoupon(); + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + void useMemberCoupon(@Param("memberCouponIds")String memberCouponIds); + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + void backMemberCoupon(@Param("memberCouponIds")String memberCouponIds); + + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java index f7e6f8a..baf8025 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java @@ -190,4 +190,6 @@ * @return void */ void autoTimeSendCoupon(String couponId); + + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java index 6f8c7c8..1f7a536 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java @@ -1124,4 +1124,5 @@ memberCouponService.save(memberCoupon); memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1); } + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java index 93cce9d..e127461 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java @@ -225,4 +225,28 @@ public void timingCheckMemberCoupon(){ memberCouponMapper.timingCheckMemberCoupon(); } + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + @Override + public void useMemberCoupon(String memberCouponIds){ + memberCouponMapper.useMemberCoupon(memberCouponIds); + } + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + @Override + public void backMemberCoupon(String memberCouponIds){ + memberCouponMapper.backMemberCoupon(memberCouponIds); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java index 5308a00..cf95a7c 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java @@ -1391,10 +1391,15 @@ } //消费变动 if (memberTotalChangeDto.getPayMoney() != null) { - memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); - memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1); - memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); - memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); + if(memberTotalChangeDto.getPayMoney().compareTo(BigDecimal.ZERO)>=0){ + memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); + memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1); + memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); + memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); + }else{ + memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); + memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() - 1); + } } //服务次数变动 if (memberTotalChangeDto.getServiceCount() != null) { diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java index ddab223..3c8875d 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java @@ -75,4 +75,22 @@ * @return void */ void timingCheckMemberCoupon(); + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + void useMemberCoupon(String memberCouponIds); + + /** + * @description 使用优惠券 + * @author jqs + * @date 2023/7/13 19:38 + * @param memberCouponIds + * @return void + */ + void backMemberCoupon(String memberCouponIds); } diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml index 26da9b2..d19f0ce 100644 --- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml +++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml @@ -189,8 +189,18 @@ </select> <update id="timingCheckMemberCoupon"> - UPDATE t_member_coupon - SET coupon_status = 0 + UPDATE t_member_coupon SET coupon_status = 0 WHERE del_flag = 0 AND coupon_status = 1 AND deadline_time < CURDATE() </update> + + <update id="useMemberCoupon"> + UPDATE t_member_coupon SET coupon_status = 2 + WHERE del_flag = 0 AND coupon_status = 1 AND FIND_IN_SET(id, #{memberCouponIds}) > 0 + </update> + + <update id="backMemberCoupon"> + UPDATE t_member_coupon SET coupon_status = 1 + WHERE del_flag = 0 AND coupon_status = 2 AND FIND_IN_SET(id, #{memberCouponIds}) > 0 + </update> + </mapper> diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java index fb973f8..f3a8f1d 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java @@ -107,5 +107,16 @@ return R.ok(); } - + /** + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 + * @param orderId + * @return R + */ + @PostMapping("/autoCancelOrder") + public R autoCancelOrder(@RequestBody String orderId){ + orderService.autoCancelOrder(orderId); + return R.ok(); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java index e15e486..4cfa669 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java @@ -1,15 +1,16 @@ package com.ruoyi.order.domain.pojo.account; -import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; /** * <p> @@ -66,7 +67,7 @@ * 退款金额 */ @TableField("refund_money") - private String refundMoney; + private BigDecimal refundMoney; /** * 退款理由 */ @@ -76,7 +77,7 @@ * 订单金额 */ @TableField("order_money") - private String orderMoney; + private BigDecimal orderMoney; /** * 退款出资商户 REFUND_SOURCE_PARTNER_ADVANCE : 电商平台垫付,需要向微信支付申请开通 diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java index 989adcd..95d4645 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java @@ -165,7 +165,7 @@ * 活动id */ @TableField("activity_id") - private Long activityId; + private String activityId; /** * 活动名称 diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java index 5b5a7f4..55acdf9 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java @@ -523,5 +523,13 @@ */ List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, @Param("param")MgtShopAllOrderPageDto mgtShopAllOrderPageDto); - + /** + * @description 统计用户活动参与次数 + * @author jqs + * @date 2023/7/13 18:27 + * @param userId + * @param activityId + * @return Integer + */ + Integer countUserActivityByActivity(@Param("userId")Long userId, @Param("activityId")String activityId); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java index 9517583..05b018d 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.order.service.impl.order; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.order.domain.pojo.order.OrderGoods; import com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo; @@ -50,4 +51,19 @@ public List<MgtOrderGoodsDetailVo> listMgtVoByOrderId(String orderId){ return orderGoodsMapper.listMgtVoByOrderId(orderId); } + + /** + * @description + * @author jqs + * @date 2023/7/13 17:25 + * @param orderId + * @return List<OrderGoods> + */ + @Override + public List<OrderGoods> listByOrderId(String orderId){ + LambdaQueryWrapper<OrderGoods> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OrderGoods::getDelFlag,0); + queryWrapper.eq(OrderGoods::getOrderId,orderId); + return this.list(queryWrapper); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index a0fa97a..6b2ad45 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -6,12 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.dto.*; +import com.ruoyi.order.domain.pojo.account.OrderRefund; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.pojo.order.OrderGoods; @@ -23,8 +25,10 @@ import com.ruoyi.order.service.order.OrderService; import com.ruoyi.order.service.order.UserServiceRecordService; import com.ruoyi.system.api.constant.AppErrorConstant; +import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; @@ -35,11 +39,15 @@ import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -96,6 +104,9 @@ @Resource private RedisService redisService; + @Autowired + private RedissonClient redissonClient; + /** * @description: buyGoods * @param: appSureOrderDto @@ -106,9 +117,12 @@ @Override public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) { Long userId = appSureOrderDto.getUserId(); + // 初始化订单对象 AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); + // 初始化订单商品列表 List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>(); AppSureOrderGoodsVo appSureOrderGoodsVo; + // 获取购买商品列表 List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList(); String goodsId; Integer buyNum; @@ -118,8 +132,11 @@ BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; + // 获取用户优惠券列表 List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData(); + // 初始化商品优惠券列表 List<AppMemberCouponVo> appGoodsMemberCouponVoList; + // 将优惠券列表转换为Map,以优惠券ID为键 Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); AppMemberCouponVo appMemberCouponVo; Integer couponType; @@ -129,27 +146,31 @@ BigDecimal goodsDeposit; GoodsFile goodsFile; Integer useCoupon; + // 初始化订单相关金额 BigDecimal orderGoodsMoney = new BigDecimal("0.00"); BigDecimal couponDiscount = new BigDecimal("0.00"); BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); + // 遍历购买商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); useCoupon = 0; goodsId = appBuyGoodsDto.getGoodsId(); buyNum = appBuyGoodsDto.getBuyNum(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); + // 获取商品信息 goods = remoteGoodsService.getGoods(goodsId).getData(); + // 设置订单商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); - //商品图片 + // 获取商品图片 goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); appSureOrderGoodsVo.setBuyNum(buyNum); goodsPrice = goods.getSalesPrice(); - //商户定制价格 + // 获取商户定制价格 AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto(); appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId()); @@ -161,6 +182,7 @@ buyNumBig = BigDecimal.valueOf(buyNum); goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; + // 处理优惠券 if (memberCouponId != null) { appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { @@ -193,28 +215,45 @@ goodsDeposit = new BigDecimal("0.00"); } appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); + // 计算订单总金额 orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); - //商品关联优惠券 + // 获取商品关联优惠券 appGoodsMemberCouponVoList = new ArrayList<>(); if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { for (AppMemberCouponVo entity : appMemberCouponVoList) { if (StringUtils.isBlank(entity.getRelGoodsIds())) { - appGoodsMemberCouponVoList.add(entity); + if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { + moneyThreshold = entity.getMoneyThreshold(); + if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { + appGoodsMemberCouponVoList.add(entity); + } + }else{ + appGoodsMemberCouponVoList.add(entity); + } } else if (entity.getRelGoodsIds().contains(goodsId)) { - appGoodsMemberCouponVoList.add(entity); + if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { + moneyThreshold = entity.getMoneyThreshold(); + if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { + appGoodsMemberCouponVoList.add(entity); + } + }else{ + appGoodsMemberCouponVoList.add(entity); + } } } appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } appSureOrderGoodsVoList.add(appSureOrderGoodsVo); } + // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); appSureOrderVo.setOrderPayDeposit(orderPayDeposit); appSureOrderVo.setOrderPayMoney(orderPayMoney); + // 设置订单商品列表 appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList); return appSureOrderVo; } @@ -348,6 +387,8 @@ String orderGoodsId; // 创建商品类型集合,用于记录订单中所有商品的类型 HashSet<String> goodsTypeSet = new HashSet<>(); + //使用优惠券 + StringJoiner memberCouponSJ = new StringJoiner(","); // 遍历购买的商品列表 for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); @@ -411,6 +452,7 @@ useCoupon = 1; } } + memberCouponSJ.add(memberCouponId); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); @@ -511,6 +553,22 @@ appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); // 调用支付 + //使用优惠券 + if(memberCouponSJ!=null){ + remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); + } + //生成自动取消订单延时任务 + Integer delayTime = 30; + if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ + delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); + } + redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); + DelayTask delayTask = new DelayTask(); + delayTask.setDelFlag(0); + delayTask.setCreateTime(new Date()); + delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); + delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); + remoteConfigService.addDelayTask(delayTask); return appPlaceOrderVo; } @@ -533,11 +591,18 @@ String goodsId = appPlaceActivityDto.getGoodsId(); Integer buyNum = appPlaceActivityDto.getBuyNum(); //redis库存控制极简版 - Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); - if(surpNum==null||surpNum<buyNum){ - throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); - }else{ - redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); + String goodsLock = "goods_lock_"+activityId+"_"+goodsId; + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); + if(surpNum==null||surpNum<buyNum){ + throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); + }else{ + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); + } + }finally{ + redissonLock.unlock(); } // 定义购买数量,服务数量,商品数量 BigDecimal buyNumBig; @@ -665,7 +730,7 @@ order.setDelFlag(0); order.setOrderStatus(1); order.setOrderNo(orderNo); - order.setOrderFrom(1); + order.setOrderFrom(2); order.setShopId(appPlaceActivityDto.getShopId()); order.setUserId(userId); order.setOrderMoney(orderGoodsMoney); @@ -705,7 +770,28 @@ // 设置订单ID和订单号 appPlaceOrderVo.setOrderId(orderId); appPlaceOrderVo.setOrderNo(orderNo); + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(activityId); + agStockChangeDto.setGoodsId(goodsId); + agStockChangeDto.setChangeType(2); + agStockChangeDto.setChangeNum(buyNum); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); // 调用支付 + //生成自动取消订单延时任务 + Integer delayTime = 30; + if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ + delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); + } + redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); + DelayTask delayTask = new DelayTask(); + delayTask.setDelFlag(0); + delayTask.setCreateTime(new Date()); + delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); + delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); + remoteConfigService.addDelayTask(delayTask); return appPlaceOrderVo; } @@ -790,12 +876,13 @@ @Override public void cancelOrder(String orderId) { Order order = this.getById(orderId); - if (order.getOrderStatus() != 1) { + if (order.getOrderStatus() == 1) { + this.autoCancelOrder(orderId); + }else if(order.getOrderStatus() == 2){ + this.refundOrder(orderId); + }else{ throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); } - order.setOrderStatus(0); - order.setCancelTime(new Date()); - this.saveOrUpdate(order); } /** @@ -1428,6 +1515,7 @@ } ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setOrderType(1); shopTotalChangeDto.setCycleMoney(cycleMoney); shopTotalChangeDto.setServiceMoney(serviceMoney); shopTotalChangeDto.setExperienceMoney(experienceMoney); @@ -2802,4 +2890,314 @@ } return shopAllOrderPageVoList; } + + /** + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 + * @param orderId + * @return void + */ + @Override + public void autoCancelOrder(String orderId){ + //更新订单信息 + Order order = this.getById(orderId); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + //活动订单回退库存 + if(order.getOrderFrom()==2){ + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + for(OrderGoods orderGoods : orderGoodsList){ + //redis库存控制极简版 + String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); + }finally{ + redissonLock.unlock(); + } + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(order.getActivityId()); + agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); + agStockChangeDto.setChangeType(1); + agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + } + } + }else{ + if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ + //回退优惠券 + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { + StringJoiner memberCouponSJ = new StringJoiner(","); + for (OrderGoods orderGoods : orderGoodsList) { + memberCouponSJ.add(orderGoods.getCouponId()); + } + if(memberCouponSJ!=null){ + remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); + + } + } + } + } + } + + /** + * @description 订单支付回调 + * @author jqs + * @date 2023/7/13 17:57 + * @param orderId + * @return void + */ + @Override + public void payBack(String orderId) { + // 更新订单状态 + Order order = this.getById(orderId); + order.setOrderStatus(2); + order.setPayTime(new Date()); + this.saveOrUpdate(order); + // 初始化各类商品的收款金额 + BigDecimal cycleMoney = new BigDecimal("0.00"); + BigDecimal experienceMoney = new BigDecimal("0.00"); + BigDecimal serviceMoney = new BigDecimal("0.00"); + BigDecimal goodsMoney = new BigDecimal("0.00"); + // 初始化各类商品的存在状态 + Boolean haveCycle = false; + Boolean haveService = false; + Boolean haveExperience = false; + Boolean haveGoods = false; + // 获取订单中的所有商品 + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态 + for (OrderGoods orderGoods : orderGoodsList) { + switch (orderGoods.getGoodsType()) { + case 1: + cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); + haveCycle = true; + break; + case 2: + serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveService = true; + break; + case 3: + experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveExperience = true; + break; + case 4: + goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); + haveGoods = true; + break; + default: + break; + } + } + // 更新商户统计信息 + ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setOrderType(1); + shopTotalChangeDto.setCycleMoney(cycleMoney); + shopTotalChangeDto.setServiceMoney(serviceMoney); + shopTotalChangeDto.setExperienceMoney(experienceMoney); + shopTotalChangeDto.setGoodsMoney(goodsMoney); + remoteShopService.changeShopTotal(shopTotalChangeDto); + // 初始化会员统计信息 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); + Integer integral = Integer.valueOf(integralBig.toString()); + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + } + // 设置会员支付金额和支付时间 + memberTotalChangeDto.setPayMoney(order.getPayMoney()); + memberTotalChangeDto.setPayTime(new Date()); + // 根据商品存在状态,设置会员统计信息 + if (haveCycle) { + memberTotalChangeDto.setCycleOrderChange(1); + } + if (haveService) { + memberTotalChangeDto.setServiceOrderChange(1); + } + if (haveExperience) { + memberTotalChangeDto.setExperienceOrderChange(1); + } + if (haveGoods) { + memberTotalChangeDto.setGoodsOrderChange(1); + } + // 更新会员统计信息 + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + // 如果订单来源于活动,则更新活动统计信息 + if (order.getOrderFrom() == 2) { + ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); + activityTotalChangeDto.setActivityId(order.getActivityId()); + activityTotalChangeDto.setChangeType(1); + activityTotalChangeDto.setChangeNum(1); + activityTotalChangeDto.setMoney(order.getPayMoney()); + Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + if (userActivityNum == 1) { + activityTotalChangeDto.setPersonNum(1); + } else { + activityTotalChangeDto.setPersonNum(0); + } + activityTotalChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityTotal(activityTotalChangeDto); + } + } + + /** + * @description 订单退款 + * @author jqs + * @date 2023/7/13 18:36 + * @param orderId + * @return void + */ + @Override + public void refundOrder(String orderId){ + //更新订单信息 + Order order = this.getById(orderId); + order.setOrderStatus(0); + order.setCancelTime(new Date()); + this.saveOrUpdate(order); + OrderRefund orderRefund = new OrderRefund(); + String refundId = IdUtils.simpleUUID(); + orderRefund.setRefundId(refundId); + orderRefund.setDelFlag(0); + orderRefund.setRefundType(1); + orderRefund.setOrderId(order.getOrderId()); + orderRefund.setUserId(order.getUserId()); + orderRefund.setShopId(order.getShopId()); + orderRefund.setRefundMoney(order.getPayMoney()); + orderRefund.setOrderMoney(order.getPayMoney()); + orderRefund.setCreateTime(new Date()); + // 初始化各类商品的收款金额 + BigDecimal cycleMoney = new BigDecimal("0.00"); + BigDecimal experienceMoney = new BigDecimal("0.00"); + BigDecimal serviceMoney = new BigDecimal("0.00"); + BigDecimal goodsMoney = new BigDecimal("0.00"); + // 初始化各类商品的存在状态 + Boolean haveCycle = false; + Boolean haveService = false; + Boolean haveExperience = false; + Boolean haveGoods = false; + List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); + if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ + StringJoiner memberCouponSJ = new StringJoiner(","); + for(OrderGoods orderGoods : orderGoodsList){ + if(order.getOrderFrom()==2){ + //redis库存控制极简版 + //活动订单回退库存 + String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); + RLock redissonLock = redissonClient.getLock(goodsLock); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); + redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); + }finally{ + redissonLock.unlock(); + } + //改变活动库存 + AGStockChangeDto agStockChangeDto = new AGStockChangeDto(); + agStockChangeDto.setActivityId(order.getActivityId()); + agStockChangeDto.setGoodsId(orderGoods.getGoodsId()); + agStockChangeDto.setChangeType(1); + agStockChangeDto.setChangeNum(orderGoods.getBuyNum()); + agStockChangeDto.setShopId(order.getShopId()); + agStockChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityStock(agStockChangeDto); + }else{ + memberCouponSJ.add(orderGoods.getCouponId()); + } + switch (orderGoods.getGoodsType()) { + case 1: + cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); + haveCycle = true; + break; + case 2: + serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveService = true; + break; + case 3: + experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); + haveExperience = true; + break; + case 4: + goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); + haveGoods = true; + break; + default: + break; + } + } + //回退优惠券 + if(memberCouponSJ!=null){ + remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); + } + } + // 更新商户统计信息 + ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); + shopTotalChangeDto.setOrderType(2); + shopTotalChangeDto.setShopId(order.getShopId()); + shopTotalChangeDto.setCycleMoney(cycleMoney); + shopTotalChangeDto.setServiceMoney(serviceMoney); + shopTotalChangeDto.setExperienceMoney(experienceMoney); + shopTotalChangeDto.setGoodsMoney(goodsMoney); + remoteShopService.changeShopTotal(shopTotalChangeDto); + // 初始化会员统计信息 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()); + Integer integral = Integer.valueOf(integralBig.toString()); + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(2); + }*/ + // 设置会员支付金额和支付时间 + memberTotalChangeDto.setPayMoney(order.getPayMoney().negate()); + // 根据商品存在状态,设置会员统计信息 + if (haveCycle) { + memberTotalChangeDto.setCycleOrderChange(-1); + } + if (haveService) { + memberTotalChangeDto.setServiceOrderChange(-1); + } + if (haveExperience) { + memberTotalChangeDto.setExperienceOrderChange(-1); + } + if (haveGoods) { + memberTotalChangeDto.setGoodsOrderChange(-1); + } + // 更新会员统计信息 + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + // 如果订单来源于活动,则更新活动统计信息 + if (order.getOrderFrom() == 2) { + ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); + activityTotalChangeDto.setActivityId(order.getActivityId()); + activityTotalChangeDto.setChangeType(2); + activityTotalChangeDto.setChangeNum(1); + activityTotalChangeDto.setRefundNum(1); + activityTotalChangeDto.setMoney(order.getPayMoney()); + Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + if (userActivityNum > 0) { + activityTotalChangeDto.setPersonNum(1); + } else { + activityTotalChangeDto.setPersonNum(0); + } + activityTotalChangeDto.setUserId(order.getUserId()); + remoteActivityService.changeActivityTotal(activityTotalChangeDto); + } + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java index dbe8b1a..8fb0ee2 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java @@ -34,4 +34,13 @@ * @return List<MgtOrderGoodsDetailVo> */ List<MgtOrderGoodsDetailVo> listMgtVoByOrderId(String orderId); + + /** + * @description + * @author jqs + * @date 2023/7/13 17:25 + * @param orderId + * @return List<OrderGoods> + */ + List<OrderGoods> listByOrderId(String orderId); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java index 8db8bc2..233b0fb 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java @@ -398,4 +398,28 @@ * @return List<MgtShopAllOrderPageVo> */ List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto); + + /** + * @description 自动取消订单 + * @author jqs + * @date 2023/7/13 17:15 + * @param orderId + * @return void + */ + void autoCancelOrder(String orderId); + + /** + * @description 订单支付回调 + * @author jqs + * @date 2023/7/13 17:57 + * @param orderId + * @return void + */ + void payBack(String orderId); + + /** + * 取消订单 + * @param orderId + */ + void refundOrder(String orderId); } diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 0fc8589..23e3b35 100644 --- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -1456,4 +1456,11 @@ </if> ORDER BY toc.create_time DESC </select> + + + <select id="countUserActivityByActivity" resultType="java.lang.Integer"> + SELECT COUNT(order_id) + FROM t_order + WHERE del_flag = 0 AND order_from =2 AND user_id = #{userId} AND activity_id = #{activityId} AND order_status > 0 + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java index 73ece42..eecc004 100644 --- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java +++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java @@ -5,15 +5,15 @@ import com.ruoyi.shop.mapper.shop.ShopTotalMapper; import com.ruoyi.shop.service.shop.ShopTotalService; import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.TimeUnit; /** * <p> @@ -26,8 +26,9 @@ @Service public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService { - private Lock lock = new ReentrantLock(); - private ExecutorService executor = Executors.newSingleThreadExecutor(); + @Autowired + private RedissonClient redissonClient; + @Resource private ShopTotalMapper shopTotalMapper; @@ -39,14 +40,14 @@ */ @Override public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) { - executor.execute(() -> { - lock.lock(); - try { - handleShopTotal(shopTotalChangeDto); - } finally { - lock.unlock(); - } - }); + //redis库存控制极简版 + RLock redissonLock = redissonClient.getLock("shop_total_"+shopTotalChangeDto.getShopId()); + try{ + redissonLock.lock(30, TimeUnit.SECONDS); + handleShopTotal(shopTotalChangeDto); + }finally{ + redissonLock.unlock(); + } } @Override @@ -59,34 +60,52 @@ ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId()); //订单变化 BigDecimal payMoney = BigDecimal.ZERO; - Boolean haveOrder = false; - if(shopTotalChangeDto.getCycleMoney()!=null){ - shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney())); - payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); - shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1); - haveOrder = true; - } - if(shopTotalChangeDto.getExperienceMoney()!=null){ - shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney())); - payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); - shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1); - haveOrder = true; - } - if(shopTotalChangeDto.getServiceMoney()!=null){ - shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney())); - payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); - shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1); - haveOrder = true; - } - if(shopTotalChangeDto.getGoodsMoney()!=null){ - shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney())); - payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); - shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1); - haveOrder = true; - } - if(haveOrder){ + if(shopTotalChangeDto.getOrderType()==1){ + if(shopTotalChangeDto.getCycleMoney()!=null){ + shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); + shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1); + } + if(shopTotalChangeDto.getExperienceMoney()!=null){ + shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); + shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1); + } + if(shopTotalChangeDto.getServiceMoney()!=null){ + shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); + shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1); + } + if(shopTotalChangeDto.getGoodsMoney()!=null){ + shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); + shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1); + } shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().add(payMoney)); shopTotal.setTotalOrder(shopTotal.getTotalOrder()+1); + }else{ + if(shopTotalChangeDto.getCycleMoney()!=null){ + shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().subtract(shopTotalChangeDto.getCycleMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney()); + shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()-1); + } + if(shopTotalChangeDto.getExperienceMoney()!=null){ + shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().subtract(shopTotalChangeDto.getExperienceMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney()); + shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()-1); + } + if(shopTotalChangeDto.getServiceMoney()!=null){ + shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().subtract(shopTotalChangeDto.getServiceMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney()); + shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()-1); + } + if(shopTotalChangeDto.getGoodsMoney()!=null){ + shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().subtract(shopTotalChangeDto.getGoodsMoney())); + payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney()); + shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()-1); + } + shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().subtract(payMoney)); + shopTotal.setTotalOrder(shopTotal.getTotalOrder()-1); } //活动变化 if(shopTotalChangeDto.getActivityCount()!=null){ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java index 0435d5d..4b312f5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java @@ -335,6 +335,13 @@ return R.ok(); } + @RequestMapping(value = "/listOperTitle", method = RequestMethod.POST) + @ApiOperation(value = "获取操作类型列表") + public R<List<String>> pageOperLog() { + List<String> operTitleList = customConfigService.listOperTitle(); + return R.ok(operTitleList); + } + @RequestMapping(value = "/pageOperLog", method = RequestMethod.POST) @ApiOperation(value = "分页获取操作日志") public R<Page<MgtOperLogPageVo>> pageOperLog(@RequestBody MgtOperLogPageDto mgtOperLogPageDto) { @@ -421,6 +428,14 @@ return R.ok(page.setRecords(mgtArticlePageVoList)); } + @RequestMapping(value = "/getArticle", method = RequestMethod.POST) + @ApiOperation(value = "获取文章") + public R<MgtArticleGetVo> getArticle(@RequestBody MgtBaseGetDto mgtBaseGetDto) { + mgtBaseGetDto.setUserId(SecurityUtils.getUserId()); + MgtArticleGetVo mgtArticleGetVo = articleService.getArticle(Long.valueOf(mgtBaseGetDto.getId())); + return R.ok(mgtArticleGetVo); + } + @RequestMapping(value = "/editArticle", method = RequestMethod.POST) @Log(title = "文章管理", businessType = BusinessType.UPDATE,operContent = "修改文章") @ApiOperation(value = "修改文章") diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java index 9627499..cbcb54f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppConfigController.java @@ -1,9 +1,15 @@ package com.ruoyi.system.controller.miniapp; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.domain.dto.AppAgreementDto; -import com.ruoyi.system.domain.vo.AppAgreementVo; +import com.ruoyi.system.domain.dto.AppArticlePageDto; +import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.service.config.AgreementService; +import com.ruoyi.system.service.config.ArticleService; +import com.ruoyi.system.service.config.SysClassificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; @@ -12,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; /** * @author jqs34 @@ -29,6 +36,12 @@ @Resource private AgreementService agreementService; + @Resource + private SysClassificationService sysClassificationService; + + @Resource + private ArticleService articleService; + @RequestMapping(value = "/getAppAgreement", method = RequestMethod.POST) @ApiOperation(value = "获取协议") @@ -37,5 +50,29 @@ return R.ok(appAgreementVo); } + @RequestMapping(value = "/listArticleClass", method = RequestMethod.POST) + @ApiOperation(value = "获取文章分类") + public R<List<AppClassListVo>> listArticleClass(){ + List<AppClassListVo> classVoList = sysClassificationService.listByType(1); + return R.ok(classVoList); + } + + @RequestMapping(value = "/listArticleByClass", method = RequestMethod.POST) + @ApiOperation(value = "通过分类获取文章列表") + public R<Page<AppArticlePageVo>> listArticleByClass(@RequestBody AppArticlePageDto appArticlePageDto){ + Page<AppArticlePageVo> page = new Page<>(); + page.setSize(appArticlePageDto.getPageSize()); + page.setCurrent(appArticlePageDto.getPageNum()); + List<AppArticlePageVo> appClassListVoList = articleService.listArticleByClass(page, appArticlePageDto.getClassId()); + return R.ok(page.setRecords(appClassListVoList)); + } + + @RequestMapping(value = "/getArticle", method = RequestMethod.POST) + @ApiOperation(value = "获取文章") + public R<AppArticleGetVo> getArticle(@RequestBody MgtBaseGetDto mgtBaseGetDto) { + mgtBaseGetDto.setUserId(SecurityUtils.getUserId()); + AppArticleGetVo appArticleGetVo = articleService.getAppArticle(Long.valueOf(mgtBaseGetDto.getId())); + return R.ok(appArticleGetVo); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppArticlePageDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppArticlePageDto.java new file mode 100644 index 0000000..36d8be5 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppArticlePageDto.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.domain.dto; + +import com.ruoyi.system.api.domain.dto.AppPageDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName AppArticlePageDto + * @Description TODO + * @Author jqs + * @Date 2023/7/13 11:28 + * @Version 1.0 + */ +@Data +public class AppArticlePageDto extends AppPageDto { + + @ApiModelProperty(value = "分类id") + private Long classId; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java index 98678b8..0897a47 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtArticleEditDto.java @@ -26,6 +26,9 @@ @ApiModelProperty(value = "文章标题") private String articleTitle; + @ApiModelProperty(value = "文章简介") + private String articleIntroduce; + @ApiModelProperty(value = "文章详情") private String articleDetail; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java index e032702..514a314 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Article.java @@ -89,6 +89,9 @@ @TableField("update_user_id") private Long updateUserId; + @TableField("article_introduce") + private String articleIntroduce; + @Override protected Serializable pkVal() { diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticleGetVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticleGetVo.java new file mode 100644 index 0000000..30e1f45 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticleGetVo.java @@ -0,0 +1,34 @@ +package com.ruoyi.system.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName AppArticleGetVo + * @Description TODO + * @Author jqs + * @Date 2023/7/13 11:56 + * @Version 1.0 + */ +@Data +public class AppArticleGetVo { + + + @ApiModelProperty(value = "文章id") + private Long articleId; + + @ApiModelProperty(value = "文章标题") + private String articleTitle; + + @ApiModelProperty(value = "文章简介") + private String articleIntroduce; + + @ApiModelProperty(value = "文章详情") + private String articleDetail; + + @ApiModelProperty(value = "文章封面") + private String articleCover; + + @ApiModelProperty(value = "文章视频") + private String articleVideo; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticlePageVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticlePageVo.java new file mode 100644 index 0000000..f800cfb --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppArticlePageVo.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName AppArticlePageVo + * @Description TODO + * @Author jqs + * @Date 2023/7/13 11:35 + * @Version 1.0 + */ +@Data +public class AppArticlePageVo { + + + @ApiModelProperty(value = "文章id") + private Long articleId; + + @ApiModelProperty(value = "文章标题") + private String articleTitle; + + @ApiModelProperty(value = "文章简介") + private String articleIntroduce; + + @ApiModelProperty(value = "文章封面") + private String articleCover; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppClassListVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppClassListVo.java new file mode 100644 index 0000000..a9b69c8 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppClassListVo.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName AppClassListVo + * @Description TODO + * @Author jqs + * @Date 2023/7/13 11:19 + * @Version 1.0 + */ +@Data +public class AppClassListVo { + + + @ApiModelProperty(value = "分类id") + private Long classId; + + + @ApiModelProperty(value = "分类名字") + private String className; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticleGetVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticleGetVo.java new file mode 100644 index 0000000..4ba883b --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticleGetVo.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName MgtArticleGetVo + * @Description TODO + * @Author jqs + * @Date 2023/7/13 10:58 + * @Version 1.0 + */ +@Data +public class MgtArticleGetVo { + + @ApiModelProperty(value = "文章id") + private Long articleId; + + @ApiModelProperty(value = "文章分类id") + private Long classId; + + @ApiModelProperty(value = "文章排序") + private Integer articleSort; + + @ApiModelProperty(value = "文章标题") + private String articleTitle; + + @ApiModelProperty(value = "文章简介") + private String articleIntroduce; + + @ApiModelProperty(value = "文章详情") + private String articleDetail; + + @ApiModelProperty(value = "文章封面") + private String articleCover; + + @ApiModelProperty(value = "文章视频") + private String articleVideo; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java index 05855d0..75cca7a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtArticlePageVo.java @@ -27,9 +27,12 @@ @ApiModelProperty(value = "文章标题") private String articleTitle; + @ApiModelProperty(value = "文章简介") + private String articleIntroduce; + @ApiModelProperty(value = "文章封面") private String articleCover; - @ApiModelProperty(value = "文章标题") + @ApiModelProperty(value = "创建时间") private Date createTime; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java index 6f84050..78e9c3a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java @@ -4,8 +4,10 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.constant.DelayTaskEnum; +import com.ruoyi.system.api.service.RemoteActivityService; import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteCouponService; +import com.ruoyi.system.api.service.RemoteOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.core.RedisTemplate; @@ -33,6 +35,10 @@ private RemoteCouponService remoteCouponService; + private RemoteActivityService remoteActivityService; + + private RemoteOrderService remoteOrderService; + public RedisListener(RedisMessageListenerContainer listenerContainer, RedisTemplate redisTemplate) { super(listenerContainer); @@ -51,9 +57,19 @@ String[] split = expiredKey.split("-"); String operation=split[0]; if(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode().equals(operation)){ - //自动关闭订单 + //自动发送优惠券 autoTimeSendCoupon(split[1]); + }else if(DelayTaskEnum.ACTIVITY_START_TASK.getCode().equals(operation)){ + //自动开始任务 + autoStartActivity(split[1]); + }else if(DelayTaskEnum.ACTIVITY_END_TASK.getCode().equals(operation)){ + //自动结束任务 + autoEndActivity(split[1]); + }else if(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode().equals(operation)){ + //自动结束任务 + autoCancelOrder(split[1]); } + //删除失效的key redisTemplate.delete(expiredKey); } @@ -83,5 +99,24 @@ remoteConfigService.deleteDelayTask(DelayTaskEnum.COUPON_SEND_DELAY_TASK.getCode()+"-"+couponId); } + private void autoStartActivity(String activityId){ + log.info("autoStartActivity scheduler task is running :" + activityId); + remoteActivityService.startActivity(activityId); + //删除定时任务 + remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_START_TASK.getCode()+"-"+activityId); + } + private void autoEndActivity(String activityId){ + log.info("autoEndActivity scheduler task is running :" + activityId); + remoteActivityService.endActivity(activityId); + //删除定时任务 + remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_END_TASK.getCode()+"-"+activityId); + } + + private void autoCancelOrder(String orderId){ + log.info("autoCancelOrder scheduler task is running :" + orderId); + remoteOrderService.autoCancelOrder(orderId); + //删除定时任务 + remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java index 587d35f..7572d4b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/ArticleMapper.java @@ -1,9 +1,10 @@ package com.ruoyi.system.mapper.config; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.vo.AppArticlePageVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import org.apache.ibatis.annotations.Param; @@ -37,4 +38,14 @@ * @return List<MgtArticlePageVo> */ List<MgtArticlePageVo> pageArticle(Page page,@Param("param") MgtArticlePageDto mgtArticlePageDto); + + + /** + * @description 通过分类id获取文章 + * @author jqs + * @date 2023/7/13 11:37 + * @param classId + * @return List<AppClassListVo> + */ + List<AppArticlePageVo> listArticleByClass(Page page, @Param("classId")Long classId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java index 232106d..d486b76 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java @@ -37,4 +37,13 @@ * @return List<MgtOperLogPageVo> */ List<MgtOperLogPageVo> pageOperLog(Page page, MgtOperLogPageDto mgtOperLogPageDto); + + /** + * @description + * @author jqs + * @date 2023/7/13 15:52 + * @param + * @return List<String> + */ + List<String> listOperTitle(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java index 87099f0..a5adeaa 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ArticleService.java @@ -6,6 +6,9 @@ import com.ruoyi.system.domain.dto.MgtArticleEditDto; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; +import com.ruoyi.system.domain.vo.AppArticleGetVo; +import com.ruoyi.system.domain.vo.AppArticlePageVo; +import com.ruoyi.system.domain.vo.MgtArticleGetVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import java.util.List; @@ -56,4 +59,32 @@ * @return void */ void deleteArticle(MgtBaseGetDto mgtBaseGetDto); + + + /** + * @description 获取文章 + * @author jqs + * @date 2023/7/13 11:00 + * @param articleId + * @return MgtArticleGetVo + */ + MgtArticleGetVo getArticle(Long articleId); + + /** + * @description 通过分类id获取文章 + * @author jqs + * @date 2023/7/13 11:37 + * @param classId + * @return List<AppClassListVo> + */ + List<AppArticlePageVo> listArticleByClass(Page page, Long classId); + + /** + * @description + * @author jqs + * @date 2023/7/13 11:57 + * @param articleId + * @return AppArticleGetVo + */ + AppArticleGetVo getAppArticle (Long articleId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java index fffbd88..16de6be 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java @@ -87,6 +87,15 @@ List<MgtOperLogPageVo> pageOperLog(Page page, MgtOperLogPageDto mgtOperLogPageDto); /** + * @description + * @author jqs + * @date 2023/7/13 15:53 + * @param + * @return List<String> + */ + List<String> listOperTitle(); + + /** * @description 获取单个自定义配置 * @author jqs * @date 2023/6/9 15:40 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java index 59267fd..4809513 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysClassificationService.java @@ -5,6 +5,7 @@ import com.ruoyi.system.api.domain.poji.config.SysClassification; import com.ruoyi.system.domain.dto.MgtClassificationEditDto; import com.ruoyi.system.domain.dto.MgtClassificationPageDto; +import com.ruoyi.system.domain.vo.AppClassListVo; import com.ruoyi.system.domain.vo.MgtClassificationPageVo; import java.util.List; @@ -56,4 +57,13 @@ * @return void */ void deleteClassification(Long classId); + + /** + * @description + * @author jqs + * @date 2023/7/13 11:21 + * @param + * @return List<AppClassListVo> + */ + List<AppClassListVo> listByType(Integer classType); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java index 13b007b..f414ccb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ArticleServiceImpl.java @@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.domain.dto.MgtArticleEditDto; import com.ruoyi.system.domain.dto.MgtArticlePageDto; import com.ruoyi.system.domain.pojo.config.Article; +import com.ruoyi.system.domain.vo.AppArticleGetVo; +import com.ruoyi.system.domain.vo.AppArticlePageVo; +import com.ruoyi.system.domain.vo.MgtArticleGetVo; import com.ruoyi.system.domain.vo.MgtArticlePageVo; import com.ruoyi.system.mapper.config.ArticleMapper; import com.ruoyi.system.service.config.ArticleService; @@ -85,6 +89,7 @@ article.setClassId(mgtArticleEditDto.getClassId()); article.setArticleSort(mgtArticleEditDto.getArticleSort()); article.setArticleTitle(mgtArticleEditDto.getArticleTitle()); + article.setArticleIntroduce(mgtArticleEditDto.getArticleIntroduce()); article.setArticleDetail(mgtArticleEditDto.getArticleDetail()); article.setArticleCover(mgtArticleEditDto.getArticleCover()); article.setArticleVideo(mgtArticleEditDto.getArticleVideo()); @@ -109,4 +114,46 @@ article.setUpdateUserId(mgtBaseGetDto.getUserId()); this.saveOrUpdate(article); } + + /** + * @description 获取文章 + * @author jqs + * @date 2023/7/13 11:00 + * @param articleId + * @return MgtArticleGetVo + */ + @Override + public MgtArticleGetVo getArticle(Long articleId){ + MgtArticleGetVo mgtArticleGetVo = new MgtArticleGetVo(); + Article article = this.getById(articleId); + BeanUtils.copyProperties(article,mgtArticleGetVo); + return mgtArticleGetVo; + } + + /** + * @description 通过分类id获取文章 + * @author jqs + * @date 2023/7/13 11:37 + * @param classId + * @return List<AppClassListVo> + */ + @Override + public List<AppArticlePageVo> listArticleByClass(Page page, Long classId){ + return articleMapper.listArticleByClass(page, classId); + } + + /** + * @description + * @author jqs + * @date 2023/7/13 11:57 + * @param articleId + * @return AppArticleGetVo + */ + @Override + public AppArticleGetVo getAppArticle (Long articleId){ + AppArticleGetVo appArticleGetVo = new AppArticleGetVo(); + Article article = this.getById(articleId); + BeanUtils.copyProperties(article,appArticleGetVo); + return appArticleGetVo; + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java index c795cc2..f25a3be 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.system.api.constant.ConfigEnum; +import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.api.domain.vo.AppOtherConfigGetVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -64,6 +66,9 @@ @Resource private StaffSuggestService staffSuggestService; + + @Resource + private RedisService redisService; /** * @param key @@ -257,30 +262,39 @@ customConfig.setCreateTime(updateTime); customConfig.setUpdateTime(updateTime); switch (configEnum) { + //分享小程序可获得积分 case SHARE_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getShareIntegral().toString()); this.saveOrUpdate(customConfig); break; + //平台建议可获得积分 case SUGGEST_PLATFORM_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSuggestPlatformIntegral().toString()); this.saveOrUpdate(customConfig); break; + //每日签到可获得积分 case SIGN_IN_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSignInIntegral().toString()); this.saveOrUpdate(customConfig); break; + //门店建议可获得积分 case SUGGEST_SHOP_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getSuggestShopIntegral().toString()); this.saveOrUpdate(customConfig); break; + //C端订单自动取消时间 case ORDER_AUTO_CANCEL_TIME: customConfig.setConfigValue(mgtOtherConfigEditDto.getOrderAutoCancelTime().toString()); + redisService.setCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME,mgtOtherConfigEditDto.getOrderAutoCancelTime()); this.saveOrUpdate(customConfig); break; + //购物满1元可获得积分 case PAY_MONEY_INTEGRAL: customConfig.setConfigValue(mgtOtherConfigEditDto.getPayMoneyIntegral().toString()); + redisService.setCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL,mgtOtherConfigEditDto.getPayMoneyIntegral()); this.saveOrUpdate(customConfig); break; + //首页风格 case HOME_STYLE: customConfig.setConfigValue(mgtOtherConfigEditDto.getHomeStyle().toString()); this.saveOrUpdate(customConfig); @@ -533,6 +547,18 @@ } /** + * @description + * @author jqs + * @date 2023/7/13 15:52 + * @param + * @return List<String> + */ + @Override + public List<String> listOperTitle(){ + return customConfigMapper.listOperTitle(); + } + + /** * @description 获取单个自定义配置 * @author jqs * @date 2023/6/9 15:40 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java index bb5b412..f05ddba 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysClassificationServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.system.api.service.RemoteGoodsService; import com.ruoyi.system.domain.dto.MgtClassificationEditDto; import com.ruoyi.system.domain.dto.MgtClassificationPageDto; +import com.ruoyi.system.domain.vo.AppClassListVo; import com.ruoyi.system.domain.vo.MgtClassificationPageVo; import com.ruoyi.system.mapper.config.SysClassificationMapper; import com.ruoyi.system.service.config.ArticleService; @@ -17,6 +18,7 @@ import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -131,4 +133,26 @@ remoteGoodsService.deleteGoodsClass(classId); } } + + /** + * @description + * @author jqs + * @date 2023/7/13 11:21 + * @param + * @return List<AppClassListVo> + */ + @Override + public List<AppClassListVo> listByType(Integer classType){ + LambdaQueryWrapper<SysClassification> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysClassification::getDelFlag,0) + .eq(SysClassification::getClassType,classType); + List<SysClassification> sysClassificationList = this.list(queryWrapper); + List<AppClassListVo> classListVos = sysClassificationList.stream().map(sysClassification ->{ + AppClassListVo appClassListVo = new AppClassListVo(); + appClassListVo.setClassId(sysClassification.getClassId()); + appClassListVo.setClassName(sysClassification.getClassName()); + return appClassListVo; + }).collect(Collectors.toList()); + return classListVos; + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml index f8c9f56..97066fa 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/ArticleMapper.xml @@ -11,6 +11,7 @@ ta.article_id articleId, tsc.class_name className, ta.article_sort articleSort, + ta.article_introduce articleIntroduce, ta.article_title articleTitle, ta.article_cover articleCover, ta.create_time createTime @@ -29,4 +30,14 @@ ORDER BY ta.create_time DESC </select> + <select id="listArticleByClass" resultType="com.ruoyi.system.domain.vo.AppArticlePageVo"> + SELECT + ta.article_id articleId, + ta.article_introduce articleIntroduce, + ta.article_title articleTitle, + ta.article_cover articleCover + FROM t_article ta + WHERE ta.del_flag = 0 AND ta.class_id = #{classId} + ORDER BY ta.article_sort DESC + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml index ac6b3f3..5b5d47f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml @@ -14,7 +14,7 @@ SELECT oper_time operTime, oper_name operName, - oper_title operTitle, + title operTitle, oper_ip operIp, oper_content operContent FROM sys_oper_log @@ -22,4 +22,8 @@ ORDER BY oper_time DESC </select> + <select id="listOperTitle" resultType="java.lang.String"> + SELECT DISTINCT title FROM sys_oper_log + WHERE operator_type = 1 + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java b/ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java index a7689d4..0f8acae 100644 --- a/ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java +++ b/ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java @@ -1,14 +1,9 @@ package com.ruoyi.system; -import com.ruoyi.system.domain.vo.MgtPopGetVo; -import com.ruoyi.system.service.config.PopService; -import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import javax.annotation.Resource; /** * @ClassName systemTest @@ -21,13 +16,7 @@ @SpringBootTest(classes = RuoYiSystemApplication.class) public class systemTest { - @Resource - private PopService popService; - @Test - public void test1(){ - MgtPopGetVo mgtPopGetVo = popService.getMgtPop(1L); - System.out.println(mgtPopGetVo); - } + } -- Gitblit v1.7.1