package com.dsh.account.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.account.entity.RechargeRecords;
import com.dsh.account.entity.TAppUser;
import com.dsh.account.enums.RechargeRecordEnum;
import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
import com.dsh.account.feignclient.competition.model.PaymentCompetition;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.model.CouponPaymentVo;
import com.dsh.account.feignclient.course.model.TCoursePackagePayment;
import com.dsh.account.feignclient.other.RechargeConfigClient;
import com.dsh.account.feignclient.other.SiteClient;
import com.dsh.account.feignclient.other.model.SiteBooking;
import com.dsh.account.mapper.RechargeRecordsMapper;
import com.dsh.account.mapper.TAppUserMapper;
import com.dsh.account.model.vo.userBenefitDetail.RechargeDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.RechargePayRequest;
import com.dsh.account.model.vo.userBenefitDetail.RechargesDetail;
import com.dsh.account.service.RechargeRecordsService;
import com.dsh.account.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 充值记录 服务实现类
*
*
* @author jqs
* @since 2023-07-07
*/
@Service
public class RechargeRecordsServiceImpl extends ServiceImpl implements RechargeRecordsService {
@Resource
private RechargeRecordsMapper rereMapper;
@Resource
private TAppUserMapper tappMapper;
@Autowired
private CoursePaymentClient cpClient;
@Autowired
private DeductionCompetitionsClient deducClient;
@Autowired
private PayMoneyUtil payMoneyUtil;
@Resource
private SiteClient stClient;
@Resource
private RechargeConfigClient reconMapper;
@Override
public List getAppUserRechargeRecord(String yearMonth, Integer recordId, Integer appUserId,Integer pageNum,Integer pageSize) {
List details = new ArrayList<>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm");
Date monthStart = null;
Date monthEnd = null;
if (StringUtils.hasText(yearMonth)) {
monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth);
monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth);
} else {
monthStart = DateTimeHelper.getCurrentMouthStart();
monthEnd = DateTimeHelper.getCurrentMouthEnd();
}
// 1.赛事报名
List playPaiFGoldPayRecord = deducClient.getPlayPaiFGoldPayRecord(appUserId);
if (playPaiFGoldPayRecord.size() > 0 ){
for (PaymentCompetition competition : playPaiFGoldPayRecord) {
RechargesDetail consumeDetail = new RechargesDetail();
consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg() );
consumeDetail.setConsumeTime(simpleDateFormat.format(competition.getInsertTime()));
consumeDetail.setConsumeAmount("-" + competition.getAmount());
consumeDetail.setRecordId(2);
details.add(consumeDetail);
}
}
// 2.课包购买
List appuserCourseList = cpClient.getAppuserCourseList(appUserId);
if (appuserCourseList.size() > 0){
for (CouponPaymentVo tCoursePackagePayment : appuserCourseList) {
RechargesDetail consumeDetail = new RechargesDetail();
consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg() );
consumeDetail.setConsumeTime(tCoursePackagePayment.getTime());
consumeDetail.setConsumeAmount("-" + tCoursePackagePayment.getAmount());
consumeDetail.setRecordId(2);
details.add(consumeDetail);
}
}
// 3.场地预约
List siteBookings = stClient.wanpaiGoldSiteBookingList(appUserId);
if (siteBookings.size() > 0 ){
for (SiteBooking booking : siteBookings) {
RechargesDetail consumeDetail = new RechargesDetail();
consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.name());
consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getInsertTime()));
consumeDetail.setConsumeAmount("-" + booking.getPayMoney());
consumeDetail.setRecordId(2);
details.add(consumeDetail);
}
}
// 4.智慧球场
// 5.充值
List rechargeRecords = this.baseMapper.selectList(new QueryWrapper()
.eq("payStatus", 2)
.eq("appUserId", appUserId)
.between("insertTime", monthStart, monthEnd));
if (rechargeRecords.size() > 0) {
for (RechargeRecords rechargeRecord : rechargeRecords) {
RechargesDetail consumeDetail = new RechargesDetail();
consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.name() + ":" + rechargeRecord.getPlayPaiCoins());
consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime()));
consumeDetail.setConsumeAmount("+" + rechargeRecord.getAmount());
consumeDetail.setRecordId(1);
details.add(consumeDetail);
}
}
if (ToolUtil.isNotEmpty(recordId)){
details = details.stream()
.filter(record -> record.getRecordId().equals(recordId))
.collect(Collectors.toList());
}
if (details.size() > 0 ){
Collections.sort(details, new Comparator() {
@Override
public int compare(RechargesDetail o1, RechargesDetail o2) {
try {
Date date1 = simpleDateFormat.parse(o1.getConsumeTime());
Date date2 = simpleDateFormat.parse(o2.getConsumeTime());
return date2.compareTo(date1); // 降序排序
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
});
}
//当前第几页
int pageNo = pageNum;
//一页五条
int size = pageSize;
//分页
details = details.stream().skip((pageNo - 1) * size).limit(size).
collect(Collectors.toList());
return details;
}
@Override
public ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request) {
TAppUser tAppUser = tappMapper.selectById(userIdFormRedis);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
RechargeRecords rechargeRecords = new RechargeRecords();
rechargeRecords.setCode(code);
rechargeRecords.setAppUserId(userIdFormRedis);
List