浏览代码

兑换码

zhangkaikai 1 年之前
父节点
当前提交
f547b2f81a

+ 17 - 6
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/CdKeyMgrController.java

@@ -1,6 +1,7 @@
 package com.qs.mp.web.controller.api.admin;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.qs.mp.admin.domain.CdKey;
 import com.qs.mp.admin.domain.CdKeyGroup;
 import com.qs.mp.admin.domain.CdKeyGroupGoods;
@@ -19,6 +20,7 @@ import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.CdKeyGroupStatusEnum;
 import com.qs.mp.common.enums.CdKeyStatusEnum;
 import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.common.utils.bean.BeanUtils;
 import com.qs.mp.utils.ExcelUtil;
 import com.qs.mp.web.controller.BaseController;
 import io.swagger.annotations.*;
@@ -32,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author zhangkaikai
@@ -101,8 +104,16 @@ public class CdKeyMgrController extends BaseController {
         queryWrapper.orderByDesc("created_time");
 
         startPage();
-        List<CdKeyGroup> list = cdKeyGroupService.list(queryWrapper);
-        return getDataTable(list);
+        List<CdKeyGroup> cdKeyGroupList = cdKeyGroupService.list(queryWrapper);
+        List<CdKeyGroupListVO> cdKeyGroupListVOS = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(cdKeyGroupList)) {
+            cdKeyGroupListVOS = cdKeyGroupList.stream().map(cdKeyGroup -> {
+                CdKeyGroupListVO cdKeyGroupListVO = new CdKeyGroupListVO();
+                BeanUtils.copyProperties(cdKeyGroup, cdKeyGroupListVO);
+                return cdKeyGroupListVO;
+            }).collect(Collectors.toList());
+        }
+        return getDataTable(cdKeyGroupListVOS);
     }
 
     @ApiOperation("兑换码详情")
