zc 2 сар өмнө
parent
commit
408f546970

+ 63 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityMySignupVo.java

@@ -0,0 +1,63 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 我的报名列表返回对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityMySignupVo", description = "我的报名列表返回对象")
+public class StoreOperationalActivityMySignupVo {
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动宣传图URL")
+    private String promotionalImage;
+
+    @ApiModelProperty(value = "活动标题图URL")
+    private String activityTitleImgUrl;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动状态")
+    private Integer activityStatus;
+
+    @ApiModelProperty(value = "报名状态")
+    private Integer signupStatus;
+
+    @ApiModelProperty(value = "活动开始状态(0-已开始,1-已结束)")
+    private Integer activityStartStatus;
+
+    @ApiModelProperty(value = "是否有成果")
+    private Integer hasAchievement;
+
+    @ApiModelProperty(value = "报名时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupTime;
+
+    @ApiModelProperty(value = "状态文案")
+    private String statusLabel;
+}

+ 9 - 0
alien-entity/src/main/java/shop/alien/mapper/storePlantform/StoreOperationalActivitySignupMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import shop.alien.entity.storePlatform.StoreOperationalActivitySignup;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo;
 
 import java.util.List;
 
@@ -59,4 +60,12 @@ public interface StoreOperationalActivitySignupMapper extends BaseMapper<StoreOp
      */
     Integer countSignedUpByActivityAndUser(@Param("activityId") Integer activityId,
                                            @Param("userId") Integer userId);
+
+    /**
+     * 查询我的报名列表。
+     *
+     * @param userId 用户ID
+     * @return 报名列表
+     */
+    List<StoreOperationalActivityMySignupVo> selectMySignups(@Param("userId") Integer userId);
 }

+ 31 - 0
alien-entity/src/main/resources/mapper/storePlatform/StoreOperationalActivitySignupMapper.xml

@@ -69,4 +69,35 @@
           AND status IN (0, 2)
         LIMIT 1
     </select>
+
+    <select id="selectMySignups" resultType="shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo">
+        SELECT
+            s.activity_id AS activityId,
+            a.store_id AS storeId,
+            a.activity_name AS activityName,
+            a.promotional_image AS promotionalImage,
+            img.img_url AS activityTitleImgUrl,
+            a.start_time AS startTime,
+            a.end_time AS endTime,
+            a.status AS activityStatus,
+            s.status AS signupStatus,
+            CASE WHEN a.status = 7 THEN 1 ELSE 0 END AS activityStartStatus,
+            CASE WHEN ach.id IS NULL THEN 0 ELSE 1 END AS hasAchievement,
+            s.signup_time AS signupTime
+        FROM store_operational_activity_signup s
+        INNER JOIN store_operational_activity a ON a.id = s.activity_id
+        LEFT JOIN store_img img ON img.store_id = a.store_id
+            AND img.business_id = a.id
+            AND img.img_type = 26
+            AND img.delete_flag = 0
+        LEFT JOIN (
+            SELECT DISTINCT signup_id
+            FROM store_operational_activity_achievement
+            WHERE delete_flag = 0
+        ) ach ON ach.signup_id = s.id
+        WHERE s.user_id = #{userId}
+          AND s.delete_flag = 0
+          AND a.delete_flag = 0
+        ORDER BY s.signup_time DESC
+    </select>
 </mapper>

+ 24 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreOperationalActivityController.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiSort;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -20,10 +21,13 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivitySignupCheckVo;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivityDetailVo;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementVo;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo;
 import shop.alien.store.dto.StoreOperationalActivitySignupDto;
 import shop.alien.store.dto.StoreOperationalActivityAchievementDto;
 import shop.alien.store.service.StoreOperationalActivityService;
 import shop.alien.store.service.StoreOperationalActivityAchievementService;
