From 1f9d05fd255fbd21356dad37527c7d33fda4fb8b Mon Sep 17 00:00:00 2001 From: liujie <liujie> Date: 星期五, 04 八月 2023 17:03:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 299 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 282 insertions(+), 17 deletions(-) diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java index 356f640..4fbff94 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java @@ -3,7 +3,9 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.utils.UuidUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.CoursePackagePaymentConfig; import com.dsh.course.entity.TCoursePackage; @@ -26,10 +28,8 @@ import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.service.TCoursePackageService; -import com.dsh.course.util.GDMapGeocodingUtil; -import com.dsh.course.util.GeodesyUtil; -import com.dsh.course.util.ResultUtil; -import com.dsh.course.util.ToolUtil; +import com.dsh.course.util.*; +import com.dsh.course.util.httpClinet.HttpResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -78,6 +78,9 @@ @Resource private CouponClient couponClient; + @Autowired + private PayMoneyUtil payMoneyUtil; + @@ -124,7 +127,7 @@ Store store = storeClient.queryStoreById(coursePackage.getStoreId()); Integer integer = coursePackagePaymentService.queryCountNumber(coursePackage.getId()); CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() - .eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours limit 0, 1")); + .eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours").last(" limit 0, 1")); CoursePackageListVo coursePackageListVo = new CoursePackageListVo(); coursePackageListVo.setId(coursePackage.getId()); coursePackageListVo.setName(coursePackage.getName()); @@ -133,7 +136,7 @@ coursePackageListVo.setClassStartTime(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); coursePackageListVo.setApplicantsNumber(integer); coursePackageListVo.setPayType(coursePackage.getPayType()); - coursePackageListVo.setPlayPaiCoin(coursePackageListVo.getPlayPaiCoin()); + coursePackageListVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin()); //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低) if(appUser.getIsVip() == 0){//非会员 @@ -413,10 +416,13 @@ Student student = studentClient.queryDefaultStudent(uid); StudentVo studentVo = new StudentVo(); - studentVo.setId(student.getId()); - studentVo.setPhone(student.getPhone()); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); - studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(student.getBirthday()))); + if(null != student){ + studentVo.setId(student.getId()); + studentVo.setPhone(student.getPhone()); + studentVo.setName(student.getName()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(student.getBirthday()))); + } coursePackageInfo.setStudent(studentVo); return coursePackageInfo; } @@ -493,21 +499,280 @@ } if(paymentCourseVo.getPayType() == 1){//微信支付 - + return weChatPaymentCourse(uid, price, paymentCourseVo); } if(paymentCourseVo.getPayType() == 2){//支付宝支付 - + return aliPaymentCourse(uid, price, paymentCourseVo); } if(paymentCourseVo.getPayType() == 3){//玩湃币支付 - + if(appUser.getPlayPaiCoins() < price.intValue()){ + return ResultUtil.error("报名失败,玩湃币不足,请充值!"); + } + return playPaiCoinPaymentCourse(appUser, price, paymentCourseVo); } - return null; + return ResultUtil.success(); } - public ResultUtil weChatPaymentCourse(Integer uid, PaymentCourseVo paymentCourseVo){ - TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment(); -// coursePackagePayment + /** + * 课程微信支付 + * @param uid + * @param paymentPrice + * @param paymentCourseVo + * @return + * @throws Exception + */ + public ResultUtil weChatPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{ + CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId()); + String[] split = paymentCourseVo.getStudentIds().split(";"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + for (String s : split) { + TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment(); + coursePackagePayment.setCode(code); + coursePackagePayment.setAppUserId(uid); + coursePackagePayment.setStudentId(Integer.valueOf(s)); + coursePackagePayment.setCoursePackageId(paymentCourseVo.getId()); + coursePackagePayment.setPayType(paymentCourseVo.getPayType()); + coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice()); + coursePackagePayment.setUserCouponId(paymentCourseVo.getCouponId()); + coursePackagePayment.setCashPayment(new BigDecimal(paymentPrice)); + coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setAbsencesNumber(0); + coursePackagePayment.setPayUserType(1); + coursePackagePayment.setPayStatus(1); + coursePackagePayment.setPayUserId(uid); + coursePackagePayment.setStatus(1); + coursePackagePayment.setState(1); + coursePackagePayment.setInsertTime(new Date()); + coursePackagePaymentService.save(coursePackagePayment); + } + + ResultUtil weixinpay = payMoneyUtil.weixinpay("购买课程", "", code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "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); + List<TCoursePackagePayment> list = coursePackagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("state", 1).eq("code", code).eq("payType", 1)); + TCoursePackagePayment one = list.get(0); + if(one.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); + if(resultUtil.getCode() == 200 && one.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){ + for (TCoursePackagePayment coursePackagePayment : list) { + coursePackagePayment.setStatus(3); + } + coursePackagePaymentService.updateBatchById(list); + break; + } + if("SUCCESS".equals(s)){ + for (TCoursePackagePayment coursePackagePayment : list) { + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(transaction_id); + } + coursePackagePaymentService.updateBatchById(list); + break; + } + if("USERPAYING".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return weixinpay; + } + + + /** + * 课程支付宝支付 + * @param uid + * @param paymentPrice + * @param paymentCourseVo + * @return + * @throws Exception + */ + public ResultUtil aliPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{ + CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId()); + String[] split = paymentCourseVo.getStudentIds().split(";"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + for (String s : split) { + TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment(); + coursePackagePayment.setCode(code); + coursePackagePayment.setAppUserId(uid); + coursePackagePayment.setStudentId(Integer.valueOf(s)); + coursePackagePayment.setCoursePackageId(paymentCourseVo.getId()); + coursePackagePayment.setPayType(paymentCourseVo.getPayType()); + coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice()); + coursePackagePayment.setUserCouponId(paymentCourseVo.getCouponId()); + coursePackagePayment.setCashPayment(new BigDecimal(paymentPrice)); + coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setAbsencesNumber(0); + coursePackagePayment.setPayUserType(1); + coursePackagePayment.setPayStatus(1); + coursePackagePayment.setPayUserId(uid); + coursePackagePayment.setStatus(1); + coursePackagePayment.setState(1); + coursePackagePayment.setInsertTime(new Date()); + coursePackagePaymentService.save(coursePackagePayment); + } + + ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", "", code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback"); + 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); + List<TCoursePackagePayment> list = coursePackagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("state", 1).eq("code", code).eq("payType", 2)); + TCoursePackagePayment one = list.get(0); + if(one.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode() == 200 && one.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){ + for (TCoursePackagePayment coursePackagePayment : list) { + coursePackagePayment.setStatus(3); + } + coursePackagePaymentService.updateBatchById(list); + break; + } + if("TRADE_SUCCESS".equals(s)){ + for (TCoursePackagePayment coursePackagePayment : list) { + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(tradeNo); + } + coursePackagePaymentService.updateBatchById(list); + break; + } + if("WAIT_BUYER_PAY".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return alipay; + } + + + /** + * 玩湃币支付课程 + * @param appUser + * @param paymentPrice + * @param paymentCourseVo + * @return + * @throws Exception + */ + public ResultUtil playPaiCoinPaymentCourse(AppUser appUser, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{ + CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId()); + String[] split = paymentCourseVo.getStudentIds().split(";"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + for (String s : split) { + TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment(); + coursePackagePayment.setCode(code); + coursePackagePayment.setAppUserId(appUser.getId()); + coursePackagePayment.setStudentId(Integer.valueOf(s)); + coursePackagePayment.setCoursePackageId(paymentCourseVo.getId()); + coursePackagePayment.setPayType(paymentCourseVo.getPayType()); + coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice()); + coursePackagePayment.setPlayPaiCoin(paymentPrice.intValue()); + coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePayment.setAbsencesNumber(0); + coursePackagePayment.setPayUserType(1); + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setPayUserId(appUser.getId()); + coursePackagePayment.setStatus(1); + coursePackagePayment.setState(1); + coursePackagePayment.setInsertTime(new Date()); + coursePackagePaymentService.save(coursePackagePayment); + } + + Integer playPaiCoins = appUser.getPlayPaiCoins(); + appUser.setPlayPaiCoins(playPaiCoins - paymentPrice.intValue()); + appUserClient.updateAppUser(appUser); return ResultUtil.success(); } + + + /** + * 获取课包管理列表数据 + * @param queryCoursePackageLists + * @return + */ + @Override + public List<Map<String, Object>> queryCoursePackageLists(Page<Map<String, Object>> page, QueryCoursePackageLists queryCoursePackageLists) { + List<Map<String, Object>> list = this.baseMapper.queryCoursePackageLists(page, queryCoursePackageLists); + for (Map<String, Object> map : list) { + Integer id = Integer.valueOf(map.get("id").toString()); + Integer integer = coursePackagePaymentService.queryCountNumber(id); + map.put("paymentNumber", integer); + + boolean cash = false; + boolean coin = false; + List<CoursePackagePaymentConfig> coursePackagePaymentConfigs = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id)); + for (CoursePackagePaymentConfig coursePackagePaymentConfig : coursePackagePaymentConfigs) { + if(0 != coursePackagePaymentConfig.getCashPayment()){ + cash = true; + } + if(0 != coursePackagePaymentConfig.getPlayPaiCoin()){ + coin = true; + } + } + map.put("payType", (cash ? "现金支付" : "") + (coin ? cash ? "&玩湃币支付" : "玩湃币支付" : "")); + } + return list; + } } -- Gitblit v1.7.1