zoujiajian il y a 1 an
Parent
commit
1426efc6ef

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserBenefitsComboRelationRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserBenefitsComboRelationRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserBenefitsComboRelationRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 10:43
+ */
+public interface UserBenefitsComboRelationRecordMapper extends BaseMapper<UserBenefitsComboRelationRecord> {
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserBenefitsComboRelationRecord.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserBenefitsComboRelationRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 10:42
+ */
+@Getter
+@Setter
+public class UserBenefitsComboRelationRecord extends BaseEntity{
+	private Long userId;
+
+	private Long orderId;
+
+	private String relationIds;
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/request/AlipayOrderDonReq.java

@@ -32,4 +32,6 @@ public class AlipayOrderDonReq {
 	private String returnUrl;
 
 	private Boolean isDeposit = false;
+
+	private Boolean isUserBenefits = false;
 }

+ 0 - 26
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -328,32 +328,6 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				groupsRelationExpiryRecordService.syncGroupsRelationExpiryRecord(orderDon, goodsDon, sku);
 			});
 		}
-//		if (StrUtil.isNotEmpty(user.getOpenId())) {
-//			//发送模板消息
-//			THREAD_POOL_TASK_EXECUTOR.execute(() -> {
-//				try {
-//					if (StrUtil.isNotEmpty(user.getOpenId())) {
-//						log.info("用户{}兑换车位成功,发送新订单模板消息", user.getId());
-//						templateCommonService.newOderSendMsgByType(orderDon, goodsDon, user, user.getOpenId(), false);
-//					}
-//				} catch (Exception e) {
-//					log.info("用户{}兑换车位成功,发送消息失败:{}", user.getId(), e);
-//				}
-//			});
-//		}
-//
-//		THREAD_POOL_TASK_EXECUTOR.execute(() -> {
-//			try {
-//				//发送至客服消息
-//				List<CustomerService> customerServices = customerServiceMapper.selectList(null);
-//				for (CustomerService customerService : customerServices) {
-//					log.info("向客服{}发送用户兑换码兑换车票消息通知..", customerService.getNickName());
-//					templateCommonService.newOderSendMsgByType(orderDon, goodsDon, user, customerService.getOpenId(), true);
-//				}
-//			} catch (Exception e) {
-//				log.error("向客服发送用户{}兑换码兑换车票成功,发送消息失败:{}", user.getId(), e);
-//			}
-//		});
 		relation.setOrderId(orderDon.getId());
 		return relation;
 	}

+ 22 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -203,6 +203,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final LumaUserMapper lumaUserMapper;
 
+    private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
+
+    private final UserBenefitsComboRelationRecordMapper userBenefitsComboRelationRecordMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -1114,6 +1118,24 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             //是否是分销订单
             //处理下级渠道分销提成
             handleSubRewards(orderDon);
+
+            //是否是用户套餐优惠权益订单
+            if (orderDon.getGoodsId()==15) {
+                UserBenefitsComboRelationRecord userBenefitsComboRelationRecord = userBenefitsComboRelationRecordMapper.selectOne(Wrappers.lambdaQuery(UserBenefitsComboRelationRecord.class)
+                        .eq(UserBenefitsComboRelationRecord::getOrderId, orderDon.getId()).last("limit 1"));
+                if (userBenefitsComboRelationRecord != null) {
+                    try {
+                        String relationIds = userBenefitsComboRelationRecord.getRelationIds();
+                        List<Long> relationIdList = Jsons.parseList(relationIds, Long.class);
+                        //清空车票或减少车票时间
+                        relationIdList.forEach(relationId->{
+                            orderCommonService.clearUserTicketTime(relationId);
+                        });
+                    } catch (Exception e) {
+
+                    }
+                }
+            }
         });
     }
 

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/order/OrderCommonService.java

@@ -21,4 +21,6 @@ public interface OrderCommonService {
 	 * 清除座位缓存,可用座位数增加
 	 */
 	void delRelation(GroupsRelation relation);
+
+	void clearUserTicketTime(Long relationId);
 }

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/order/UserRealOrderBenefitsService.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.order;
 
 import com.cyksj.model.entity.GoodsDonSku;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.views.UserAvailableGoodsTicketView;
 
@@ -33,4 +34,6 @@ public interface UserRealOrderBenefitsService {
 	 * 实物权益可选车票
 	 */
 	List<UserAvailableGoodsTicketView> getAvailableBenefitsTickets(Long userId, Long orderId, Long yhsId);
+
+	void sendUserBenefitsTicket(OrderDon orderDon, List<GoodsDonSku> goodsDonSkus);
 }

+ 57 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderCommonServiceImpl.java

@@ -156,4 +156,61 @@ public class OrderCommonServiceImpl implements OrderCommonService {
 			throw new BusinessRuntimeException("车位异常");
 		}
 	}
