|
@@ -35,6 +35,7 @@ import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.views.AccountView;
|
|
import com.cyksj.model.manage.views.AccountView;
|
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
|
import com.cyksj.model.request.ErrorNetflixChangeReq;
|
|
import com.cyksj.model.request.ErrorNetflixChangeReq;
|
|
|
|
|
+import com.cyksj.model.request.OrderRefundReq;
|
|
|
import com.cyksj.model.request.SpecialGoodsTicketReq;
|
|
import com.cyksj.model.request.SpecialGoodsTicketReq;
|
|
|
import com.cyksj.model.request.TicketLoginReq;
|
|
import com.cyksj.model.request.TicketLoginReq;
|
|
|
import com.cyksj.model.views.*;
|
|
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.mail.MailService;
|
|
|
import com.cyksj.service.mange.coupon.CouponCommonService;
|
|
import com.cyksj.service.mange.coupon.CouponCommonService;
|
|
|
import com.cyksj.service.midjourney.MidjourneyAccountService;
|
|
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.GroupRelationFrontService;
|
|
|
import com.cyksj.service.relation.GroupsRelationChangeService;
|
|
import com.cyksj.service.relation.GroupsRelationChangeService;
|
|
|
import com.cyksj.service.relation.GroupsRelationNetflixService;
|
|
import com.cyksj.service.relation.GroupsRelationNetflixService;
|
|
@@ -189,6 +192,10 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
|
|
|
|
|
|
|
|
private final NetflixUserAccountSubmitRecoverRecordMapper netflixUserAccountSubmitRecoverRecordMapper;
|
|
private final NetflixUserAccountSubmitRecoverRecordMapper netflixUserAccountSubmitRecoverRecordMapper;
|
|
|
|
|
|
|
|
|
|
+ private final OrderRefundService orderRefundService;
|
|
|
|
|
+
|
|
|
|
|
+ private final GroupRelationClearService clearService;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt) {
|
|
public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt) {
|
|
|
User u = userMapper.selectById(userId);
|
|
User u = userMapper.selectById(userId);
|
|
@@ -1508,6 +1515,56 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
|
|
|
return goodsCategorySkuViews;
|
|
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) {
|
|
private DistributePosterGoodsDetailView setGoodsPoster(RenewalView ticket, User user, List<Long> userIds) {
|
|
|
DistributePosterGoodsDetailView distributePosterGoodsDetailView = beanSearcher.searchFirst(DistributePosterGoodsDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
|
|
DistributePosterGoodsDetailView distributePosterGoodsDetailView = beanSearcher.searchFirst(DistributePosterGoodsDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
|
|
|
.field(DistributePosterGoodsFrontView::getGoodsId, ticket.getGoodsId()).build());
|
|
.field(DistributePosterGoodsFrontView::getGoodsId, ticket.getGoodsId()).build());
|