Răsfoiți Sursa

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

Dev

See merge request quanshu/mp-server!515
jiang hao 2 ani în urmă
părinte
comite
778bed9096

+ 73 - 5
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/MarketingMgrController.java

@@ -1,20 +1,37 @@
 package com.qs.mp.web.controller.api.admin;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.MarketingAwards;
+import com.qs.mp.admin.domain.MarketingAwardsPrize;
+import com.qs.mp.admin.domain.TicketAwards;
 import com.qs.mp.admin.domain.param.MarketingCreateParam;
+import com.qs.mp.admin.domain.param.MarketingQueryParam;
 import com.qs.mp.admin.domain.param.MarketingUpdateParam;
+import com.qs.mp.admin.domain.vo.MarketingAwardsVO;
+import com.qs.mp.admin.domain.vo.MarketingListVO;
+import com.qs.mp.admin.domain.vo.MarketingVO;
+import com.qs.mp.admin.service.IMarketingAwardsPrizeService;
+import com.qs.mp.admin.service.IMarketingAwardsService;
 import com.qs.mp.admin.service.IMarketingService;
 import com.qs.mp.common.annotation.Log;
 import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.BusinessType;
+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.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 营销活动管理相关接口
@@ -24,11 +41,17 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/api/v1/mp/admin/marketing")
 @Api(tags = "营销活动管理相关接口")
-public class MarketingMgrController {
+public class MarketingMgrController extends BaseApiController {
 
     @Autowired
     private IMarketingService marketingService;
 
+    @Autowired
+    private IMarketingAwardsService marketingAwardsService;
+
+    @Autowired
+    private IMarketingAwardsPrizeService marketingAwardsPrizeService;
+
     @Log(title = "营销活动新增", businessType = BusinessType.INSERT)
     @ApiOperation(value = "营销活动新增")
     @PostMapping("/create")
@@ -46,4 +69,49 @@ public class MarketingMgrController {
         return AjaxResult.success();
     }
 
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:marketing:list')")
+    @ApiOperation("营销活动列表")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "营销活动列表",response = MarketingListVO.class)
+    )
+    public TableDataInfo list(@RequestBody MarketingQueryParam marketingQueryParam) {
+        startPage();
+        List<MarketingListVO> list =  marketingService.listMarketing(marketingQueryParam);
+        return getDataTable(list);
+    }
+
+    @PostMapping("/detail/{id}")
+    @PreAuthorize("@ss.hasPermi('business:marketing:query')")
+    @ApiOperation("活动详情")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "活动详情",response = MarketingVO.class)
+    )
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        MarketingVO marketingVO = new MarketingVO();
+        Marketing marketing = marketingService.getById(id);
+        if (Objects.isNull(marketing)) {
+            return AjaxResult.error("活动信息不存在");
+        }
+        BeanUtils.copyProperties(marketing, marketingVO);
+
+        // 获取奖级信息
+        List<MarketingAwards> marketingAwardsList = marketingAwardsService.list(new LambdaQueryWrapper<MarketingAwards>()
+                .eq(MarketingAwards::getMarketingId, id)
+                .orderByAsc(MarketingAwards::getSort));
+
+        List<MarketingAwardsVO> marketingAwardsVOS = marketingAwardsList.stream().map(marketingAwards -> {
+            MarketingAwardsVO marketingAwardsVO = new MarketingAwardsVO();
+            BeanUtils.copyProperties(marketingAwards, marketingAwardsVO);
+            List<MarketingAwardsPrize> marketingAwardsPrizeList = marketingAwardsPrizeService.list(new LambdaQueryWrapper<MarketingAwardsPrize>()
+                    .eq(MarketingAwardsPrize::getAwardsId, marketingAwards.getId()));
+            marketingAwardsVO.setPrizeList(marketingAwardsPrizeList);
+            return marketingAwardsVO;
+        }).collect(Collectors.toList());
+
+        marketingVO.setAwardsList(marketingAwardsVOS);
+
+        return AjaxResult.success(marketingVO);
+    }
+
 }

+ 0 - 34
mp-common/src/main/java/com/qs/mp/common/enums/MarketingOnTypeEnum.java