+import shop.alien.util.common.JwtUtil;
+import com.alibaba.fastjson.JSONObject;
 
 /**
  * 运营活动详情控制器
@@ -157,4 +161,24 @@ public class StoreOperationalActivityController {
             return R.fail(e.getMessage());
         }
     }
+
+    @ApiOperation("我的报名列表")
+    @ApiOperationSupport(order = 7)
+    @GetMapping("/signup/my")
+    public R<List<StoreOperationalActivityMySignupVo>> listMySignups() {
+        try {
+            JSONObject userInfo = JwtUtil.getCurrentUserInfo();
+            if (userInfo == null || userInfo.getInteger("userId") == null) {
+                return R.fail("用户未登录");
+            }
+            List<StoreOperationalActivityMySignupVo> result =
+                    operationalActivityService.listMySignups(userInfo.getInteger("userId"));
+            return R.data(result);
+        } catch (IllegalArgumentException e) {
+            return R.fail(e.getMessage());
+        } catch (Exception e) {
+            log.error("StoreOperationalActivityController.listMySignups ERROR: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
 }

+ 10 - 0
alien-store/src/main/java/shop/alien/store/service/StoreOperationalActivityService.java

@@ -2,7 +2,9 @@ package shop.alien.store.service;
 
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivityDetailVo;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivitySignupCheckVo;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo;
 import shop.alien.store.dto.StoreOperationalActivitySignupDto;
+import java.util.List;
 
 /**
  * 用户端运营活动服务
@@ -30,6 +32,14 @@ public interface StoreOperationalActivityService {
     StoreOperationalActivitySignupCheckVo checkSignup(Integer activityId, Integer userId);
 
     /**
+     * 查询我的报名列表
+     *
+     * @param userId 用户ID
+     * @return 报名列表
+     */
+    List<StoreOperationalActivityMySignupVo> listMySignups(Integer userId);
+
+    /**
      * 活动报名
      *
      * @param dto 报名请求

+ 45 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreOperationalActivityServiceImpl.java

@@ -10,6 +10,7 @@ import shop.alien.entity.store.StoreInfo;
 import shop.alien.entity.storePlatform.StoreOperationalActivity;
 import shop.alien.entity.storePlatform.StoreOperationalActivitySignup;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivityDetailVo;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo;
 import shop.alien.entity.storePlatform.vo.StoreOperationalActivitySignupCheckVo;
 import shop.alien.mapper.LifeDiscountCouponMapper;
 import shop.alien.mapper.StoreImgMapper;
@@ -23,7 +24,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.alibaba.fastjson.JSONObject;
 import shop.alien.util.common.JwtUtil;
 
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 用户端运营活动服务实现
@@ -102,6 +105,24 @@ public class StoreOperationalActivityServiceImpl implements StoreOperationalActi
     }
 
     @Override
+    public List<StoreOperationalActivityMySignupVo> listMySignups(Integer userId) {
+        if (userId == null) {
+            throw new IllegalArgumentException("用户ID不能为空");
+        }
+        List<StoreOperationalActivityMySignupVo> list = signupMapper.selectMySignups(userId);
+        if (list == null || list.isEmpty()) {
+            return Collections.emptyList();
+        }
+        for (StoreOperationalActivityMySignupVo item : list) {
+            if (item == null) {
+                continue;
+            }
+            item.setStatusLabel(resolveSignupStatusLabel(item.getSignupStatus(), item.getActivityStatus()));
+        }
+        return list;
+    }
+
+    @Override
     public boolean signup(StoreOperationalActivitySignupDto dto) {
         if (dto == null) {
             throw new IllegalArgumentException("报名参数不能为空");
@@ -246,4 +267,28 @@ public class StoreOperationalActivityServiceImpl implements StoreOperationalActi
         Integer signupCount = signupMapper.countSignedUpByActivityAndUser(activity.getId(), currentUserId);
         vo.setSignedUp(signupCount != null && signupCount > 0);
     }
+
+    private String resolveSignupStatusLabel(Integer signupStatus, Integer activityStatus) {
+        if (signupStatus == null) {
+            return null;
+        }
+        if (signupStatus == 0) {
+            return "审核中";
+        }
+        if (signupStatus == 1) {
+            return "报名已拒绝";
+        }
+        if (signupStatus == 2) {
+            if (activityStatus != null) {
+                if (activityStatus == 5) {
+                    return "活动已开始";
+                }
+                if (activityStatus == 7) {
+                    return "活动已结束";
+                }
+            }
+            return "报名成功";
+        }
+        return null;
+    }
 }