|
@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
|
|
@@ -10,11 +11,15 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
|
|
|
+import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
|
|
|
import com.yonge.cooleshow.common.constant.SysConfigConstant;
|
|
|
import com.yonge.cooleshow.common.entity.HttpResponseResult;
|
|
|
import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
|
|
@@ -33,6 +38,8 @@ import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
|
|
|
import com.yonge.toolset.payment.core.props.PaymentProperties;
|
|
|
import com.yonge.toolset.payment.core.service.PaymentClient;
|
|
|
import com.yonge.toolset.payment.util.DistributedLock;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.joda.time.DateTime;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -49,6 +56,7 @@ import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Consumer;
|
|
|
import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> implements UserOrderService {
|
|
@@ -96,6 +104,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
|
|
|
|
|
|
@Autowired
|
|
|
private ActivityUserRewardService activityUserRewardService;
|
|
|
+ @Autowired
|
|
|
+ private CouponInfoService couponInfoService;
|
|
|
|
|
|
//验证订单是否可以下单,获取订单金额信息
|
|
|
private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
|
|
@@ -287,6 +297,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
|
|
|
|
|
|
//验证参数,必须验证参数
|
|
|
BigDecimal actualPrice = BigDecimal.ZERO;
|
|
|
+ // 订单优惠券信息
|
|
|
+ CouponOrderWrapper couponOrderWrapper = CouponOrderWrapper.builder().couponInfos(Lists.newArrayList()).build();
|
|
|
+
|
|
|
for (OrderReq.OrderReqInfo info : orderReq.getOrderInfos()) {
|
|
|
Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>> createFunction = orderCreate.get(info.getGoodType());
|
|
|
if (Objects.isNull(createFunction)) {
|
|
@@ -306,8 +319,20 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
|
|
|
return HttpResponseResult.failed(StringUtil.isEmpty(createResult.getMsg()) ? "订单商品信息获取失败" : createResult.getMsg());
|
|
|
}
|
|
|
createRes.setGoodType(info.getGoodType());
|
|
|
+
|
|
|
+ // 计算优惠券金额
|
|
|
+ couponOrderWrapper = couponInfoService.queryUserOrderCouponInfo(orderReq.getUserId(),
|
|
|
+ CouponInfoQuery.CouponOrderQuery.builder()
|
|
|
+ .clientType(orderReq.getOrderClient())
|
|
|
+ .couponTypes(CouponCategoryEnum.getCategory(orderReq.getOrderType().getCode()))
|
|
|
+ .issueIds(Arrays.stream(orderReq.getCouponId().split(",")).map(Long::parseLong).collect(Collectors.toList()))
|
|
|
+ .useState(CouponUseStateEnum.USABLE)
|
|
|
+ .timestamp(DateTime.now().getMillis())
|
|
|
+ .amount(createRes.getExpectPrice().doubleValue())
|
|
|
+ .build());
|
|
|
+
|
|
|
//todo 优惠券优惠金额,暂时为0
|
|
|
- BigDecimal couponAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal couponAmount = BigDecimal.valueOf(couponOrderWrapper.getDiscountedPrices());
|
|
|
if (createRes.getCouponAmount() != null) {
|
|
|
couponAmount = createRes.getCouponAmount();
|
|
|
}
|
|
@@ -333,6 +358,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
|
|
|
//验证成功后,订单入库
|
|
|
UserOrderVo orderVo = insertOrder(orderReq);
|
|
|
|
|
|
+ // 更新用户订单优惠券使用状态
|
|
|
+ if (CollectionUtils.isNotEmpty(couponOrderWrapper.getCouponInfos())) {
|
|
|
+
|
|
|
+ couponInfoService.updateUserOrderCouponInfo(orderReq.getUserId(), couponOrderWrapper.orderNo(orderReq.getOrderNo()));
|
|
|
+ }
|
|
|
+
|
|
|
List<UserOrderDetailVo> orderDetailList = orderVo.getOrderDetailList();
|
|
|
for (UserOrderDetailVo orderDetailVo : orderDetailList) {
|
|
|
orderDetailVo.setUserId(orderReq.getUserId());
|
|
@@ -732,6 +763,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
|
|
|
userOrder.setStatus(orderStatus);
|
|
|
userOrder.setUpdateTime(new Date());
|
|
|
baseMapper.updateById(userOrder);
|
|
|
+
|
|
|
+ // 重置优惠券状态
|
|
|
+ couponInfoService.updateUserOrderCouponInfo(userOrder.getUserId(), CouponOrderWrapper.builder()
|
|
|
+ .orderNo(userOrder.getOrderNo())
|
|
|
+ .reset(true)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
private void orderSuccess(UserOrderVo detail) {
|