From 75e4afe327894168f7d65e87b9fbf0fac4612db3 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 19 七月 2023 17:44:30 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java | 2 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 25 - cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java | 20 + cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 71 +++++ cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml | 8 cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java | 39 +++ cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java | 6 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java | 2 cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SiteClient.java | 22 + cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java | 5 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 2 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 24 + cloud-server-other/src/main/java/com/dsh/OtherApplication.java | 2 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 292 +++++++++++++++++----- cloud-server-other/src/main/resources/mapper/SiteMapper.xml | 2 cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java | 2 cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java | 3 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java | 6 cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java | 38 ++ cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java | 5 cloud-server-other/src/main/java/com/dsh/other/util/TaskUtil.java | 25 + cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/SiteBooking.java | 125 +++++++++ 22 files changed, 608 insertions(+), 118 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SiteClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SiteClient.java new file mode 100644 index 0000000..4a5661e --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SiteClient.java @@ -0,0 +1,22 @@ +package com.dsh.account.feignclient.other; + +import com.dsh.account.feignclient.other.model.SiteBooking; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + + +@FeignClient("mb-cloud-other") +public interface SiteClient { + + @PostMapping("/base/site/queryPaymentSiteDetail") + List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId); + + + @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") + List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId); + + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/SiteBooking.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/SiteBooking.java new file mode 100644 index 0000000..586b9dd --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/SiteBooking.java @@ -0,0 +1,125 @@ +package com.dsh.account.feignclient.other.model; + +import lombok.Data; + +import java.util.Date; + +/** + * @author zhibing.pu + * @date 2023/7/13 16:11 + */ +@Data +public class SiteBooking { + /** + * 主键 + */ + private Integer id; + /** + * 业务流水号 + */ + private String orderNo; + /** + * 省 + */ + private String province; + /** + * 省编号 + */ + private String provinceCode; + /** + * 市名称 + */ + private String city; + /** + * 市编号 + */ + private String cityCode; + /** + * 门店id + */ + private Integer storeId; + /** + * 场地id + */ + private Integer siteId; + /** + * 用户id + */ + private Integer appUserId; + /** + * 预约时段 + */ + private String times; + /** + * 预约开始时间 + */ + private Date startTime; + /** + * 预约结束 + */ + private Date endTime; + /** + * 预约人 + */ + private String booker; + /** + * 联系方式 + */ + private String phone; + /** + * 支付方式(1=微信,2=支付宝,3=玩湃比,4=手动支付) + */ + private Integer payType; + /** + * 支付时间 + */ + private Date payTime; + /** + * 支付金额 + */ + private Double payMoney; + /** + * 优惠券id + */ + private Long userCouponId; + /** + * 状态(0=待支付,1=待核销,2=已到店,3=已完成,4=已过期,5=已取消) + */ + private Integer status; + /** + * 第三方支付流水号 + */ + private String payOrderNo; + /** + * 手动支付操作用户id + */ + private Integer payUserId; + /** + * 取消用户id + */ + private Integer cancelUserId; + /** + * 取消凭证 + */ + private String voucher; + /** + * 取消备注 + */ + private String remark; + /** + * 取消时间 + */ + private Date cancelTime; + /** + * 第三方取消退款流水号 + */ + private String refundOrderNo; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; +} 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 db3d035..daf66de 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 @@ -10,6 +10,8 @@ import com.dsh.account.feignclient.course.CoursePaymentClient; 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; @@ -25,11 +27,9 @@ 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.*; /** * <p> @@ -57,6 +57,9 @@ @Autowired private PayMoneyUtil payMoneyUtil; + + @Resource + private SiteClient stClient; @Resource @@ -108,8 +111,16 @@ } } // 3.场地预约 - // TODO: 2023/7/14 充值明细的场地预约查询 - + List<SiteBooking> siteBookings = stClient.wanpaiGoldSiteBookingList(appUserId); + if (siteBookings.size() > 0 ){ + for (SiteBooking booking : siteBookings) { + RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.name()); + consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getInsertTime())); + consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); + details.add(consumeDetail); + } + } // 4.智慧球场 // 5.充值 @@ -126,6 +137,21 @@ details.add(consumeDetail); } } + if (details.size() > 0 ){ + Collections.sort(details, new Comparator<RechargeDetailsVo.RechargesDetail>() { + @Override + public int compare(RechargeDetailsVo.RechargesDetail o1, RechargeDetailsVo.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; + } + }); + } vo.setDetailList(details); return vo; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java index 96b94e1..97acc47 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java @@ -17,7 +17,9 @@ import com.dsh.account.feignclient.course.model.*; import com.dsh.account.feignclient.other.ImgConfigClient; import com.dsh.account.feignclient.other.RechargeConfigClient; +import com.dsh.account.feignclient.other.SiteClient; import com.dsh.account.feignclient.other.StoreClient; +import com.dsh.account.feignclient.other.model.SiteBooking; import com.dsh.account.feignclient.other.model.Store; import com.dsh.account.feignclient.other.model.StoreDetailOfCourse; import com.dsh.account.feignclient.other.model.TImgConfig; @@ -119,8 +121,11 @@ @Resource private CoursePackageConfigClient cpconClient; - @Autowired + @Resource private PayMoneyUtil payMoneyUtil; + + @Resource + private SiteClient stClient; @Override public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) { @@ -545,7 +550,22 @@ } } // 4.场地预约 - // TODO: 2023/7/14 账单的场地预约查询 + List<SiteBooking> allSiteBookingList = stClient.getAllSiteBookingList(appUserId); + if (allSiteBookingList.size() > 0){ + for (SiteBooking booking : allSiteBookingList) { + BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); + if (booking.getStatus() != 5){ + consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.getMsg()); + consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); + consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getPayTime())); + }else { + consumeDetail.setConsumeName(RechargeRecordEnum.CANCEL_VENUE_RESERVATION.getMsg()); + consumeDetail.setConsumeAmount("+" + booking.getPayMoney()); + consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getCancelTime())); + } + details.add(consumeDetail); + } + } // 5.智慧球场 // 6.年度会员 diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java index 665f569..be425d3 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java @@ -87,6 +87,11 @@ return availableVos; } + @PostMapping("/base/userConpon/queryCouponRules") + public Map<String,Object> getCouponRules(@RequestBody Integer couponId){ + return cService.queryConponRuleOfJson(couponId); + } + @ResponseBody diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java index 5ded3e7..5b9d00b 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; @FeignClient(value = "mb-cloud-activity") public interface UserConponClient { @@ -32,4 +33,8 @@ @PostMapping("/userCoupon/queryCouponOfStore") List<Integer> getCouponStoreIds(@RequestBody Integer couponId); + + + @PostMapping("/base/userConpon/queryCouponRules") + Map<String,Object> getCouponRules(@RequestBody Integer couponId); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java index e3ebf20..8fb6b20 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java @@ -96,29 +96,4 @@ } } - - /** - * 折扣课包支付 - */ - @ResponseBody - @PostMapping("/api/useBenefit/paymentOfDiscountCoursePack") - @ApiOperation(value = "本周福利-折扣课包支付", tags = {"APP-使用福利"}) - @ApiImplicitParams({ - @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), - @ApiImplicitParam(name = "coursePackageDiscountId",value = "限时折扣配置id/赠送课时配置id",dataType = "int"), - @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"), - @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"), - }) - public ResultUtil paymentWeeksFreeCourse(Integer coursePackageDiscountId){ - try { - Integer appuserId = tokenUtil.getUserIdFormRedis(); - if(null == appuserId){ - return ResultUtil.tokenErr(); - } - return tcpdService.paymentDiscountCoursePack(coursePackageDiscountId,appuserId); - }catch (Exception e){ - return ResultUtil.runErr(); - } - } - } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index 34105c7..346ebf8 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -28,11 +28,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Api @@ -75,7 +80,9 @@ private CancelledClassesService cancelledClassesService; @Autowired - private AppUserClient appuClient; + private PayMoneyUtil payMoneyUtil; + @Resource + private AppUserClient auClitn; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @@ -342,7 +349,7 @@ @ResponseBody @PostMapping("/api/course/queryArrangeCourseList") - @ApiOperation(value = "获取布置课程列表", tags = {"APP-课程列表"}) + @ApiOperation(value = "课后练习-获取布置课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ }) public ResultUtil<List<BaseVo>> queryArrangePackageType(){ @@ -374,7 +381,7 @@ */ @ResponseBody @PostMapping("/api/startCource/afterSourceList") - @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) + @ApiOperation(value = "课后练习-课后视频列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) @@ -403,7 +410,7 @@ */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetail") - @ApiOperation(value = "课后视频详情", tags = {"APP-开始上课"}) + @ApiOperation(value = "课后练习-课后视频详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) @@ -534,6 +541,58 @@ } + + /** + * 课包续课支付宝支付回调接口 + */ + @PostMapping("/base/coursePackage/alipayRegisteredCoursesCallback") + public void alipayCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.alipayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write("success"); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + /** + * 课包续课微信支付回调接口 + */ + @PostMapping("/base/coursePackage/wechatRegisteredCoursesCallback") + public void weChatCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.weixinpayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + String result = map.get("result"); + ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + + /** * 获取学员剩余课时 * @param id @@ -638,7 +697,7 @@ return 2; } CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId()); - AppUser appUser = appuClient.queryAppUser(userIdFormRedis); + AppUser appUser = auClitn.queryAppUser(userIdFormRedis); if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()){ return 3; } @@ -653,7 +712,7 @@ packagePaymentService.updateById(packagePayment); appUser.setPlayPaiCoins(appUser.getPlayPaiCoins()-paymentConfig.getPlayPaiCoin()); - appuClient.updateAppUser(appUser); + auClitn.updateAppUser(appUser); } catch (Exception e) { return 4; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java index 8b18450..14d78a6 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java @@ -3,6 +3,9 @@ import com.dsh.course.feignclient.activity.model.Coupon; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Map; /** * @author zhibing.pu @@ -19,4 +22,7 @@ */ @PostMapping("/coupon/queryCouponById") Coupon queryCouponById(Integer id); + + @PostMapping("/base/userConpon/queryCouponRules") + Map<String,Object> getCouponRules(@RequestBody Integer couponId); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java index 63917a7..ad694c5 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java @@ -23,4 +23,6 @@ */ Integer queryCountNumber(@Param("coursePackageId") Integer coursePackageId); + TCoursePackagePayment getCoursePackagePaymentByCode(@Param("code") String code); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java index f56ccc1..9f2495d 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java @@ -25,5 +25,8 @@ @ApiModelProperty(value = "支付记录id") private Long coursePayId; + @ApiModelProperty(value = "课时数") + private Integer courseHoursNum; + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java index 6af20df..cd02a1a 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java @@ -4,7 +4,6 @@ import com.dsh.course.entity.TCoursePackageDiscount; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; -import com.dsh.course.util.ResultUtil; import java.util.List; @@ -23,6 +22,5 @@ ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon); - ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java index d41eb94..763ec2b 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java @@ -86,4 +86,6 @@ */ List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId); + ResultUtil insertVipPaymentCallback(String code, String orderNumber); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java index 218bcba..e0f8400 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java @@ -21,7 +21,6 @@ import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.util.DateTimeHelper; import com.dsh.course.util.LocalDateTimeUtils; -import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; import org.springframework.stereotype.Service; @@ -391,11 +390,6 @@ return packageResponse; } - @Override - public ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId) { - // TODO: 2023/7/13 折扣课包支付 - return null; - } private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) { diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java index 72d255f..7ac9917 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java @@ -1,9 +1,13 @@ package com.dsh.course.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.*; +import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.CoachClient; +import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Coach; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.CouponClient; @@ -26,7 +30,6 @@ import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -78,11 +81,18 @@ @Resource private TCoursePackageDiscountMapper tcpdMapper; + + @Resource + private CoursePackagePaymentConfigMapper cpConfigMapper; + @Resource private CouponClient client; - @Autowired + @Resource private PayMoneyUtil payMoneyUtil; + + @Resource + private AppUserClient appuClient; /** @@ -174,7 +184,7 @@ uvdmapper.updateById(userVideoDetails); return "SUCCESS"; } - return null; + return "ERROR"; } @Override @@ -289,26 +299,61 @@ } @Override - public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) { + public ResultUtil ContinuationOrpaymentCourse(Integer ids, ClasspaymentRequest request) { + AppUser userIdFormRedis = appuClient.queryAppUser(ids); TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId()); String code = ""; + BigDecimal money = tCoursePackagePayment.getCashPayment(); + Integer wpGold = tCoursePackagePayment.getPlayPaiCoin(); if (tCoursePackagePayment.getPayStatus() == 1){ +// 待支付的订单 code = tCoursePackagePayment.getCode(); + tCoursePackagePayment.setPayType(request.getPayType()); + if (request.getUseConpon() == 1){ + tCoursePackagePayment.setUserCouponId(Long.valueOf(request.getUseConpon())); + } + this.baseMapper.updateById(tCoursePackagePayment); }else { +// 续课的订单 +// 查询是否续课优惠 + + CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId", request.getLessonId()) + .eq("classHours", request.getCourseHoursNum())); + TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() + .eq("coursePackageId", request.getLessonId()) + .eq("type", 2) + .eq("auditStatus", 1) + .eq("coursePackagePaymentConfigId", paymentConfig.getCoursePackageId())); + if (ToolUtil.isNotEmpty(coursePackageDiscount)){ + String content = coursePackageDiscount.getContent(); + JSONObject jsonObject = JSON.parseObject(content); + if (userIdFormRedis.getIsVip() == 1){ + Double jsonObjectDouble = jsonObject.getDouble("num1"); + money = BigDecimal.valueOf(jsonObjectDouble); + }else { + Double jsonObjectDouble = jsonObject.getDouble("num2"); + money = BigDecimal.valueOf(jsonObjectDouble); + } + } TCoursePackagePayment newPayment = new TCoursePackagePayment(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); - newPayment.setAppUserId(userIdFormRedis); + newPayment.setAppUserId(userIdFormRedis.getId()); newPayment.setStudentId(request.getStuId()); newPayment.setCoursePackageId(request.getLessonId()); newPayment.setClassHours(tCoursePackagePayment.getClassHours()); newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice()); newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours()); newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours()); + if (request.getUseConpon() == 1){ + newPayment.setUserCouponId(Long.valueOf(request.getUseConpon())); + } newPayment.setAbsencesNumber(0); newPayment.setPayUserType(1); newPayment.setPayStatus(1); newPayment.setStatus(1); + newPayment.setPayType(request.getPayType()); newPayment.setState(1); newPayment.setInsertTime(new Date()); this.baseMapper.insert(newPayment); @@ -316,13 +361,47 @@ } switch (request.getPayType()){ case 1: - WeChatPayment(code,request); - break; + if (request.getUseConpon() == 1){ + Coupon coupon = client.queryCouponById(request.getConponId()); + if (coupon.getType() == 1){ + Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); + Double conditionalAmount = (Double) couponRules.get("conditionalAmount"); + Double deductionAmount = (Double) couponRules.get("deductionAmount"); + if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){ + money = BigDecimal.valueOf(deductionAmount); + } + } + if (coupon.getType() == 2){ + Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); + Object amount = couponRules.get("deductionAmount"); + money = BigDecimal.valueOf((Double) amount); + } + } + try { + return WeChatPayment(code,money); + }catch (Exception e){ + return ResultUtil.runErr(); + } case 2: - AlipayPayment(code,request); - break; + if (request.getUseConpon() == 1){ + Coupon coupon = client.queryCouponById(request.getConponId()); + if (coupon.getType() == 1){ + Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); + Double conditionalAmount = (Double) couponRules.get("conditionalAmount"); + Double deductionAmount = (Double) couponRules.get("deductionAmount"); + if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){ + money = BigDecimal.valueOf(deductionAmount); + } + } + if (coupon.getType() == 2){ + Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); + Object amount = couponRules.get("deductionAmount"); + money = BigDecimal.valueOf((Double) amount); + } + } + return AlipayPayment(code,money); case 3: - PlaypaiGoldPayment(code,request); + PlaypaiGoldPayment(userIdFormRedis,code,wpGold); break; default: break; @@ -331,73 +410,135 @@ } - public void WeChatPayment(String code, ClasspaymentRequest request){ - + public ResultUtil WeChatPayment(String code, BigDecimal request) throws Exception { + TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; + ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(), + "/base/coursePackage/wechatRegisteredCoursesCallback", "APP", ""); + if(weixinpay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); + if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){ + /** + * SUCCESS—支付成功, + * REFUND—转入退款, + * NOTPAY—未支付, + * CLOSED—已关闭, + * REVOKED—已撤销(刷卡支付), + * USERPAYING--用户支付中, + * PAYERROR--支付失败(其他原因,如银行返回失败) + */ + 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){ + coursePackagePayment.setState(3); + baseMapper1.deleteById(coursePackagePayment.getId()); + break; + } + if("SUCCESS".equals(s)){ + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(transaction_id); + baseMapper1.updateById(coursePackagePayment); + break; + } + if("USERPAYING".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return weixinpay; } - public ResultUtil AlipayPayment(String code, ClasspaymentRequest request){ - BigDecimal amount = BigDecimal.ZERO; - if (request.getUseConpon() == 1){ - Coupon coupon = client.queryCouponById(request.getConponId()); - //TODO: 2023/7/11 课包购买的微信支付 - } - ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, amount.toString(), - "/base/coursePackage/alipayNewPaymentCallback"); -// if(alipay.getCode() == 200){ -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// int num = 1; -// int wait = 0; -// while (num <= 10){ -// int min = 5000; -// wait += (min * num); -// Thread.sleep(wait); -// TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code); -// if(coursePackagePayment.getPayStatus() == 2){ -// break; -// } -// ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); -// if(resultUtil.getCode() == 200 && coursePackagePayment.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){ -// coursePackagePayment.setState(3); -// couPayClient.delPaymentCoursePackage(coursePackagePayment.getId()); -// break; -// } -// if("TRADE_SUCCESS".equals(s)){ -// coursePackagePayment.setPayStatus(2); -// coursePackagePayment.setOrderNumber(tradeNo); -// couPayClient.updatePaymentCoursePackage(coursePackagePayment); -// break; -// } -// if("WAIT_BUYER_PAY".equals(s)){ -// num++; -// } -// } -// } -// }catch (Exception e){ -// e.printStackTrace(); -// } -// } -// }).start(); -// } + public ResultUtil AlipayPayment(String code, BigDecimal request){ + TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; + ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, request.toString(), + "/base/coursePackage/alipayRegisteredCoursesCallback"); + if(alipay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode() == 200 && coursePackagePayment.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){ + coursePackagePayment.setState(3); + baseMapper1.deleteById(coursePackagePayment.getId()); + break; + } + if("TRADE_SUCCESS".equals(s)){ + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(tradeNo); + baseMapper1.updateById(coursePackagePayment); + break; + } + if("WAIT_BUYER_PAY".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } return alipay; } - public void PlaypaiGoldPayment(String code, ClasspaymentRequest request){ + public ResultUtil PlaypaiGoldPayment(AppUser appUser,String code, Integer wpGold){ + TCoursePackagePayment packagePayment = this.baseMapper.selectOne(new QueryWrapper<TCoursePackagePayment>() + .eq("code",code )); + if (appUser.getPlayPaiCoins() < wpGold){ + return ResultUtil.error("玩牌币不足!"); + } + packagePayment.setPayStatus(2); + packagePayment.setPayUserId(appUser.getId()); + packagePayment.setPlayPaiCoin(wpGold); + this.baseMapper.updateById(packagePayment); + appUser.setPlayPaiCoins(ToolUtil.isNotEmpty(appUser.getPlayPaiCoins()) ? appUser.getPlayPaiCoins()-wpGold : wpGold); + appuClient.updateAppUser(appUser); + return ResultUtil.success(); } @@ -476,4 +617,17 @@ return recordVoList; } + @Override + public ResultUtil insertVipPaymentCallback(String code, String orderNumber) { + TCoursePackagePayment coursePackagePayment = this.baseMapper.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() != 1){ + return ResultUtil.success(); + } + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(orderNumber); + this.baseMapper.updateById(coursePackagePayment); + return ResultUtil.success(); + } + + } diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml index 67802be..6df7fb4 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml @@ -34,4 +34,12 @@ SELECT appUserId FROM t_course_package_payment WHERE payStatus = 2 AND state = 1 and coursePackageId = #{coursePackageId} GROUP BY appUserId ) AS aa </select> + + + <select id="getCoursePackagePaymentByCode" resultType="com.dsh.course.entity.TCoursePackagePayment"> + select * from t_course_package_payment where 1=1 + <if test="code != null"> + and `code` = #{code} + </if> + </select> </mapper> diff --git a/cloud-server-other/src/main/java/com/dsh/OtherApplication.java b/cloud-server-other/src/main/java/com/dsh/OtherApplication.java index 7439d4b..4ace9f9 100644 --- a/cloud-server-other/src/main/java/com/dsh/OtherApplication.java +++ b/cloud-server-other/src/main/java/com/dsh/OtherApplication.java @@ -11,6 +11,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.annotation.PostConstruct; @@ -20,6 +21,7 @@ * @author jason */ @EnableSwagger2 +@EnableScheduling @EnableFeignClients @MBCloudApplication @Import({WebConfig.class}) diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java index 2b42da9..5111d86 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java @@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -353,5 +354,43 @@ } } + /** + * 查询所有现金支付的预约记录 + * @param appUserId + * @return + */ + @PostMapping("/base/site/queryPaymentSiteDetail") + public List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId){ + ArrayList<Integer> integers = new ArrayList<>(); + integers.add(1); + integers.add(2); + integers.add(3); + integers.add(4); + integers.add(5); + return siteBookingService.list(new QueryWrapper<SiteBooking>() + .in("status",integers) + .ne("payType",3) + .eq("appUserId",appUserId)); + } + + /** + * 查询所有玩湃币支付的预约记录 + * @param appUserId + * @return + */ + @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") + public List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId){ + ArrayList<Integer> integers = new ArrayList<>(); + integers.add(1); + integers.add(2); + integers.add(3); + integers.add(4); + integers.add(5); + return siteBookingService.list(new QueryWrapper<SiteBooking>() + .in("status",integers) + .eq("payType",3) + .eq("appUserId",appUserId)); + } + } diff --git a/cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java b/cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java new file mode 100644 index 0000000..8f03d45 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java @@ -0,0 +1,20 @@ +package com.dsh.other.feignclient; + +import com.dsh.other.entity.SiteBooking; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + + +@FeignClient("mb-cloud-other") +public interface SiteClient { + + @PostMapping("/base/site/queryPaymentSiteDetail") + List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId); + + @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") + List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId); + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java index ef7ea19..1251527 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java +++ b/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java @@ -32,5 +32,5 @@ @ApiModelProperty("状态(0=待支付,1=待核销,2=已到店,3=已完成,4=已过期,5=已取消)") private Integer status; @ApiModelProperty("创建时间") - private String insertTime; + private Long insertTime; } diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/TaskUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/TaskUtil.java new file mode 100644 index 0000000..ca148cc --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/util/TaskUtil.java @@ -0,0 +1,25 @@ +package com.dsh.other.util; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @author zhibing.pu + * @Date 2023/7/19 14:19 + */ +@Component +public class TaskUtil { + + + /** + * 每隔一分钟去处理的定时任务 + */ + @Scheduled(fixedRate = 60000) + public void taskMinute(){ + try { + //定时修改赛事状态 + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml index d9c0015..3b6aa00 100644 --- a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml +++ b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml @@ -50,7 +50,7 @@ a.payMoney as payMoney, CONCAT(DATE_FORMAT(a.startTime, '%Y-%m-%d %H:%i'), '-', DATE_FORMAT(a.endTime, '%H:%i')) as appointment, a.`status`, - DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i:%s') as insertTime + UNIX_TIMESTAMP(a.insertTime) * 1000 as insertTime from t_site_booking a left join t_site b on (a.siteId = b.id) left join t_store c on (b.storeId = c.id) -- Gitblit v1.7.1