浏览代码

新增活动,活动列表,活动详情

skyline 2 年之前
父节点
当前提交
6d55cf9e01

+ 44 - 3
admin/src/main/java/com/kym/admin/controller/ActivityController.java

@@ -1,11 +1,15 @@
 package com.kym.admin.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.kym.common.R;
+import com.kym.common.annotation.SysLog;
+import com.kym.entity.admin.queryParams.ActivityQueryParam;
+import com.kym.entity.admin.vo.ActivityVo;
+import com.kym.service.admin.ActivityService;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author skyline
@@ -15,4 +19,41 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/activity")
 public class ActivityController {
 
+    private final ActivityService activityService;
+
+    public ActivityController(ActivityService activityService) {
+        this.activityService = activityService;
+    }
+
+    @SysLog("新增活动")
+    @PostMapping
+    R<?> createActivity(@RequestBody ActivityVo activityVo) {
+        return R.success(activityService.createActivity(activityVo));
+    }
+
+    // TODO: 2023-10-18 修改活动
+
+
+    /**
+     * 活动列表
+     *
+     * @param params
+     * @return
+     */
+    @GetMapping
+    R<?> listActivity(@RequestBody ActivityQueryParam params) {
+        return R.success(activityService.listActivity(params));
+    }
+
+    /**
+     * 活动详情
+     *
+     * @param params
+     * @return
+     */
+    @GetMapping("/activityDetail")
+    R<?> activityDetail(@ModelAttribute ActivityQueryParam params) {
+        return R.success(activityService.activityDetail(params));
+    }
+
 }

+ 12 - 4
entity/src/main/java/com/kym/entity/admin/Activity.java

@@ -6,6 +6,7 @@ import java.io.Serializable;
 import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -18,8 +19,15 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_activity")
+@Accessors(chain = true)
 public class Activity extends BaseEntity {
 
+    public final static String DISCOUNT_TYPE_服务费折扣权益 = "Recharge_Rights";
+    public final static String DISCOUNT_TYPE_优惠券 = "Coupon";
+
+    public final static int APPLY_STATION_全部站点 = 0;
+    public final static int APPLY_STATION_部分站点 = 1;
+
     private static final long serialVersionUID = 1L;
 
     /**
@@ -45,17 +53,17 @@ public class Activity extends BaseEntity {
     /**
      * 目标用户:0-全部,1-新用户,2-老用户
      */
-    private Byte targetUsers;
+    private int targetUsers;
 
     /**
      * 适用站点:0-全部,1-部分站点(详见活动-站点关联表)
      */
-    private Byte applyStation;
+    private int applyStation;
 
     /**
      * 优惠允许叠加:0-不允许,1-允许
      */
-    private Byte allowStacke;
+    private int allowStacke;
 
     /**
      * 数量限制
@@ -65,7 +73,7 @@ public class Activity extends BaseEntity {
     /**
      * 活动状态:0-未开始,1-进行中,2-已结束,3-已取消
      */
-    private Byte status;
+    private int status;
 
     /**
      * 备注

+ 2 - 0
entity/src/main/java/com/kym/entity/admin/ActivityStation.java

@@ -5,6 +5,7 @@ import com.kym.entity.BaseEntity;
 import java.io.Serializable;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -17,6 +18,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_activity_station")
+@Accessors(chain = true)
 public class ActivityStation extends BaseEntity {
 
     private static final long serialVersionUID = 1L;

+ 2 - 0
entity/src/main/java/com/kym/entity/admin/RechargeRights.java

@@ -6,6 +6,7 @@ import java.io.Serializable;
 import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -18,6 +19,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_recharge_rights")
+@Accessors(chain = true)
 public class RechargeRights extends BaseEntity {
 
     private static final long serialVersionUID = 1L;

+ 41 - 0
entity/src/main/java/com/kym/entity/admin/queryParams/ActivityQueryParam.java

@@ -0,0 +1,41 @@
+package com.kym.entity.admin.queryParams;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author skyline
+ * @description 活动查询参数
+ * @date 2023-08-22 18:56
+ */
+@Data
+public class ActivityQueryParam extends PageParams {
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 优惠方式
+     */
+    private String discountType;
+    /**
+     * 开始时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime startTime;
+    /**
+     * 结束时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime endTime;
+    /**
+     * 状态
+     */
+    private Object status;
+}

+ 82 - 0
entity/src/main/java/com/kym/entity/admin/vo/ActivityVo.java

@@ -0,0 +1,82 @@
+package com.kym.entity.admin.vo;
+
+import com.kym.entity.BaseEntity;
+import com.kym.entity.admin.RechargeRights;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-18
+ */
+@Data
+public class ActivityVo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 活动名称
+     */
+    private String name;
+
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+
+    /**
+     * 结束时间
+     */
+    private LocalDateTime endTime;
+
+    /**
+     * 优惠方式:0-服务费折扣权益 1-优惠券
+     */
+    private String discountType;
+
+    /**
+     * 目标用户:0-全部,1-新用户,2-老用户
+     */
+    private Byte targetUsers;
+
+    /**
+     * 适用站点:0-全部,1-部分站点(详见活动-站点关联表)
+     */
+    private Byte applyStation;
+
+    /**
+     * 优惠允许叠加:0-不允许,1-允许
+     */
+    private Byte allowStacke;
+
+    /**
+     * 数量限制
+     */
+    private Integer limit;
+
+    /**
+     * 活动状态:0-未开始,1-进行中,2-已结束,3-已取消
+     */
+    private Byte status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 站点id
+     */
+    List<String> stationIds;
+
+    /**
+     * 充值权益列表
+     */
+    List<RechargeRights> rechargeRightsList;
+}

