zoujiajian há 1 ano atrás
pai
commit
f814b7f964

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java

@@ -105,4 +105,6 @@ public interface GroupRelationFrontService {
 	void errorNetflixSubmitChangeOtherTicket(ErrorNetflixChangeReq req) throws Exception;
 
 	List<GoodsCategorySkuView> getNetflixReplaceOtherSkus(long userId, Long relationId) throws Exception;
+
+	Boolean refundNetflix(ErrorNetflixChangeReq req) throws Exception;
 }

+ 57 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -35,6 +35,7 @@ import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.ErrorNetflixChangeReq;
+import com.cyksj.model.request.OrderRefundReq;
 import com.cyksj.model.request.SpecialGoodsTicketReq;
 import com.cyksj.model.request.TicketLoginReq;
 import com.cyksj.model.views.*;
@@ -48,6 +49,8 @@ import com.cyksj.service.mail.CommonMailService;
 import com.cyksj.service.mail.MailService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.midjourney.MidjourneyAccountService;
+import com.cyksj.service.order.OrderRefundService;
+import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.relation.GroupsRelationChangeService;
 import com.cyksj.service.relation.GroupsRelationNetflixService;
@@ -189,6 +192,10 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final NetflixUserAccountSubmitRecoverRecordMapper netflixUserAccountSubmitRecoverRecordMapper;
 
+	private final OrderRefundService orderRefundService;
+
+	private final GroupRelationClearService clearService;
+
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt) {
 		User u = userMapper.selectById(userId);
@@ -1508,6 +1515,56 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		return goodsCategorySkuViews;
 	}
 
+	@Override
+	public Boolean refundNetflix(ErrorNetflixChangeReq req) throws Exception {
+		Long relationId = req.getRelationId();
+		Long userId = req.getUserId();
+		//校验奈飞账号状态
+		GroupsRelationView netflixRelationView = checkNetflixErrorStatus(relationId, userId);
+		Date expiryTime = netflixRelationView.getExpiryTime();
+		//小于15
+		Long betweenDay = DateUtil.betweenDay(DateTime.now(), expiryTime, false) + 1;
+		if (betweenDay > 15) {
+			throw BusinessRuntimeException.getInstance("车票有效期不超过15天可退款");
+		}
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+				.eq(OrderDon::getRelationId, relationId)
+				.in(OrderDon::getUserId, userIdList)
+				.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
+				.orderByDesc(OrderDon::getId)
+				.last("limit 1"));
+		if (orderDon == null) {
+			throw BusinessRuntimeException.getInstance("对应车票订单不存在,请联系客服");
+		}
+		Long skuId = netflixRelationView.getSkuId();
+		GoodsDonSku sku = goodsDonSkuMapper.selectById(skuId);
+		BigDecimal orderMoney = orderDon.getMoney();
+		if (orderMoney.compareTo(BigDecimal.ZERO) == 0) {
+			return false;
+		}
+		//每天单价
+		BigDecimal dayPrice = sku.getPrice().divide(BigDecimal.valueOf(sku.getMonths() * 30), RoundingMode.DOWN);
+		//需要退款金额
+		BigDecimal refundMoney = dayPrice.multiply(BigDecimal.valueOf(betweenDay));
+		if (refundMoney.compareTo(orderMoney) > 0) {
+			return false;
+		}
+		//调用第三方接口退款
+		OrderRefundReq refundReq = new OrderRefundReq();
+		refundReq.setRefundMoney(refundMoney);
+		refundReq.setRefundType("money");
+		String outNo = orderRefundService.centerRefund(refundReq, orderDon);
+		orderDon.setStatus(OrderDon.Status.refund);
+		orderDon.setRefundMoney(refundMoney);
+		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+		orderRefundService.refundRecord(orderDon, refundMoney, "系统", goodsDon, sku, outNo, orderDon.getType().name(), null);
+		//清除车票
+		GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+		clearService.clearTicket(relation, UserTicketClearedRecord.Source.refund);
+		return true;
+	}
+
 	private DistributePosterGoodsDetailView setGoodsPoster(RenewalView ticket, User user, List<Long> userIds) {
 		DistributePosterGoodsDetailView distributePosterGoodsDetailView = beanSearcher.searchFirst(DistributePosterGoodsDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
 				.field(DistributePosterGoodsFrontView::getGoodsId, ticket.getGoodsId()).build());

+ 13 - 0
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -1244,6 +1244,19 @@ public class GroupRelationController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 奈飞不超过15天有效期进行退款
+     * 是否可进行退款 true可 false否 走恢复账号流程
+     */
+    @PostMapping("/netflix/refund")
+    public Result<Boolean> refundNetflix(@RequestBody ErrorNetflixChangeReq req) throws Exception {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        req.setUserId(userId);
+        //是否可进行退款 true可 false否 走恢复账号流程
+        Boolean availableRefund = groupRelationFrontService.refundNetflix(req);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(availableRefund);
+    }
+
     /**
      * AI镜像车票 每周弹窗
      */