Pu Zhibing
2025-03-26 cbf2486983b77a27af9968bbb362cb8d43789115
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
@@ -15,9 +15,7 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -46,12 +44,13 @@
    */
   @ResponseBody
   @PostMapping("/getNowOrderActivityInfo")
   public R<OrderActivityInfo> getNowOrderActivityInfo(@RequestParam("vip") Integer vip){
      OrderActivityInfo one = orderActivityInfoService.getOne(new LambdaQueryWrapper<OrderActivityInfo>().eq(OrderActivityInfo::getDelFlag, 0)
            .eq(OrderActivityInfo::getIsShelf, 1).eq(OrderActivityInfo::getStatus, 1)
            .last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) limit 0, 1"));
   public R<List<OrderActivityInfo>> getNowOrderActivityInfo(@RequestParam("vip") Integer vip){
      List<OrderActivityInfo> one = orderActivityInfoService.list(new LambdaQueryWrapper<OrderActivityInfo>().eq(OrderActivityInfo::getDelFlag, 0)
            .eq(OrderActivityInfo::getIsShelf, 1).last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids)"));
      return R.ok(one);
   }
   /**
    * 添加活动
@@ -60,7 +59,57 @@
   @ApiOperation(value = "订单优惠活动-添加活动", tags = {"管理后台-活动管理"})
   public R<Void> saveActivityConfig(@RequestBody OrderActivityInfo orderActivityInfo){
      orderActivityInfo.setIsShelf(0);
      if (org.springframework.util.StringUtils.hasLength(orderActivityInfo.getVipIds())){
         List<String> vipIds = new ArrayList<>(Arrays.asList(orderActivityInfo.getVipIds().split(",")));
         List<OrderActivityInfo> list = orderActivityInfoService.lambdaQuery()
               .between(OrderActivityInfo::getStartTime, orderActivityInfo.getStartTime(), orderActivityInfo.getEndTime())
               .or()
               .between(OrderActivityInfo::getEndTime, orderActivityInfo.getStartTime(), orderActivityInfo.getEndTime())
               .list();
         if (!list.isEmpty()){
            for (OrderActivityInfo activityInfo : list) {
               List<String> vips = Arrays.asList(activityInfo.getVipIds().split(","));
               if (!vipIds.isEmpty()){
                  StringBuilder message = new StringBuilder();
                  Set<String> set1 = new HashSet<>(vipIds);
                  Set<String> set2 = new HashSet<>(vips);
                  set1.retainAll(set2);
                  if (!set1.isEmpty()) {
                     // 有交集 判断是哪些会员
                     for (String s : set1) {
                        switch (s){
                           case "1":
                              message.append("普通会员,");
                              break;
                           case "2":
                              message.append("黄金会员,");
                              break;
                           case "3":
                              message.append("钻石会员,");
                              break;
                           case "4":
                              message.append("准代理,");
                              break;
                           case "5":
                              message.append("代理,");
                              break;
                           case "6":
                              message.append("总代,");
                              break;
                           case "7":
                              message.append("合伙人,");
                              break;
                        }
                     }
                     StringBuilder res = message.deleteCharAt(message.length() - 1);
                     return R.fail(res+"在当前活动时间已有订单优惠");
                  }
               }
            }
         }
      }
      orderActivityInfoService.save(orderActivityInfo);
      return R.ok();
   }
@@ -81,6 +130,59 @@
   @ApiOperation(value = "修改活动", tags = {"管理后台-活动管理"})
   public R<Void> updateActivityConfig(@RequestBody OrderActivityInfo orderActivityInfo){
      orderActivityInfo.setId(Long.valueOf(orderActivityInfo.getIdStr()));
      if (org.springframework.util.StringUtils.hasLength(orderActivityInfo.getVipIds())){
         List<String> vipIds = new ArrayList<>(Arrays.asList(orderActivityInfo.getVipIds().split(",")));
         List<OrderActivityInfo> list = orderActivityInfoService.lambdaQuery()
               .between(OrderActivityInfo::getStartTime, orderActivityInfo.getStartTime(), orderActivityInfo.getEndTime())
               .or()
               .between(OrderActivityInfo::getEndTime, orderActivityInfo.getStartTime(), orderActivityInfo.getEndTime())
               .list();
         // 遍历集合 通过startTime和endTime 判断是否与当前活动时间重叠
         if (!list.isEmpty()){
            for (OrderActivityInfo activityInfo : list) {
               if(activityInfo.getId().equals(orderActivityInfo.getId())){
                  continue;
               }
               List<String> vips = Arrays.asList(activityInfo.getVipIds().split(","));
               if (!vipIds.isEmpty()){
                  StringBuilder message = new StringBuilder();
                  Set<String> set1 = new HashSet<>(vipIds);
                  Set<String> set2 = new HashSet<>(vips);
                  set1.retainAll(set2);
                  if (!set1.isEmpty()) {
                     // 有交集 判断是哪些会员
                     for (String s : set1) {
                        switch (s){
                           case "1":
                              message.append("普通会员,");
                              break;
                           case "2":
                              message.append("黄金会员,");
                              break;
                           case "3":
                              message.append("钻石会员,");
                              break;
                           case "4":
                              message.append("准代理,");
                              break;
                           case "5":
                              message.append("代理,");
                              break;
                           case "6":
                              message.append("总代,");
                              break;
                           case "7":
                              message.append("合伙人,");
                              break;
                        }
                     }
                     StringBuilder res = message.deleteCharAt(message.length() - 1);
                     return R.fail(res+"在当前活动时间已有订单优惠");
                  }
               }
            }
         }
      }
      orderActivityInfoService.updateById(orderActivityInfo);
      return R.ok();
   }
@@ -91,15 +193,18 @@
   @GetMapping("/list")
   @ApiOperation(value = "订单优惠活动-获取活动列表", tags = {"管理后台-活动管理"})
   public R<Page<OrderActivityInfo>> list(@ApiParam("页码") @RequestParam Integer pageNum,
                            @ApiParam("每一页数据大小") Integer pageSize,
                            OrderActivityInfo orderActivityInfo){
                            @ApiParam("每一页数据大小") Integer pageSize, String id, String activityName, Integer status, Integer isShelf){
      Page<OrderActivityInfo> page = orderActivityInfoService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<OrderActivityInfo>()
            .eq(orderActivityInfo.getId() != null, OrderActivityInfo::getId, orderActivityInfo.getId())
            .eq(StringUtils.isNotEmpty(orderActivityInfo.getActivityName()), OrderActivityInfo::getActivityName, orderActivityInfo.getActivityName())
            .lt(orderActivityInfo.getStatus() != null && orderActivityInfo.getStatus() == 0, OrderActivityInfo::getStartTime, orderActivityInfo.getStartTime())
            .ge(orderActivityInfo.getStatus() != null && orderActivityInfo.getStatus() == 1, OrderActivityInfo::getEndTime, orderActivityInfo.getStartTime())
            .eq(orderActivityInfo.getIsShelf() != null, OrderActivityInfo::getIsShelf, orderActivityInfo.getIsShelf()));
            .like(StringUtils.isNotEmpty(id), OrderActivityInfo::getId, id)
            .like(StringUtils.isNotEmpty(activityName), OrderActivityInfo::getActivityName, activityName)
            .gt(status != null && status == 0, OrderActivityInfo::getStartTime, LocalDateTime.now())
            .ge(status != null && status == 1, OrderActivityInfo::getEndTime, LocalDateTime.now())
            .lt(status != null && status == 1, OrderActivityInfo::getStartTime, LocalDateTime.now())
            .lt(status != null && status == 2, OrderActivityInfo::getEndTime, LocalDateTime.now())
            .eq(isShelf != null, OrderActivityInfo::getIsShelf, isShelf).orderByDesc(OrderActivityInfo::getCreateTime)
            .orderByDesc(OrderActivityInfo::getCreateTime))
            ;
      page.getRecords().forEach(item -> {
         LocalDateTime startTime = item.getStartTime();
         LocalDateTime now = LocalDateTime.now();