Bladeren bron

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

Dev

See merge request quanshu/mp-server!436
zhong chunping 3 jaren geleden
bovenliggende
commit
619f53652e

+ 8 - 4
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.admin.domain.*;
 import com.qs.mp.admin.domain.excel.TicketExcel;
-import com.qs.mp.admin.domain.param.BathIdParam;
-import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
-import com.qs.mp.admin.domain.param.TicketBoxParam;
-import com.qs.mp.admin.domain.param.TicketUpdateSortWeightParam;
+import com.qs.mp.admin.domain.param.*;
 import com.qs.mp.admin.domain.vo.TicketAwardsVO;
 import com.qs.mp.admin.domain.vo.TicketBoxVO;
 import com.qs.mp.admin.service.ITicketAwardsPrizeService;
@@ -120,6 +117,13 @@ public class TicketBoxMgrController extends BaseApiController {
 		return getDataTable(list);
 	}
 
+	@PostMapping("/update")
+	@PreAuthorize("@ss.hasPermi('business:ticket:edit')")
+	@ApiOperation("更新盲票信息")
+	public AjaxResult update(@RequestBody TicketBoxUpdateParam param) {
+		return AjaxResult.success(ticketBoxService.updateTicketBox(param));
+	}
+
 
 
 	@PostMapping("/update/sortWeight")

+ 2 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelTicketController.java

