zoujiajian 1 год назад
Родитель
Сommit
119331836e

+ 111 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/AccountTempController.java

@@ -1,6 +1,7 @@
 package com.cyksj.web.controller.manage.account;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
@@ -8,15 +9,19 @@ import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
-import com.cyksj.mapper.AccountMapper;
-import com.cyksj.mapper.NetflixTempAccountUserMapper;
-import com.cyksj.model.entity.Account;
-import com.cyksj.model.entity.NetflixTempAccountUser;
+import com.cyksj.mapper.*;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.ExcelPrepareAccountData;
+import com.cyksj.model.request.OrderRefundReq;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.AccountCommonService;
+import com.cyksj.service.order.OrderCommonService;
+import com.cyksj.service.order.OrderRefundService;
+import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.web.util.EasyExcelUtils;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -29,6 +34,8 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
 /**
@@ -52,6 +59,24 @@ public class AccountTempController {
 
 	private final NetflixTempAccountUserMapper netflixTempAccountUserMapper;
 
+	private final GroupsMapper groupsMapper;
+
+	private final GroupsRelationMapper relationMapper;
+
+	private final OrderDonMapper orderDonMapper;
+
+	private final GoodsDonSkuMapper skuMapper;
+
+	private final OrderRefundService orderRefundService;
+
+	private final RedisService redisService;
+
+	private final OrderCommonService orderCommonService;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	private final UserBenefitsService userBenefitsService;
+
 	/**
 	 * 新增临时账号
 	 */
@@ -160,6 +185,88 @@ public class AccountTempController {
 			throw BusinessRuntimeException.getInstance("请导入excel文件");
 		}
 		List<Object> accountList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(0).doReadSync();
+		accountList.forEach(account->{
+			Account dbAccount = accountMapper.selectOne(Wrappers.lambdaQuery(Account.class)
+					.eq(Account::getGoodsId, 1)
+					.eq(Account::getAccount, account)
+					.last("limit 1"));
+			if (dbAccount != null) {
+				GroupsTrips groupsTrips = groupsMapper.selectById(dbAccount.getId());
+				if (groupsTrips.getSkuId() != 4) {
+					return;
+				}
+				if (groupsTrips != null) {
+					//15天以内的自动退款
+					List<GroupsRelation> groupsRelations = relationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class)
+							.eq(GroupsRelation::getGroupsId, groupsTrips.getId())
+							.gt(GroupsRelation::getExpiryTime, DateTime.now())
+							.le(GroupsRelation::getExpiryTime, DateUtil.offsetDay(DateTime.now(), 15)));
+					GoodsDon goodsDon = goodsDonMapper.selectById(1);
+					groupsRelations.forEach(relation->{
+						OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+								.eq(OrderDon::getRelationId, relation.getId())
+								.eq(OrderDon::getUserId, relation.getUserId())
+								.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
+								.orderByDesc(OrderDon::getId)
+								.last("limit 1"));
+						BigDecimal money = orderDon.getMoney();
+						GoodsDonSku sku = skuMapper.selectById(orderDon.getSkuId());
+						Integer months = sku.getMonths();
+						BigDecimal single = sku.getPrice().divide(BigDecimal.valueOf(months * 30), 2, RoundingMode.DOWN);
+						long betDay = DateUtil.between(DateTime.now(), relation.getExpiryTime(), DateUnit.DAY);
+						BigDecimal refundMoney = single.multiply(BigDecimal.valueOf(betDay));
+						//退款
+						OrderRefundReq orderRefundReq = new OrderRefundReq();
+						orderRefundReq.setOrderId(orderDon.getId());
+						orderRefundReq.setRefundMoney(refundMoney);
+						orderDon.setRefundDesc("奈飞15天内过期自动退款");
+						String outNo = null;
+						try {
+							orderRefundReq.setRefundType("ALI_PAY");
+							outNo = orderRefundService.centerRefund(orderRefundReq, orderDon);
+							orderDon.setStatus(OrderDon.Status.refund);
+							orderDon.setRefundMoney(orderRefundReq.getRefundMoney());
+							orderDonMapper.updateById(orderDon);
+							clearUserLockingRelation(relationMapper.selectById(orderDon.getRelationId()), orderDon);
+							//记录退款
+							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, orderDon.getType().getType(), null);
+						} catch (Exception e) {
+							orderRefundReq.setRefundType("balance");
+							userBenefitsService.addUserBalance(relation.getUserId(), refundMoney, UserBalanceSourceRecord.Source.clear_valid, relation.getYhsId(), orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.clear_valid.getDesc(), true);
+							//修改订单状态 为退款
+							orderDon.setStatus(OrderDon.Status.refund);
+							orderDon.setRefundBalance(refundMoney);
+							orderDon.setRefundMoney(BigDecimal.ZERO);
+							orderDonMapper.updateById(orderDon);
+							orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, "balance", null);
+						}
+					});
+
+				}
+			}
+		});
+
+	}
+
+	private void clearUserLockingRelation(GroupsRelation groupsRelation, OrderDon orderDon) {
+		if (groupsRelation == null) {
+			return;
+		}
+		if (GroupsRelation.Status.locking == groupsRelation.getStatus()) {
+			log.info("清理用户userId:{}未支付订单", orderDon.getUserId());
+			groupsRelation.setUserId(0L);
+			Long groupsId = groupsRelation.getGroupsId();
+			GroupsTrips groupsTrips = groupsMapper.selectById(groupsId);
+			if (groupsRelation.getNum() > groupsTrips.getNum()) {
+				groupsRelation.setStatus(GroupsRelation.Status.outside);
 
+				redisService.del(RedisService.key.GROUPS_TRIPS_OUTSIDE_RELATION.getNameFormat(groupsId, groupsRelation.getNum()));
+			} else {
+				groupsRelation.setStatus(GroupsRelation.Status.none);
+			}
+			groupsRelation.setYhsId(0l);
+			relationMapper.updateById(groupsRelation);
+			orderCommonService.delRelation(groupsRelation);
+		}
 	}
 }