From eb6b6dbb35a9f029e0b7d269773685c19fd40976 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 11 七月 2024 10:47:51 +0800 Subject: [PATCH] 玩湃微信商户认证代码 --- cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java | 343 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 264 insertions(+), 79 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java index 1ea67af..f9eb7cc 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java @@ -1,35 +1,44 @@ package com.dsh.account.service.impl; +import com.alipay.api.response.AlipayTradeQueryResponse; 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.entity.VipPayment; 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.IncomeQuery; +import com.dsh.account.model.query.RechargeRecordsQuery; +import com.dsh.account.model.vo.RechargeRecordsVO; 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.DateTimeHelper; -import com.dsh.account.util.PayMoneyUtil; -import com.dsh.account.util.ResultUtil; -import com.dsh.account.util.UUIDUtil; +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.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -58,16 +67,20 @@ @Autowired private PayMoneyUtil payMoneyUtil; + @Resource + private SiteClient stClient; + @Resource private RechargeConfigClient reconMapper; + @Autowired + private RechargeRecordsMapper rechargeRecordsMapper; @Override - public RechargeDetailsVo getAppUserRechargeRecord(String yearMonth, Integer recordId, Integer appUserId) { - RechargeDetailsVo vo = new RechargeDetailsVo(); - List<RechargeDetailsVo.RechargesDetail> details = new ArrayList<>(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm"); + public List<RechargesDetail> getAppUserRechargeRecord(String yearMonth, Integer recordId, Integer appUserId, Integer pageNum, Integer pageSize) { + List<RechargesDetail> details = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date monthStart = null; Date monthEnd = null; @@ -79,55 +92,156 @@ monthEnd = DateTimeHelper.getCurrentMouthEnd(); } - TAppUser tAppUser = tappMapper.selectById(appUserId); - if (null != tAppUser){ - vo.setWpGold(tAppUser.getPlayPaiCoins()); - }else { - vo.setWpGold(0); - } // 1.赛事报名 List<PaymentCompetition> playPaiFGoldPayRecord = deducClient.getPlayPaiFGoldPayRecord(appUserId); - if (playPaiFGoldPayRecord.size() > 0 ){ + if (playPaiFGoldPayRecord.size() > 0) { for (PaymentCompetition competition : playPaiFGoldPayRecord) { - RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); - consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg() ); - consumeDetail.setConsumeTime(simpleDateFormat.format(competition.getInsertTime())); - consumeDetail.setConsumeAmount("-" + competition.getAmount()); - details.add(consumeDetail); + if (competition.getPayStatus() == 2) { + 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); + } else { + + + RechargesDetail consumeDetail1 = new RechargesDetail(); + consumeDetail1.setConsumeName(RechargeRecordEnum.CANCEL_EVENT_REGISTRATION.getMsg()); + consumeDetail1.setConsumeTime(simpleDateFormat.format(competition.getRefundTime())); + consumeDetail1.setConsumeAmount("+" + competition.getAmount()); + consumeDetail1.setRecordId(1); + details.add(consumeDetail1); + + 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<TCoursePackagePayment> appuserCourseList = cpClient.getAppuserCourseList(appUserId); - if (appuserCourseList.size() > 0){ - for (TCoursePackagePayment tCoursePackagePayment : appuserCourseList) { - RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); - consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg() ); - consumeDetail.setConsumeTime(simpleDateFormat.format(tCoursePackagePayment.getInsertTime())); - consumeDetail.setConsumeAmount("-" + tCoursePackagePayment.getPlayPaiCoin()); + List<CouponPaymentVo> 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.场地预约 - // TODO: 2023/7/14 充值明细的场地预约查询 + List<SiteBooking> siteBookings = stClient.wanpaiGoldSiteBookingList(appUserId); + if (siteBookings.size() > 0) { + for (SiteBooking booking : siteBookings) { + if (booking.getStatus() != 5) { + RechargesDetail consumeDetail = new RechargesDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.getMsg()); + consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getInsertTime())); + consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); + consumeDetail.setRecordId(2); + details.add(consumeDetail); + } else { + RechargesDetail consumeDetail1 = new RechargesDetail(); + consumeDetail1.setConsumeName(RechargeRecordEnum.CANCEL_VENUE_RESERVATION.getMsg()); + consumeDetail1.setConsumeTime(simpleDateFormat.format(booking.getCancelTime())); + consumeDetail1.setConsumeAmount("+" + booking.getPayMoney()); + consumeDetail1.setRecordId(1); + details.add(consumeDetail1); -// 4.智慧球场 + RechargesDetail consumeDetail = new RechargesDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.getMsg()); + consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getInsertTime())); + consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); + consumeDetail.setRecordId(2); + details.add(consumeDetail); -// 5.充值 + + } + } + } + // 4.智慧球场 + List<Map<String, Object>> list = stClient.game(appUserId); + if (list.size() > 0) { + for (Map<String, Object> booking : list) { + RechargesDetail consumeDetail = new RechargesDetail(); + consumeDetail.setConsumeName("激战游戏"); + consumeDetail.setConsumeTime(simpleDateFormat.format(new Date(Long.valueOf(booking.get("time").toString())))); + consumeDetail.setConsumeAmount("-" + String.valueOf(booking.get("money"))); + consumeDetail.setRecordId(2); + details.add(consumeDetail); + } + } + + + // 5.充值 List<RechargeRecords> rechargeRecords = this.baseMapper.selectList(new QueryWrapper<RechargeRecords>() .eq("payStatus", 2) .eq("appUserId", appUserId) .between("insertTime", monthStart, monthEnd)); if (rechargeRecords.size() > 0) { for (RechargeRecords rechargeRecord : rechargeRecords) { - RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); - consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.name() + ":" + rechargeRecord.getPlayPaiCoins()); + RechargesDetail consumeDetail = new RechargesDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.getMsg() + ":¥" + rechargeRecord.getAmount()); consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime())); - consumeDetail.setConsumeAmount("+" + rechargeRecord.getAmount()); + consumeDetail.setConsumeAmount("+" + rechargeRecord.getPlayPaiCoins()); + consumeDetail.setRecordId(1); details.add(consumeDetail); } } - vo.setDetailList(details); - return vo; + 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<RechargesDetail>() { + @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; + + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List<RechargesDetail> filteredList = new ArrayList<>(); + for (RechargesDetail detail : details) { + try { + Date consumeTime = dateFormat.parse(detail.getConsumeTime()); + if (consumeTime.after(monthStart) && consumeTime.before(monthEnd)) { + String substring = detail.getConsumeTime().substring(5); + detail.setConsumeTime(substring); + filteredList.add(detail); + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + + + //分页 + filteredList = filteredList.stream().skip((pageNo - 1) * size).limit(size). + collect(Collectors.toList()); + + return filteredList; } @Override @@ -138,15 +252,18 @@ RechargeRecords rechargeRecords = new RechargeRecords(); rechargeRecords.setCode(code); rechargeRecords.setAppUserId(userIdFormRedis); - rechargeRecords.setAmount(request.getPayAmount()); + List<Map<String, Object>> rechargeConfig = reconMapper.getRechargeConfig(); - if (rechargeConfig.size() > 0){ + BigDecimal amount = BigDecimal.ZERO; + if (rechargeConfig.size() > 0) { for (Map<String, Object> stringObjectMap : rechargeConfig) { - Object o = stringObjectMap.get("money"); - if (o.equals(request.getPayAmount())){ - if (tAppUser.getIsVip() == 1){ + double o = (double) stringObjectMap.get("money"); + if (BigDecimal.valueOf(o).compareTo(request.getAmount()) == 0) { + amount = BigDecimal.valueOf(o); + rechargeRecords.setAmount(BigDecimal.valueOf(o)); + if (tAppUser.getIsVip() == 1) { rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("MemberCoins")); - }else { + } else { rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("usersCoins")); } } @@ -157,70 +274,93 @@ rechargeRecords.setInsertTime(new Date()); this.baseMapper.insert(rechargeRecords); try { - switch (request.getPayType()){ + switch (request.getPayType()) { case 1: - return WeChatPayment(code,request.getPayAmount()); + return WeChatPayment(code, amount); case 2: - return AlipayPayment(code,request.getPayAmount()); + return AlipayPayment(code, amount); default: break; } - }catch (Exception e){ + } catch (Exception e) { ResultUtil.runErr(); } return ResultUtil.success(); } - - - private ResultUtil AlipayPayment(String code,BigDecimal amount) { - ResultUtil alipay = payMoneyUtil.alipay("玩湃币充值", "", "", code, amount.toString(), + private String smid = "2088330203191220";//平台支付宝商户号 + private ResultUtil AlipayPayment(String code, BigDecimal amount) { + ResultUtil alipay = payMoneyUtil.alipay(smid,"玩湃币充值", "玩湃币充值", "", code, amount.toString(), "/base/recharge/alipayRechargeCallback"); - if(alipay.getCode() == 200){ + if (alipay.getCode() == 200) { new Thread(new Runnable() { @Override public void run() { try { int num = 1; int wait = 0; - while (num <= 10){ + while (num <= 10) { int min = 5000; wait += (min * num); Thread.sleep(wait); RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>() - .eq("code",code)); - if(records.getPayStatus() == 2){ + .eq("code", code)); + if (records.getPayStatus() == 2) { break; } - ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); - if(resultUtil.getCode() == 200 && records.getPayStatus() == 1){ + AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code); + + if (resultUtil.getCode().equals("10000") && records.getPayStatus() == 1) { /** * WAIT_BUYER_PAY(交易创建,等待买家付款)、 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 * TRADE_SUCCESS(交易支付成功)、 * TRADE_FINISHED(交易结束,不可退款) */ - Map<String, String> data1 = resultUtil.getData(); - String s = data1.get("tradeStatus"); - String tradeNo = data1.get("tradeNo"); - if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ +// Map<String, String> data1 = resultUtil.getData(); +// String s = data1.get("tradeStatus"); +// String tradeNo = data1.get("tradeNo"); + + String tradeNo = resultUtil.getTradeNo(); + String tradeStatus = resultUtil.getTradeStatus(); + System.out.println("ssssss" + tradeStatus); + if ("TRADE_CLOSED".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus) || num == 10) { records.setState(3); rereMapper.deleteById(records.getId()); + if ("TRADE_FINISHED".equals(tradeStatus)) { + // todo 资金结算 + payMoneyUtil.confirm(smid,code,tradeNo,amount.toString()); + break; + } break; } - if("TRADE_SUCCESS".equals(s)){ + + if ("TRADE_SUCCESS".equals(tradeStatus)) { + records.setAppUserId(null); records.setPayStatus(2); + records.setPayTime(new Date()); records.setOrderNumber(tradeNo); rereMapper.updateById(records); + payMoneyUtil.confirm(smid,code,tradeNo,amount.toString()); + RechargeRecords rechargeRecords = rereMapper.selectOne(new QueryWrapper<RechargeRecords>() + .eq("code", code)); + if (rechargeRecords.getPayStatus() == 2) { + TAppUser tAppUser = tappMapper.selectById(rechargeRecords.getAppUserId()); + tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins() ? rechargeRecords.getPlayPaiCoins() : tAppUser.getPlayPaiCoins() + rechargeRecords.getPlayPaiCoins()); + tappMapper.updateById(tAppUser); + break; + } + + break; } - if("WAIT_BUYER_PAY".equals(s)){ + if ("WAIT_BUYER_PAY".equals(tradeStatus)) { num++; } } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -229,27 +369,27 @@ return alipay; } - private ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception { + private ResultUtil WeChatPayment(String code, BigDecimal amount) throws Exception { ResultUtil weixinpay = payMoneyUtil.weixinpay("玩湃币充值", "", code, amount.toString(), "/base/recharge/wechatRechargeCallback", "APP", ""); - if(weixinpay.getCode() == 200){ + if (weixinpay.getCode() == 200) { new Thread(new Runnable() { @Override public void run() { try { int num = 1; int wait = 0; - while (num <= 10){ + while (num <= 10) { int min = 5000; wait += (min * num); Thread.sleep(wait); RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>() - .eq("code",code)); - if(records.getPayStatus() == 2){ + .eq("code", code)); + if (records.getPayStatus() == 2) { break; } ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); - if(resultUtil.getCode() == 200 && records.getPayStatus() == 1){ + if (resultUtil.getCode() == 200 && records.getPayStatus() == 1) { /** * SUCCESS—支付成功, * REFUND—转入退款, @@ -262,23 +402,23 @@ Map<String, String> data1 = resultUtil.getData(); String s = data1.get("trade_state"); String transaction_id = data1.get("transaction_id"); - if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){ + if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { records.setState(3); rereMapper.deleteById(records.getId()); break; } - if("SUCCESS".equals(s)){ + if ("SUCCESS".equals(s)) { records.setPayStatus(2); records.setOrderNumber(transaction_id); rereMapper.updateById(records); break; } - if("USERPAYING".equals(s)){ + if ("USERPAYING".equals(s)) { num++; } } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -292,18 +432,63 @@ public ResultUtil addRechargeCallbackPay(String code, String orderNumber) { RechargeRecords rechargeRecords = this.baseMapper.selectOne(new QueryWrapper<RechargeRecords>() .eq("code", code)); - if (rechargeRecords.getPayStatus() == 2){ - return ResultUtil.success(); + if (rechargeRecords.getPayStatus() == 2) { + return ResultUtil.success(); } + rechargeRecords.setAppUserId(null); rechargeRecords.setPayStatus(2); rechargeRecords.setPayTime(new Date()); rechargeRecords.setOrderNumber(orderNumber); this.baseMapper.updateById(rechargeRecords); TAppUser tAppUser = tappMapper.selectById(rechargeRecords.getAppUserId()); - tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins()? rechargeRecords.getPlayPaiCoins(): tAppUser.getPlayPaiCoins() +rechargeRecords.getPlayPaiCoins() ); + tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins() ? rechargeRecords.getPlayPaiCoins() : tAppUser.getPlayPaiCoins() + rechargeRecords.getPlayPaiCoins()); tappMapper.updateById(tAppUser); return null; } + @Override + public List<RechargeRecordsVO> rechargeList(RechargeRecordsQuery query) { + String STime = null; + String ETime = null; + if (StringUtils.hasLength(query.getTime())) { + STime = query.getTime().split(" - ")[0] + " 00:00:00"; + ETime = query.getTime().split(" - ")[1] + " 23:59:59"; + } + + return rechargeRecordsMapper.rechargeList(query, STime, ETime); + + } + + @Override + public List<VipPayment> listAll(IncomeQuery query) { + String STime = null; + String ETime = null; + if (StringUtils.hasLength(query.getTime())) { + STime = query.getTime().split(" - ")[0] + " 00:00:00"; + ETime = query.getTime().split(" - ")[1] + " 23:59:59"; + } + return rechargeRecordsMapper.listAll(query, STime, ETime, query.getAmount(), query.getInsertType()); + } + + public static <T> List<T> pageList(List<T> list, int pageNum, int pageSize) { + //计算总页数 + int page = list.size() % pageSize == 0 ? list.size() / pageSize : list.size() / pageSize + 1; + //兼容性分页参数错误 + pageNum = pageNum <= 0 ? 1 : pageNum; + pageNum = pageNum >= page ? page : pageNum; + // 开始索引 + int begin = 0; + // 结束索引 + int end = 0; + if (pageNum != page) { + begin = (pageNum - 1) * pageSize; + end = begin + pageSize; + } else { + begin = (pageNum - 1) * pageSize; + end = list.size(); + } + return list.subList(begin, end); + } + } -- Gitblit v1.7.1