@@ -54,7 +54,8 @@ public class ChannelTicketController extends BaseApiController {
     List<TicketBox> ticketBoxes = ticketBoxService.list(
         new LambdaQueryWrapper<TicketBox>().eq(TicketBox::getType, param.getType())
             .eq(null != param.getCategoryId() && 0 != param.getCategoryId(), TicketBox::getCategoryId, param.getCategoryId())
-            .eq(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON));
+            .eq(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
+            .orderByDesc(TicketBox::getSortWeight));
     List<TicketBoxListVO> ticketBoxListVOList = mapperFacade.mapAsList(ticketBoxes, TicketBoxListVO.class);
     TableDataInfo rspData = getDataTable(ticketBoxes);
     rspData.setRows(ticketBoxListVOList);

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

@@ -15,6 +15,9 @@ import lombok.Data;
 @Data
 public class TicketAwardsParam {
 
+  @ApiModelProperty("奖项ID")
+  private String awardsId;
+
   @NotEmpty(message = "奖品列表不能为空")
   @ApiModelProperty(value = "奖品列表",required=true)
   List<TicketAwardsPrizeParam> prizeList;

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

@@ -13,6 +13,10 @@ import lombok.Data;
 @ApiModel(value= "盲票组奖级对应的奖品参数")
 @Data
 public class TicketAwardsPrizeParam {
+
+  @ApiModelProperty("奖品id")
+  private String prizeId;
+
   @NotNull(message = "奖品关联ID不能为空")
   @ApiModelProperty(value = "奖品关联ID",required=true)
   private String refId;

+ 40 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxUpdateParam.java

@@ -0,0 +1,40 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.common.enums.TicketTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 盲票组更新入参类
+ * @author Cup
+ * @date 2022/4/26
+ */
+@ApiModel(value= "盲票组更新入参类")
+@Data
+public class TicketBoxUpdateParam {
+
+    @ApiModelProperty(value = "盲票组ID")
+    private String boxId;
+
+    @ApiModelProperty(value = "盲票组标题")
+    private String title;
+
+    @NotNull(message = "售价不能为空")
+    @ApiModelProperty(value = "售价",required=true)
+    private Integer salePrice;
+
+    @ApiModelProperty(value = "盲票包采购单价,线下票时必传")
+    private Integer pkgSalePrice;
+
+    @ApiModelProperty(value = "分佣基数")
+    private BigDecimal saleCommRate;
+
+    @ApiModelProperty(value = "奖级列表")
+    List<TicketAwardsParam> awardsList;
+}

+ 8 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java

@@ -3,6 +3,7 @@ package com.qs.mp.admin.service;
 import com.qs.mp.admin.domain.TicketBox;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
+import com.qs.mp.admin.domain.param.TicketBoxUpdateParam;
 
 /**
  * <p>
@@ -32,4 +33,11 @@ public interface ITicketBoxService extends IService<TicketBox> {
    * @param boxId
    */
   void removeTicketBox(String boxId);
+
+    /**
+     * 更新盲票信息
+     * @param param 更新入参类
+     * @return
+     */
+  boolean updateTicketBox(TicketBoxUpdateParam param);
 }

+ 107 - 1
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -3,6 +3,7 @@ package com.qs.mp.admin.service.impl;
 import com.alibaba.fastjson.JSONObject;
 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.Goods;
@@ -15,6 +16,7 @@ import com.qs.mp.admin.domain.dto.TicketDrawNumDTO;
 import com.qs.mp.admin.domain.param.TicketAwardsParam;
 import com.qs.mp.admin.domain.param.TicketAwardsPrizeParam;
 import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
+import com.qs.mp.admin.domain.param.TicketBoxUpdateParam;
 import com.qs.mp.admin.mapper.TicketBoxMapper;
 import com.qs.mp.admin.service.ICouponService;
 import com.qs.mp.admin.service.IGoodsService;
@@ -31,9 +33,11 @@ import com.qs.mp.common.enums.TicketPkgStatusEnum;
 import com.qs.mp.common.enums.TicketPrizeTypeEnum;
 import com.qs.mp.common.enums.TicketStatusEnum;
 import com.qs.mp.common.enums.TicketTypeEnum;
+import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.pulsar.PulsarClientService;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.RSAUtil;
+import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -46,6 +50,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
+import java.util.stream.Collectors;
+
 import lombok.Data;
 import ma.glasnost.orika.MapperFacade;
 import org.apache.pulsar.client.api.PulsarClientException;
@@ -55,7 +61,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
 
 /**
  * <p>
@@ -98,6 +103,107 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
   @Autowired
   private ITicketPackageService ticketPackageService;
 
+  @Override
+  @Transactional(rollbackFor = Exception.class)
+  public boolean updateTicketBox(TicketBoxUpdateParam param) {
+    if (StringUtils.isBlank(param.getBoxId())) {
+      throw new ServiceException("盲票组ID不能为空");
+    }
+    // 设置更新盲票基本信息
+    TicketBox ticketBox = new TicketBox();
+    ticketBox.setBoxId(param.getBoxId());
+    ticketBox.setTitle(param.getTitle());
+    ticketBox.setSalePrice(param.getSalePrice());
+    ticketBox.setPkgSalePrice(param.getPkgSalePrice());
+    ticketBox.setSaleCommRate(param.getSaleCommRate());
+    this.updateById(ticketBox);
+
+    // 校验更新奖品信息
+    if (CollectionUtils.isEmpty(param.getAwardsList())) {
+      throw new ServiceException("奖品列表不能为空");
+    }
+    // 校验奖品信息
+    int count = ticketAwardsService.count(new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, param.getBoxId()));
+    if (count != param.getAwardsList().size()) {
+      throw new ServiceException("奖级数量与原来不同");
+    }
+
+    // 更新奖品信息
+    for (TicketAwardsParam ticketAwardsParam : param.getAwardsList()) {
+       if (CollectionUtils.isEmpty(ticketAwardsParam.getPrizeList())) {
+        throw new ServiceException("奖品列表不能为空");
+       }
+
+      Map<String,TicketAwardsPrize> prizeMap = new HashMap<>();
+      List<String> prizeIdList = ticketAwardsParam.getPrizeList().stream().map(ticketAwardsPrizeParam -> {
+        if (StringUtils.isBlank(ticketAwardsPrizeParam.getPrizeId())) {
+          throw new ServiceException("奖品ID不能为空");
+        }
+        // 封装奖品信息
+        TicketAwardsPrize awardsPrize = mapperFacade.map(ticketAwardsPrizeParam, TicketAwardsPrize.class);
+        awardsPrize.setPrizeId(ticketAwardsPrizeParam.getPrizeId());
+        awardsPrize.setBoxId(ticketBox.getBoxId());
+        awardsPrize.setAwardsId(ticketAwardsParam.getAwardsId());
+        if (null == awardsPrize.getQuantity() || 0 == awardsPrize.getQuantity()) {
+          // 页面没设置奖品的具体数量,则默认为整个奖项的数量
+          awardsPrize.setQuantity(ticketAwardsParam.getQuantity());
+        }
+        awardsPrize.setRemainQty(awardsPrize.getQuantity());
+        awardsPrize.setCashedQty(0);
+        if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
+          Goods goods = goodsService.getById(awardsPrize.getRefId());
+          awardsPrize.setTitle(goods.getTitle());
+          awardsPrize.setPicUrl(goods.getPicUrl());
+          awardsPrize.setValue(goods.getValue());
+        } else if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
+          Coupon coupon = couponService.getById(awardsPrize.getRefId());
+          awardsPrize.setTitle(coupon.getTitle());
+          awardsPrize.setPicUrl(coupon.getPicUrl());
+          awardsPrize.setValue(coupon.getDiscount());
+        } else {
+          awardsPrize.setTitle("盲豆");
+          awardsPrize.setPicUrl("md.jpeg");
+        }
+        prizeMap.put(ticketAwardsPrizeParam.getPrizeId(), awardsPrize);
+        return ticketAwardsPrizeParam.getPrizeId();
+      }).collect(Collectors.toList());
+
+      List<String> tempList = new ArrayList<>();
+      tempList.addAll(prizeIdList);
+
+      // 查询原来的奖品信息
+      List<TicketAwardsPrize> oldTicketAwardsPrizeList = ticketAwardsPrizeService.list(new LambdaQueryWrapper<TicketAwardsPrize>()
+              .select(TicketAwardsPrize::getPrizeId)
+              .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId()));
+      if (CollectionUtils.isEmpty(oldTicketAwardsPrizeList)) {
+        throw new ServiceException("原奖品列表为空");
+      }
+      List<String> oldPrizeIdList = oldTicketAwardsPrizeList.stream().map(TicketAwardsPrize::getPrizeId).collect(Collectors.toList());
+
+      // 去重原来的奖品信息
+      prizeIdList.removeAll(oldPrizeIdList);
+
+      // 删除原来的奖品信息
+      oldPrizeIdList.removeAll(tempList);
+      if (CollectionUtils.isNotEmpty(oldPrizeIdList)) {
+        ticketAwardsPrizeService.removeByIds(oldPrizeIdList);
+      }
+
+      // 新增的奖品信息
+      if (CollectionUtils.isNotEmpty(prizeIdList)) {
+        List<TicketAwardsPrize> ticketAwardsPrizeList = new ArrayList<>();
+        for (String id : prizeIdList) {
+          if (prizeMap.get(id) != null) {
+            ticketAwardsPrizeList.add(prizeMap.get(id));
+          }
+        }
+        ticketAwardsPrizeService.saveBatch(ticketAwardsPrizeList);
+      }
+    }
+
+    return true;
+  }
+
   @Override
   @Transactional
   public String createTicketBox(TicketBoxCreateParam param) {