+
+	@Override
+	public void clearUserTicketTime(Long relationId) {
+		GroupsRelation relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
+				.eq(GroupsRelation::getId, relationId)
+				.in(GroupsRelation::getStatus, List.of(GroupsRelation.Status.validity, GroupsRelation.Status.outside)));
+		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+		GoodsDonSku sku = goodsDonSkuMapper.selectById(groupsTrips.getSkuId());
+		Date expiryTime = relation.getExpiryTime();
+		DateTime now = DateTime.now();
+		Boolean isFlag = true;
+		if (expiryTime != null) {
+			DateTime refundExpiryTime;
+			if (sku.getDays() != null && sku.getDays() > 0) {
+				refundExpiryTime = DateUtil.offsetDay(expiryTime, -sku.getDays());
+			} else {
+				if (sku.getGoodsId() == 1 && sku.getMonths() == 1) {
+					refundExpiryTime = DateUtil.offsetDay(expiryTime, -30);
+				} else {
+					refundExpiryTime = DateUtil.offsetMonth(expiryTime, -sku.getMonths());
+				}
+			}
+			if (now.isBefore(refundExpiryTime)) {
+				isFlag = false;
+			}
+		}
+
+		if (isFlag) {
+			relation.setUserId(0l);
+			if (relation.getStatus() != GroupsRelation.Status.outside) {
+				relation.setStatus(GroupsRelation.Status.none);
+			}
+			relation.setStartTime(null);
+			relation.setExpiryTime(null);
+			relation.setIsHandle(false);
+			relation.setRenewStatus(false);
+			relation.setAccount(null);
+			groupsRelationMapper.updateExpiryTime(relation, expiryTime);
+			if (relation.getStatus() != GroupsRelation.Status.outside) {
+				delRelation(relation);
+			}
+		} else {
+			if (expiryTime != null) {
+				if (sku.getDays() != null && sku.getDays() > 0) {
+					expiryTime = DateUtil.offsetDay(expiryTime, -sku.getDays());
+				} else {
+					if (sku.getGoodsId() == 1 && sku.getMonths() == 1) {
+						expiryTime = DateUtil.offsetDay(expiryTime, -30);
+					} else {
+						expiryTime = DateUtil.offsetMonth(expiryTime, -sku.getMonths());
+					}
+				}
+				relation.setExpiryTime(expiryTime);
+				groupsRelationMapper.updateById(relation);
+			}
+		}
+	}
 }

+ 20 - 5
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -81,10 +81,7 @@ import com.cyksj.service.groups.GroupsFuncService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.market.MarketFrontService;
 import com.cyksj.service.market.task.TaskService;
-import com.cyksj.service.order.OrderCommonService;
-import com.cyksj.service.order.OrderDonPostService;
-import com.cyksj.service.order.OrderDonService;
-import com.cyksj.service.order.OrderRefundService;
+import com.cyksj.service.order.*;
 import com.cyksj.service.pay.AliPayCommonService;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.relation.GroupRelationFrontService;
@@ -333,6 +330,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
 
+	private final UserRealOrderBenefitsService userRealOrderBenefitsService;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -2711,6 +2710,23 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 			}
 		}
