Browse Source

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

Dev

See merge request quanshu/mp-server!462
zhong chunping 3 years ago
parent
commit
cd51774eba

+ 126 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/CouponPkgMgrController.java

@@ -0,0 +1,126 @@
+package com.qs.mp.web.controller.api.admin;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.admin.domain.Coupon;
+import com.qs.mp.admin.domain.CouponPkg;
+import com.qs.mp.admin.domain.param.CouponPkgParam;
+import com.qs.mp.admin.domain.param.CouponPkgQueryParam;
+import com.qs.mp.admin.domain.param.CouponPkgStatusParam;
+import com.qs.mp.admin.domain.vo.CouponPkgVO;
+import com.qs.mp.admin.service.ICouponPkgItemService;
+import com.qs.mp.admin.service.ICouponPkgService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ErrorCodeEnum;
+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.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 券包管理API
+ *
+ * @author Cup
+ * @date 2022/5/6
+ */
+@Api(tags = "券包管理API")
+@RestController
+@RequestMapping("/api/v1/mp/admin/coupon/pkg/*")
+public class CouponPkgMgrController extends BaseApiController {
+
+
+    @Autowired
+    private ICouponPkgService couponPkgService;
+
+
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:add')")
+    @ApiOperation("创建券包")
+    public AjaxResult create(@RequestBody CouponPkgParam couponPkgParam) {
+
+        couponPkgService.create(couponPkgParam);
+
+        return AjaxResult.success();
+    }
+
+
+    @PostMapping("/update")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:edit')")
+    @ApiOperation("更新券包")
+    public AjaxResult update(@RequestBody CouponPkgParam couponPkgParam) {
+
+        couponPkgService.updateCouponPkg(couponPkgParam);
+
+        return AjaxResult.success();
+    }
+
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:list')")
+    @ApiOperation("券包列表")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "券包列表", response = CouponPkg.class)
+    )
+    public TableDataInfo list(@RequestBody CouponPkgQueryParam couponPkgQueryParam) {
+        startPage();
+        LambdaQueryWrapper<CouponPkg> queryWrapper = new LambdaQueryWrapper<>();
+
+        if (StringUtils.isNotBlank(couponPkgQueryParam.getTitle())) {
+            queryWrapper.like(CouponPkg::getTitle, couponPkgQueryParam.getTitle());
+        }
+
+        if (Objects.nonNull(couponPkgQueryParam.getStatus())) {
+            queryWrapper.eq(CouponPkg::getStatus, couponPkgQueryParam.getStatus());
+        }
+        queryWrapper.orderByDesc(CouponPkg::getId);
+        List<CouponPkg> list = couponPkgService.list(queryWrapper);
+        return getDataTable(list);
+    }
+
+    @PostMapping("/detail/{id}")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:query')")
+    @ApiOperation("券包详情")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "券包详情", response = CouponPkgVO.class)
+    )
+    public AjaxResult detail(@PathVariable("id") Long id) {
+
+        return AjaxResult.success(couponPkgService.detail(id));
+    }
+
+    @PostMapping("/status")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:on')")
+    @ApiOperation("券包上下架")
+    public AjaxResult status(@RequestBody CouponPkgStatusParam couponPkgStatusParam) {
+
+        // 参数校验
+        if (Objects.isNull(couponPkgStatusParam.getId()) || Objects.isNull(couponPkgStatusParam.getStatus())) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+
+        if (couponPkgService.update(new LambdaUpdateWrapper<CouponPkg>()
+                .set(CouponPkg::getStatus, couponPkgStatusParam.getStatus())
+                .eq(CouponPkg::getId, couponPkgStatusParam.getId()))) {
+            return AjaxResult.success("操作成功");
+        }
+
+        return AjaxResult.error("操作失败");
+    }
+
+    @PostMapping("/delete/{id}")
+    @PreAuthorize("@ss.hasPermi('business:couponPkg:remove')")
+    @ApiOperation("删除券包")
+    public AjaxResult delete(@PathVariable("id") Long id) {
+        couponPkgService.delete(id);
+        return AjaxResult.success();
+    }
+}

