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