|
@@ -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) {
|