Эх сурвалжийг харах

Merge branch 'dev' into 'mp-server-test'

Dev

See merge request quanshu/mp-server!524
jiang hao 3 жил өмнө
parent
commit
bcae8277c4

+ 87 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/MarketingController.java

@@ -12,20 +12,25 @@ import com.qs.mp.admin.service.IMarketingService;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.MarketingStatusEnum;
+import com.qs.mp.common.enums.UserTypeEnum;
 import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.user.domain.MarketingHitPrize;
 import com.qs.mp.user.domain.MarketingUserCode;
+import com.qs.mp.user.domain.param.MarketingHelpParam;
 import com.qs.mp.user.domain.param.UserMarketingQueryParam;
 import com.qs.mp.user.domain.vo.UserMarketingDetailVO;
 import com.qs.mp.user.domain.vo.UserMarketingListVO;
 import com.qs.mp.user.service.IMarketingHitPrizeService;
 import com.qs.mp.user.service.IMarketingUserCodeService;
+import com.qs.mp.utils.MarketingUtils;
 import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -61,6 +66,88 @@ public class MarketingController extends BaseApiController {
     @Autowired
     private IMarketingUserCodeService marketingUserCodeService;
 
+    @PostMapping("/help")
+    @ApiOperation("活动助力")
+    public AjaxResult help(@RequestBody MarketingHelpParam marketingHelpParam) {
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        if (Objects.isNull(userId)) {
+            return AjaxResult.error("用户未登录");
+        }
+
+
+        String inviteCode = marketingHelpParam.getInviteCode();
+        if (StringUtils.isBlank(inviteCode)) {
+            return AjaxResult.error("邀请码不能为空");
+        }
+
+        Marketing marketing = marketingService.getById(marketingHelpParam.getMarketingId());
+        if (Objects.isNull(marketing)) {
+            return AjaxResult.error("活动不存在");
+        }
+        // 未开启的活动不能助力
+        if (MarketingStatusEnum.ON.getValue().equals(marketing.getIsOn())) {
+            return AjaxResult.error("活动未开启~");
+        }
+        Date now = DateUtils.getNowDate();
+        // 结束的活动不支持助力
+        if (marketing.getTriggerStatus() == 1 || marketing.getEndTime().before(now)) {
+            return AjaxResult.error("活动已过期~");
+        }
+        // 未开始的活动不能助力
+        if (marketing.getStartTime().after(now)) {
+            return AjaxResult.error("活动未开始~");
+        }
+
+
+        // 判断是否已经助力过
+        int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                .eq(MarketingUserCode::getUserId, userId)
+                .eq(MarketingUserCode::getMarketingId, marketingHelpParam.getMarketingId()));
+        if (count > 0) {
+            return AjaxResult.error("您已经助力过了");
+        }
+
+        // 邀请码解码,被助力人id
+        Long helpedUserId = MarketingUtils.decodeInviteCode(inviteCode);
+
+        // 生成抽奖码
+        String code = "";
+        while (true) {
+            code = MarketingUtils.generatePrizeCode();
+            // 判断抽奖码是否已经存在
+            int codeCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                    .eq(MarketingUserCode::getCode, code));
+            if (codeCount > 0) {
+                continue;
+            }
+            break;
+        }
+
+        MarketingUserCode marketingUserCode = new MarketingUserCode();
+        marketingUserCode.setMarketingId(marketingHelpParam.getMarketingId());
+        marketingUserCode.setCode(code);
+        // 设置被助力人
+        marketingUserCode.setUserId(helpedUserId);
+        // 设置助力人
+        marketingUserCode.setHelpUserId(userId);
+        marketingUserCode.setUserType(UserTypeEnum.ORDINARY.getValue());
+
+        marketingUserCodeService.save(marketingUserCode);
+        return AjaxResult.success("助力成功");
+    }
+
+
+    @PostMapping("/inviteCode")
+    @ApiOperation(value = "邀请码生成", notes = "邀请码生成")
+    public AjaxResult inviteCode() {
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        if (Objects.isNull(userId)) {
+            return AjaxResult.error("用户未登录");
+        }
+        return AjaxResult.success(MarketingUtils.generateInviteCode(userId));
+    }
+
+
     @PostMapping("list")
     @ApiOperation("获取营销活动列表")
     @ApiResponses(

+ 23 - 0
mp-common/src/main/java/com/qs/mp/common/enums/MarketingStatusEnum.java

@@ -2,8 +2,11 @@ package com.qs.mp.common.enums;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.utils.DateUtils;
 import io.swagger.annotations.ApiModel;
 
+import java.util.Date;
+
 /**
  * 活动状态枚举类
  * @author Cup
@@ -62,4 +65,24 @@ public enum MarketingStatusEnum implements IEnum<Integer> {
         }
         return null;
     }
+
+    public static String getStatus(Date startTime, Date endTime, Integer isOn) {
+        if (MarketingStatusEnum.OFF.getValue().equals(isOn)) {
+            return MarketingStatusEnum.OFF.toString();
+        }
+        if (MarketingStatusEnum.CLOSE.getValue().equals(isOn)) {
+            return MarketingStatusEnum.CLOSE.toString();
+        }
+
+        Date now = DateUtils.getNowDate();
+        if (now.before(startTime)) {
+            return MarketingStatusEnum.UNSTART.toString();
+        }
+
+        if (now.after(endTime)) {
+            return MarketingStatusEnum.END.toString();
+        }
+
+        return MarketingStatusEnum.START.toString();
+    }
 }

+ 1 - 18
mp-service/src/main/java/com/qs/mp/admin/domain/vo/MarketingListVO.java

@@ -45,24 +45,7 @@ public class MarketingListVO {
     private String status;
 
     public String getStatus() {
-
-        if (MarketingStatusEnum.OFF.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.OFF.toString();
-        }
-        if (MarketingStatusEnum.CLOSE.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.CLOSE.toString();
-        }
-
-        Date now = DateUtils.getNowDate();
-        if (now.before(this.startTime)) {
-            return MarketingStatusEnum.UNSTART.toString();
-        }
-
-        if (now.after(this.endTime)) {
-            return MarketingStatusEnum.END.toString();
-        }
-
-        return MarketingStatusEnum.START.toString();
+        return MarketingStatusEnum.getStatus(this.startTime, this.endTime, this.isOn);
     }
 
 }

+ 24 - 0
mp-service/src/main/java/com/qs/mp/user/domain/param/MarketingHelpParam.java

@@ -0,0 +1,24 @@
+package com.qs.mp.user.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 活动助力入参类
+ * @author Cup
+ * @date 2022/5/18
+ */
+@ApiModel("活动助力入参类")
+@Data
+public class MarketingHelpParam {
+
+    @NotNull(message = "活动id不能为空")
+    @ApiModelProperty("活动ID")
+    private Long marketingId;
+
+    @ApiModelProperty("邀请码")
+    private String inviteCode;
+}

+ 1 - 18
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserMarketingDetailVO.java

@@ -51,23 +51,6 @@ public class UserMarketingDetailVO {
     List<MarketingAwardsVO> awardsList;
 
     public String getStatus() {
-
-        if (MarketingStatusEnum.OFF.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.OFF.toString();
-        }
-        if (MarketingStatusEnum.CLOSE.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.CLOSE.toString();
-        }
-
-        Date now = DateUtils.getNowDate();
-        if (now.before(this.startTime)) {
-            return MarketingStatusEnum.UNSTART.toString();
-        }
-
-        if (now.after(this.endTime)) {
-            return MarketingStatusEnum.END.toString();
-        }
-
-        return MarketingStatusEnum.START.toString();
+        return MarketingStatusEnum.getStatus(this.startTime, this.endTime, this.isOn);
     }
 }

+ 1 - 18
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserMarketingListVO.java

@@ -42,24 +42,7 @@ public class UserMarketingListVO {
     private String status;
 
     public String getStatus() {
-
-        if (MarketingStatusEnum.OFF.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.OFF.toString();
-        }
-        if (MarketingStatusEnum.CLOSE.getValue().equals(this.isOn)) {
-            return MarketingStatusEnum.CLOSE.toString();
-        }
-
-        Date now = DateUtils.getNowDate();
-        if (now.before(this.startTime)) {
-            return MarketingStatusEnum.UNSTART.toString();
-        }
-
-        if (now.after(this.endTime)) {
-            return MarketingStatusEnum.END.toString();
-        }
-
-        return MarketingStatusEnum.START.toString();
+        return MarketingStatusEnum.getStatus(this.startTime,this.endTime,this.isOn);
     }
 
 }

+ 33 - 0
mp-service/src/main/java/com/qs/mp/utils/MarketingUtils.java

@@ -0,0 +1,33 @@
+package com.qs.mp.utils;
+
+
+import org.apache.commons.lang3.RandomStringUtils;
+
+/**
+ * 营销活动通用工具类
+ * @author Cup
+ * @date 2022/5/17
+ */
+public class MarketingUtils {
+
+    public static final long CODE_THRESHOLD = 100000;
+
+    // 生成邀请码
+    public static String generateInviteCode(Long userId) {
+        return Long.toHexString(CODE_THRESHOLD + userId);
+    }
+
+    // 邀请码解码
+    public static Long decodeInviteCode(String inviteCode) {
+        return Long.parseLong(inviteCode,16) - CODE_THRESHOLD;
+    }
+
+    // 生成抽奖码
+    public static String generatePrizeCode() {
+        return RandomStringUtils.randomAlphanumeric(12);
+    }
+
+    public static void main(String[] args) {
+        System.out.println(generateInviteCode(1L));
+    }
+}