|
|
@ -1,6 +1,7 @@ |
|
|
package com.bnyer.order.service.impl; |
|
|
package com.bnyer.order.service.impl; |
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
@ -36,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
import java.util.Date; |
|
|
import java.util.Date; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
import java.util.Objects; |
|
|
import java.util.Objects; |
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @author :WXC |
|
|
* @author :WXC |
|
|
@ -62,12 +64,17 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i |
|
|
*/ |
|
|
*/ |
|
|
@Override |
|
|
@Override |
|
|
public List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto) { |
|
|
public List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto) { |
|
|
List<VipOrder> vipOrderList = vipOrderMapper.queryOrderList(dto); |
|
|
List<VipOrder> vipOrderList = vipOrderMapper.queryVipOrderList(dto); |
|
|
List<VipOrderVo> vipOrderVoList = EntityConvertUtil.copy(vipOrderList, VipOrderVo.class); |
|
|
List<VipOrderVo> vipOrderVoList = EntityConvertUtil.copy(vipOrderList, VipOrderVo.class); |
|
|
return vipOrderVoList; |
|
|
return vipOrderVoList; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 生成会员订单,返回订单号 |
|
|
|
|
|
* @param addVipOrderDto 下单所需要的参数 |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
@Override |
|
|
@Override |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public String addVipOrder(AddVipOrderDto addVipOrderDto) { |
|
|
public String addVipOrder(AddVipOrderDto addVipOrderDto) { |
|
|
@ -79,7 +86,7 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i |
|
|
SendStatus sendStatus = orderCancelMqTemplate.syncSend(RocketMqConstant.VIP_ORDER_CANCEL_TOPIC, new GenericMessage<>(orderId), RocketMqConstant.TIMEOUT, RocketMqConstant.CANCEL_ORDER_DELAY_LEVEL).getSendStatus(); |
|
|
SendStatus sendStatus = orderCancelMqTemplate.syncSend(RocketMqConstant.VIP_ORDER_CANCEL_TOPIC, new GenericMessage<>(orderId), RocketMqConstant.TIMEOUT, RocketMqConstant.CANCEL_ORDER_DELAY_LEVEL).getSendStatus(); |
|
|
if (!Objects.equals(sendStatus,SendStatus.SEND_OK)) { |
|
|
if (!Objects.equals(sendStatus,SendStatus.SEND_OK)) { |
|
|
// 消息发不出去就抛异常,发的出去无所谓
|
|
|
// 消息发不出去就抛异常,发的出去无所谓
|
|
|
throw new ServiceException("系统繁忙,请稍候重试!"); |
|
|
throw new ServiceException(ResponseEnum.SERVER_ERROR.getCode()); |
|
|
}else { |
|
|
}else { |
|
|
log.info("消息发送成功,topic:{}",RocketMqConstant.VIP_ORDER_CANCEL_TOPIC); |
|
|
log.info("消息发送成功,topic:{}",RocketMqConstant.VIP_ORDER_CANCEL_TOPIC); |
|
|
} |
|
|
} |
|
|
@ -104,38 +111,68 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i |
|
|
if (CollUtil.isEmpty(userVipVoList)){ |
|
|
if (CollUtil.isEmpty(userVipVoList)){ |
|
|
throw new ServiceException(ResponseEnum.NOT_EXIST.getCode(),"会员信息"); |
|
|
throw new ServiceException(ResponseEnum.NOT_EXIST.getCode(),"会员信息"); |
|
|
} |
|
|
} |
|
|
Long userId = SecurityUtils.getUserId(); |
|
|
|
|
|
UserVipVo userVipVo = userVipVoList.get(0); |
|
|
UserVipVo userVipVo = userVipVoList.get(0); |
|
|
|
|
|
VipOrder vipOrder = null; |
|
|
|
|
|
EnumVipCategory enumVipCategory = EnumVipCategory.getVipCategoryByCode(userVipVo.getCategoryCode()); |
|
|
|
|
|
switch (enumVipCategory){ |
|
|
|
|
|
case IMG_VIP: |
|
|
|
|
|
vipOrder = buildImgVipOrder(userVipVo,addVipOrderDto); |
|
|
|
|
|
break; |
|
|
|
|
|
case VIDEO_VIP: |
|
|
|
|
|
break; |
|
|
|
|
|
case AI_VIP: |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
throw new ServiceException("categoryCode未匹配上对应分类"); |
|
|
|
|
|
} |
|
|
|
|
|
return vipOrder; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 构建下图会员订单 |
|
|
|
|
|
* @param userVipVo |
|
|
|
|
|
* @param addVipOrderDto |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private VipOrder buildImgVipOrder(UserVipVo userVipVo, AddVipOrderDto addVipOrderDto) { |
|
|
|
|
|
Long userId = SecurityUtils.getUserId(); |
|
|
VipOrder vipOrder = EntityConvertUtil.copy(userVipVo, VipOrder.class); |
|
|
VipOrder vipOrder = EntityConvertUtil.copy(userVipVo, VipOrder.class); |
|
|
vipOrder.setPhone(addVipOrderDto.getPhone()); |
|
|
vipOrder.setPhone(addVipOrderDto.getPhone()); |
|
|
vipOrder.setVipId(addVipOrderDto.getVipId()); |
|
|
vipOrder.setVipId(addVipOrderDto.getVipId()); |
|
|
vipOrder.setPayAmount(userVipVo.getPrice()); |
|
|
vipOrder.setPayAmount(userVipVo.getPrice()); |
|
|
vipOrder.setCategoryName(EnumVipCategory.getNameByCode(userVipVo.getCategoryCode())); |
|
|
vipOrder.setCategoryName(EnumVipCategory.getNameByCode(userVipVo.getCategoryCode())); |
|
|
|
|
|
vipOrder.setVipTypeName(EnumVipType.getNameByTypeCode(userVipVo.getVipType())); |
|
|
vipOrder.setIsDelay("0"); |
|
|
vipOrder.setIsDelay("0"); |
|
|
Date startTime = new Date(); |
|
|
Date nowDate = new Date(); |
|
|
vipOrder.setStartTime(startTime); |
|
|
vipOrder.setStartTime(nowDate); |
|
|
//计算会员结束时间
|
|
|
//计算会员结束时间
|
|
|
vipOrder.setEndTime(DateUtils.getNextDateByType(Integer.parseInt(EnumVipType.MONTH_CARD.getTypeCode()), new Date())); |
|
|
vipOrder.setEndTime(DateUtils.getNextDateByType(Integer.parseInt(userVipVo.getVipType()), nowDate)); |
|
|
vipOrder.setOrderStatus(EnumVipOrderStatus.NOT_PROCESS.getStatus()); |
|
|
//开通的天数
|
|
|
vipOrder.setOrderId(OrderUtil.getOrderId("RV",new Date(), EnumUserClientType.getCodeByType(userVipVo.getUserClientType()),String.valueOf(userId))); |
|
|
vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true)); |
|
|
vipOrder.setCreateTime(new Date()); |
|
|
vipOrder.setOrderId(OrderUtil.getOrderId("RV",nowDate, EnumUserClientType.getCodeByType(userVipVo.getUserClientType()),String.valueOf(userId))); |
|
|
vipOrder.setUpdateTime(new Date()); |
|
|
vipOrder.setCreateTime(nowDate); |
|
|
return vipOrder; |
|
|
return vipOrder; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 取消订单 |
|
|
|
|
|
* @param orderIds 订单id |
|
|
|
|
|
* @param closeType 订单关闭原因类型 |
|
|
|
|
|
*/ |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Override |
|
|
@Override |
|
|
public void cancelVipOrder(String orderId,Integer closeType) { |
|
|
public void cancelVipOrder(List<String> orderIds,Integer closeType) { |
|
|
VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderId,orderId) |
|
|
List<VipOrder> vipOrderList = vipOrderMapper.selectList(new LambdaQueryWrapper<VipOrder>().in(VipOrder::getOrderId, orderIds)); |
|
|
.notIn(VipOrder::getOrderStatus,EnumVipOrderStatus.FAILS.getStatus(),EnumVipOrderStatus.SUCCESS.getStatus())); |
|
|
if (CollUtil.isEmpty(vipOrderList)){ |
|
|
if (Objects.nonNull(vipOrder)){ |
|
|
return; |
|
|
vipOrder.setOrderStatus(EnumVipOrderStatus.FAILS.getStatus()); |
|
|
} |
|
|
vipOrder.setCloseType(closeType); |
|
|
List<String> cancelOrderIds = vipOrderList.stream().filter(vipOrder -> Objects.nonNull(vipOrder.getOrderStatus()) && EnumVipOrderStatus.FAILS.getStatus() |
|
|
vipOrder.setCancelTime(new Date()); |
|
|
!= vipOrder.getOrderStatus()).map(VipOrder::getOrderId).collect(Collectors.toList()); |
|
|
vipOrder.setUpdateTime(new Date()); |
|
|
if (CollUtil.isEmpty(cancelOrderIds)){ |
|
|
vipOrderMapper.updateById(vipOrder); |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
vipOrderMapper.cancelVipOrder(cancelOrderIds,closeType); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|