+ 28 - 0
mp-common/src/main/java/com/qs/mp/common/enums/CouponPkgStatusEnum.java

@@ -0,0 +1,28 @@
+package com.qs.mp.common.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+
+/**
+ * 券包类型枚举
+ * @author Cup
+ * @date 2022/5/6
+ */
+public enum CouponPkgStatusEnum implements IEnum<Integer> {
+
+    PUT_INIT(0, "待上架"),
+    PUT_ON(1, "已上架"),
+    PUT_OFF(2, "已下架");
+
+    private final Integer value;
+    private final String desc;
+
+    CouponPkgStatusEnum(final Integer value, final String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+}

+ 4 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/CouponPkgItem.java

@@ -45,6 +45,10 @@ public class CouponPkgItem implements Serializable {
     @TableField("coupon_id")
     private Long couponId;
 
+    @ApiModelProperty("优惠券发放数量")
+    @TableField("coupon_num")
+    private Integer couponNum;
+
     /**
      * 创建时间
      */

+ 16 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/CouponPkgItemParam.java

@@ -0,0 +1,16 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.admin.domain.CouponPkgItem;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 券包明细入参类
+ * @author Cup
+ * @date 2022/5/6
+ */
+@ApiModel("券包明细入参类")
+@Data
+public class CouponPkgItemParam extends CouponPkgItem {
+
+}

+ 22 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/CouponPkgParam.java

@@ -0,0 +1,22 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.admin.domain.CouponPkg;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 券包入参类
+ * @author Cup
+ * @date 2022/5/6
+ */
+@ApiModel("券包入参类")
+@Data
+public class CouponPkgParam extends CouponPkg {
+
+    @ApiModelProperty("券包明细列表")
+    List<CouponPkgItemParam> couponPkgItemList;
+
+}

+ 30 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/CouponPkgQueryParam.java

@@ -0,0 +1,30 @@
+package com.qs.mp.admin.domain.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 券包查询入参类
+ * @author Cup
+ * @date 2022/5/6
+ */
+@ApiModel("券包查询入参类")
+@Data
+public class CouponPkgQueryParam {
+    /**
+     * 券包标题
+     */
+    @ApiModelProperty("券包标题")
+    private String title;
+
+    /**
+     * 券包,状态 0待上架 1 上架 2下架
+     */
+    @ApiModelProperty("券包,状态 0待上架 1 上架 2下架")
+    private Integer status;
+
+
+
+}

+ 22 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/CouponPkgStatusParam.java

@@ -0,0 +1,22 @@
+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/6
+ */
+@ApiModel("券包状态修改入参类")
+@Data
+public class CouponPkgStatusParam {
+
+    @ApiModelProperty("券包id")
+    private Long id;
+
+
+    @ApiModelProperty("券包,状态 0待上架 1 上架 2下架")
+    private Integer status;
+}

+ 35 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/CouponPkgItemVO.java

@@ -0,0 +1,35 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.qs.mp.admin.domain.CouponPkgItem;
+import com.qs.mp.common.enums.CouponTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 券包明细出参类
+ *
+ * @author Cup
+ * @date 2022/5/6
+ */
+@ApiModel("券包明细出参类")
+@Data
+public class CouponPkgItemVO extends CouponPkgItem {
+
+    @ApiModelProperty("优惠券名称")
+    private String title;
+
+    @ApiModelProperty("券优惠金额(比例)")
+    private Integer discount;
+
+    @ApiModelProperty("类型;1用户盲票购买优惠券、2用户门店消费优惠券、3经销商盲票采购优惠券")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private CouponTypeEnum type;
+
+    @ApiModelProperty("有效期天数;从领券后开始多少天有效,0则使用绝对有效期")
+    private Integer dueDays;
+
+
+}

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

@@ -0,0 +1,23 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.qs.mp.admin.domain.CouponPkg;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 券包出参类
+ *
+ * @author Cup
+ * @date 2022/5/6
+ */
+@ApiModel("券包出参类")
+@Data
+public class CouponPkgVO extends CouponPkg {
+
+    @ApiModelProperty("券包明细列表")
+    List<CouponPkgItemVO> couponPkgItemVOList;
+
+}

+ 12 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/CouponPkgItemMapper.java

@@ -1,7 +1,13 @@
 package com.qs.mp.admin.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.CouponPkgItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @auther quanshu
@@ -10,4 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface CouponPkgItemMapper extends BaseMapper<CouponPkgItem> {
 
+    /**
+     * 查询券包明细列表
+     * @param queryWrapper
+     * @return
+     */
+    List<CouponPkgItemVO> selectDetail(@Param(Constants.WRAPPER) QueryWrapper<CouponPkgItemVO> queryWrapper);
 }

+ 9 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ICouponPkgItemService.java

@@ -2,6 +2,9 @@ package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.CouponPkgItem;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ICouponPkgItemService extends IService<CouponPkgItem> {
 
+    /**
+     * 获取券包明细列表
+     * @param id
+     * @return
+     */
+    List<CouponPkgItemVO> listDetailByCouponPkgId(Long id);
 }

+ 33 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ICouponPkgService.java

@@ -2,6 +2,8 @@ package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.CouponPkg;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.param.CouponPkgParam;
+import com.qs.mp.admin.domain.vo.CouponPkgVO;
 
 /**
  * <p>
@@ -13,4 +15,35 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ICouponPkgService extends IService<CouponPkg> {
 
+    /**
+     * 新增券包
+     *
+     * @param couponPkgParam
+     * @return
+     */
+    boolean create(CouponPkgParam couponPkgParam);
+
+    /**
+     * 修改券包
+     *
+     * @param couponPkgParam
+     * @return
+     */
+    boolean updateCouponPkg(CouponPkgParam couponPkgParam);
+
+    /**
+     * 券包详情
+     *
+     * @param id
+     * @return
+     */
+    CouponPkgVO detail(Long id);
+
+    /**
+     * 删除券包
+     *
+     * @param id
+     * @return
+     */
+    boolean delete(Long id);
 }

+ 10 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponPkgItemServiceImpl.java

@@ -1,11 +1,15 @@
 package com.qs.mp.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.CouponPkgItem;
+import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
 import com.qs.mp.admin.mapper.CouponPkgItemMapper;
 import com.qs.mp.admin.service.ICouponPkgItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 券包明细表 服务实现类
@@ -17,4 +21,10 @@ import org.springframework.stereotype.Service;
 @Service
 public class CouponPkgItemServiceImpl extends ServiceImpl<CouponPkgItemMapper, CouponPkgItem> implements ICouponPkgItemService {
 
+    @Override
+    public List<CouponPkgItemVO> listDetailByCouponPkgId(Long id) {
+        QueryWrapper<CouponPkgItemVO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("coupon_pkg_id", id);
+        return this.getBaseMapper().selectDetail(queryWrapper);
+    }
 }

+ 118 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponPkgServiceImpl.java

@@ -1,10 +1,28 @@
 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.CouponPkg;
+import com.qs.mp.admin.domain.CouponPkgItem;
+import com.qs.mp.admin.domain.param.CouponPkgItemParam;
+import com.qs.mp.admin.domain.param.CouponPkgParam;
+import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
+import com.qs.mp.admin.domain.vo.CouponPkgVO;
 import com.qs.mp.admin.mapper.CouponPkgMapper;
+import com.qs.mp.admin.service.ICouponPkgItemService;
 import com.qs.mp.admin.service.ICouponPkgService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.enums.CouponPkgStatusEnum;
+import com.qs.mp.common.exception.ServiceException;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -17,4 +35,104 @@ import org.springframework.stereotype.Service;
 @Service
 public class CouponPkgServiceImpl extends ServiceImpl<CouponPkgMapper, CouponPkg> implements ICouponPkgService {
 
+    @Autowired
+    private ICouponPkgItemService couponPkgItemService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delete(Long id) {
+
+        // 删除券包明细
+        couponPkgItemService.remove(new LambdaQueryWrapper<CouponPkgItem>().eq(CouponPkgItem::getCouponPkgId, id));
+
+        // 删除券包
+        this.removeById(id);
+
+        return true;
+    }
+
+    @Override
+    public CouponPkgVO detail(Long id) {
+        CouponPkgVO couponPkgVO = new CouponPkgVO();
+
+        // 封装券包信息
+        CouponPkg couponPkg = this.getById(id);
+        if (Objects.isNull(couponPkg)) {
+            throw new ServiceException("券包不存在");
+        }
+        BeanUtils.copyProperties(couponPkg, couponPkgVO);
+
+        // 封装券包明细信息
+        List<CouponPkgItemVO> list = couponPkgItemService.listDetailByCouponPkgId(id);
+        couponPkgVO.setCouponPkgItemVOList(list);
+
+        return couponPkgVO;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateCouponPkg(CouponPkgParam couponPkgParam) {
+
+        if (Objects.isNull(couponPkgParam.getId()) || couponPkgParam.getId() == 0) {
+            throw new ServiceException("券包ID不正确");
+        }
+
+        if (!CouponPkgStatusEnum.PUT_INIT.getValue().equals(couponPkgParam.getStatus())) {
+            throw new ServiceException("券包只有待上架才可编辑");
+        }
+
+
+        List<CouponPkgItemParam> couponPkgItemList = couponPkgParam.getCouponPkgItemList();
+        if (CollectionUtils.isEmpty(couponPkgItemList)) {
+            throw new ServiceException("券包明细不能为空");
+        }
+
+        // 清除券包明细
+        couponPkgItemService.remove(new LambdaQueryWrapper<CouponPkgItem>()
+                .eq(CouponPkgItem::getCouponPkgId, couponPkgParam.getId()));
+
+        // 更新券包
+        CouponPkg couponPkg = new CouponPkg();
+        BeanUtils.copyProperties(couponPkgParam, couponPkg);
+        this.updateById(couponPkg);
+
+        // 创建券包明细
+        List<CouponPkgItem> params = new ArrayList<>();
+        for (CouponPkgItemParam couponPkgItemParam : couponPkgItemList) {
+            CouponPkgItem param = new CouponPkgItem();
+            param.setCouponPkgId(couponPkg.getId());
+            param.setCouponId(couponPkgItemParam.getCouponId());
+            param.setCouponNum(couponPkgItemParam.getCouponNum());
+            params.add(param);
+        }
+        couponPkgItemService.saveBatch(params);
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean create(CouponPkgParam couponPkgParam) {
+
+        List<CouponPkgItemParam> couponPkgItemList = couponPkgParam.getCouponPkgItemList();
+        if (CollectionUtils.isEmpty(couponPkgItemList)) {
+            throw new ServiceException("券包明细不能为空");
+        }
+
+        CouponPkg couponPkg = new CouponPkg();
+        BeanUtils.copyProperties(couponPkgParam, couponPkg);
+        this.save(couponPkg);
+
+        List<CouponPkgItem> params = new ArrayList<>();
+        for (CouponPkgItemParam couponPkgItemParam : couponPkgItemList) {
+            CouponPkgItem param = new CouponPkgItem();
+            param.setCouponPkgId(couponPkg.getId());
+            param.setCouponId(couponPkgItemParam.getCouponId());
+            param.setCouponNum(couponPkgItemParam.getCouponNum());
+            params.add(param);
+        }
+        couponPkgItemService.saveBatch(params);
+
+        return true;
+    }
 }

+ 15 - 0
mp-service/src/main/resources/mapper/admin/CouponPkgItemMapper.xml

@@ -16,4 +16,19 @@
         id, coupon_pkg_id, coupon_id, created_time, updated_time
     </sql>
 
+    <select id="selectDetail" resultType="com.qs.mp.admin.domain.vo.CouponPkgItemVO">
+        select t1.id,
+            t1.coupon_pkg_id,
+            t1.coupon_id,
+            t1.coupon_num,
+            t1.created_time,
+            t1.updated_time,
+            t2.title,
+            t2.discount,
+            t2.type,
+            t2.due_days
+        from mp_coupon_pkg_item t1
+        left join mp_coupon t2 on t1.coupon_id = t2.coupon_id
+        ${ew.customSqlSegment}
+    </select>
 </mapper>