|
|
@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alipay.api.AlipayApiException;
|
|
|
@@ -108,6 +109,7 @@ import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author chan
|
|
|
@@ -278,6 +280,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final UserDistributeSubWaitingMapper userDistributeSubWaitingMapper;
|
|
|
|
|
|
+ private final OrderDonLocationRelateMapper orderDonLocationRelateMapper;
|
|
|
+
|
|
|
+ private final GoodsDonSkuSubsidyMapper goodsDonSkuSubsidyMapper;
|
|
|
+
|
|
|
+ private final OrderDonSubsidyRelateMapper orderDonSubsidyRelateMapper;
|
|
|
+
|
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
@@ -369,8 +377,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
/* 生成订单 */
|
|
|
String donNo = SEQUENCE.nextId().toString();
|
|
|
OrderDon orderDon = new OrderDon();
|
|
|
- orderDon.setIp(payRequest.getIp());
|
|
|
- orderDon.setLocation(payRequest.getLocation());
|
|
|
|
|
|
orderDon.setIsDp(false);
|
|
|
if (isNoLogin != null && isNoLogin) {
|
|
|
@@ -499,71 +505,16 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (isSpecificPrice && (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0 || orderDon.getMoney().compareTo(specificPrice) != 0)) {
|
|
|
throw BusinessRuntimeException.getInstance("专属价格不支持使用其他优惠");
|
|
|
}
|
|
|
- orderDon.setPayDesc(goodsDon.getPayDesc());
|
|
|
- StringBuilder payTitle = new StringBuilder();
|
|
|
- payTitle.append(goodsDon.getTitle());
|
|
|
- if (sku != null) {
|
|
|
- payTitle.append(sku.getSpecVal());
|
|
|
- }
|
|
|
- if (isGiftCardPay.get()) {
|
|
|
- //礼品卡规格
|
|
|
- Map<Long, Integer> giftCardPayNumMap = new ConcurrentHashMap<>();
|
|
|
- giftCards.stream().forEach(data -> {
|
|
|
- if (data.getNum() <= 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
- giftCardPayNumMap.putIfAbsent(data.getGcId(), data.getNum());
|
|
|
- });
|
|
|
- if (giftCardPayNumMap.isEmpty()) {
|
|
|
- throw BusinessRuntimeException.getInstance("请选择要购买礼品卡的数量");
|
|
|
- }
|
|
|
- List<GiftCardGoodsSkuFrontView> giftCardViews = beanSearcher.searchAll(GiftCardGoodsSkuFrontView.class, MapUtils.builder().field(GiftCardGoodsSkuFrontView::getId, giftCardPayNumMap.keySet()).op(Operator.InList).build());
|
|
|
- if (giftCardViews.size() != giftCards.size()) {
|
|
|
- throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重试");
|
|
|
- }
|
|
|
- payTitle.append("购买详情:");
|
|
|
- BigDecimal gift_card_pay_money = BigDecimal.ZERO;
|
|
|
- for (GiftCardGoodsSkuFrontView data : giftCardViews) {
|
|
|
- //礼品卡数量
|
|
|
- Integer num = giftCardPayNumMap.get(data.getId());
|
|
|
- data.setGcNum(num);
|
|
|
- data.setGcShowType(gcPayInfo.getGcShowType());
|
|
|
- data.setGcImg(gcPayInfo.getGcImg());
|
|
|
- gift_card_pay_money = gift_card_pay_money.add(data.getPrice().multiply(BigDecimal.valueOf(num)));
|
|
|
|
|
|
- //礼品卡关系
|
|
|
- if (!payTitle.toString().endsWith("购买详情:")) {
|
|
|
- payTitle.append(" + ");
|
|
|
- }
|
|
|
- String gcDetail;
|
|
|
- if (data.getGcType() == 1) {
|
|
|
- gcDetail = String.format("%s张现金卡%s%s", num, Constant.CN_CYS, data.getCash().divide(BigDecimal.valueOf(100)));
|
|
|
- payTitle.append(gcDetail);
|
|
|
- } else {
|
|
|
- gcDetail = String.format("%s张虚拟卡%s%s", num, data.getGcGoodsTitle(), data.getGcSpecVal());
|
|
|
- payTitle.append(gcDetail);
|
|
|
- }
|
|
|
- }
|
|
|
- gcPayInfo.setGcPayDetail(giftCardViews);
|
|
|
-
|
|
|
- //调整礼品卡金额
|
|
|
- if (gift_card_pay_money.compareTo(orderDon.getMoney()) > 0) {
|
|
|
- orderDon.setMoney(gift_card_pay_money);
|
|
|
- orderDon.setRealMoney(gift_card_pay_money);
|
|
|
- }
|
|
|
- }
|
|
|
- if (orderDon.getIsDp()) {
|
|
|
- List<GoodsDonSkuView> dp_skuViewList = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getSkuId, dpSkuIds).op(Operator.InList).build());
|
|
|
- if (dp_skuViewList.size() != dpSkuIds.size()) {
|
|
|
- throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重新下单");
|
|
|
- }
|
|
|
- dp_skuViewList.forEach(dp_SkuView -> {
|
|
|
- payTitle.append(" + ");
|
|
|
- payTitle.append(dp_SkuView.getGoodsTitle());
|
|
|
- payTitle.append(dp_SkuView.getSpecVal());
|
|
|
- });
|
|
|
+ //规格补贴id
|
|
|
+ Long subsidyId = payRequest.getSubsidyId();
|
|
|
+ if (subsidyId != null) {
|
|
|
+ //校验百亿补贴规格,并设置参数
|
|
|
+ setSubsidyOrderDonInfo(subsidyId, user, orderDon);
|
|
|
}
|
|
|
- orderDon.setPayTitle(payTitle.toString());
|
|
|
+ orderDon.setPayDesc(goodsDon.getPayDesc());
|
|
|
+ //设置订单支付商品信息
|
|
|
+ setOrderDonPayTile(isGiftCardPay, gcPayInfo, giftCards, orderDon, goodsDon, sku, dpSkuIds);
|
|
|
//下单手机号
|
|
|
orderDon.setPhone(orderPhone);
|
|
|
this.saveOrUpdate(orderDon);
|
|
|
@@ -644,6 +595,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
informationClickUserRecord.setOrderId(orderDon.getId());
|
|
|
informationClickUserRecordMapper.insert(informationClickUserRecord);
|
|
|
}
|
|
|
+ //记录订单ip关联
|
|
|
+ recordOrderDonLocationRelate(orderDon.getId(), payRequest.getIp());
|
|
|
+ //记录补贴订单关联
|
|
|
+ recordOrderDonSubsidyRelate(orderDon.getId(), subsidyId);
|
|
|
return orderDon;
|
|
|
}
|
|
|
|
|
|
@@ -976,8 +931,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
/* 生成订单 */
|
|
|
String donNo = SEQUENCE.nextId().toString();
|
|
|
OrderDon orderDon = new OrderDon();
|
|
|
- orderDon.setIp(payRequest.getIp());
|
|
|
- orderDon.setLocation(payRequest.getLocation());
|
|
|
|
|
|
orderDon.setOrderNo(donNo);
|
|
|
orderDon.setOpenId(payOpenId);
|
|
|
@@ -1037,6 +990,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDonMapper.updateById(updateOrder);
|
|
|
return updateOrder;
|
|
|
}
|
|
|
+ //记录订单ip关联
|
|
|
+ recordOrderDonLocationRelate(orderDon.getId(), payRequest.getIp());
|
|
|
return orderDon;
|
|
|
}
|
|
|
|
|
|
@@ -2639,7 +2594,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, userId).last("limit 1"));
|
|
|
if (userDistributeShared != null) {
|
|
|
orderDon.setIsDistribute(true);
|
|
|
- UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeShared.getSharedId()));
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeShared.getSharedId()).eq(UserDistribute::getDeleted, 1));
|
|
|
if (userDistribute != null) {
|
|
|
orderDon.setCpsPopularizeId(userDistributeShared.getDsPopularizeId());
|
|
|
//是否特殊渠道设备分销用户
|
|
|
@@ -2932,41 +2887,165 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
//下级渠道用户id
|
|
|
Long subUserId = userDistributeSub.getSubUserId();
|
|
|
|
|
|
- UserDistributeSubWaiting userDistributeSubWaiting = userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
|
|
|
+ List<Integer> existLevels = userDistributeSubWaitingMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
|
|
|
.eq(UserDistributeSubWaiting::getUserId, userId)
|
|
|
- .orderByDesc(UserDistributeSubWaiting::getLevel).last("limit 1"));
|
|
|
- //小于最大奖励级别
|
|
|
- if (userDistributeSubWaiting == null || userDistributeSubWaiting.getLevel() < UserDistributeSubRewards.RewardLevel.values().length) {
|
|
|
- List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubRewards.class)
|
|
|
- .gt(userDistributeSubWaiting != null, UserDistributeSubRewards::getLevel, userDistributeSubWaiting.getLevel())
|
|
|
- .orderByAsc(UserDistributeSubRewards::getLevel));
|
|
|
+ .eq(UserDistributeSubWaiting::getSubUserId, subUserId)
|
|
|
+ .in(UserDistributeSubWaiting::getSendStatus, List.of(UserDistributeSubWaiting.Status.waiting, UserDistributeSubWaiting.Status.success))
|
|
|
+ .select(UserDistributeSubWaiting::getLevel).last("limit 1")).stream().map(UserDistributeSubWaiting::getLevel).collect(Collectors.toList());
|
|
|
+ List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubRewards.class)
|
|
|
+ .notIn(CollUtil.isNotEmpty(existLevels), UserDistributeSubRewards::getLevel, existLevels));
|
|
|
for (UserDistributeSubRewards userDistributeSubReward : userDistributeSubRewards) {
|
|
|
log.info("当前级别:{}对应的目标金额是{}", userDistributeSubReward.getLevel(), userDistributeSubReward.getTargetAmount().divide(BigDecimal.valueOf(100)));
|
|
|
Integer rewardLevel = userDistributeSubReward.getLevel();
|
|
|
Integer months = userDistributeSubReward.getMonths();
|
|
|
BigDecimal targetAmount = userDistributeSubReward.getTargetAmount();
|
|
|
//是否达到目标额
|
|
|
- BigDecimal subOrderMoney = orderDonMapper.selectSubChannelOrderMoney(subUserId, DateUtil.offsetMonth(userDistributeSub.getCreatedTime(), months));
|
|
|
- if (subOrderMoney != null && subOrderMoney.compareTo(targetAmount) >= 0) {
|
|
|
+ BigDecimal subOrderMoney = Optional.ofNullable(orderDonMapper.selectSubChannelOrderMoney(subUserId, userDistributeSub.getCreatedTime(), DateUtil.offsetMonth(userDistributeSub.getCreatedTime(), months))).orElse(BigDecimal.ZERO);
|
|
|
+ if (subOrderMoney.compareTo(BigDecimal.ZERO) > 0 && subOrderMoney.compareTo(targetAmount) >= 0) {
|
|
|
try {
|
|
|
- //达标 发放提成
|
|
|
- UserDistributeSubWaiting newSubWaiting = new UserDistributeSubWaiting();
|
|
|
- newSubWaiting.setMoney(userDistributeSubReward.getMoney());
|
|
|
- newSubWaiting.setUserId(userId);
|
|
|
- newSubWaiting.setSubUserId(subUserId);
|
|
|
- newSubWaiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
|
|
|
- newSubWaiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
|
|
|
- newSubWaiting.setMonths(months);
|
|
|
- newSubWaiting.setLevel(rewardLevel);
|
|
|
- userDistributeSubWaitingMapper.insert(newSubWaiting);
|
|
|
+ UserDistributeSubWaiting waiting = Optional.ofNullable(userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
|
|
|
+ .eq(UserDistributeSubWaiting::getUserId, userId)
|
|
|
+ .eq(UserDistributeSubWaiting::getSubUserId, subUserId)
|
|
|
+ .eq(UserDistributeSubWaiting::getLevel, rewardLevel)
|
|
|
+ .last("limit 1"))).orElse(new UserDistributeSubWaiting());
|
|
|
+ if (waiting.getId() != null) {
|
|
|
+ if (waiting.getSendStatus() == UserDistributeSubWaiting.Status.close) {
|
|
|
+ userDistributeSubWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
|
|
|
+ .set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
|
|
|
+ .eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
|
|
|
+ .eq(UserDistributeSubWaiting::getId, waiting.getId()));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ waiting.setMoney(userDistributeSubReward.getMoney());
|
|
|
+ waiting.setUserId(userId);
|
|
|
+ waiting.setSubUserId(subUserId);
|
|
|
+ waiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
|
|
|
+ waiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
|
|
|
+ waiting.setLevel(rewardLevel);
|
|
|
+ userDistributeSubWaitingMapper.insert(waiting);
|
|
|
+ }
|
|
|
log.info("分销用户:{}下级渠道:{}达到:{}销售额,发送奖励成功", userId, subUserId, UserDistributeSubRewards.RewardLevel.values()[rewardLevel].getMsg());
|
|
|
} catch (DuplicateKeyException e) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void recordOrderDonLocationRelate(Long orderId, String ip) {
|
|
|
+ OrderDonLocationRelate orderDonLocationRelate = new OrderDonLocationRelate();
|
|
|
+ orderDonLocationRelate.setOrderId(orderId);
|
|
|
+ orderDonLocationRelate.setIp(ip);
|
|
|
+ orderDonLocationRelateMapper.insert(orderDonLocationRelate);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void recordOrderDonSubsidyRelate(Long orderId, Long subsidyId) {
|
|
|
+ if (subsidyId != null) {
|
|
|
+ OrderDonSubsidyRelate orderDonSubsidyRelate = new OrderDonSubsidyRelate();
|
|
|
+ orderDonSubsidyRelate.setSubsidyId(subsidyId);
|
|
|
+ orderDonSubsidyRelate.setOrderId(orderId);
|
|
|
+ orderDonSubsidyRelateMapper.insert(orderDonSubsidyRelate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置订单支付商品属性
|
|
|
+ */
|
|
|
+ public void setOrderDonPayTile(AtomicBoolean isGiftCardPay, GiftCardDto gcPayInfo, List<GiftCardPayReq> giftCards, OrderDon orderDon, GoodsDon goodsDon, GoodsDonSku sku, List<Long> dpSkuIds) {
|
|
|
+ StringBuilder payTitle = new StringBuilder();
|
|
|
+ payTitle.append(goodsDon.getTitle());
|
|
|
+ if (sku != null) {
|
|
|
+ payTitle.append(sku.getSpecVal());
|
|
|
+ }
|
|
|
+ if (isGiftCardPay.get()) {
|
|
|
+ //礼品卡规格
|
|
|
+ Map<Long, Integer> giftCardPayNumMap = new ConcurrentHashMap<>();
|
|
|
+ giftCards.stream().forEach(data -> {
|
|
|
+ if (data.getNum() <= 0) {
|
|
|
+ return;
|
|
|
}
|
|
|
+ giftCardPayNumMap.putIfAbsent(data.getGcId(), data.getNum());
|
|
|
+ });
|
|
|
+ if (giftCardPayNumMap.isEmpty()) {
|
|
|
+ throw BusinessRuntimeException.getInstance("请选择要购买礼品卡的数量");
|
|
|
}
|
|
|
+ List<GiftCardGoodsSkuFrontView> giftCardViews = beanSearcher.searchAll(GiftCardGoodsSkuFrontView.class, MapUtils.builder().field(GiftCardGoodsSkuFrontView::getId, giftCardPayNumMap.keySet()).op(Operator.InList).build());
|
|
|
+ if (giftCardViews.size() != giftCards.size()) {
|
|
|
+ throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重试");
|
|
|
+ }
|
|
|
+ payTitle.append("购买详情:");
|
|
|
+ BigDecimal gift_card_pay_money = BigDecimal.ZERO;
|
|
|
+ for (GiftCardGoodsSkuFrontView data : giftCardViews) {
|
|
|
+ //礼品卡数量
|
|
|
+ Integer num = giftCardPayNumMap.get(data.getId());
|
|
|
+ data.setGcNum(num);
|
|
|
+ data.setGcShowType(gcPayInfo.getGcShowType());
|
|
|
+ data.setGcImg(gcPayInfo.getGcImg());
|
|
|
+ gift_card_pay_money = gift_card_pay_money.add(data.getPrice().multiply(BigDecimal.valueOf(num)));
|
|
|
|
|
|
+ //礼品卡关系
|
|
|
+ if (!payTitle.toString().endsWith("购买详情:")) {
|
|
|
+ payTitle.append(" + ");
|
|
|
+ }
|
|
|
+ String gcDetail;
|
|
|
+ if (data.getGcType() == 1) {
|
|
|
+ gcDetail = String.format("%s张现金卡%s%s", num, Constant.CN_CYS, data.getCash().divide(BigDecimal.valueOf(100)));
|
|
|
+ payTitle.append(gcDetail);
|
|
|
+ } else {
|
|
|
+ gcDetail = String.format("%s张虚拟卡%s%s", num, data.getGcGoodsTitle(), data.getGcSpecVal());
|
|
|
+ payTitle.append(gcDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ gcPayInfo.setGcPayDetail(giftCardViews);
|
|
|
+
|
|
|
+ //调整礼品卡金额
|
|
|
+ if (gift_card_pay_money.compareTo(orderDon.getMoney()) > 0) {
|
|
|
+ orderDon.setMoney(gift_card_pay_money);
|
|
|
+ orderDon.setRealMoney(gift_card_pay_money);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (orderDon.getIsDp()) {
|
|
|
+ List<GoodsDonSkuView> dp_skuViewList = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getSkuId, dpSkuIds).op(Operator.InList).build());
|
|
|
+ if (dp_skuViewList.size() != dpSkuIds.size()) {
|
|
|
+ throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重新下单");
|
|
|
+ }
|
|
|
+ dp_skuViewList.forEach(dp_SkuView -> {
|
|
|
+ payTitle.append(" + ");
|
|
|
+ payTitle.append(dp_SkuView.getGoodsTitle());
|
|
|
+ payTitle.append(dp_SkuView.getSpecVal());
|
|
|
+ });
|
|
|
}
|
|
|
+ orderDon.setPayTitle(payTitle.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 百亿补贴订单
|
|
|
+ */
|
|
|
+ private void setSubsidyOrderDonInfo(Long subsidyId, User user, OrderDon orderDon) {
|
|
|
+ Assert.notNull(user, "用户不存在");
|
|
|
+ GoodsDonSkuSubsidy goodsDonSkuSubsidy = goodsDonSkuSubsidyMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSkuSubsidy.class)
|
|
|
+ .eq(GoodsDonSkuSubsidy::getId, subsidyId)
|
|
|
+ .eq(GoodsDonSkuSubsidy::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ Assert.notNull(goodsDonSkuSubsidy, "商品不存在");
|
|
|
+ Long skuId = goodsDonSkuSubsidy.getSkuId();
|
|
|
+ Long paySkuId = orderDon.getSkuId();
|
|
|
+ if (ObjectUtil.equal(skuId, paySkuId)) {
|
|
|
+ throw BusinessRuntimeException.getInstance("规格不存在");
|
|
|
+ }
|
|
|
+ BigDecimal price = goodsDonSkuSubsidy.getPrice();
|
|
|
+ if (price.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("商品价格异常..");
|
|
|
+ }
|
|
|
+ //是否购买过该规格
|
|
|
+ Integer selectCount = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
|
|
|
+ .eq(OrderDon::getSkuId, skuId)
|
|
|
+ .ne(OrderDon::getStatus, OrderDon.Status.close));
|
|
|
+ if (selectCount > 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("只可购买一次该补贴规格");
|
|
|
+ }
|
|
|
+ orderDon.setMoney(price);
|
|
|
}
|
|
|
}
|