记得上下班打卡 | git大法好,push需谨慎

Commit 723e5916 authored by wangyifan's avatar wangyifan

福袋补充需求-添加字段、健壮性校验

parent 4b2d0914
...@@ -76,6 +76,8 @@ public class KylinLuckyBagCodeDetailVo { ...@@ -76,6 +76,8 @@ public class KylinLuckyBagCodeDetailVo {
private String ticketTitle; private String ticketTitle;
@ApiModelProperty(value = "数量") @ApiModelProperty(value = "数量")
private Integer number; private Integer number;
@ApiModelProperty(value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(value = "订单生成时间") @ApiModelProperty(value = "订单生成时间")
private String createdAt; private String createdAt;
@ApiModelProperty(value = "适用时间") @ApiModelProperty(value = "适用时间")
......
...@@ -64,30 +64,37 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -64,30 +64,37 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
@Override @Override
public ResponseDto<KylinLuckyBagVo> getLuckyBagByOrderId(String orderId) { public ResponseDto<KylinLuckyBagVo> getLuckyBagByOrderId(String orderId) {
//1. 首先校验用户权限 //1. 首先校验用户权限
OrderDetailsVo vo = orderTicketsService.orderDetails(orderId); // OrderDetailsVo vo = orderTicketsService.orderDetails(orderId);
String uid = CurrentUtil.getCurrentUid();
if (null == vo) { final KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
final String uid = CurrentUtil.getCurrentUid();
if (orderTicketVo == null) {
log.error("[getLuckyBagByOrderId] 未查询到订单, orderId: {}, uid: {}.", orderId, uid);
return ResponseDto.failure(ErrorMapping.get("20024"));
}
if (!orderTicketVo.getUserId().equals(uid)) {
log.error("[getLuckyBagByOrderId] 无权查看该订单, orderId: {}, uid: {}.", orderId, uid); log.error("[getLuckyBagByOrderId] 无权查看该订单, orderId: {}, uid: {}.", orderId, uid);
return ResponseDto.failure(ErrorMapping.get("20003")); return ResponseDto.failure(ErrorMapping.get("20003"));
} }
log.info("[getLuckyBagByOrderId] 获取福袋详情, orderId: {}, uid: {}.", orderId, uid); log.info("[getLuckyBagByOrderId] 获取福袋详情, orderId: {}, uid: {}.", orderId, uid);
// 判断订单状态 // 判断订单状态
if (!vo.getOrderTicketVo().getStatus().equals(1) || !vo.getOrderTicketVo().getPayStatus().equals(1)) { if (isEligibleForWelfare(orderTicketVo)) {
log.info("[getLuckyBagByOrderId] 该订单状态不满足权益要求, orderId: {}, uid: {}, status: {}, payStatus: {}.", orderId, // 2. 订单关联的演出ID
uid, vo.getOrderTicketVo().getStatus(), vo.getOrderTicketVo().getPayStatus()); List<KylinLuckyBagVo.LuckyBagActivityVo> activityVos = getLuckyBagActivityVos(orderTicketVo.getPerformanceId());
return ResponseDto.success(KylinLuckyBagVo.ofEmpty());
}
// 2. 订单关联的演出ID
List<KylinLuckyBagVo.LuckyBagActivityVo> activityVos = getLuckyBagActivityVos(vo.getOrderTicketVo().getPerformanceId());
//3. 再查询满足的权益 //3. 再查询满足的权益
List<KylinLuckyBagVo.LuckyBagVo> luckyBagVos = getLuckyBagVos(vo); List<KylinLuckyBagVo.LuckyBagVo> luckyBagVos = getLuckyBagVos(orderTicketVo);
if (activityVos.isEmpty()) { if (activityVos.isEmpty()) {
return ResponseDto.success(KylinLuckyBagVo.of(luckyBagVos, null)); return ResponseDto.success(KylinLuckyBagVo.of(luckyBagVos, null));
} else { } else {
return ResponseDto.success(KylinLuckyBagVo.of(luckyBagVos, activityVos.get(0))); return ResponseDto.success(KylinLuckyBagVo.of(luckyBagVos, activityVos.get(0)));
}
}else {
log.info("[getLuckyBagByOrderId] 该订单状态不满足权益要求, orderId: {}, uid: {}, status: {}, payStatus: {}.", orderId,
uid, orderTicketVo.getStatus(), orderTicketVo.getPayStatus());
return ResponseDto.success(KylinLuckyBagVo.ofEmpty());
} }
} }
...@@ -250,6 +257,7 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -250,6 +257,7 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
orderInfo.setPerformanceTitle(orderTicketVo.getPerformanceTitle()); orderInfo.setPerformanceTitle(orderTicketVo.getPerformanceTitle());
orderInfo.setTicketTitle(orderTicketVo.getTicketTitle()); orderInfo.setTicketTitle(orderTicketVo.getTicketTitle());
orderInfo.setNumber(orderTicketVo.getNumber()); orderInfo.setNumber(orderTicketVo.getNumber());
orderInfo.setRefundNumber(orderTicketVo.getRefundNumber());
orderInfo.setCreatedAt(orderTicketVo.getCreatedAt()); orderInfo.setCreatedAt(orderTicketVo.getCreatedAt());
orderInfo.setUseStart(orderTicketVo.getUseStart()); orderInfo.setUseStart(orderTicketVo.getUseStart());
return orderInfo; return orderInfo;
...@@ -277,13 +285,13 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -277,13 +285,13 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
/** /**
* 获取福袋列表 * 获取福袋列表
* *
* @param vo * @param orderTicketVo
* @return * @return
*/ */
private List<KylinLuckyBagVo.LuckyBagVo> getLuckyBagVos(OrderDetailsVo vo) { private List<KylinLuckyBagVo.LuckyBagVo> getLuckyBagVos(KylinOrderTicketVo orderTicketVo) {
final String performanceId = vo.getOrderTicketVo().getPerformanceId(); final String performanceId = orderTicketVo.getPerformanceId();
final String orderId = vo.getOrderTicketVo().getOrderTicketsId(); final String orderId = orderTicketVo.getOrderTicketsId();
final String uid = vo.getOrderTicketVo().getUserId(); final String uid = orderTicketVo.getUserId();
List<KylinLuckyBag> luckyBagList = dataUtils.getKylinLuckyBagList(); List<KylinLuckyBag> luckyBagList = dataUtils.getKylinLuckyBagList();
...@@ -316,7 +324,7 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -316,7 +324,7 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
if (kylinRewardUserList.isEmpty()) { if (kylinRewardUserList.isEmpty()) {
// 根据购买数量来分配兑换码 // 根据购买数量来分配兑换码
log.info("[getLuckyBagVos] 福袋[{}]已到发放时间,但未给用户分配兑换码, uid: {}, orderId: {}.", l.getName(), uid, orderId); log.info("[getLuckyBagVos] 福袋[{}]已到发放时间,但未给用户分配兑换码, uid: {}, orderId: {}.", l.getName(), uid, orderId);
kylinRewardUserList = getRandomRewardCode(vo, l.getLuckyBagId()); kylinRewardUserList = getRandomRewardCode(orderTicketVo, l.getLuckyBagId());
} }
List<KylinLuckyBagVo.RewardCodeVo> codeVoList = kylinRewardUserList.stream().map(k -> { List<KylinLuckyBagVo.RewardCodeVo> codeVoList = kylinRewardUserList.stream().map(k -> {
KylinLuckyBagVo.RewardCodeVo rewardCodeVo = new KylinLuckyBagVo.RewardCodeVo(); KylinLuckyBagVo.RewardCodeVo rewardCodeVo = new KylinLuckyBagVo.RewardCodeVo();
...@@ -340,22 +348,17 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -340,22 +348,17 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
return activityVos; return activityVos;
} }
/** /**
* 分配兑换码 * 分配兑换码
* *
* @param vo * @param orderTicketVo
* @return
*/
/**
* 分配兑换码
*
* @param vo
* @return * @return
*/ */
private List<KylinRewardUser> getRandomRewardCode(OrderDetailsVo vo, String luckyBagId) { private List<KylinRewardUser> getRandomRewardCode(KylinOrderTicketVo orderTicketVo, String luckyBagId) {
final int limitTotal = vo.getOrderTicketVo().getNumber(); final int limitTotal = orderTicketVo.getNumber() - orderTicketVo.getRefundNumber();
if (limitTotal <= 0) { if (limitTotal <= 0) {
log.error("[getRandomRewardCode] 用户订单购买数量错误, orderId: {}.", vo.getOrderTicketVo().getOrderTicketsId()); log.error("[getRandomRewardCode] 用户订单购买数量错误, orderId: {}.", orderTicketVo.getOrderTicketsId());
return Collections.emptyList(); return Collections.emptyList();
} }
...@@ -382,7 +385,6 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -382,7 +385,6 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
} }
//3. 写入 //3. 写入
final KylinOrderTicketVo orderTicketVo = vo.getOrderTicketVo();
List<KylinRewardUser> rewardUsers = new ArrayList<>(limitTotal); List<KylinRewardUser> rewardUsers = new ArrayList<>(limitTotal);
try { try {
...@@ -477,4 +479,28 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -477,4 +479,28 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
KylinLuckyBagScope kylinLuckyBagScope = kylinLuckyBagScopeMapper.selectOne(queryWrapper); KylinLuckyBagScope kylinLuckyBagScope = kylinLuckyBagScopeMapper.selectOne(queryWrapper);
return kylinLuckyBagScope != null; return kylinLuckyBagScope != null;
} }
/**
* 判断是否满足发放福利条件
*
* @param orderTicketVo 订单票务信息对象
* @return 是否满足条件
*/
private boolean isEligibleForWelfare(KylinOrderTicketVo orderTicketVo) {
if (orderTicketVo == null) {
log.info("[isEligibleForWelfare] 订单信息为空.");
return false;
}
Integer status = orderTicketVo.getStatus();
Integer payStatus = orderTicketVo.getPayStatus();
Integer number = orderTicketVo.getNumber();
Integer refundNumber = orderTicketVo.getRefundNumber();
log.info("[isEligibleForWelfare] 订单信息, status: {}, payStatus: {}, number: {}, refundNumber: {}.",
status, payStatus, number, refundNumber);
return (status != null && (status.equals(1) || status.equals(6))) &&
(payStatus != null && payStatus.equals(1)) &&
(number != null && refundNumber != null && (number - refundNumber) > 0);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment