From 8d2a0c46b7935efd58ea9aae9a87f60c343bea7d Mon Sep 17 00:00:00 2001 From: "1350250847@qq.com" Date: Tue, 14 Apr 2026 16:57:34 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B8=B8=E9=87=8F=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gxwebsoft/glt/service/GltTicketOrderService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java b/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java index 9f3fc81..8590380 100644 --- a/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java +++ b/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java @@ -16,10 +16,10 @@ import java.time.LocalDateTime; */ public interface GltTicketOrderService extends IService { - int DELIVERY_STATUS_WAITING = 10; - int DELIVERY_STATUS_DELIVERING = 20; - int DELIVERY_STATUS_WAIT_CONFIRM = 30; - int DELIVERY_STATUS_FINISHED = 40; + int DELIVERY_STATUS_WAITING = 10; //待配送 + int DELIVERY_STATUS_DELIVERING = 20; //配送中 + int DELIVERY_STATUS_WAIT_CONFIRM = 30; //等待收货 + int DELIVERY_STATUS_FINISHED = 40; //收货完成 int RECEIVE_CONFIRM_TYPE_MANUAL = 10; int RECEIVE_CONFIRM_TYPE_PHOTO = 20; From bc3842faeebfab7c85a1fee910e5fea0b018965b Mon Sep 17 00:00:00 2001 From: "1350250847@qq.com" Date: Mon, 20 Apr 2026 16:38:04 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8F=98=E6=9B=B4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 6 +++--- src/main/resources/application-glt2.yml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c7ec827..091d66c 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -7,9 +7,9 @@ server: # 数据源配置 spring: datasource: - url: jdbc:mysql://47.107.249.41:13306/gltdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 - username: gltdb - password: EeD4FtzyA5ksj7Bk + url: jdbc:mysql://47.107.249.41:13306/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai + username: modules + password: tYmmMGh5wpwXR3ae driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource diff --git a/src/main/resources/application-glt2.yml b/src/main/resources/application-glt2.yml index fdcd6ba..716d90b 100644 --- a/src/main/resources/application-glt2.yml +++ b/src/main/resources/application-glt2.yml @@ -7,16 +7,16 @@ server: # 数据源配置 spring: datasource: - url: jdbc:mysql://47.107.249.41:13306/gltdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai - username: gltdb - password: EeD4FtzyA5ksj7Bk + url: jdbc:mysql://47.107.249.41:13306/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai + username: modules + password: tYmmMGh5wpwXR3ae driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # redis redis: database: 0 - host: 8.134.55.105 + host: 47.107.249.41 port: 16379 password: redis_t74P8C From c3a50306ba0321210769e5cf627a6a5993957804 Mon Sep 17 00:00:00 2001 From: xm <1350250847@qq.com> Date: Sat, 30 May 2026 15:26:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A7=92=E6=9D=80?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=94=A8=E6=88=B7=E4=B8=8B=E5=8D=95=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/entity/ShopFlashSaleActivity.java | 2 +- .../ShopFlashSaleActivityServiceImpl.java | 67 +++++++++++-------- .../shop/vo/ShopFlashSaleActivityVO.java | 8 ++- 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java index 41d06b2..9a5bb13 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopFlashSaleActivity.java @@ -69,7 +69,7 @@ public class ShopFlashSaleActivity implements Serializable { @Schema(description = "库存") private Integer stock; - @Schema(description = "展示类型,0:普通用户,1:新用户") + @Schema(description = "展示类型,0:普通用户,1:新用户 2:老用户") private Integer displayType; @Schema(description = "备注") diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java index 4863911..c75dc9f 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopFlashSaleActivityServiceImpl.java @@ -100,13 +100,14 @@ public class ShopFlashSaleActivityServiceImpl extends ServiceImpl getMyActive(Integer tenantId, Integer popFlag) { List resultVOList = new ArrayList<>(); + //1.判断当前登录用户 User loginUser = LoginUserUtil.getLoginUser(); if(loginUser == null){ throw new BusinessException(GlobalErrorCodeConstants.UNAUTHORIZED.getMsg()); } Boolean newUser = true; - //判断是否为新用户【只要未成功下单都判定为新用户】 + //2.判断是否为新用户【只要未成功下单都判定为新用户】 LambdaQueryWrapper shopOrderLambdaQueryWrapper = new LambdaQueryWrapper().eq(ShopOrder::getUserId, loginUser.getUserId()).eq(ShopOrder::getPayStatus, 1) .in(ShopOrder::getOrderStatus, Arrays.asList(0, 1)); List shopOrderList = shopOrderMapper.selectList(shopOrderLambdaQueryWrapper); @@ -114,55 +115,65 @@ public class ShopFlashSaleActivityServiceImpl extends ServiceImpl activityWrapper = lambdaQuery().eq(ShopFlashSaleActivity::getStatus, 0).gt(ShopFlashSaleActivity::getStock, 0).eq(ShopFlashSaleActivity::getTenantId, tenantId) - .apply("NOW() BETWEEN start_time AND end_time"); + //3.查询满足条件的活动数据 + LambdaQueryChainWrapper activityWrapper = lambdaQuery().eq(ShopFlashSaleActivity::getStatus, 0).gt(ShopFlashSaleActivity::getStock, 0) + .eq(ShopFlashSaleActivity::getTenantId, tenantId).apply("NOW() BETWEEN start_time AND end_time"); if(popFlag != null){ activityWrapper.eq(ShopFlashSaleActivity::getPopFlag, popFlag); } + activityWrapper.orderByAsc(ShopFlashSaleActivity::getSortNumber); + List activityList = activityWrapper.list(); + //4.查询老用户已下单爆款活动订单数据 Map activityMap = new HashMap<>(); if(!newUser){ //查询当前用户是否有下过秒杀活动订单数据【判断下单数量是否超过限制】 - List activityIdList = activityWrapper.list().stream().map(ShopFlashSaleActivity::getId).collect(Collectors.toList()); + List activityIdList = activityList.stream().map(ShopFlashSaleActivity::getId).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(activityIdList)){ LambdaQueryWrapper shopOrderWrapper = new LambdaQueryWrapper().select(ShopOrder::getOrderId, ShopOrder::getActivityId, ShopOrder::getTotalNum) .eq(ShopOrder::getUserId, loginUser.getUserId()).in(ShopOrder::getActivityId, activityIdList).in(ShopOrder::getOrderStatus, Arrays.asList(0, 1)); activityMap = shopOrderMapper.selectList(shopOrderWrapper).stream().collect(Collectors.groupingBy(ShopOrder::getActivityId, Collectors.summingInt(ShopOrder::getTotalNum))); } - activityWrapper.eq(ShopFlashSaleActivity::getDisplayType, 0); } - activityWrapper.orderByAsc(ShopFlashSaleActivity::getSortNumber); - List activityList = activityWrapper.list(); + //5.存在活动爆款,则判断用户购买能力 if(CollectionUtils.isNotEmpty(activityList)){ resultVOList = BeanUtil.copyToList(activityList, ShopFlashSaleActivityVO.class); List goodsIdList = resultVOList.stream().map(ShopFlashSaleActivityVO::getGoodsId).distinct().collect(Collectors.toList()); List shopGoods = shopGoodsMapper.selectBatchIds(goodsIdList); - resultVOList.forEach(activity -> { - ShopGoods shopGood = shopGoods.stream().filter(goods -> activity.getGoodsId().equals(goods.getGoodsId())).findFirst().orElse(null); - if(shopGood != null){ - activity.setGoodsPrice(shopGood.getPrice()); - activity.setGoodsTotalPrice(shopGood.getPrice().multiply(new BigDecimal(activity.getNum()))); - activity.setGoodsName(shopGood.getName()); - activity.setImage(shopGood.getImage()); - activity.setUnitName(shopGood.getUnitName()); - } - }); - } + for(ShopFlashSaleActivityVO activityVO : resultVOList){ + if(newUser){ + if(activityVO.getDisplayType() == 2){ + activityVO.setEnable(false); + activityVO.setEnableMsg("当前商品仅限老用户购买!"); + } + }else { + if(activityVO.getDisplayType() == 1){ + activityVO.setEnable(false); + activityVO.setEnableMsg("当前商品仅限新用户购买!"); + } - //过滤超下单数量活动 - if(!activityMap.isEmpty()){ - Iterator iterator = resultVOList.iterator(); - while (iterator.hasNext()){ - ShopFlashSaleActivityVO vo = iterator.next(); - Integer orderTotalNum = activityMap.get(vo.getId()); - if(orderTotalNum != null && orderTotalNum >= vo.getSaleLimit()){ - iterator.remove(); + if(activityVO.getEnable()){ + //超下单数量活动不可选 + Integer orderTotalNum = activityMap.get(activityVO.getId()); + if(orderTotalNum != null && orderTotalNum >= activityVO.getSaleLimit()){ + activityVO.setEnable(false); + activityVO.setEnableMsg("当前商品您购买次数已达上限!"); + } + } + } + + //5.2 回显商品信息 + ShopGoods shopGood = shopGoods.stream().filter(goods -> activityVO.getGoodsId().equals(goods.getGoodsId())).findFirst().orElse(null); + if(shopGood != null){ + activityVO.setGoodsPrice(shopGood.getPrice()); + activityVO.setGoodsTotalPrice(shopGood.getPrice().multiply(new BigDecimal(activityVO.getNum()))); + activityVO.setGoodsName(shopGood.getName()); + activityVO.setImage(shopGood.getImage()); + activityVO.setUnitName(shopGood.getUnitName()); } } } - return resultVOList; } diff --git a/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java b/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java index 7ff1921..1381025 100644 --- a/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java +++ b/src/main/java/com/gxwebsoft/shop/vo/ShopFlashSaleActivityVO.java @@ -65,7 +65,7 @@ public class ShopFlashSaleActivityVO implements Serializable { @Schema(description = "库存") private Integer stock; - @Schema(description = "展示类型,0:普通用户,1:新用户") + @Schema(description = "展示类型,0:普通用户,1:新用户 2:老用户") private Integer displayType; @Schema(description = "备注") @@ -77,6 +77,12 @@ public class ShopFlashSaleActivityVO implements Serializable { @Schema(description = "是否弹窗 0-否 1-是") private Integer popFlag; + @Schema(description = "是否可选") + private Boolean enable = true; + + @Schema(description = "不可购买原因!") + private String enableMsg; + @Schema(description = "租户id") private Integer tenantId;