@@ -112,9 +123,8 @@ public class CdKeyMgrController extends BaseController {
             @ApiResponse(code = 200, message = "查询成功", response = CdKeyGroupVO.class)
     )
     public AjaxResult detail(@PathVariable String groupId) {
-        CdKeyGroupVO cdKeyGroupVO = new CdKeyGroupVO();
         CdKeyGroup cdKeyGroup = cdKeyGroupService.getById(groupId);
-        mapperFacade.map(cdKeyGroup, CdKeyGroupVO.class);
+        CdKeyGroupVO cdKeyGroupVO = mapperFacade.map(cdKeyGroup, CdKeyGroupVO.class);
         List<CdKeyGroupGoods> goodsList = cdKeyGroupGoodsService.list(new QueryWrapper<CdKeyGroupGoods>().eq("group_id", groupId));
         cdKeyGroupVO.setGoodsList(goodsList);
         return AjaxResult.success(cdKeyGroupVO);
@@ -125,10 +135,11 @@ public class CdKeyMgrController extends BaseController {
     @PostMapping("/activate")
     public AjaxResult activate(@RequestBody CdKeyActivateParam param) {
         CdKeyGroup cdKeyGroup = cdKeyGroupService.getById(param.getGroupId());
-        if (!CdKeyGroupStatusEnum.NONACTIVATED.getValue().equals(cdKeyGroup.getStatus())) {
+        if (!CdKeyGroupStatusEnum.NONACTIVATED.getValue().equals(cdKeyGroup.getStatus().getValue())) {
             return AjaxResult.error("只有未激活的兑换码组才能激活");
         }
-        cdKeyGroup.setStatus(param.getStatus());
+        cdKeyGroup.setStatus(CdKeyGroupStatusEnum.ACTIVATED);
+        cdKeyGroup.setActivationTime(new Date());
         return AjaxResult.success(cdKeyGroupService.updateById(cdKeyGroup));
     }
 

+ 5 - 4
mp-common/src/main/java/com/qs/mp/common/enums/CdKeyGroupStatusEnum.java

@@ -1,5 +1,6 @@
 package com.qs.mp.common.enums;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.annotation.JSONType;
 import com.baomidou.mybatisplus.annotation.IEnum;
 import com.qs.mp.common.json.EnumValueDeserializer;
@@ -43,9 +44,9 @@ public enum CdKeyGroupStatusEnum implements IEnum<String> {
 
     @Override
     public String toString() {
-        return "CdKeyGroupStatusEnum{" +
-                "value='" + value + '\'' +
-                ", desc='" + desc + '\'' +
-                '}';
+        JSONObject object = new JSONObject();
+        object.put("value",value);
+        object.put("desc", desc);
+        return object.toString();
     }
 }

+ 5 - 4
mp-common/src/main/java/com/qs/mp/common/enums/ValidityPeriodEnum.java

@@ -1,5 +1,6 @@
 package com.qs.mp.common.enums;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.annotation.JSONType;
 import com.baomidou.mybatisplus.annotation.IEnum;
 import com.qs.mp.common.json.EnumValueDeserializer;
@@ -38,9 +39,9 @@ public enum ValidityPeriodEnum implements IEnum<String> {
 
     @Override
     public String toString() {
-        return "ValidityPeriodEnum{" +
-                "value='" + value + '\'' +
-                ", desc='" + desc + '\'' +
-                '}';
+        JSONObject object = new JSONObject();
+        object.put("value",value);
+        object.put("desc", desc);
+        return object.toString();
     }
 }

+ 7 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/CdKey.java

@@ -1,5 +1,7 @@
 package com.qs.mp.admin.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import java.util.Date;
@@ -7,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 import com.baomidou.mybatisplus.annotation.*;
+import com.qs.mp.common.enums.CdKeyGroupGoodsTypeEnum;
+import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 /**
@@ -14,6 +18,7 @@ import lombok.Data;
  * @auther quanshu
  * @create 2023-05-16 17:20:42
  */
+@ApiModel("兑换码表")
 @TableName("mp_cd_key")
 @Data
 public class CdKey implements Serializable {
@@ -41,7 +46,8 @@ public class CdKey implements Serializable {
      * 商品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包
      */
          @TableField("type")
-    private String type;
+         @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+         private CdKeyGroupGoodsTypeEnum type;
 
         /**
      * 商品图片

+ 5 - 2
mp-service/src/main/java/com/qs/mp/admin/domain/CdKeyGroup.java

@@ -9,8 +9,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
-import com.baomidou.mybatisplus.annotation.*;
+import com.qs.mp.common.enums.CdKeyGroupStatusEnum;
 import com.qs.mp.common.enums.ValidityPeriodEnum;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -21,6 +22,7 @@ import javax.validation.constraints.NotNull;
  * @auther quanshu
  * @create 2023-05-16 17:19:30
  */
+@ApiModel("兑换码组表")
 @TableName("mp_cd_key_group")
 @Data
 public class CdKeyGroup implements Serializable {
@@ -73,7 +75,8 @@ public class CdKeyGroup implements Serializable {
      */
     @ApiModelProperty("状态,待生成waiting/未激活nonactivated/已激活activated/已失效invalid")
     @TableField("status")
-    private String status;
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private CdKeyGroupStatusEnum status;
 
     /**
      * 有效期,三个月threeMonths/六个月sixMonths/forever永久

+ 6 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/CdKeyGroupGoods.java

@@ -1,5 +1,7 @@
 package com.qs.mp.admin.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import java.util.Date;
@@ -7,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+
+import com.qs.mp.common.enums.CdKeyGroupGoodsTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -55,7 +59,8 @@ public class CdKeyGroupGoods implements Serializable {
      */
     @ApiModelProperty("商品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包")
     @TableField("type")
-    private String type;
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private CdKeyGroupGoodsTypeEnum type;
 
     /**
      * 商品关联id

+ 2 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/param/CdKeyActivateParam.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.domain.param;
 
+import com.qs.mp.common.enums.CdKeyGroupStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -16,5 +17,5 @@ public class CdKeyActivateParam {
     private String groupId;
 
     @ApiModelProperty("状态,待生成waiting/未激活nonactivated/已激活activated/已失效invalid")
-    private String status;
+    private CdKeyGroupStatusEnum status;
 }

+ 0 - 3
mp-service/src/main/java/com/qs/mp/admin/domain/param/CdKeyCreateParam.java

@@ -20,9 +20,6 @@ public class CdKeyCreateParam {
     @ApiModelProperty(value = "渠道id", required = true)
     private Long channelId;
 
-    @ApiModelProperty(value = "门店名称", required = true)
-    private String siteName;
-
     @NotNull(message = "数量不能为空")
     @ApiModelProperty(value = "数量", required = true)
     private Integer quantity;

+ 4 - 3
mp-service/src/main/java/com/qs/mp/admin/domain/vo/CdKeyGroupListVO.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.domain.vo;
 
+import com.qs.mp.common.enums.CdKeyGroupStatusEnum;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -25,13 +26,13 @@ public class CdKeyGroupListVO {
     private String siteName;
 
     @ApiModelProperty("添加时间")
-    private Date createTime;
+    private Date createdTime;
 
     @ApiModelProperty("激活时间")
     private Date activeTime;
 
-    @ApiModelProperty("状态")
-    private String status;
+    @ApiModelProperty("状态,待生成waiting/未激活nonactivated/已激活activated/已失效invalid")
+    private CdKeyGroupStatusEnum status;
 
     @ApiModelProperty("兑换码")
     private String cdKey;

+ 22 - 13
mp-service/src/main/java/com/qs/mp/admin/service/impl/CdKeyGroupServiceImpl.java

@@ -8,7 +8,8 @@ import com.qs.mp.admin.domain.param.CdKeyCreateParam;
 import com.qs.mp.admin.mapper.CdKeyGroupMapper;
 import com.qs.mp.admin.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qs.mp.common.constant.Constants;
+import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.common.enums.*;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.LogUtil;
@@ -62,15 +63,23 @@ public class CdKeyGroupServiceImpl extends ServiceImpl<CdKeyGroupMapper, CdKeyGr
     @Autowired
     private IAsyncTaskService asyncTaskService;
 
+    @Autowired
+    private IChannelService channelService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createCdKeyGroup(CdKeyCreateParam param) {
-
+        Channel channel = channelService.getById(param.getChannelId());
+        if (channel == null) {
+            LogUtil.error(logger,"门店不存在,channelId:{0}", param.getChannelId());
+            throw new ServiceException("门店不存在");
+        }
         // 生成兑换码组
         CdKeyGroup cdKeyGroup = mapperFacade.map(param, CdKeyGroup.class);
         cdKeyGroup.setGroupId(bizIdGenerator.newId());
-        cdKeyGroup.setStatus(CdKeyGroupStatusEnum.WAITING.getValue());
+        cdKeyGroup.setStatus(CdKeyGroupStatusEnum.WAITING);
+        cdKeyGroup.setSiteName(channel.getName());
         cdKeyGroup.setCreatedTime(new Date());
         cdKeyGroup.setUpdatedTime(new Date());
         this.save(cdKeyGroup);
@@ -84,39 +93,39 @@ public class CdKeyGroupServiceImpl extends ServiceImpl<CdKeyGroupMapper, CdKeyGr
                 CdKeyGroupGoods groupGoods = new CdKeyGroupGoods();
                 BeanUtils.copyProperties(cdKeyGroupGoods, groupGoods);
                 groupGoods.setGroupId(cdKeyGroup.getGroupId());
-                if (CdKeyGroupGoodsTypeEnum.COUPON.getValue().equals(cdKeyGroupGoods.getType())) {
+                if (CdKeyGroupGoodsTypeEnum.COUPON.equals(cdKeyGroupGoods.getType())) {
                     Coupon coupon = couponService.getById(groupGoods.getRefId());
                     if (coupon == null) {
                         LogUtil.error(logger,"关联优惠券信息不存在,groupId:{0}", cdKeyGroup.getGroupId());
                         throw new ServiceException("关联优惠券信息不存在");
                     }
                     groupGoods.setTitle(coupon.getTitle());
-                    groupGoods.setPicUrl(coupon.getPicUrl());
+                    groupGoods.setPicUrl(cdKeyGroupGoods.getPicUrl());
                     groupGoods.setValue(coupon.getDiscount());
                     groupGoods.setQuantity(cdKeyGroupGoods.getQuantity());
-                } else if (CdKeyGroupGoodsTypeEnum.COUPON_PKG.getValue().equals(cdKeyGroupGoods.getType())) {
+                } else if (CdKeyGroupGoodsTypeEnum.COUPON_PKG.equals(cdKeyGroupGoods.getType())) {
                     CouponPkg couponPkg = couponPkgService.getById(groupGoods.getRefId());
                     if (couponPkg == null) {
                         LogUtil.error(logger,"关联券包信息不存在,groupId:{0}", cdKeyGroup.getGroupId());
                         throw new ServiceException("关联券包信息不存在");
                     }
                     groupGoods.setTitle(couponPkg.getTitle());
-                    groupGoods.setPicUrl(couponPkg.getPicUrl());
+                    groupGoods.setPicUrl(cdKeyGroupGoods.getPicUrl());
                     groupGoods.setValue(couponPkg.getFacePrice());
                     groupGoods.setQuantity(cdKeyGroupGoods.getQuantity());
-                } else if (CdKeyGroupGoodsTypeEnum.GOODS.getValue().equals(cdKeyGroupGoods.getType())) {
+                } else if (CdKeyGroupGoodsTypeEnum.GOODS.equals(cdKeyGroupGoods.getType())) {
                     Goods goods = goodsService.getById(cdKeyGroupGoods.getRefId());
                     if (goods == null) {
                         LogUtil.error(logger, "关联商品信息不存在,groupId:{0}", cdKeyGroup.getGroupId());
                         throw new ServiceException("关联商品信息不存在");
                     }
                     groupGoods.setTitle(goods.getTitle());
-                    groupGoods.setPicUrl(goods.getPicUrl());
+                    groupGoods.setPicUrl(cdKeyGroupGoods.getPicUrl());
                     groupGoods.setValue(goods.getValue());
                     groupGoods.setQuantity(cdKeyGroupGoods.getQuantity());
                 } else {
                     groupGoods.setTitle("盲豆");
-                    groupGoods.setPicUrl(Constants.MANGDOU_PIC);
+                    groupGoods.setPicUrl(cdKeyGroupGoods.getPicUrl());
                     groupGoods.setQuantity(cdKeyGroupGoods.getQuantity());
                 }
                 cdKeyGroupGoodsList.add(groupGoods);
@@ -145,13 +154,13 @@ public class CdKeyGroupServiceImpl extends ServiceImpl<CdKeyGroupMapper, CdKeyGr
                 for (int i = 0; i < cdKeyGroupGoods.getQuantity(); i++) {
                     // 为每一个商品生成兑换码
                     CdKey cdKey = new CdKey();
-                    cdKey.setCdKey(bizIdGenerator.newId());
+                    cdKey.setKeyId(bizIdGenerator.newIdWithUidSharding(groupId));
                     cdKey.setGroupId(groupId);
                     cdKey.setRefId(cdKeyGroupGoods.getRefId());
                     cdKey.setType(cdKeyGroupGoods.getType());
                     cdKey.setPicUrl(cdKeyGroupGoods.getPicUrl());
                     cdKey.setStatus(CdKeyStatusEnum.UNCASHED.getValue());
-                    cdKey.setCdKey(cdKeyGenerate());
+                    cdKey.setCdKey(cdKeyGenerate(cdKey.getKeyId()));
                     cdKey.setCreateTime(new Date());
                     cdKeyList.add(cdKey);
                 }
@@ -167,7 +176,7 @@ public class CdKeyGroupServiceImpl extends ServiceImpl<CdKeyGroupMapper, CdKeyGr
 
     }
 
-    private String cdKeyGenerate() {
+    private String cdKeyGenerate(String keyId) {
         // 生成16位大写字母和数字的随机卡密码的逻辑
         // 可以使用随机数生成器或者其他方式实现
         String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";