|
@@ -14,6 +14,7 @@ import com.microsvc.toolkit.middleware.payment.common.api.entity.*;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.enums.DivideBackStatus;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.enums.PaymentStatus;
|
|
|
import com.microsvc.toolkit.middleware.payment.enums.EPaymentVendor;
|
|
|
+import com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.*;
|
|
@@ -139,6 +140,8 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
@Autowired
|
|
|
private UserOrderRefundBillService userOrderRefundBillService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserOrderDetailDao userOrderDetailDao;
|
|
|
|
|
|
@Autowired
|
|
|
private TenantMemberService tenantMemberService;
|
|
@@ -567,6 +570,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
// 填充商品基础信息,校验参数合法以性
|
|
|
orderGoodsCreate.get(item.getGoodType()).accept(item);
|
|
|
UserOrderDetail userOrderDetail = item.getUserOrderDetail();
|
|
|
+ userOrderDetail.setGiftFlag(item.getGiftFlag());
|
|
|
orderDetails.add(userOrderDetail);
|
|
|
}
|
|
|
|
|
@@ -868,11 +872,20 @@ DISCOUNT("畅学卡")
|
|
|
private void checkActivity(UserPaymentOrderWrapper.UserPaymentOrder orderReq) {
|
|
|
ActivityPlanVo activityPlan = activityPlanService.detail(orderReq.getActivityId());
|
|
|
Date now = new Date();
|
|
|
- if (activityPlan != null && activityPlan.getActivityState() == 1
|
|
|
- && activityPlan.getActivityStart().before(now) && activityPlan.getActivityEnd().after(now)) {
|
|
|
+ if (activityPlan != null && activityPlan.getActivityState() == 1) {
|
|
|
+ if (activityPlan.getActivityStart().after(now)) {
|
|
|
+ throw new BizException("活动未开始");
|
|
|
+ } else if (activityPlan.getActivityEnd().before(now)) {
|
|
|
+ throw new BizException("活动已结束");
|
|
|
+ }
|
|
|
if (ActivityTypeEnum.MEMBER == activityPlan.getActivityType()) {
|
|
|
|
|
|
- checkActivityTimes(orderReq.getUserId(),orderReq.getPaymentClient(), activityPlan.getId());
|
|
|
+ List<UserPaymentOrderWrapper.OrderGoodsInfo> collect = orderReq.getGoodsInfos().stream().filter(o -> !o.getGiftFlag()).collect(Collectors.toList());
|
|
|
+ if (collect.size() != 1) {
|
|
|
+ throw new BizException("活动商品不符合要求");
|
|
|
+ }
|
|
|
+
|
|
|
+ checkActivityTimes(orderReq.getUserId(),orderReq.getPaymentClient(), activityPlan.getId(),collect.get(0).getGoodNum());
|
|
|
|
|
|
// 会员买赠活动 判断购买商品是否符合活动要求
|
|
|
Map<String, List<Long>> map = orderReq.getGoodsInfos().stream()
|
|
@@ -917,23 +930,23 @@ DISCOUNT("畅学卡")
|
|
|
/**
|
|
|
* 检查活动购买次数
|
|
|
*
|
|
|
- * @param userId 用户ID
|
|
|
- * @param client 客户端
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @param client 客户端
|
|
|
* @param activityId 活动ID
|
|
|
+ * @param goodNum
|
|
|
*/
|
|
|
- private void checkActivityTimes(Long userId,ClientEnum client, Long activityId) {
|
|
|
+ private void checkActivityTimes(Long userId, ClientEnum client, Long activityId, Integer goodNum) {
|
|
|
ActivityPlan activityPlan = activityPlanService.getById(activityId);
|
|
|
if (activityPlan == null) {
|
|
|
throw new BizException("活动不存在");
|
|
|
}
|
|
|
|
|
|
// 检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
|
|
|
- if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() !=-1) {
|
|
|
+ if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() >0) {
|
|
|
int count = getActivityCount(userId, client, activityId);
|
|
|
- if (count >= activityPlan.getBuyCount()) {
|
|
|
- throw new BizException("活动以达到参与最大次数");
|
|
|
+ if (count + goodNum > activityPlan.getBuyCount()) {
|
|
|
+ throw new BizException("超出活动最大参与次数");
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -948,13 +961,7 @@ DISCOUNT("畅学卡")
|
|
|
*/
|
|
|
@Override
|
|
|
public int getActivityCount(Long userId, ClientEnum client, Long activityId) {
|
|
|
- return userOrderService.lambdaQuery()
|
|
|
- .eq(UserOrder::getActivityId, activityId)
|
|
|
- .eq(UserOrder::getUserId, userId)
|
|
|
- .eq(UserOrder::getOrderClient, client)
|
|
|
- .in(UserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getCode(),
|
|
|
- OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.PAID.getCode())
|
|
|
- .count();
|
|
|
+ return userOrderDetailDao.getActivityGoodsCount(userId, client.getCode(), activityId);
|
|
|
}
|
|
|
|
|
|
/**
|