+ 12 - 2
service/src/main/java/com/kym/service/admin/ActivityService.java

@@ -1,11 +1,16 @@
 package com.kym.service.admin;
 
-import com.kym.entity.admin.Activity;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kym.entity.admin.Activity;
+import com.kym.entity.admin.queryParams.ActivityQueryParam;
+import com.kym.entity.admin.vo.ActivityVo;
+import com.kym.entity.common.PageBean;
+
+import java.util.HashMap;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author skyline
@@ -13,4 +18,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ActivityService extends IService<Activity> {
 
+    ActivityVo createActivity(ActivityVo activityVo);
+
+    PageBean<Activity> listActivity(ActivityQueryParam params);
+
+    HashMap<String, Object> activityDetail(ActivityQueryParam params);
 }

+ 102 - 2
service/src/main/java/com/kym/service/admin/impl/ActivityServiceImpl.java

@@ -1,20 +1,120 @@
 package com.kym.service.admin.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.kym.common.utils.CommUtil;
+import com.kym.common.utils.IDGenerator;
 import com.kym.entity.admin.Activity;
+import com.kym.entity.admin.ActivityStation;
+import com.kym.entity.admin.RechargeRights;
+import com.kym.entity.admin.Station;
+import com.kym.entity.admin.queryParams.ActivityQueryParam;
+import com.kym.entity.admin.vo.ActivityVo;
+import com.kym.entity.common.PageBean;
 import com.kym.mapper.admin.ActivityMapper;
 import com.kym.service.admin.ActivityService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kym.service.admin.ActivityStationService;
+import com.kym.service.admin.RechargeRightsService;
+import com.kym.service.admin.StationService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+
+import static com.kym.entity.admin.Activity.APPLY_STATION_部分站点;
+import static com.kym.entity.admin.Activity.DISCOUNT_TYPE_服务费折扣权益;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author skyline
  * @since 2023-10-18
  */
 @Service
+@DS("db-admin")
+@Slf4j
 public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements ActivityService {
 
+    private final ActivityStationService activityStationService;
+    private final RechargeRightsService rechargeRightsService;
+    private final StationService stationService;
+
+    public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, StationService stationService) {
+        this.activityStationService = activityStationService;
+        this.rechargeRightsService = rechargeRightsService;
+        this.stationService = stationService;
+    }
+
+    /**
+     * 新增活动
+     *
+     * @param activityVo
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ActivityVo createActivity(ActivityVo activityVo) {
+        // 新增activity
+        var activity = new Activity();
+        activity.setId(IDGenerator.INS().nextId());
+        BeanUtils.copyProperties(activityVo, activity);
+        save(activity);
+
+        // 新增activityStation
+        if (activityVo.getApplyStation() == APPLY_STATION_部分站点 && !CommUtil.isEmptyOrNull(activityVo.getStationIds())) {
+            var activityStationList = activityVo.getStationIds().stream().map(stationId -> new ActivityStation().setActivityId(activity.getId()).setStationId(stationId)).toList();
+            activityStationService.saveBatch(activityStationList);
+        }
+
+        // 新增rechargeRights
+        if (activityVo.getDiscountType().equals(DISCOUNT_TYPE_服务费折扣权益) && !CommUtil.isEmptyOrNull(activityVo.getRechargeRightsList())) {
+            var rechargeRightsList = activityVo.getRechargeRightsList().stream().peek(rechargeRights -> BeanUtils.copyProperties(activity, rechargeRights)).toList();
+            rechargeRightsService.saveBatch(rechargeRightsList);
+            activityVo.setRechargeRightsList(rechargeRightsList);
+        }
+
+        return activityVo;
+    }
+
+    /**
+     * 主活动列表
+     *
+     * @param params
+     * @return
+     */
+    @Override
+    public PageBean<Activity> listActivity(ActivityQueryParam params) {
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        var list = lambdaQuery()
+                .like(CommUtil.isNotEmptyAndNull(params.getName()), Activity::getName, params.getName())
+                .eq(CommUtil.isNotEmptyAndNull(params.getStatus()), Activity::getStatus, params.getStatus())
+                .gt(CommUtil.isNotEmptyAndNull(params.getStartTime()), Activity::getStartTime, params.getStartTime())
+                .lt(CommUtil.isNotEmptyAndNull(params.getEndTime()), Activity::getEndTime, params.getEndTime())
+                .list();
+        return new PageBean<>(list);
+    }
+
+    /**
+     * 活动详情
+     *
+     * @param params
+     * @return
+     */
+    @Override
+    public HashMap<String, Object> activityDetail(ActivityQueryParam params) {
+        var res = new HashMap<String, Object>(2);
+        if (params.getDiscountType().equals(DISCOUNT_TYPE_服务费折扣权益)) {
+            var rechargeRightsList = rechargeRightsService.lambdaQuery().eq(RechargeRights::getActivityId, params.getId()).list();
+            res.put("rechargeRightsList", rechargeRightsList);
+            var activityStationIds = activityStationService.lambdaQuery().eq(ActivityStation::getActivityId, params.getId()).list().stream().map(ActivityStation::getStationId).toList();
+            var stationList = stationService.lambdaQuery().in(Station::getStationId, activityStationIds).list();
+            res.put("stationList", stationList);
+        }
+        return res;
+    }
 }