From aa43a92c7ec9053dbaef92fe5ccb3011b670442c Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 12 七月 2023 11:46:21 +0800 Subject: [PATCH] 更新线上视频奖励模块接口 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 719 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 718 insertions(+), 1 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 2245525..982aa7a 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 @@ -1,13 +1,43 @@ package com.dsh.course.service.impl; +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.service.impl.ServiceImpl; +import com.dsh.course.entity.CoursePackagePaymentConfig; import com.dsh.course.entity.TCoursePackage; +import com.dsh.course.entity.TCoursePackageDiscount; +import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.feignclient.account.AppUserClient; +import com.dsh.course.feignclient.account.StudentClient; +import com.dsh.course.feignclient.account.model.AppUser; +import com.dsh.course.feignclient.account.model.Student; +import com.dsh.course.feignclient.activity.CouponClient; +import com.dsh.course.feignclient.activity.UserCouponClient; +import com.dsh.course.feignclient.activity.model.Coupon; +import com.dsh.course.feignclient.activity.model.UserCoupon; +import com.dsh.course.feignclient.other.StoreClient; +import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.feignclient.model.CourseOfStoreVo; +import com.dsh.course.model.*; +import com.dsh.course.service.ICoursePackagePaymentConfigService; +import com.dsh.course.service.TCoursePackageDiscountService; +import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.service.TCoursePackageService; +import com.dsh.course.util.*; +import com.dsh.course.util.httpClinet.HttpResult; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -20,8 +50,695 @@ @Service public class TCoursePackageServiceImpl extends ServiceImpl<TCoursePackageMapper, TCoursePackage> implements TCoursePackageService { + @Resource + private StoreClient storeClient; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + + @Autowired + private TCoursePackagePaymentService coursePackagePaymentService; + + @Autowired + private ICoursePackagePaymentConfigService coursePackagePaymentConfigService; + + @Autowired + private TCoursePackageDiscountService coursePackageDiscountService; + + @Resource + private AppUserClient appUserClient; + + @Resource + private StudentClient studentClient; + + @Resource + private UserCouponClient userCouponClient; + + @Resource + private CouponClient couponClient; + + @Autowired + private PayMoneyUtil payMoneyUtil; + + + + @Override public List<CourseOfStoreVo> queryStoreOfCourse() { return this.baseMapper.queryStoreOfCourse(); } + + + /** + * 获取课程列表 + * @param coursePackageList + * @return + * @throws Exception + */ + @Override + public List<CoursePackageListVo> queryCourseList(Integer uid, CoursePackageList coursePackageList) throws Exception { + AppUser appUser = appUserClient.queryAppUser(uid); + Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat()); + String provinceCode = geocode.get("provinceCode"); + String cityCode = geocode.get("cityCode"); + QueryWrapper<TCoursePackage> wrapper = new QueryWrapper<TCoursePackage>().in("status", Arrays.asList(1, 2)) + .eq("auditStatus", 2).eq("state", 1).eq("provinceCode", provinceCode).eq("cityCode", cityCode); + if(null != coursePackageList.getCoursePackageTypeId()){ + wrapper.eq("coursePackageTypeId", coursePackageList.getCoursePackageTypeId()); + } + if(null != coursePackageList.getStoreId()){ + wrapper.eq("storeId", coursePackageList.getStoreId()); + } + if(null != coursePackageList.getStoreId()){ + wrapper.eq("storeId", coursePackageList.getStoreId()); + } + if(ToolUtil.isNotEmpty(coursePackageList.getSearch())){ + wrapper.like("name", coursePackageList.getSearch()); + List<Store> stores = storeClient.queryStoreListByName(coursePackageList.getSearch()); + List<Integer> collect = stores.stream().map(Store::getId).collect(Collectors.toList()); + if(collect.size() > 0){ + wrapper.or().in("id", collect); + } + } + List<TCoursePackage> list = this.list(wrapper.last(" order by sort, insertTime desc")); + List<CoursePackageListVo> listVos = new ArrayList<>(); + for (TCoursePackage coursePackage : list) { + 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").last(" limit 0, 1")); + CoursePackageListVo coursePackageListVo = new CoursePackageListVo(); + coursePackageListVo.setId(coursePackage.getId()); + coursePackageListVo.setName(coursePackage.getName()); + coursePackageListVo.setStoreName(null != store ? store.getName() : ""); + coursePackageListVo.setCoverDrawing(coursePackage.getCoverDrawing()); + coursePackageListVo.setClassStartTime(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); + coursePackageListVo.setApplicantsNumber(integer); + coursePackageListVo.setPayType(coursePackage.getPayType()); + coursePackageListVo.setPlayPaiCoin(coursePackageListVo.getPlayPaiCoin()); + + //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低) + if(appUser.getIsVip() == 0){//非会员 + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackageListVo.setVipPrice(vipPrice); + + Double paymentPrice = coursePackagePaymentConfig.getCashPayment(); + List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 3).eq("auditStatus", 2)); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (TCoursePackageDiscount coursePackageDiscount : list3) { + /** + * [{ + * "startDate": "2023-01-01 00:00:00", + * "endDate": "2023-12-31 23:59:59", + * "startTime": "02:00:00", + * "endTime": "23:00:00", + * "weeks": [1, 2, 7], + * "cashPayment": 100 + * }] + */ + JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); + for (int i = 0; i < jsonArray.size(); i++) { + try { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String startDate = jsonObject.getString("startDate"); + String endDate = jsonObject.getString("endDate"); + String startTime = jsonObject.getString("startTime"); + String endTime = jsonObject.getString("endTime"); + List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Date startDate_date = sdf.parse(startDate); + Date endDate_date = sdf.parse(endDate); + long timeMillis = System.currentTimeMillis(); + if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){ + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int week = calendar.get(Calendar.DAY_OF_WEEK); + boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); + if(isFirstSunday){ + week = week - 1; + if(week == 0){ + week = 7; + } + } + if(!weeks.contains(week)){ + continue; + } + + String[] split1 = startTime.split(":"); + Integer hour1 = Integer.valueOf(split1[0]); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.HOUR_OF_DAY, hour1); + s.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + s.set(Calendar.SECOND, Integer.valueOf(split1[2])); + + String[] split2 = endTime.split(":"); + Integer hour2 = Integer.valueOf(split2[0]); + Calendar e = Calendar.getInstance(); + e.setTime(date); + e.set(Calendar.HOUR_OF_DAY, hour2); + e.set(Calendar.MINUTE, Integer.valueOf(split2[1])); + e.set(Calendar.SECOND, Integer.valueOf(split2[2])); + + if(hour1 > hour2){ + if(s.getTimeInMillis() > date.getTime()){ + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1); + }else{ + e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1); + } + } + if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){ + paymentPrice = cashPayment; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + coursePackageListVo.setPaymentPrice(paymentPrice); + }else{ + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackageListVo.setPaymentPrice(vipPrice); + coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); + } + + Map<String, Double> distance = GeodesyUtil.getDistance(coursePackageList.getLon() + "," + coursePackageList.getLat(), store.getLon() + "," + store.getLat()); + coursePackageListVo.setDistance(distance.get("WGS84") / 1000); + listVos.add(coursePackageListVo); + } + + //销量排行 + if(ToolUtil.isNotEmpty(coursePackageList.getSalesRanking())){ + Collections.sort(listVos, new Comparator<CoursePackageListVo>() { + public int compare(CoursePackageListVo s1, CoursePackageListVo s2) { + return Integer.compare(s1.getApplicantsNumber(), s2.getApplicantsNumber()); + } + }); + } + //距离排行 + if(ToolUtil.isNotEmpty(coursePackageList.getDistanceSort())){ + Collections.sort(listVos, new Comparator<CoursePackageListVo>() { + public int compare(CoursePackageListVo s1, CoursePackageListVo s2) { + return Double.compare(s1.getDistance(), s2.getDistance()); + } + }); + } + return listVos; + } + + + /** + * 获取课包详情 + * @param uid + * @param id + * @return + * @throws Exception + */ + @Override + public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception { + AppUser appUser = appUserClient.queryAppUser(uid); + TCoursePackage coursePackage = this.getById(id); + CoursePackageInfo coursePackageInfo = new CoursePackageInfo(); + coursePackageInfo.setId(id); + coursePackageInfo.setCoverDrawing(coursePackage.getCoverDrawing()); + coursePackageInfo.setName(coursePackage.getName()); + Store store = storeClient.queryStoreById(coursePackage.getStoreId()); + coursePackageInfo.setStoreName(store.getName()); + coursePackageInfo.setStoreCoverDrawing(store.getCoverDrawing()); + coursePackageInfo.setStoreAddress(store.getAddress()); + coursePackageInfo.setLon(store.getLon()); + coursePackageInfo.setLat(store.getLat()); + if(ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)){ + Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat()); + double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + coursePackageInfo.setDistance(wgs84); + } + + String[] split = coursePackage.getClassWeeks().split(";"); + coursePackageInfo.setWeeks(Arrays.asList(split)); + coursePackageInfo.setTimes(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); + coursePackageInfo.setDetailDrawing(coursePackage.getDetailDrawing()); + coursePackageInfo.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); + List<CoursePackagePaymentConfigVo> list = new ArrayList<>(); + List<CoursePackagePaymentConfig> list1 = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id).orderByAsc("classHours")); + list1.forEach(coursePackagePaymentConfig -> { + CoursePackagePaymentConfigVo coursePackagePaymentConfigVo = new CoursePackagePaymentConfigVo(); + coursePackagePaymentConfigVo.setId(coursePackagePaymentConfig.getId()); + coursePackagePaymentConfigVo.setClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType()); + coursePackagePaymentConfigVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin()); + //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低) + if(appUser.getIsVip() == 0){//非会员 + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackagePaymentConfigVo.setVipPrice(vipPrice); + + Double paymentPrice = coursePackagePaymentConfig.getCashPayment(); + List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 3).eq("auditStatus", 2)); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (TCoursePackageDiscount coursePackageDiscount : list3) { + /** + * [{ + * "startDate": "2023-01-01 00:00:00", + * "endDate": "2023-12-31 23:59:59", + * "startTime": "02:00:00", + * "endTime": "23:00:00", + * "weeks": [1, 2, 7], + * "cashPayment": 100 + * }] + */ + JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); + for (int i = 0; i < jsonArray.size(); i++) { + try { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String startDate = jsonObject.getString("startDate"); + String endDate = jsonObject.getString("endDate"); + String startTime = jsonObject.getString("startTime"); + String endTime = jsonObject.getString("endTime"); + List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Date startDate_date = sdf.parse(startDate); + Date endDate_date = sdf.parse(endDate); + long timeMillis = System.currentTimeMillis(); + if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){ + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int week = calendar.get(Calendar.DAY_OF_WEEK); + boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); + if(isFirstSunday){ + week = week - 1; + if(week == 0){ + week = 7; + } + } + if(!weeks.contains(week)){ + continue; + } + + String[] split1 = startTime.split(":"); + Integer hour1 = Integer.valueOf(split1[0]); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.HOUR_OF_DAY, hour1); + s.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + s.set(Calendar.SECOND, Integer.valueOf(split1[2])); + + String[] split2 = endTime.split(":"); + Integer hour2 = Integer.valueOf(split2[0]); + Calendar e = Calendar.getInstance(); + e.setTime(date); + e.set(Calendar.HOUR_OF_DAY, hour2); + e.set(Calendar.MINUTE, Integer.valueOf(split2[1])); + e.set(Calendar.SECOND, Integer.valueOf(split2[2])); + + if(hour1 > hour2){ + if(s.getTimeInMillis() > date.getTime()){ + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1); + }else{ + e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1); + } + } + if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){ + paymentPrice = cashPayment; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice); + }else{ + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackagePaymentConfigVo.setPaymentPrice(vipPrice); + coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); + } + list.add(coursePackagePaymentConfigVo); + }); + coursePackageInfo.setList(list); + + 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()))); + coursePackageInfo.setStudent(studentVo); + return coursePackageInfo; + } + + + /** + * 课程包名支付 + * @param uid + * @param paymentCourseVo + * @return + * @throws Exception + */ + @Override + public ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception { + AppUser appUser = appUserClient.queryAppUser(uid); + CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null); + List<CoursePackagePaymentConfigVo> list = coursePackageInfo.getList(); + + String[] students = paymentCourseVo.getStudentIds().split(";"); + for (CoursePackagePaymentConfigVo coursePackagePaymentConfigVo : list) { + if(paymentCourseVo.getCoursePackagePaymentConfigId().compareTo(coursePackagePaymentConfigVo.getId()) == 0){ + Integer payType = coursePackagePaymentConfigVo.getPayType(); + if(payType == 1 && paymentCourseVo.getPayType() == 3){//现金支付 + return ResultUtil.error("支付方式错误,请刷新后重试"); + } + if(payType == 2 && paymentCourseVo.getPayType() != 3){//玩湃币支付 + return ResultUtil.error("支付方式错误,请刷新后重试"); + } + Double paymentPrice = coursePackagePaymentConfigVo.getPaymentPrice();//支付价 + paymentPrice = new BigDecimal(students.length).multiply(new BigDecimal(paymentPrice)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + Double playPaiCoin = coursePackagePaymentConfigVo.getPlayPaiCoin().doubleValue();//支付币 + playPaiCoin = new BigDecimal(students.length).multiply(new BigDecimal(playPaiCoin)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if(payType == 1 && paymentPrice.compareTo(paymentCourseVo.getPrice()) != 0){ + return ResultUtil.error("支付金额异常,请刷新后重试"); + } + if(payType == 2 && playPaiCoin.compareTo(paymentCourseVo.getPrice()) != 0){ + return ResultUtil.error("支付金额异常,请刷新后重试"); + } + } + } + + Double price = paymentCourseVo.getPrice();//支付金额 + + //校验优惠券 + Long couponId = paymentCourseVo.getCouponId(); + if(null != couponId && paymentCourseVo.getPayType() != 3){ + UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId); + if(userCoupon.getStatus() == 2){ + return ResultUtil.error("优惠券已被核销"); + } + Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId()); + long time = coupon.getEndTime().getTime(); + if(System.currentTimeMillis() >= time){ + return ResultUtil.error("优惠券已过期"); + } + if(coupon.getType() == 1){//满减 + JSONObject jsonObject = JSON.parseObject(coupon.getContent()); + Double num1 = jsonObject.getDouble("num1"); + Double num2 = jsonObject.getDouble("num2"); + if(price.compareTo(num1) <= 0){ + return ResultUtil.error("该优惠券无法使用"); + } + + price = new BigDecimal(price).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + } + if(coupon.getType() == 2){//代金券 + JSONObject jsonObject = JSON.parseObject(coupon.getContent()); + Double num1 = jsonObject.getDouble("num1"); + if(price.compareTo(num1) <= 0){ + return ResultUtil.error("该优惠券无法使用"); + } + price = new BigDecimal(price).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + } + } + + 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 ResultUtil.success(); + } + + + /** + * 课程微信支付 + * @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(); + } } -- Gitblit v1.7.1