@@ -1,34 +0,0 @@
-package com.qs.mp.common.enums;
-
-import com.baomidou.mybatisplus.annotation.IEnum;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-/**
- * 营销活动开启类型枚举类
- * @author Cup
- * @date 2022/5/16
- */
-@ApiModel("营销活动开启类型枚举类")
-public enum MarketingOnTypeEnum implements IEnum<Integer> {
-
-    CLOSE(-1, "关闭"),
-
-    OFF(0,"待开启"),
-
-    ON(1,"开启");
-
-    private Integer code;
-
-    private String desc;
-
-    MarketingOnTypeEnum(Integer code, String desc) {
-        this.code = code;
-        this.desc = desc;
-    }
-
-    @Override
-    public Integer getValue() {
-        return this.code;
-    }
-}

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

@@ -0,0 +1,51 @@
+package com.qs.mp.common.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 活动状态枚举类
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动状态枚举类")
+public enum MarketingStatusEnum implements IEnum<Integer> {
+
+    CLOSE(-1, "已关闭"),
+
+    OFF(0,"草稿"),
+
+    ON(1,"开启"),
+
+    UNSTART(2,"未开始"),
+
+    START(3,"进行中"),
+
+    END(4,"已结束");
+
+    private Integer value;
+    private String desc;
+
+    MarketingStatusEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static MarketingStatusEnum getByValue(Integer value) {
+        for (MarketingStatusEnum statusEnum : MarketingStatusEnum.values()) {
+            if (statusEnum.getValue().equals(value)) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
+}

+ 23 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/MarketingQueryParam.java

@@ -0,0 +1,23 @@
+package com.qs.mp.admin.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 营销活动查询入参类
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动查询入参类")
+@Data
+public class MarketingQueryParam {
+
+
+    @ApiModelProperty("营销活动名称")
+    private String title;
+
+    @ApiModelProperty("活动状态:-1关闭,0草稿,1开启,2未开始,3进行中,4已结束")
+    private Integer status;
+
+}

+ 23 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/MarketingAwardsVO.java

@@ -0,0 +1,23 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.qs.mp.admin.domain.MarketingAwards;
+import com.qs.mp.admin.domain.MarketingAwardsPrize;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 营销活动奖项出参类
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动奖项出参类")
+@Data
+public class MarketingAwardsVO extends MarketingAwards {
+
+    @ApiModelProperty("奖品列表")
+    List<MarketingAwardsPrize> prizeList;
+}

+ 66 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/MarketingListVO.java

@@ -0,0 +1,66 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.qs.mp.common.enums.MarketingStatusEnum;
+import com.qs.mp.common.utils.DateUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 营销活动列表出参类
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动列表出参类")
+@Data
+public class MarketingListVO {
+
+    @ApiModelProperty(value = "活动id,主键")
+    private Long id;
+
+    @ApiModelProperty("活动标题")
+    private String title;
+
+    @ApiModelProperty("真实人数")
+    private Integer realNum;
+
+    @ApiModelProperty("开始时间")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间")
+    private Date endTime;
+
+    @ApiModelProperty("是否开启: -1关闭,0待开启, 1开启 ")
+    private Integer isOn;
+
+    @ApiModelProperty("活动状态")
+    private String status;
+
+    public String getStatus() {
+
+        if (MarketingStatusEnum.OFF.getValue().equals(this.isOn)) {
+            return MarketingStatusEnum.OFF.getDesc();
+        }
+        if (MarketingStatusEnum.CLOSE.getValue().equals(this.isOn)) {
+            return MarketingStatusEnum.CLOSE.getDesc();
+        }
+
+        Date now = DateUtils.getNowDate();
+        if (now.before(this.startTime)) {
+            return MarketingStatusEnum.UNSTART.getDesc();
+        }
+
+        if (now.after(this.endTime)) {
+            return MarketingStatusEnum.END.getDesc();
+        }
+
+        return MarketingStatusEnum.START.getDesc();
+    }
+
+}

+ 23 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/MarketingVO.java

@@ -0,0 +1,23 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.MarketingAwards;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 营销活动详情出参类
+ * @author Cup
+ * @date 2022/5/16
+ */
+@ApiModel("营销活动详情出参类")
+@Data
+public class MarketingVO extends Marketing {
+
+    @ApiModelProperty("奖级列表(后台显示)")
+    List<MarketingAwardsVO> awardsList;
+
+}

+ 11 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IMarketingService.java

@@ -3,7 +3,11 @@ package com.qs.mp.admin.service;
 import com.qs.mp.admin.domain.Marketing;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.admin.domain.param.MarketingCreateParam;
+import com.qs.mp.admin.domain.param.MarketingQueryParam;
 import com.qs.mp.admin.domain.param.MarketingUpdateParam;
+import com.qs.mp.admin.domain.vo.MarketingListVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -26,4 +30,11 @@ public interface IMarketingService extends IService<Marketing> {
      * @param marketingUpdateParam
      */
     void updateMarketing(MarketingUpdateParam marketingUpdateParam);
+
+    /**
+     * 获取营销活动列表
+     * @param
+     * @return
+     */
+    List<MarketingListVO> listMarketing(MarketingQueryParam marketingQueryParam);
 }

+ 48 - 5
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -1,27 +1,29 @@
 package com.qs.mp.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.qs.mp.admin.domain.*;
 import com.qs.mp.admin.domain.param.*;
+import com.qs.mp.admin.domain.vo.MarketingListVO;
 import com.qs.mp.admin.mapper.MarketingMapper;
 import com.qs.mp.admin.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qs.mp.common.enums.MarketingOnTypeEnum;
+import com.qs.mp.common.enums.MarketingStatusEnum;
 import com.qs.mp.common.enums.TicketPrizeTypeEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.bean.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -49,6 +51,47 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     @Autowired
     private IMarketingAwardsPrizeService marketingAwardsPrizeService;
 
+    @Override
+    public List<MarketingListVO> listMarketing(MarketingQueryParam marketingQueryParam) {
+        LambdaQueryWrapper<Marketing> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(marketingQueryParam.getTitle())) {
+            queryWrapper.like(Marketing::getTitle, marketingQueryParam.getTitle());
+        }
+
+        if (Objects.nonNull(marketingQueryParam.getStatus())) {
+            if (MarketingStatusEnum.CLOSE.getValue().equals(marketingQueryParam.getStatus()) ||
+                    MarketingStatusEnum.OFF.getValue().equals(marketingQueryParam.getStatus()) ||
+                    MarketingStatusEnum.ON.getValue().equals(marketingQueryParam.getStatus())) {
+                queryWrapper.eq(Marketing::getIsOn, marketingQueryParam.getStatus());
+            }else if (MarketingStatusEnum.UNSTART.getValue().equals(marketingQueryParam.getStatus())){
+                queryWrapper.gt(Marketing::getStartTime, new Date());
+                queryWrapper.eq(Marketing::getIsOn, MarketingStatusEnum.ON.getValue());
+            }else if (MarketingStatusEnum.START.getValue().equals(marketingQueryParam.getStatus())){
+                queryWrapper.le(Marketing::getStartTime, new Date());
+                queryWrapper.ge(Marketing::getEndTime, new Date());
+                queryWrapper.eq(Marketing::getIsOn, MarketingStatusEnum.ON.getValue());
+            }else if (MarketingStatusEnum.END.getValue().equals(marketingQueryParam.getStatus())){
+                queryWrapper.lt(Marketing::getEndTime, new Date());
+                queryWrapper.eq(Marketing::getIsOn, MarketingStatusEnum.ON.getValue());
+            }
+        }
+
+        queryWrapper.orderByDesc(Marketing::getCreatedTime);
+
+
+        List<MarketingListVO> marketingListVOS = new ArrayList<>();
+        List<Marketing> list = this.list(queryWrapper);
+        if (CollectionUtils.isNotEmpty(list)) {
+            marketingListVOS = list.stream().map(marketing -> {
+                MarketingListVO marketingListVO = new MarketingListVO();
+                BeanUtils.copyProperties(marketing, marketingListVO);
+                return marketingListVO;
+            }).collect(Collectors.toList());
+        }
+
+
+        return marketingListVOS;
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -75,7 +118,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         }
 
         Date now = DateUtils.getNowDate();
-        if (MarketingOnTypeEnum.CLOSE.getValue().equals(marketing.getIsOn()) || now.after(marketing.getStartTime())) {
+        if (MarketingStatusEnum.CLOSE.getValue().equals(marketing.getIsOn()) || now.after(marketing.getStartTime())) {
             throw new ServiceException("活动当前状态不支持修改");
         }