+
+		//套餐优惠
+		if (orderDon.getGoodsId() == 15) {
+			Integer selectCount = userBenefitsOrderRecordMapper.selectCount(Wrappers.lambdaQuery(UserBenefitsOrderRecord.class)
+					.eq(UserBenefitsOrderRecord::getOrderId, orderDon.getId()));
+			if (selectCount > 0) {
+				//发放用户车票套餐
+				if (StrUtil.isNotEmpty(sku.getBenefitsList())) {
+					try {
+						List<GoodsDonSku> goodsDonSkus = Jsons.parseList(sku.getBenefitsList(), GoodsDonSku.class);
+						userRealOrderBenefitsService.sendUserBenefitsTicket(orderDon, goodsDonSkus);
+					} catch (Exception e) {
+						log.error("发放用户:{}车票权益套餐错误:{}", orderDon.getUserId(), StringUtil.getErrorText(e));
+					}
+				}
+			}
+		}
 	}
 	private void mjRenewOrder(OrderDon orderDon){
 		if (orderDon.getOrderType() == 2 && orderDon.getGoodsId() == 26) {
@@ -3837,7 +3853,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
         return beanSearcher.searchFirst(UpgradeOrderDetailView.class, builder.build());
 	}
 
-
 	@Override
 	public OrderDon submitRenewUpgrade(OrderPayRequest payRequest) {
 		Long packageId = payRequest.getPackageId();

+ 46 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/UserRealOrderBenefitsImpl.java

@@ -9,6 +9,7 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.mapper.UserBenefitsComboRelationRecordMapper;
 import com.cyksj.mapper.channel.UserPayEquipmentAvailableBenefitsMapper;
 import com.cyksj.mapper.channel.UserPayEquipmentReceiveBenefitsRecordMapper;
 import com.cyksj.model.entity.*;
@@ -57,6 +58,8 @@ public class UserRealOrderBenefitsImpl implements UserRealOrderBenefitsService {
 
 	private final OrderDonMapper orderDonMapper;
 
+	private final UserBenefitsComboRelationRecordMapper userBenefitsComboRelationRecordMapper;
+
 	@Override
 	public Boolean getPayRealGoodsBenefits(Long userId, Long orderId, Long yhsId, List<GoodsDonSku> skuIds) {
 		Boolean isReceivedAll = true;
@@ -210,6 +213,49 @@ public class UserRealOrderBenefitsImpl implements UserRealOrderBenefitsService {
 		return ticketViews;
 	}
 
+	@Override
+	public void sendUserBenefitsTicket(OrderDon orderDon, List<GoodsDonSku> goodsDonSkus) {
+		Long orderId = orderDon.getId();
+		Long userId = orderDon.getUserId();
+		Long yhsId = orderDon.getYhsId();
+		List<Long> relationIds = new ArrayList<>();
+		goodsDonSkus.forEach(sku -> {
+			Long skuId = sku.getId();
+			sku = goodsDonSkuMapper.selectById(skuId);
+			Long goodsId = sku.getGoodsId();
+			log.info("开始发放用户套餐优惠权益订单:{} 车票规格:{}", orderId, skuId);
+			List<GroupsRelationView> relationViewList = groupsRelationMapper.selectRelationByGoodsId(goodsId, userId, yhsId);
+			//是否有该规格车票,若无直接发放车票
+			if (CollUtil.isEmpty(relationViewList)) {
+				log.info("用户userId:{}未有skuId:{}车票,获取对应车票", userId, sku.getId());
+				//领取权益时,没有车票的用户自动上车,获得对应车票
+				GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(yhsId, sku, userId, null, OrderDon.Type.PAY_EQUIPMENT, null);
+				relationIds.add(relation.getId());
+			} else {
+				//若有且只有一张增加时长
+				GroupsRelationView groupsRelationView = relationViewList.get(0);
+				log.info("存在对应规格:{}的车票,增加车票:relationId:{}时长", sku.getId(), groupsRelationView.getId());
+				Date expiryTime = groupsRelationView.getExpiryTime();
+				if (expiryTime == null) {
+					throw BusinessRuntimeException.getInstance("用户存在未发车的车票,请发车后再进行发货");
+				}
+				DateTime updateExpiryTime = DateUtil.offset(expiryTime, DateField.MONTH, sku.getMonths());
+				updateExpiryTime = DateUtil.offsetDay(updateExpiryTime, 3);
+				groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+						.eq(GroupsRelation::getId, groupsRelationView.getId())
+						.eq(GroupsRelation::getUserId, userId)
+						.set(GroupsRelation::getExpiryTime, updateExpiryTime));
+				groupsRelationView.setUpdateExpiryTime(updateExpiryTime);
+				relationIds.add(groupsRelationView.getId());
+			}
+		});
+		UserBenefitsComboRelationRecord userBenefitsComboRelationRecord = new UserBenefitsComboRelationRecord();
+		userBenefitsComboRelationRecord.setOrderId(orderId);
+		userBenefitsComboRelationRecord.setRelationIds(relationIds.toString());
+		userBenefitsComboRelationRecord.setUserId(orderDon.getUserId());
+		userBenefitsComboRelationRecordMapper.insert(userBenefitsComboRelationRecord);
+	}
+
 	/**
 	 * 保存获取权益记录
 	 */

+ 12 - 3
netflix-service/src/main/java/com/cyksj/service/pay/impl/AliPayCommonServiceImpl.java

@@ -71,6 +71,8 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 
 	private final GoodsWholesaleUserDepositMapper depositMapper;
 
+	private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
+
 	private static final Sequence SEQUENCE = new Sequence(0);
 
 	@Override
@@ -130,11 +132,18 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 			orderDon.setIsWebPay(false);
 		}
 		orderDonMapper.updateById(orderDon);
-		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
-		String subject = goodsDon.getTitle().contains("ChatGPT") ? "AI订阅" : goodsDon.getTitle();
+		String notifyPath = BaseZfbConfig.notifyUrl;
+		Boolean isUserBenefits = re.getIsUserBenefits();
+		String subject;
+		if (isUserBenefits) {
+			subject = orderDon.getGoodsId() == 15 ? "套餐权益" : "续费减免";
+		} else {
+			GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+			subject = goodsDon.getTitle().contains("ChatGPT") ? "AI订阅" : goodsDon.getTitle();
+		}
 		//回调地址
 		String host = envCommonService.getNotifyHost();
-		String notifyUrl = String.format("%s%s", host, BaseZfbConfig.notifyUrl);
+		String notifyUrl = String.format("%s%s", host, notifyPath);
 		//手机h5 跳转
 		OrderDonPost orderDonPost = orderDonPostMapper.selectOne(Wrappers.lambdaQuery(OrderDonPost.class)
 				.eq(OrderDonPost::getOrderId, orderId).last("limit 1"));