Browse Source

fix 多次续费更换车票

zoujiajian 3 năm trước cách đây
mục cha
commit
e68d3654f9

+ 51 - 15
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -500,7 +500,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (!order.getIsNoLogin()) {
 		if (!order.getIsNoLogin()) {
 			if (order.getOrderType() == 2 && order.getIsChangeTicket()) {
 			if (order.getOrderType() == 2 && order.getIsChangeTicket()) {
 				//将奈飞月付车票更换成其他规格的车票
 				//将奈飞月付车票更换成其他规格的车票
-				changeTicketAndRecord(order.getPreSkuId(), order.getRelationId(), order.getId(), order.getNum(), sku);
+				changeTicketAndRecord(order.getPreSkuId(), order.getRelationId(), order.getId(), order.getNum(), sku, order.getUserId());
 			} else {
 			} else {
 				updateCarParkAndSendMsg(goodsDon, sku, order);
 				updateCarParkAndSendMsg(goodsDon, sku, order);
 			}
 			}
@@ -1804,37 +1804,27 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 	 * @param orderId 订单id
 	 * @param orderId 订单id
 	 * @param afterSku 续费之后的规格
 	 * @param afterSku 续费之后的规格
 	 */
 	 */
-	private void changeTicketAndRecord(Long preSkuId, Long preRelationId, Long orderId, Integer num, GoodsDonSku afterSku) {
+	private void changeTicketAndRecord(Long preSkuId, Long preRelationId, Long orderId, Integer num, GoodsDonSku afterSku, Long userId) {
 		Long afterSkuId = afterSku.getId();
 		Long afterSkuId = afterSku.getId();
 		//清理之前的车票
 		//清理之前的车票
 		GroupsRelation relation = groupsRelationMapper.selectById(preRelationId);
 		GroupsRelation relation = groupsRelationMapper.selectById(preRelationId);
 		if (relation != null) {
 		if (relation != null) {
-			Long userId = relation.getUserId();
 			groupRelationClearService.clearRenewGroupRelation(relation);
 			groupRelationClearService.clearRenewGroupRelation(relation);
 			//记录更换车票记录
 			//记录更换车票记录
 			Date preStartTime = relation.getStartTime();
 			Date preStartTime = relation.getStartTime();
-			Date preExpiryTime = relation.getStartTime();
-			UserRenewChangeTicketRecord record = new UserRenewChangeTicketRecord();
-			record.setUserId(userId);
-			record.setPreRelationId(relation.getId());
-			record.setPreSkuId(preSkuId);
-			record.setPreStartTime(preStartTime);
-			record.setPreExpiryTime(preExpiryTime);
-			record.setRenewOrderId(orderId);
+			Date preExpiryTime = relation.getExpiryTime();
 
 
 			//获取续费规格的车票
 			//获取续费规格的车票
 			GroupsRelation afterRelation = exchangeCodeService.getRelationNoOrder(afterSku, userId);
 			GroupsRelation afterRelation = exchangeCodeService.getRelationNoOrder(afterSku, userId);
 
 
-			record.setAfterSkuId(afterSkuId);
-			record.setAfterRelationId(afterRelation.getId());
 			DateTime afterExpiryTime = DateUtil.offsetMonth(preExpiryTime, num * afterSku.getMonths());
 			DateTime afterExpiryTime = DateUtil.offsetMonth(preExpiryTime, num * afterSku.getMonths());
-			record.setAfterExpiryTime(afterExpiryTime);
 
 
 			afterRelation.setStartTime(preStartTime);
 			afterRelation.setStartTime(preStartTime);
 			afterRelation.setExpiryTime(afterExpiryTime);
 			afterRelation.setExpiryTime(afterExpiryTime);
 			groupsRelationMapper.updateById(afterRelation);
 			groupsRelationMapper.updateById(afterRelation);
 
 
-			userRenewChangeTicketRecordMapper.insert(record);
+			//保存更换车票记录
+			saveChangeTicketRecord(preStartTime, preExpiryTime, relation.getId(), userId, preSkuId, orderId, num, afterSku, afterRelation.getId());
 
 
 			GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder().field(GroupsRelationView::getUserId, userId)
 			GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder().field(GroupsRelationView::getUserId, userId)
 					.field(GroupsRelationView::getId, afterRelation.getId()).build());
 					.field(GroupsRelationView::getId, afterRelation.getId()).build());
@@ -1846,6 +1836,52 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			} catch (Exception e) {
 			} catch (Exception e) {
 				log.error("发送更换用户:{}车票:{}通知消息错误e:{}", userId, afterRelation.getId(), StringUtil.getErrorText(e));
 				log.error("发送更换用户:{}车票:{}通知消息错误e:{}", userId, afterRelation.getId(), StringUtil.getErrorText(e));
 			}
 			}
+		} else {
+			//之前的车票已被清除  加续费时间加到新的车票上
+			GroupsRelationView relationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder().field(GroupsRelationView::getUserId, userId)
+					.field(GroupsRelationView::getGoodsId, afterSku.getGoodsId()).build());
+			Date preStartTime = relation.getStartTime();
+			Date preExpiryTime = relation.getExpiryTime();
+			DateTime afterExpiryTime = DateUtil.offsetMonth(relationView.getExpiryTime(), num * afterSku.getMonths());
+
+			relationView.setExpiryTime(afterExpiryTime);
+			groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+					.set(GroupsRelation::getExpiryTime, relationView.getExpiryTime())
+					.eq(GroupsRelation::getId, relationView.getId()));
+
+			//保存更换车票记录
+			saveChangeTicketRecord(preStartTime, preExpiryTime, relationView.getId(), userId, preSkuId, orderId, num, afterSku, relationView.getId());
 		}
 		}
 	}
 	}
+
+	/**
+	 *
+	 * @param preStartTime 续费之前的开始时间
+	 * @param preExpiryTime 续费之前的过期时间
+	 * @param preRelationId 之前的座位id
+	 * @param userId 用户id
+	 * @param preSkuId 之前座位的规格id
+	 * @param orderId 订单id
+	 * @param num 订单数量
+	 * @param afterSku 续费之后的规格id
+	 * @param afterRelationId 续费之后的座位id
+	 */
+	public void saveChangeTicketRecord(Date preStartTime, Date preExpiryTime, Long preRelationId, Long userId, Long preSkuId, Long orderId, Integer num, GoodsDonSku afterSku, Long afterRelationId) {
+		Long afterSkuId = afterSku.getId();
+		//记录更换车票记录
+		UserRenewChangeTicketRecord record = new UserRenewChangeTicketRecord();
+		record.setUserId(userId);
+		record.setPreRelationId(preRelationId);
+		record.setPreSkuId(preSkuId);
+		record.setPreStartTime(preStartTime);
+		record.setPreExpiryTime(preExpiryTime);
+		record.setRenewOrderId(orderId);
+
+		record.setAfterSkuId(afterSkuId);
+		record.setAfterRelationId(afterRelationId);
+		DateTime afterExpiryTime = DateUtil.offsetMonth(preExpiryTime, num * afterSku.getMonths());
+		record.setAfterExpiryTime(afterExpiryTime);
+
+		userRenewChangeTicketRecordMapper.insert(record);
+	}
 }
 }