From eb6b6dbb35a9f029e0b7d269773685c19fd40976 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 11 七月 2024 10:47:51 +0800 Subject: [PATCH] 玩湃微信商户认证代码 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 474 ++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 306 insertions(+), 168 deletions(-) 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 9e13e0d..ea84796 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 @@ -5,7 +5,12 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.Person; +import com.alipay.api.request.AlipayTradeOrderSettleRequest; +import com.alipay.api.response.AlipayTradeOrderSettleResponse; import com.alipay.api.response.AlipayTradeQueryResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -18,10 +23,8 @@ import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.CoachClient; import com.dsh.course.feignclient.account.StudentClient; -import com.dsh.course.feignclient.account.model.AppUser; -import com.dsh.course.feignclient.account.model.Coach; -import com.dsh.course.feignclient.account.model.Student; -import com.dsh.course.feignclient.account.model.TCourseInfoRecord; +import com.dsh.course.feignclient.account.UserIntegralChangesClient; +import com.dsh.course.feignclient.account.model.*; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.CouponClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; @@ -51,6 +54,8 @@ import javax.annotation.Resource; import javax.persistence.criteria.CriteriaBuilder; import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -118,9 +123,11 @@ @Autowired private ICoursePackageSchedulingService coursePackageSchedulingService; - @Autowired private RestTemplate internalRestTemplate; + + @Resource + private UserIntegralChangesClient userIntegralChangesClient; @Override @@ -152,100 +159,96 @@ @Override public List<Map<String, Object>> getStudentTotal(StudentQeryDto studentQeryDto) { - List<Map<String, Object>> studentTotal = this.baseMapper.getStudentTotal(studentQeryDto); - - for (Map<String, Object> student : studentTotal) { - Integer appUserId = (Integer) student.get("appUserId"); - AppUser appUser = appuClient.queryAppUser(appUserId); - student.put("province", appUser.getProvince()); - student.put("provinceCode", appUser.getProvinceCode()); - - student.put("city", appUser.getCity()); - student.put("cityCode", appUser.getCityCode()); - - Student studentId = studentClient.queryStudentById((Integer) student.get("studentId")); - student.put("studentName", studentId.getName()); - BigDecimal cashPayment = (BigDecimal) student.get("cashPayment"); - BigDecimal totalClassHours = (BigDecimal) student.get("totalClassHours"); - BigDecimal hasHours = (BigDecimal) student.get("hasHours"); - if (cashPayment == null) { + String cityCode = studentQeryDto.getCityCode(); + //获取用户数据 + List<Integer> appUserIds = null; + if(ToolUtil.isNotEmpty(cityCode)){ + List<AppUser> appUsers = appuClient.queryAppUserByCityCode(cityCode); + if(appUsers.size() > 0){ + appUserIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); + } + } + QueryWrapper<CoursePackageStudent> status = new QueryWrapper<CoursePackageStudent>().eq("payStatus", 2).eq("status", 1); + if(null != appUserIds){ + status.in("appUserId", appUserIds); + } + List<Map<String, Object>> maps = this.baseMapper.getStudentTotal(appUserIds, studentQeryDto.getStart(), studentQeryDto.getEnd()); + List<Map<String, Object>> list = new ArrayList<>(); + for (Map<String, Object> objectMap : maps) { + if(null == objectMap.get("studentId")){ continue; } - if (totalClassHours.compareTo(BigDecimal.ZERO) == 0) { - totalClassHours = totalClassHours.add(new BigDecimal("1")); + Integer studentId = Integer.valueOf(objectMap.get("studentId").toString()); + Integer appUserId = Integer.valueOf(objectMap.get("appUserId").toString()); + Integer coursePackageId = Integer.valueOf(objectMap.get("coursePackageId").toString()); + Integer number = Integer.valueOf(objectMap.get("number").toString()); + Map<String, Object> map = new HashMap<>(); + Student student = studentClient.queryStudentById(studentId); + if(null == student){ + continue; } - BigDecimal hasPayment = cashPayment.divide(totalClassHours, 2, RoundingMode.HALF_UP) - .multiply(hasHours).setScale(2, RoundingMode.HALF_UP); - student.put("hasPayment", hasPayment); - } - - if (studentQeryDto.getCityCode() != null && studentQeryDto.getCityCode() != "") { - String value = studentQeryDto.getCityCode(); - boolean allZeros = value.substring(value.length() - 4).endsWith("0000"); - System.out.println(allZeros); // Output: true - if (allZeros) { - Iterator<Map<String, Object>> iterator = studentTotal.iterator(); - while (iterator.hasNext()) { - Map<String, Object> student = iterator.next(); - String cityCode = (String) student.get("provinceCode"); - if (!cityCode.equals(studentQeryDto.getCityCode())) { - iterator.remove(); // Remove the element from the list - } - } - } else { - Iterator<Map<String, Object>> iterator = studentTotal.iterator(); - while (iterator.hasNext()) { - Map<String, Object> student = iterator.next(); - String cityCode = (String) student.get("cityCode"); - if (!cityCode.equals(studentQeryDto.getCityCode())) { - iterator.remove(); // Remove the element from the list - } - } + map.put("studentName", student.getName()); + AppUser appUser = appuClient.queryAppUser(appUserId); + if(null == appUser){ + continue; } - } + map.put("province", appUser.getProvince()); + map.put("provinceCode", appUser.getProvinceCode()); + map.put("city", appUser.getCity()); + map.put("cityCode", appUser.getCityCode()); + TCoursePackage coursePackage = coursePackageService.getById(coursePackageId); + map.put("courseName", coursePackage.getName()); + map.put("totalClassHours", number); - if (studentQeryDto.getStudentName() != null && studentQeryDto.getStudentName() != "") { - List<Map<String, Object>> totallike = new ArrayList<>(); - for (Map<String, Object> student : studentTotal) { - String studentName = (String) student.get("studentName"); - if (studentName.contains(studentQeryDto.getStudentName())) { - totallike.add(student); - } - + CoursePackageOrder coursePackageOrder = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>().eq("appUserId", appUserId) + .eq("coursePackageId", coursePackageId).eq("payStatus", 2).eq("state", 1) + .gt("cashPayment", 0).last(" and studentIds like '%" + studentId + "%' order by insertTime desc limit 0, 1")); + Double cashPayment = 0D; + if(null != coursePackageOrder && coursePackageOrder.getClassHours() > 0){ + cashPayment = coursePackageOrder.getCashPayment().divide(new BigDecimal(coursePackageOrder.getClassHours()), new MathContext(2, RoundingMode.HALF_EVEN)).doubleValue(); } - return totallike; + map.put("cashPayment", cashPayment * number); + + int count = coursePackageSchedulingService.count(new QueryWrapper<CoursePackageScheduling>().eq("studentId", studentId) + .eq("coursePackageId", coursePackageId).eq("status", 3)); + map.put("hasHours", count); + map.put("hasPayment", count * cashPayment); + + list.add(map); } - return studentTotal; + return list; } @Override public List<Map<String, Object>> bypac(PacQueryDto pacQueryDto) { - if (pacQueryDto.getCityCode() != null && pacQueryDto.getCityCode() != "") { - String value = pacQueryDto.getCityCode(); - boolean allZeros = value.substring(value.length() - 4).endsWith("0000"); - System.out.println(allZeros); // Output: true + List<Map<String, Object>> maps = this.baseMapper.pacQueryDto(pacQueryDto.getStart(), pacQueryDto.getEnd(), pacQueryDto.getStoreIds(), pacQueryDto.getName()); + for (Map<String, Object> map : maps) { + Integer id = Integer.valueOf(map.get("id").toString()); + Integer storeId = Integer.valueOf(map.get("storeId").toString()); + Integer number = Integer.valueOf(map.get("number").toString()); + Store store = storeClient.queryStoreById(storeId); + map.put("store", store.getName()); + map.put("totalClassHours", number); - if (allZeros) { - pacQueryDto.setProvinceCode(pacQueryDto.getCityCode()); - pacQueryDto.setCityCode(null); + List<CoursePackageOrder> list = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>() + .eq("coursePackageId", id).eq("payStatus", 2).eq("state", 1) + .gt("cashPayment", 0)); + + + Double cashPayment = 0D; + BigDecimal p = new BigDecimal(0); + for (CoursePackageOrder coursePackageOrder : list) { + p = p.add(coursePackageOrder.getCashPayment()); } - - } - List<Map<String, Object>> maps = this.baseMapper.pacQueryDto(pacQueryDto); - - if (pacQueryDto.getName() != null && pacQueryDto.getName() != "") { - List<Map<String, Object>> totallike = new ArrayList<>(); - for (Map<String, Object> student : maps) { - String studentName = (String) student.get("name"); - if (studentName.contains(pacQueryDto.getName())) { - totallike.add(student); - } - + if(list.size() > 0){ + cashPayment = p.divide(new BigDecimal(list.size()), new MathContext(2, RoundingMode.HALF_EVEN)).doubleValue(); } - return totallike; + map.put("cashPayment", cashPayment * number); + + int count = coursePackageSchedulingService.count(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", id).eq("status", 3)); + map.put("hasHours", count); + map.put("lavePay", count * cashPayment); } - - return maps; } @@ -321,7 +324,6 @@ @Override public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest, Integer appUserId) { CourseOfVideoResponse response = new CourseOfVideoResponse(); -// BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId()); TCourse byId = courseService.getById(detailsRequest.getVideoId()); TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); CoursePackageScheduling byId1 = new CoursePackageScheduling(); @@ -368,6 +370,17 @@ userVideoDetails.setState(2); userVideoDetails.setUpdateTime(new Date()); uvdmapper.updateById(userVideoDetails); + + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getById(detailsRequest.getScId()); + //添加积分 + AppUser appUser = appuClient.queryAppUser(coursePackageScheduling.getAppUserId()); + appUser.setIntegral((null == appUser.getIntegral() ? 0 : appUser.getIntegral()) + (null == coursePackageScheduling.getIntegral() ? 0 : coursePackageScheduling.getIntegral())); + appuClient.updateAppUser(appUser); + SaveUserIntegralChangesVo vo = new SaveUserIntegralChangesVo(); + vo.setAppUserId(coursePackageScheduling.getAppUserId()); + vo.setIntegral(coursePackageScheduling.getIntegral()); + vo.setType(4); + userIntegralChangesClient.saveUserIntegralChanges(vo); return "SUCCESS"; } return "ERROR"; @@ -503,6 +516,9 @@ @Autowired private TCoursePackageService coursePackageService; + @Autowired + private ALiSendSms aLiSendSms; + @@ -511,9 +527,21 @@ AppUser appUser = appuClient.queryAppUser(appUserId); CourseDetailsResponse response = new CourseDetailsResponse(); CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(coursePayId); + if (coursePackageOrder==null){ +// student = coursePackageStudentService.getById(coursePayId); + CoursePackageOrderStudent student = coursePackageOrderStudentService.getById(coursePayId); + + coursePackageOrder = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>().eq("appUserId", student.getAppUserId()).like("studentIds", student.getStudentId()).eq("coursePackageId", student.getCoursePackageId()).orderByDesc("insertTime").last("limit 1")); + + } + response.setOrinPrice(coursePackageOrder.getOriginalPrice()); response.setChooseHours(coursePackageOrder.getClassHours()); + response.setStuIds(coursePackageOrder.getStudentIds().split(";")); + response.setPayType(coursePackageOrder.getPayType()); + response.setPayPrice(coursePackageOrder.getCashPayment()); + response.setCoinPrice(coursePackageOrder.getPlayPaiCoin()); if (null != coursePackageOrder) { TCoursePackage coursePackage = tcpmapper.selectById(coursePackageOrder.getCoursePackageId()); @@ -522,6 +550,7 @@ } Store store = storeClient.queryStoreById(coursePackage.getStoreId()); response.setStoreName(store.getName()); + response.setStoreAddress(store.getAddress()); if (ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)) { Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat()); @@ -558,6 +587,16 @@ response.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); Integer payType = coursePackageOrder.getPayType(); + if(null == payType){ + CoursePackagePaymentConfig config = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours")).get(0); + if (ToolUtil.isNotEmpty(config.getCashPayment()) && config.getCashPayment() > 0 && ToolUtil.isNotEmpty(config.getPlayPaiCoin()) && config.getPlayPaiCoin() > 0) { + payType = 3; + } else if (ToolUtil.isNotEmpty(config.getCashPayment()) && config.getCashPayment() > 0) { + payType = 1; + } else if (ToolUtil.isNotEmpty(config.getPlayPaiCoin()) && config.getPlayPaiCoin() > 0) { + payType = 2; + } + } BigDecimal cashPayment = coursePackageOrder.getCashPayment(); double cashPaymentValue = 0.0; if (cashPayment != null) { @@ -584,11 +623,11 @@ switch (payType) { case 1: - case 2: + case 3: response.setAmount(cashPaymentValue); response.setVipAmount(discountMember); break; - case 3: + case 2: if (playPaiCoin!=null) { response.setWpGold(playPaiCoin); } @@ -747,24 +786,21 @@ } @Override - public ResultUtil ContinuationOrpaymentCourse(Integer ids, ClasspaymentRequest request) { - AppUser userIdFormRedis = appuClient.queryAppUser(ids); - TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId()); + public ResultUtil ContinuationOrpaymentCourse(Integer userId, ClasspaymentRequest request) { + AppUser appUser = appuClient.queryAppUser(userId); + CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(request.getCoursePayId()); String code = ""; - BigDecimal money = tCoursePackagePayment.getCashPayment(); - Integer wpGold = tCoursePackagePayment.getPlayPaiCoin(); - if (tCoursePackagePayment.getPayStatus() == 1) { -// 待支付的订单 - code = tCoursePackagePayment.getCode(); - tCoursePackagePayment.setPayType(request.getPayType()); + BigDecimal money = coursePackageOrder.getCashPayment(); + Integer wpGold = coursePackageOrder.getPlayPaiCoin(); + if (coursePackageOrder.getPayStatus() == 1) { + code = coursePackageOrder.getCode(); + coursePackageOrder.setPayType(request.getPayType()); if (request.getUseConpon() == 1) { - tCoursePackagePayment.setUserCouponId(Long.valueOf(request.getUseConpon())); + coursePackageOrder.setUserCouponId(Long.valueOf(request.getUseConpon())); } - this.baseMapper.updateById(tCoursePackagePayment); + coursePackageOrder.setAppUserId(null); + coursePackageOrderService.updateById(coursePackageOrder); } else { -// 续课的订单 -// 查询是否续课优惠 - CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", request.getLessonId()) .eq("classHours", request.getCourseHoursNum())); @@ -776,7 +812,7 @@ if (ToolUtil.isNotEmpty(coursePackageDiscount)) { String content = coursePackageDiscount.getContent(); JSONObject jsonObject = JSON.parseObject(content); - if (userIdFormRedis.getIsVip() == 1) { + if (appUser.getIsVip() == 1) { Double jsonObjectDouble = jsonObject.getDouble("num1"); money = BigDecimal.valueOf(jsonObjectDouble); } else { @@ -784,27 +820,24 @@ money = BigDecimal.valueOf(jsonObjectDouble); } } - TCoursePackagePayment newPayment = new TCoursePackagePayment(); + CoursePackageOrder newPayment = new CoursePackageOrder(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); - newPayment.setAppUserId(userIdFormRedis.getId()); - newPayment.setStudentId(request.getStuId()); + newPayment.setAppUserId(appUser.getId()); + newPayment.setStudentIds(request.getStuId().toString()); newPayment.setCoursePackageId(request.getLessonId()); - newPayment.setClassHours(tCoursePackagePayment.getClassHours()); - newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice()); - newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours()); - newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours()); + newPayment.setClassHours(coursePackageOrder.getClassHours()); + newPayment.setOriginalPrice(coursePackageOrder.getOriginalPrice()); 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); + coursePackageOrderService.save(newPayment); code = newPayment.getCode(); } switch (request.getPayType()) { @@ -849,7 +882,7 @@ } return AlipayPayment(code, money); case 3: - PlaypaiGoldPayment(userIdFormRedis, code, wpGold); + PlaypaiGoldPayment(appUser, code, wpGold); break; default: break; @@ -859,10 +892,10 @@ 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) { + String finalCode = code; new Thread(new Runnable() { @Override public void run() { @@ -873,12 +906,13 @@ int min = 5000; wait += (min * num); Thread.sleep(wait); - TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code); - if (coursePackagePayment.getPayStatus() == 2) { + CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() + .eq("code", finalCode).eq("state", 1)); + if (coursePackageOrder1.getPayStatus() == 2) { break; } - ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); - if (resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1) { + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(finalCode, ""); + if (resultUtil.getCode() == 200 && coursePackageOrder1.getPayStatus() == 1) { /** * SUCCESS—支付成功, * REFUND—转入退款, @@ -892,14 +926,23 @@ 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()); + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); +// coursePackageOrderService.updateById(coursePackageOrder1); break; } if ("SUCCESS".equals(s)) { - coursePackagePayment.setPayStatus(2); - coursePackagePayment.setOrderNumber(transaction_id); - baseMapper1.updateById(coursePackagePayment); + coursePackageOrder1.setPayStatus(2); + coursePackageOrder1.setOrderNumber(transaction_id); + coursePackageOrder1.setAppUserId(null); + coursePackageOrderService.updateById(coursePackageOrder1); + //修改课时有效期 + + CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId", coursePackageOrder1.getId()) + .eq("classHours", coursePackageOrder1.getClassHours()) + ); + coursePackageService.addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); break; } if ("USERPAYING".equals(s)) { @@ -915,48 +958,97 @@ } return weixinpay; } + private String smid = "2088330203191220";//平台支付宝商户号 + + public static void main(String[] args) { + BigDecimal bigDecimal = new BigDecimal("100"); + String s = "1"; + double v = Double.parseDouble(s); + double v1 = v * 0.01; + + BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(v1)); + BigDecimal multiply = bigDecimal1.multiply(bigDecimal); + System.err.println(v); + System.err.println(v1); + System.err.println(multiply); + } public ResultUtil AlipayPayment(String code, BigDecimal request) { + // 二级商户商户号 + String smidUser; TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; - ResultUtil alipay = payMoneyUtil.alipay("课包购买", "课包购买", "", code, request.toString(), + TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code); + // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号 + Integer coursePackageId = coursePackagePayment.getCoursePackageId(); + TCoursePackage byId = coursePackageService.getById(coursePackageId); + Store store = storeClient.queryStoreById(byId.getStoreId()); + String smid1=""; + if (store.getOperatorId() == null ){ + smid1 = smid; + }else if (store.getOperatorId() == 0){ + smid1 = smid; + }else{ + smid1 = storeClient.getSMIDByOperatorId(store.getOperatorId()); + } + ResultUtil alipay = payMoneyUtil.alipay(smid1,"课包购买", "课包购买", "", code, request.toString(), "/base/coursePackage/alipayRegisteredCoursesCallback"); if (alipay.getCode() == 200) { + String finalCode = code; new Thread(new Runnable() { @Override public void run() { try { + Thread.sleep(1000); 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) { + CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() + .eq("code", finalCode).eq("state", 1)); + if (coursePackageOrder1.getPayStatus() == 2) { break; } - AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code); - - if (coursePackagePayment.getPayStatus() == 1) { + AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode); + if (null != alipayTradeQueryResponse) { /** * WAIT_BUYER_PAY(交易创建,等待买家付款)、 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 * TRADE_SUCCESS(交易支付成功)、 * TRADE_FINISHED(交易结束,不可退款) */ -// Map<String, String> data1 = resultUtil.getData(); String s = alipayTradeQueryResponse.getTradeStatus(); + String tradeNo = alipayTradeQueryResponse.getTradeNo(); if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { - coursePackagePayment.setState(3); - baseMapper1.deleteById(coursePackagePayment.getId()); + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); +// coursePackageOrderService.updateById(coursePackageOrder1); break; } if ("TRADE_SUCCESS".equals(s)) { coursePackagePayment.setPayStatus(2); coursePackagePayment.setOrderNumber(tradeNo); baseMapper1.updateById(coursePackagePayment); + // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号 + Integer coursePackageId = coursePackagePayment.getCoursePackageId(); + TCoursePackage byId = coursePackageService.getById(coursePackageId); + Store store = storeClient.queryStoreById(byId.getStoreId()); + if (store.getOperatorId() == null ){ + // 说明是平台的门店 无需冻结资金 不走分账 + payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); + }else if (store.getOperatorId() == 0){ + // 说明是平台的门店 + payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); + // 发起分账 + extracted(store, coursePackageOrder1, tradeNo); + }else{ + payMoneyUtil.confirm(storeClient.getSMIDByOperatorId(store.getOperatorId()),code,tradeNo,request.toString()); + // 发起分账 + extracted(store, coursePackageOrder1, tradeNo); + } break; } if ("WAIT_BUYER_PAY".equals(s)) { @@ -973,11 +1065,58 @@ return alipay; } + private void extracted(Store store, CoursePackageOrder coursePackageOrder1, String tradeNo) throws Exception { + // 分账 + AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", + "2021004105665036", + "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==", + "json", "GBK", + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB", + "RSA2"); + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + String randomCode = UUIDUtil.getRandomCode(16); + String proportionByOperatorId = storeClient.getProportionByOperatorId(store.getOperatorId()); + // 支付宝分账比例 + String s1 = proportionByOperatorId.split(",")[1]; + double i = Double.parseDouble(s1); + double v = i * 0.01; + BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(v)); + BigDecimal cashPayment = coursePackageOrder1.getCashPayment(); + // 分账金额 + BigDecimal bigDecimal2 = cashPayment.multiply(bigDecimal1).setScale(2, RoundingMode.DOWN); + request.setBizContent("{" + + " \"out_request_no\":\"" + randomCode + "\"," + + " \"trade_no\":\"" + tradeNo + "\"," + + " \"royalty_parameters\":[" + + " {" + + " \"royalty_type\":\"transfer\"," + + " \"trans_out\":\"" + storeClient.getSMIDByOperatorId(store.getOperatorId()) + "\"," + + " \"trans_out_type\":\"userId\"," + + " \"trans_in_type\":\"userId\"," + + " \"trans_in\":\"" + smid + "\"," + + " \"amount\":" + bigDecimal2 + "," + + " \"desc\":\"平台服务费\"," + + " \"royalty_scene\":\"平台服务费\"," + + " }" + + " ]," + + " \"extend_params\":{" + + " \"royalty_finish\":\"true\"" + + " }," + + " \"royalty_mode\":\"async\"" + + "}"); + AlipayTradeOrderSettleResponse response = alipayClient.execute(request); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + } + 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("玩牌币不足!"); + return ResultUtil.error("玩湃币不足!"); } packagePayment.setPayStatus(2); packagePayment.setPayUserId(appUser.getId()); @@ -1007,17 +1146,8 @@ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); if (tCoursePackagePayments.size() > 0) { - -// int pageNum = 1; // 页码 int pageSize = 10; // 每页记录数 Page<CoursePackageStudent> page = new Page<>(pageNum, pageSize); - -// for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { -// List<CoursePackageStudent> coursePackageStudent1 = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>() -// .in("coursePackageId",ids) -// .eq("studentId",stuId) -// .eq("appUserId",appUserId) -// .eq("reservationStatus",1)); IPage<CoursePackageStudent> coursePackageStudentPage = cpsMapper.selectPage(page, new QueryWrapper<CoursePackageStudent>() .in("coursePackageId", ids) .eq("studentId", stuId) @@ -1054,19 +1184,8 @@ } } -// recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); - Date date = DateUtil.getDate(); - - CoursePackageScheduling byId = coursePackageSchedulingService.getById(coursePackageStudent.getCoursePackageSchedulingId()); -// String classStartTime = coursePackage.getClassStartTime(); -// String classEndTime = coursePackage.getClassEndTime(); //这里是过滤今天之后的数据 - -// if (byId == null||byId.getClassDate().after(new Date())){ -// continue; -// } - if (byId == null) { continue; } @@ -1076,8 +1195,6 @@ recordVo.setTimeFrame(dateString1 + "-" + dateString2.substring(11)); - -// recordVo.setTimeFrame(simpleDateFormat.format(date)+" "+classStartTime+"-"+classEndTime); Store store = stoClient.queryStoreById(coursePackage.getStoreId()); recordVo.setStoreNameAddr(store.getName() + store.getAddress()); recordVo.setCourseStuRecordId(coursePackageStudent.getId()); @@ -1104,12 +1221,7 @@ //待上课 recordVo.setStatus(1); } -// else if(coursePackageStudent.getSignInOrNot()==2){ -// recordVo.setStatus(5); -// } else { -// CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() -// .eq("coursePackageId",coursePackageStudent.getCoursePackageId())); CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() .eq("coursePackageSchedulingId", byId.getId()).last("limit 1")); if (ToolUtil.isNotEmpty(cancelledClasses)) { @@ -1140,8 +1252,6 @@ } } -// } - return recordVoList; } @@ -1165,13 +1275,26 @@ @Override public ResultUtil insertVipPaymentCallback(String code, String orderNumber) { - TCoursePackagePayment coursePackagePayment = this.baseMapper.getCoursePackagePaymentByCode(code); - if (coursePackagePayment.getPayStatus() != 1) { + CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() + .eq("code", code).eq("state", 1)); + if (coursePackageOrder1.getPayStatus() == 2) { return ResultUtil.success(); } - coursePackagePayment.setPayStatus(2); - coursePackagePayment.setOrderNumber(orderNumber); - this.baseMapper.updateById(coursePackagePayment); + coursePackageOrder1.setPayStatus(2); + coursePackageOrder1.setOrderNumber(orderNumber); + coursePackageOrder1.setAppUserId(null); + coursePackageOrderService.updateById(coursePackageOrder1); + + CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId", coursePackageOrder1.getId()) + .eq("classHours", coursePackageOrder1.getClassHours()) + ); + coursePackageService.addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); + try { + coursePackageService.moneyOut(orderNumber,orderNumber,code); + } catch (AlipayApiException e) { + e.printStackTrace(); + } return ResultUtil.success(); } @@ -1212,10 +1335,14 @@ List<Map<String, Object>> list = new ArrayList<>(); if (coursePackage.getType()==1){ - list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds);}else { + list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds); + }else { list = this.baseMapper.queryRegistrationRecord1(page, coursePackageId, userIds, studentIds); } + + list.addAll(this.baseMapper.queryRegistrationRecord3(coursePackageId,userIds,studentIds)); for (Map<String, Object> map : list) { + Long id = Long.valueOf(map.get("id").toString()); Integer appUserId = Integer.valueOf(map.get("appUserId").toString()); @@ -1223,7 +1350,7 @@ if (coursePackage.getType()==1) { studentId = Integer.valueOf(map.get("studentId").toString()); }else { - studentId = Integer.valueOf(map.get("studentIds").toString()); + studentId = Integer.valueOf(map.get("studentIds").toString().split(",")[0]); } TAppUser appUser = appuClient.queryAppUser1(appUserId); @@ -1233,6 +1360,11 @@ map.put("studentName", null != student ? student.getName() : ""); Integer integer = cpsMapper.selectCount(new QueryWrapper<CoursePackageStudent>().eq("appUserId", appUserId) .eq("studentId", studentId).eq("coursePackagePaymentId", id).eq("signInOrNot", 2)); + + int count = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageId", coursePackageId).eq("studentId", studentId).eq("signInOrNot",2)); + + map.put("absencesNumber", count); + map.put("already", integer); } return list; @@ -1488,6 +1620,12 @@ coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() - req.getNum()); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + if(3 >= laveClassHours){ + AppUser appUser = appuClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); + //发送短信提醒 + aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); + } CourseCounsum courseCounsum = new CourseCounsum(); -- Gitblit v1.7.1