From 640ff18d2d7f4be02ddb7f8f75e899f05545eb98 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 05 二月 2024 11:56:52 +0800 Subject: [PATCH] 更新bug修改 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 1323 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 865 insertions(+), 458 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 12e9cf9..75b2215 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,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; import com.alipay.api.domain.Person; import com.alipay.api.response.AlipayTradeQueryResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,13 +16,8 @@ import com.dsh.course.entity.*; import com.dsh.course.entity.TAppUser; import com.dsh.course.entity.dto.StudentQeryDto; -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.*; +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; @@ -35,9 +31,7 @@ import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.*; import com.dsh.course.model.vo.response.*; -import com.dsh.course.service.CoursePackageSchedulingService; -import com.dsh.course.service.ICoursePackageSchedulingService; -import com.dsh.course.service.TCoursePackagePaymentService; +import com.dsh.course.service.*; import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -53,9 +47,12 @@ import javax.annotation.Resource; import javax.persistence.criteria.CriteriaBuilder; import java.math.BigDecimal; +import java.math.MathContext; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -118,9 +115,16 @@ @Autowired private ICoursePackageSchedulingService coursePackageSchedulingService; - @Autowired private RestTemplate internalRestTemplate; + + @Resource + private UserIntegralChangesClient userIntegralChangesClient; + + @Resource + private StudentHonorClient studentHonorClient; + + @@ -133,13 +137,8 @@ @Override public int changeState(CoursePackagePayDTO dto) { - List<String> ids = dto.getIds(); - List<Long> list = new ArrayList<>(); - for (String id : ids) { - long value = Long.parseLong(id); - list.add(value); - } - return cpConfigMapper.changeState(list,dto.getPayUserName(),dto.getUserId()); + + return cpConfigMapper.changeState(Long.valueOf(dto.getIds()), dto.getPayUserName(), dto.getUserId()); } @Override @@ -155,103 +154,101 @@ STime = query.getRegisterTime().split(" - ")[0] + " 00:00:00"; ETime = query.getRegisterTime().split(" - ")[1] + " 23:59:59"; } - return cpConfigMapper.listAllRegister(query,STime,ETime,query.getAmount()); + return cpConfigMapper.listAllRegister(query, STime, ETime, query.getAmount()); } @Override public List<Map<String, Object>> getStudentTotal(StudentQeryDto studentQeryDto) { - List<Map<String, Object>> studentTotal = this.baseMapper.getStudentTotal(studentQeryDto); - - for (Map<String, Object> student : studentTotal) { - BigDecimal cashPayment = (BigDecimal) student.get("cashPayment"); - BigDecimal totalClassHours = (BigDecimal) student.get("totalClassHours"); - BigDecimal hasHours = (BigDecimal) student.get("hasHours"); - - BigDecimal hasPayment = cashPayment.divide(totalClassHours, 2, RoundingMode.HALF_UP) - .multiply(hasHours).setScale(2, RoundingMode.HALF_UP); - student.put("hasPayment", hasPayment); - - - 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()); - - - } - - 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 - } - }} - } - - 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); - } - + 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()); } - return totallike; } - return studentTotal; + 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; + } + 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; + } + 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); + + 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(); + } + 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 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; } @@ -267,6 +264,7 @@ /** * 获取课包购买人数 + * * @param coursePackageId * @return */ @@ -276,20 +274,20 @@ } @Override - public List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds) { + public List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search, List<Integer> courseIds) { List<AppUserVideoResponse> responses = new ArrayList<>(); List<PostCourseVideo> videoList = new ArrayList<>(); LambdaQueryWrapper<PostCourseVideo> queryWrapper = new LambdaQueryWrapper<PostCourseVideo>(); - if (courseIds.size() > 0 ){ - queryWrapper.in(PostCourseVideo::getCoursePackageId,courseIds); + if (courseIds.size() > 0) { + queryWrapper.in(PostCourseVideo::getCoursePackageId, courseIds); } videoList = pcvMapper.selectList(queryWrapper); System.out.println(videoList); - if (videoList.size() > 0){ + if (videoList.size() > 0) { List<Integer> videoIds = videoList.stream().map(PostCourseVideo::getCourseId).collect(Collectors.toList()); List<UserVideoDetails> userVideoDetails = uvdmapper.selectList(new QueryWrapper<UserVideoDetails>() .in("courseId", videoIds)); - if (userVideoDetails.size() > 0){ + if (userVideoDetails.size() > 0) { for (UserVideoDetails userVideoDetail : userVideoDetails) { AppUserVideoResponse response = new AppUserVideoResponse(); TCoursePackage coursePackage = tcpmapper.selectById(userVideoDetail.getCoursePackageId()); @@ -306,12 +304,12 @@ } Collections.sort(responses, Comparator.comparing(AppUserVideoResponse::getStudyStatus)); } - if (ToolUtil.isNotEmpty(search.getSearch())){ + if (ToolUtil.isNotEmpty(search.getSearch())) { responses = responses.stream() .filter(person -> person.getPackageName().contains(search.getSearch())) .collect(Collectors.toList()); } - if (ToolUtil.isNotEmpty(search.getCourseTypeId())){ + if (ToolUtil.isNotEmpty(search.getCourseTypeId())) { responses = responses.stream() .filter(person -> Objects.equals(person.getCoursePackageId(), search.getCourseTypeId())) .collect(Collectors.toList()); @@ -320,27 +318,42 @@ return responses; } - @Override - public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId) { - CourseOfVideoResponse response = new CourseOfVideoResponse(); - BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId()); - TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); - if (null != videosWithIds && null != coursePackage){ - response.setCoursePackageId(coursePackage.getId()); - response.setVideoId(videosWithIds.getId()); - response.setVideoURL(videosWithIds.getVideos()); - response.setVideoName(videosWithIds.getName()); - response.setIntegral(videosWithIds.getIntegral()); - UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() - .eq("appUserId",appUserId ) - .eq("coursePackageId",coursePackage.getId()) - .eq("courseId",videosWithIds.getId())); + @Autowired + private TCourseService courseService; - response.setStudyStatus(userVideoDetails.getState()); + @Override + public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest, Integer appUserId) { + CourseOfVideoResponse response = new CourseOfVideoResponse(); + TCourse byId = courseService.getById(detailsRequest.getVideoId()); + TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); + CoursePackageScheduling byId1 = new CoursePackageScheduling(); + if (detailsRequest.getScId() != null) { + byId1 = coursePackageSchedulingService.getById(detailsRequest.getScId()); + } + + if (null != coursePackage) { + response.setCoursePackageId(coursePackage.getId()); + response.setVideoId(byId.getId()); + response.setVideoURL(byId.getCourseVideo()); + response.setVideoName(coursePackage.getName()); + UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() + .eq("appUserId", appUserId) + .eq("coursePackageId", coursePackage.getId()) + .eq("courseId", detailsRequest.getVideoId())); + + if (userVideoDetails != null) { + response.setStudyStatus(userVideoDetails.getState()); + } else { + response.setStudyStatus(1); + } response.setPackageName(coursePackage.getName()); - response.setSynopsis(videosWithIds.getIntroduction()); - response.setDetailedDiagram(coursePackage.getIntroduceDrawing()); - response.setCover(videosWithIds.getCover()); + response.setSynopsis(byId.getIntroduce()); + response.setDetailedDiagram(byId.getIntroductionDrawing()); + response.setCover(byId.getCoverDrawing()); + if (byId1.getIntegral() != null) { + response.setIntegral(String.valueOf(byId1.getIntegral())); + } + } return response; @@ -349,26 +362,68 @@ @Override public String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId) { UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() - .eq("appUserId",appUserId ) - .eq("coursePackageId",detailsRequest.getCoursePackageId()) - .eq("courseId",detailsRequest.getVideoId()) - ); - if (null != userVideoDetails && userVideoDetails.getState() ==1 && detailsRequest.getIsOver() == 1){ + .eq("appUserId", appUserId) + .eq("coursePackageId", detailsRequest.getCoursePackageId()) + .eq("courseId", detailsRequest.getVideoId()) + ); + //完成学习 + if (null != userVideoDetails && userVideoDetails.getState() == 1 && detailsRequest.getIsOver() == 1) { 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); + //添加勋章数据 + Integer number = uvdmapper.selectCount(new QueryWrapper<UserVideoDetails>().eq("appUserId", appUserId).eq("state", 2)); + StudentHonor studentHonor = new StudentHonor(); + studentHonor.setAppUserId(appUserId); + studentHonor.setHonorType(4); + studentHonor.setNumber(number); + studentHonorClient.saveStudentHonor(studentHonor); return "SUCCESS"; } return "ERROR"; } + @Autowired + private TOrderService orderService; + @Override public List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId) { List<RegisterCourseVo> courseVos = new ArrayList<>(); - List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() - .eq("appUserId",appUserId )); + + List<TOrder> orders = orderService.list(new QueryWrapper<TOrder>().eq("appUserId", appUserId)); + + List<String> paysId = new ArrayList<>(); + + List<TCoursePackagePayment> tCoursePackagePayments = new ArrayList<>(); + for (TOrder order : orders) { + String[] split = order.getPaysId().split(","); +// paysId.add(split[0]); + TCoursePackagePayment byId = this.getById(split[0]); + byId.setPayStatus(order.getIsPay()); + byId.setOrderId(order.getId()); + tCoursePackagePayments.add(byId); + } + +// List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() +// .eq("appUserId",appUserId )); +// List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() +// .in("id",paysId )); + + System.out.println(tCoursePackagePayments); - if (tCoursePackagePayments.size() > 0){ + if (tCoursePackagePayments.size() > 0) { try { for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); @@ -377,43 +432,73 @@ // 2.0 registerCourseVo.setType(coursePackage.getType()); + registerCourseVo.setOrderId(tCoursePackagePayment.getOrderId().longValue()); registerCourseVo.setCoursePayId(tCoursePackagePayment.getId()); registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); registerCourseVo.setCoursePackTypeId(coursePackage.getCoursePackageTypeId()); registerCourseVo.setPackageImg(coursePackage.getCoverDrawing()); - String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")"; + String storeAndCourse = coursePackage.getName() + "(" + store.getName() + ")"; registerCourseVo.setCourseNameStore(storeAndCourse); // registerCourseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); // 2.0 registerCourseVo.setCourseTime(new SimpleDateFormat("yyyy-MM-dd").format(tCoursePackagePayment.getInsertTime())); Coach coach = coachClient.queryCoachById(coursePackage.getCoachId()); registerCourseVo.setCourseTeacher(ToolUtil.isEmpty(coach) ? "" : coach.getName()); - List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>() - .eq("coursePackageId",coursePackage.getId()) - .eq("studentId",appUserId )); - if (coursePackageStudents.size() > 0 ){ - registerCourseVo.setCourseNums(coursePackageStudents.size() * 2); + if (coursePackage.getType() == 2) { + registerCourseVo.setTime(new SimpleDateFormat("yyyy-MM-dd").format(coursePackage.getStartTime()) + "-" + new SimpleDateFormat("yyyy-MM-dd").format(coursePackage.getEndTime())); } + List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>() + .eq("coursePackageId", coursePackage.getId()) + .eq("appUserId", appUserId)); + + List<Long> ids = new ArrayList<>(); + for (CoursePackageStudent coursePackageStudent : coursePackageStudents) { + ids.add(coursePackageStudent.getCoursePackageSchedulingId()); + } + List<CoursePackageScheduling> cps = new ArrayList<>(); + + if (!ids.isEmpty()) { + cps = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>().in("id", ids)); + } + Integer counts = 0; + + for (CoursePackageScheduling cp : cps) { + if (cp.getDeductClassHour() != null) { + counts = counts + cp.getDeductClassHour(); + } + } + + +// Integer counts = cpsMapper.selectCount(new QueryWrapper<CoursePackageStudent>() +// .eq("coursePackageId",coursePackage.getId()) +// .eq("appUserId",appUserId )); + + if (coursePackageStudents.size() > 0) { +// registerCourseVo.setCourseNums(coursePackageStudents.size() * 2); + registerCourseVo.setCourseNums(counts); + } +// registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus()); registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus()); + courseVos.add(registerCourseVo); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } - if (ToolUtil.isNotEmpty(courseTypeId.getSearch())){ + if (ToolUtil.isNotEmpty(courseTypeId.getSearch())) { courseVos = courseVos.stream() .filter(person -> person.getCourseNameStore().contains(courseTypeId.getSearch())) .collect(Collectors.toList()); } - if (ToolUtil.isNotEmpty(courseTypeId.getCourseTypeId())){ + if (ToolUtil.isNotEmpty(courseTypeId.getCourseTypeId())) { courseVos = courseVos.stream() .filter(person -> Objects.equals(person.getCoursePackTypeId(), courseTypeId.getCourseTypeId())) .collect(Collectors.toList()); } - if (courseVos.size() > 0 ){ + if (courseVos.size() > 0) { courseVos = courseVos.stream() .sorted(Comparator.comparingInt(person -> person.getPayStatus() == 1 ? -1 : 1)) .collect(Collectors.toList()); @@ -422,46 +507,119 @@ return courseVos; } - @Override - public CourseDetailsResponse queryRegisteredCourseDetails(Long coursePayId, Integer appUserId) { - CourseDetailsResponse response = new CourseDetailsResponse(); - TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(coursePayId); + @Autowired + private ICoursePackagePaymentConfigService coursePackagePaymentConfigService; - if (null != tCoursePackagePayment){ - TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); - response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); + @Autowired + private TCoursePackageDiscountService coursePackageDiscountService; + + @Resource + StoreClient storeClient; + + @Autowired + private ICoursePackageOrderService coursePackageOrderService; + + @Autowired + private ICoursePackageOrderStudentService coursePackageOrderStudentService; + + @Autowired + private TCoursePackageService coursePackageService; + + @Autowired + private ALiSendSms aLiSendSms; + + + + + @Override + public CourseDetailsResponse queryRegisteredCourseDetails(Long coursePayId, Integer appUserId, String lon, String lat) { + 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()); + if (coursePackage.getType() == 2) { + response.setTime(new SimpleDateFormat("yyyy.MM.dd").format(coursePackage.getStartTime()) + "-" + new SimpleDateFormat("yyyy.MM.dd").format(coursePackage.getEndTime())); + } + 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()); + double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + response.setDistance(wgs84); + } + response.setCoursePackageId(coursePackageOrder.getCoursePackageId()); response.setCoverDrawing(coursePackage.getCoverDrawing()); + response.setDetailDrawing(coursePackage.getDetailDrawing()); response.setCoursePackageName(coursePackage.getName()); - response.setCoursePayId(tCoursePackagePayment.getId()); + response.setCoursePayId(coursePackageOrder.getId()); + response.setType(coursePackage.getType()); List<Integer> integers = StrUtils.dealStrToList(coursePackage.getClassWeeks()); - if (integers.size() > 0){ - StringBuilder courWeeks = new StringBuilder("每"); - for (Integer integer : integers) { - courWeeks.append(integer).append("、"); - } - if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == '、'){ - courWeeks.deleteCharAt(courWeeks.length() - 1); - } + String classWeeks = coursePackage.getClassWeeks(); + if (integers.size() > 0) { + StringBuilder courWeeks = new StringBuilder("每" + classWeeks); response.setWeeks(courWeeks.toString()); } - response.setCourseTimeFrame(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); + ArrayList<String> classTime = new ArrayList<>(); + String[] split4 = coursePackage.getClassStartTime().split(","); + String[] split3 = coursePackage.getClassEndTime().split(","); + if (ToolUtil.isNotEmpty(coursePackage.getClassStartTime())) { + for (int i = 0; i < split4.length; i++) { + String s = split4[i].substring(0, 5) + "-" + split3[i].substring(0, 5); + classTime.add(s); + } + } + + String joinedString = String.join("|", classTime); + + response.setCourseTimeFrame(joinedString); + + response.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); - Integer payType = tCoursePackagePayment.getPayType(); - BigDecimal cashPayment = tCoursePackagePayment.getCashPayment(); - double cashPaymentValue = 0.0; - if(cashPayment!=null){ - - cashPaymentValue = cashPayment.doubleValue(); + 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; + } } - Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin(); + BigDecimal cashPayment = coursePackageOrder.getCashPayment(); + double cashPaymentValue = 0.0; + if (cashPayment != null) { + + cashPaymentValue = cashPayment.doubleValue(); + } + Integer playPaiCoin = coursePackageOrder.getPlayPaiCoin(); TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() - .eq("coursePackageId",coursePackage.getId() ) - .eq("type",1) - .eq("auditStatus",2)); + .eq("coursePackageId", coursePackage.getId()) + .eq("type", 1) + .eq("auditStatus", 2)); ObjectMapper objectMapper = new ObjectMapper(); double discountMember = 0.0; - if(coursePackageDiscount!=null){ + if (coursePackageDiscount != null) { String content = coursePackageDiscount.getContent(); DiscountJsonDto discountJsonDto = null; try { @@ -474,38 +632,184 @@ switch (payType) { case 1: - case 2: + case 3: response.setAmount(cashPaymentValue); response.setVipAmount(discountMember); break; - case 3: - response.setWpGold(playPaiCoin); + case 2: + if (playPaiCoin!=null) { + response.setWpGold(playPaiCoin); + } break; } - response.setPayStatus(tCoursePackagePayment.getPayStatus()); + + response.setPayStatus(coursePackageOrder.getPayStatus()); + + + List<CoursePackagePaymentConfigVo> list = new ArrayList<>(); + List<CoursePackagePaymentConfig> list1 = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours")); + list1.forEach(coursePackagePaymentConfig -> { + CoursePackagePaymentConfigVo coursePackagePaymentConfigVo = new CoursePackagePaymentConfigVo(); + coursePackagePaymentConfigVo.setId(coursePackagePaymentConfig.getId()); + coursePackagePaymentConfigVo.setClassHours(coursePackagePaymentConfig.getClassHours()); + coursePackagePaymentConfigVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin()); + + if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getCashPayment()) && coursePackagePaymentConfig.getCashPayment() > 0 && ToolUtil.isNotEmpty(coursePackagePaymentConfig.getPlayPaiCoin()) && coursePackagePaymentConfig.getPlayPaiCoin() > 0) { + coursePackagePaymentConfigVo.setPayType(3); + } else if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getCashPayment()) && coursePackagePaymentConfig.getCashPayment() > 0) { + coursePackagePaymentConfigVo.setPayType(1); + } else if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getPlayPaiCoin()) && coursePackagePaymentConfig.getPlayPaiCoin() > 0) { + coursePackagePaymentConfigVo.setPayType(2); + } + +// coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType()); + //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低) + 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 coursePackageDiscount1 : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount1.getContent()).getDouble("discountMember"); + 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 coursePackageDiscount2 : 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(coursePackageDiscount2.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 cashPayment2 = 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(cashPayment2) > 0) { + paymentPrice = cashPayment2; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice); + + + TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 2).eq("auditStatus", 2)); + +// Double continuingMember = JSON.parseObject(discount.getContent()).getDouble("continuingUser"); +// Double vipcontinuingMember = JSON.parseObject(discount.getContent()).getDouble("continuingMember"); +// +// +// if (coursePackagePaymentConfigVo.getPaymentPrice() > continuingMember) { +// coursePackagePaymentConfigVo.setPaymentPrice(continuingMember); +// } +// if (coursePackagePaymentConfigVo.getVipPrice() > vipcontinuingMember) { +// coursePackagePaymentConfigVo.setVipPrice(vipcontinuingMember); +// } + + + if (coursePackagePaymentConfigVo.getPaymentPrice() < coursePackagePaymentConfigVo.getVipPrice()) { + coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); + coursePackagePaymentConfigVo.setVipPrice(null); + } + + } 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 coursePackageDiscount3 : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount3.getContent()).getDouble("discountMember"); + if (vipPrice.compareTo(num1) > 0) { + vipPrice = num1; + } + } + coursePackagePaymentConfigVo.setPaymentPrice(vipPrice); + coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); + } + list.add(coursePackagePaymentConfigVo); + }); + response.setList(list); } return response; } @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()); - if (request.getUseConpon() == 1){ - tCoursePackagePayment.setUserCouponId(Long.valueOf(request.getUseConpon())); + BigDecimal money = coursePackageOrder.getCashPayment(); + Integer wpGold = coursePackageOrder.getPlayPaiCoin(); + if (coursePackageOrder.getPayStatus() == 1) { + code = coursePackageOrder.getCode(); + coursePackageOrder.setPayType(request.getPayType()); + if (request.getUseConpon() == 1) { + coursePackageOrder.setUserCouponId(Long.valueOf(request.getUseConpon())); } - this.baseMapper.updateById(tCoursePackagePayment); - }else { -// 续课的订单 -// 查询是否续课优惠 - + coursePackageOrder.setAppUserId(null); + coursePackageOrderService.updateById(coursePackageOrder); + } else { CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", request.getLessonId()) .eq("classHours", request.getCourseHoursNum())); @@ -514,83 +818,80 @@ .eq("type", 2) .eq("auditStatus", 1) .eq("coursePackagePaymentConfigId", paymentConfig.getCoursePackageId())); - if (ToolUtil.isNotEmpty(coursePackageDiscount)){ + 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 { + } else { Double jsonObjectDouble = jsonObject.getDouble("num2"); 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()); - if (request.getUseConpon() == 1){ + 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()){ + switch (request.getPayType()) { case 1: - if (request.getUseConpon() == 1){ + if (request.getUseConpon() == 1) { Coupon coupon = client.queryCouponById(request.getConponId()); - if (coupon.getType() == 1){ + 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){ + if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0) { money = BigDecimal.valueOf(deductionAmount); } } - if (coupon.getType() == 2){ + 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 WeChatPayment(code, money); + } catch (Exception e) { return ResultUtil.runErr(); } case 2: - if (request.getUseConpon() == 1){ + if (request.getUseConpon() == 1) { Coupon coupon = client.queryCouponById(request.getConponId()); - if (coupon.getType() == 1){ + 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){ + if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0) { money = BigDecimal.valueOf(deductionAmount); } } - if (coupon.getType() == 2){ + 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); + return AlipayPayment(code, money); case 3: - PlaypaiGoldPayment(userIdFormRedis,code,wpGold); + PlaypaiGoldPayment(appUser, code, wpGold); break; default: break; @@ -600,26 +901,27 @@ 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){ + if (weixinpay.getCode() == 200) { + String finalCode = code; new Thread(new Runnable() { @Override public void run() { try { int num = 1; int wait = 0; - while (num <= 10){ + while (num <= 10) { int min = 5000; wait += (min * num); Thread.sleep(wait); - 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—转入退款, @@ -632,23 +934,32 @@ 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()); + if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); +// coursePackageOrderService.updateById(coursePackageOrder1); break; } - if("SUCCESS".equals(s)){ - coursePackagePayment.setPayStatus(2); - coursePackagePayment.setOrderNumber(transaction_id); - baseMapper1.updateById(coursePackagePayment); + if ("SUCCESS".equals(s)) { + 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)){ + if ("USERPAYING".equals(s)) { num++; } } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -656,57 +967,85 @@ } return weixinpay; } + private String smid = "2088330203191220";//平台支付宝商户号 - - - public ResultUtil AlipayPayment(String code, BigDecimal request){ + public ResultUtil AlipayPayment(String code, BigDecimal request) { 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){ + 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){ + 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()); + if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); +// coursePackageOrderService.updateById(coursePackageOrder1); break; } - if("TRADE_SUCCESS".equals(s)){ + 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.confirm(smid,code,tradeNo,request.toString()); + }else if (store.getOperatorId() == 0){ + payMoneyUtil.confirm(smid,code,tradeNo,request.toString()); + }else{ + String smid = storeClient.getSMIDByOperatorId(store.getOperatorId()); + payMoneyUtil.confirm(smid,code,tradeNo,request.toString()); + } break; } - if("WAIT_BUYER_PAY".equals(s)){ + if ("WAIT_BUYER_PAY".equals(s)) { num++; } } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -715,34 +1054,31 @@ return alipay; } - public ResultUtil PlaypaiGoldPayment(AppUser appUser,String code, Integer wpGold){ + 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("玩牌币不足!"); + .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); + appUser.setPlayPaiCoins(ToolUtil.isNotEmpty(appUser.getPlayPaiCoins()) ? appUser.getPlayPaiCoins() - wpGold : wpGold); appuClient.updateAppUser(appUser); return ResultUtil.success(); } - @Override - public List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId,Integer pageNum) { - - + public List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId, Integer pageNum) { List<RecordAppoint> recordVoList = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = this.baseMapper.selectList(new QueryWrapper<TCoursePackagePayment>() - .eq("studentId",stuId ) - .eq("appUserId",appUserId ) - .eq("payStatus",2 ) - .eq("status",1 ) + .eq("studentId", stuId) + .eq("appUserId", appUserId) + .eq("payStatus", 2) + .eq("status", 1) .orderByDesc("insertTime")); List<Integer> ids = new ArrayList<>(); @@ -751,18 +1087,9 @@ } 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 = 5; // 每页记录数 - Page<CoursePackageStudent> page = new Page<>(1, 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)); + if (tCoursePackagePayments.size() > 0) { + int pageSize = 10; // 每页记录数 + Page<CoursePackageStudent> page = new Page<>(pageNum, pageSize); IPage<CoursePackageStudent> coursePackageStudentPage = cpsMapper.selectPage(page, new QueryWrapper<CoursePackageStudent>() .in("coursePackageId", ids) .eq("studentId", stuId) @@ -771,107 +1098,113 @@ List<CoursePackageStudent> coursePackageStudent1 = coursePackageStudentPage.getRecords(); - if (ToolUtil.isNotEmpty(coursePackageStudent1) && coursePackageStudent1.size() > 0){ - TCoursePackage coursePackage = new TCoursePackage(); - Integer coursePackageId = -1; - for (CoursePackageStudent coursePackageStudent : coursePackageStudent1) { - RecordAppoint recordVo = new RecordAppoint(); - recordVo.setCoursePackageId(coursePackageStudent.getCoursePackageId()); + if (ToolUtil.isNotEmpty(coursePackageStudent1) && coursePackageStudent1.size() > 0) { + TCoursePackage coursePackage = new TCoursePackage(); + Integer coursePackageId = -1; + for (CoursePackageStudent coursePackageStudent : coursePackageStudent1) { + RecordAppoint recordVo = new RecordAppoint(); + recordVo.setCoursePackageId(coursePackageStudent.getCoursePackageId()); - if (!coursePackageStudent.getCoursePackageId().equals(coursePackageId)) { - coursePackage = tcpmapper.selectById(coursePackageStudent.getCoursePackageId()); - coursePackageId = coursePackageStudent.getCoursePackageId(); - } - - recordVo.setSid(Arrays.asList(coursePackage.getStoreId())); - List<Integer> rid = stoClient.querySiteId(coursePackage.getStoreId()); - recordVo.setRid(rid); - recordVo.setUserId(appUserId); - recordVo.setSiteId(coursePackage.getSiteId()); - List<Integer> ids1 = getIds(coursePackage.getSiteId()); - recordVo.setIds(ids1); - - recordVo.setCoursePackageName(coursePackage.getName()); - for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { - if (Objects.equals(coursePackageStudent.getCoursePackageId(), tCoursePackagePayment.getCoursePackageId())){ - recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); - - } - } - -// recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); - Date date = DateUtil.getDate(); - - - CoursePackageScheduling byId = coursePackageSchedulingService.getById(coursePackageStudent.getCoursePackageSchedulingId()); -// String classStartTime = coursePackage.getClassStartTime(); -// String classEndTime = coursePackage.getClassEndTime(); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String dateString1 = sdf.format(byId.getClassDate()); - String dateString2 = sdf.format(byId.getEndDate()); - - - 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()); - String classWeeks = coursePackage.getClassWeeks(); - String[] split = classWeeks.split(";"); - List<String> integerList = Arrays.asList(split); - String weekOfDate = DateTimeHelper.getWeekOfDate(new Date()); - if (integerList.contains(weekOfDate)){ - String dat = simpleDateFormat.format(date) +" "+ dateString2.substring(11); - - Date start = null; - try { - start = format.parse(dat); - } catch (ParseException e) { - throw new RuntimeException(e); - } - if (start.after(new Date())){ - recordVo.setStatus(1); - }else if(coursePackageStudent.getSignInOrNot()==2){ - recordVo.setStatus(5); - }else { - CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() - .eq("coursePackageId",coursePackageStudent.getCoursePackageId() )); - if (ToolUtil.isNotEmpty(cancelledClasses)){ - recordVo.setStatus(3); - // 消课 到课状态0 旷课 - if(coursePackageStudent.getSignInOrNot()==0){ - recordVo.setStatus(6); - } - - }else { - recordVo.setStatus(2); - } - } - }else { - recordVo.setStatus(1); - } - recordVoList.add(recordVo); + if (!coursePackageStudent.getCoursePackageId().equals(coursePackageId)) { + coursePackage = tcpmapper.selectById(coursePackageStudent.getCoursePackageId()); + coursePackageId = coursePackageStudent.getCoursePackageId(); } - }else { -// recordVo.setStatus(4); + recordVo.setSid(Arrays.asList(coursePackage.getStoreId())); + List<Integer> rid = stoClient.querySiteId(coursePackage.getStoreId()); + recordVo.setRid(rid); + recordVo.setUserId(appUserId); + recordVo.setSiteId(coursePackage.getSiteId()); + List<Integer> ids1 = getIds(coursePackage.getSiteId()); + recordVo.setIds(ids1); + + recordVo.setCoursePackageName(coursePackage.getName()); + for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { + if (Objects.equals(coursePackageStudent.getCoursePackageId(), tCoursePackagePayment.getCoursePackageId())) { + recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); + + } + } + + CoursePackageScheduling byId = coursePackageSchedulingService.getById(coursePackageStudent.getCoursePackageSchedulingId()); + //这里是过滤今天之后的数据 + if (byId == null) { + continue; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String dateString1 = sdf.format(byId.getClassDate()); + String dateString2 = sdf.format(byId.getEndDate()); + + + recordVo.setTimeFrame(dateString1 + "-" + dateString2.substring(11)); + Store store = stoClient.queryStoreById(coursePackage.getStoreId()); + recordVo.setStoreNameAddr(store.getName() + store.getAddress()); + recordVo.setCourseStuRecordId(coursePackageStudent.getId()); + String classWeeks = coursePackage.getClassWeeks(); + String[] split = classWeeks.split(";"); + List<String> integerList = Arrays.asList(split); + String weekOfDate = DateTimeHelper.getWeekOfDate(new Date()); + if (integerList.contains(weekOfDate)) { + String dat = simpleDateFormat.format(byId.getClassDate()) + " " + dateString1.substring(11); + + Date start = null; + try { + start = format.parse(dat); + } catch (ParseException e) { + throw new RuntimeException(e); + } + //已取消 + if (byId.getStatus() == 4) { + recordVo.setStatus(4); + } else if (coursePackageStudent.getSignInOrNot() == 2) { + //已请假 + recordVo.setStatus(5); + } else if (start.after(new Date())) { + //待上课 + recordVo.setStatus(1); + } + else { + CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() + .eq("coursePackageSchedulingId", byId.getId()).last("limit 1")); + if (ToolUtil.isNotEmpty(cancelledClasses)) { + recordVo.setStatus(3); + // 消课 到课状态0 旷课 + if (coursePackageStudent.getSignInOrNot() == 0) { + recordVo.setStatus(6); + } + + } else { + Date now = new Date(); + if (now.after(byId.getClassDate()) && now.before(byId.getEndDate())) { + recordVo.setStatus(2); + } else { + recordVo.setStatus(3); + + } + } + } + } else { + recordVo.setStatus(1); + } + recordVoList.add(recordVo); } + } else { +// recordVo.setStatus(4); } -// } + } return recordVoList; } - public List<Integer> getIds(Integer siteId) { + + public List<Integer> getIds(Integer siteId) { HttpRequest httpRequest = HttpRequest.get("https://try.daowepark.com/v7/user_api/general/get_space_area?space_id=" + siteId); HttpResponse execute = httpRequest.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); Object data = jsonObject.get("data"); JSONArray array = JSONArray.parseArray(data.toString()); - List<Integer> ids =new ArrayList<>(); + List<Integer> ids = new ArrayList<>(); for (Object o : array) { JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); Object id = jsonObject1.get("id"); @@ -881,26 +1214,41 @@ return ids; } + @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(); } @Override public List<BillingRequest> queryAmountDatas(Integer appUserId, String monthStart, String monthEnd) { - return this.baseMapper.billingDataRequestVo(appUserId,monthStart,monthEnd); + return this.baseMapper.billingDataRequestVo(appUserId, monthStart, monthEnd); } /** * 获取课包报名信息 + * * @param page * @param queryRegistrationRecord * @return @@ -908,28 +1256,44 @@ @Override public List<Map<String, Object>> queryRegistrationRecord(Page<Map<String, Object>> page, QueryRegistrationRecord queryRegistrationRecord) { Integer coursePackageId = queryRegistrationRecord.getCoursePackageId(); + TCoursePackage coursePackage = coursePackageService.getById(coursePackageId); String userName = queryRegistrationRecord.getUserName(); List<Integer> userIds = null; List<Integer> studentIds = null; - if(ToolUtil.isNotEmpty(userName)){ + if (ToolUtil.isNotEmpty(userName)) { List<AppUser> appUsers = appuClient.queryAppUserListByName(userName); - if(appUsers.size() > 0){ + if (appUsers.size() > 0) { userIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); } } String studentName = queryRegistrationRecord.getStudentName(); - if(ToolUtil.isNotEmpty(studentName)){ + if (ToolUtil.isNotEmpty(studentName)) { List<Student> students = studentClient.queryStudentListByName(studentName); - if(students.size() > 0){ + if (students.size() > 0) { studentIds = students.stream().map(Student::getId).collect(Collectors.toList()); } } - List<Map<String, Object>> list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds); + + List<Map<String, Object>> list = new ArrayList<>(); + + if (coursePackage.getType()==1){ + 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()); - Integer studentId = Integer.valueOf(map.get("studentId").toString()); + Integer studentId = 0; + if (coursePackage.getType()==1) { + studentId = Integer.valueOf(map.get("studentId").toString()); + }else { + studentId = Integer.valueOf(map.get("studentIds").toString().split(",")[0]); + } TAppUser appUser = appuClient.queryAppUser1(appUserId); map.put("userName", null != appUser ? appUser.getName() : ""); @@ -938,11 +1302,12 @@ 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); -// if (student != null && student.getName().equals("杨锴1")) { -// map.put("totalClassHours", "测试"); -// } - ; } return list; } @@ -950,6 +1315,7 @@ /** * 获取未预约排课学员列表 + * * @param page * @param queryWalkInStudentList * @return @@ -961,22 +1327,22 @@ String userName = queryWalkInStudentList.getUserName(); List<Integer> userIds = null; List<Integer> studentIds = null; - if(ToolUtil.isNotEmpty(userName)){ + if (ToolUtil.isNotEmpty(userName)) { List<AppUser> appUsers = appuClient.queryAppUserListByName(userName); - if(appUsers.size() > 0){ + if (appUsers.size() > 0) { userIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); } } String studentName = queryWalkInStudentList.getStudentName(); - if(ToolUtil.isNotEmpty(studentName)){ + if (ToolUtil.isNotEmpty(studentName)) { List<Student> students = studentClient.queryStudentListByName(studentName); - if(students.size() > 0){ + if (students.size() > 0) { studentIds = students.stream().map(Student::getId).collect(Collectors.toList()); } } List<Long> coursePackagePaymentId = null; List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", coursePackageSchedulingId).eq("reservationStatus", 1)); - if(coursePackageStudents.size() > 0){ + if (coursePackageStudents.size() > 0) { coursePackagePaymentId = coursePackageStudents.stream().map(CoursePackageStudent::getCoursePackagePaymentId).collect(Collectors.toList()); } @@ -1000,11 +1366,14 @@ @Override public List<PayCourseRes> getMyCourseList(Integer storeId, Integer appUserId) { // 找到购买的课包 - List<TCoursePackagePayment> tCoursePackagePayments = this.baseMapper.selectList(new LambdaQueryWrapper<TCoursePackagePayment>().eq(TCoursePackagePayment::getAppUserId, appUserId)); + List<CoursePackageOrderStudent> tCoursePackagePayments = coursePackageOrderStudentService.list(new LambdaQueryWrapper<CoursePackageOrderStudent>().eq(CoursePackageOrderStudent::getAppUserId, appUserId)); ArrayList<PayCourseRes> payCourseRes = new ArrayList<>(); - for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { + for (CoursePackageOrderStudent tCoursePackagePayment : tCoursePackagePayments) { TCoursePackage tCoursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); - if(tCoursePackage.getStoreId().equals(storeId)){ + if (tCoursePackage.getType() != 1) { + continue; + } + if (tCoursePackage.getStoreId().equals(storeId)) { PayCourseRes payCourseRes1 = new PayCourseRes(); payCourseRes1.setId(tCoursePackagePayment.getId()); payCourseRes1.setName(tCoursePackage.getName()); @@ -1017,7 +1386,7 @@ } @Override - public PayCourseInfoReq payCourseInfo(Integer courseId){ + public PayCourseInfoReq payCourseInfo(Integer courseId) { PayCourseInfoReq payCourseInfoReq = new PayCourseInfoReq(); TCoursePackage tCoursePackage = tcpmapper.selectById(courseId); payCourseInfoReq.setId(courseId); @@ -1037,27 +1406,27 @@ List<Integer> week = week(tCoursePackage.getClassWeeks()); // 今天周几 - int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1; + int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date()) - 1; SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd"); ArrayList<String> strings1 = new ArrayList<>(); for (Integer integer : week) { - if(integer<i){ + if (integer < i) { // 找下一周的时间 Calendar instance = Calendar.getInstance(); - instance.add(Calendar.DATE,7-(i-integer)); + instance.add(Calendar.DATE, 7 - (i - integer)); Date time = instance.getTime(); strings1.add(format.format(time)); - }else if(integer>i) { + } else if (integer > i) { Calendar instance = Calendar.getInstance(); - instance.add(Calendar.DATE,integer-i); + instance.add(Calendar.DATE, integer - i); Date time = instance.getTime(); strings1.add(format.format(time)); - }else { + } else { Calendar instance = Calendar.getInstance(); - instance.add(Calendar.DATE,7); + instance.add(Calendar.DATE, 7); Date time = instance.getTime(); strings1.add(format.format(time)); } @@ -1065,11 +1434,12 @@ payCourseInfoReq.setDay(strings1); return payCourseInfoReq; } - private static List<Integer> week(String week){ + + private static List<Integer> week(String week) { String[] split = week.split(";"); ArrayList<Integer> integers = new ArrayList<>(); for (String s : split) { - switch (s){ + switch (s) { case "周一": integers.add(1); break; @@ -1096,60 +1466,77 @@ return integers; } + @Autowired + private TCoursePackageService packageService; + + + @Autowired + private TCoursePackagePaymentService packagePaymentService; + @Autowired + private CoursePackageStudentService coursePackageStudentService; + + @Autowired + private CourseCounsumService courseCounsumService; + @Override - @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW) - public ResultUtil payCourse(PayCourseReq req,Integer userId){ + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + public ResultUtil payCourse(PayCourseReq req, Integer userId) throws ParseException { // 扣除 原来的课时数 // 添加购买课时 paytyoe为7 // 排课可期 判断课程时间段 添加排课表 添加上课记录表 // 找到原来的课包 扣课时 - TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(req.getOldCourseId()); - if(req.getNum()>tCoursePackagePayment.getLaveClassHours()){ + CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getById(req.getOldCourseId()); + if (req.getNum() > coursePackageOrderStudent.getLaveClassHours()) { return ResultUtil.error("当前课包课时数不足"); } - tCoursePackagePayment.setLaveClassHours(tCoursePackagePayment.getLaveClassHours()-req.getNum()); - this.baseMapper.updateHoursById(tCoursePackagePayment.getId(),-req.getNum()); + TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId()); + TCoursePackage coursePackage1 = coursePackageService.getById(req.getCourseId()); + //判断剩余课时是否已经全部进行排课,如果排课需要删除已经排好的记录 + List<CoursePackageScheduling> list1 = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>() + .eq("studentId", coursePackageOrderStudent.getStudentId()).eq("status", 1) + .eq("type", 1).orderByDesc("classDate")); + //已经排课但没有使用的课时数量 + int number = list1.size() * coursePackage.getNeedNum(); + Integer laveClassHours1 = coursePackageOrderStudent.getLaveClassHours(); + laveClassHours1 -= number; + //需要购买使用的课时数 + Integer num = req.getNum(); + //需要删除多余的排课记录 + if(num.compareTo(laveClassHours1) > 0){ + //课时数差额 + int number1 = num - laveClassHours1; + double o = number1 % coursePackage.getNeedNum(); + int l = 0; + if(0 != o){ + l = 1; + } + int n = Double.valueOf(number1 / coursePackage.getNeedNum()).intValue() + l; + for (int i = 0; i < n; i++) { + CoursePackageScheduling coursePackageScheduling = list1.get(i); + coursePackageSchedulingService.getBaseMapper().deleteById(coursePackageScheduling.getId()); - - TCoursePackage tCoursePackage = tcpmapper.selectById(req.getCourseId()); - // 添加课包 - TCoursePackagePayment tCoursePackagePayment1 = new TCoursePackagePayment(); - tCoursePackagePayment1.setAppUserId(userId); - Student student = studentClient.queryDefaultStudent(userId); - // student ID - Integer sId=null; - if(student!=null){ - tCoursePackagePayment1.setStudentId(student.getId()); - sId=student.getId(); + coursePackageStudentService.getBaseMapper().delete(new QueryWrapper<CoursePackageStudent>() + .eq("coursePackageSchedulingId", coursePackageScheduling.getId())); + } } - tCoursePackagePayment1.setCoursePackageId(tCoursePackage.getId()); - tCoursePackagePayment1.setPayType(7); - tCoursePackagePayment1.setClassHours(req.getNum()); - tCoursePackagePayment1.setOriginalPrice(0.0); - tCoursePackagePayment1.setTotalClassHours(req.getNum()); - tCoursePackagePayment1.setLaveClassHours(req.getNum()); - tCoursePackagePayment1.setAbsencesNumber(0); - tCoursePackagePayment1.setPayUserType(1); - tCoursePackagePayment1.setPayStatus(2); - tCoursePackagePayment1.setPayUserId(userId); - tCoursePackagePayment1.setStatus(1); - tCoursePackagePayment1.setState(1); - tCoursePackagePayment1.setInsertTime(new Date()); - this.baseMapper.insert(tCoursePackagePayment1); - // 找出课包时间段 - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - String classStartTime = tCoursePackage.getClassStartTime(); - String classEndTime = tCoursePackage.getClassEndTime(); - String[] split = classStartTime.split(","); - String[] split1 = classEndTime.split(","); + + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String classStartTime = coursePackage1.getClassStartTime(); + String classEndTime = coursePackage1.getClassEndTime(); + String[] split5 = classStartTime.split(","); + String[] split6 = classEndTime.split(","); List<String> time = req.getTime(); for (String s : time) { - for (int i = 0; i < split.length; i++) { + for (int i = 0; i < split5.length; i++) { CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling(); - coursePackageScheduling.setCoursePackageId(tCoursePackage.getId()); + coursePackageScheduling.setType(3); + coursePackageScheduling.setAppUserId(userId); + coursePackageScheduling.setStudentId(req.getStuId()); + coursePackageScheduling.setCoursePackageId(req.getCourseId()); try { - Date parse = format.parse(s + " " + split[i]); - Date parse1 = format.parse(s + " " + split1[i]); + Date parse = format.parse(s + " " + split5[i]); + Date parse1 = format.parse(s + " " + split6[i]); coursePackageScheduling.setClassDate(parse); coursePackageScheduling.setEndDate(parse1); coursePackageScheduling.setStatus(1); @@ -1157,9 +1544,9 @@ CoursePackageStudent student1 = new CoursePackageStudent(); student1.setAppUserId(userId); - student1.setStudentId(sId); - student1.setCoursePackageId(tCoursePackage.getId()); - student1.setCoursePackagePaymentId(tCoursePackagePayment1.getId()); + student1.setStudentId(req.getStuId()); + student1.setCoursePackageId(req.getCourseId()); + student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId()); student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); @@ -1173,19 +1560,27 @@ } } - - // 2.0 - TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); - tCourseInfoRecord.setUserId(userId); - tCourseInfoRecord.setCourseId(req.getCourseId()); - tCourseInfoRecord.setName("体验购课"); - tCourseInfoRecord.setNum(req.getNum()); - tCourseInfoRecord.setTime(new Date()); - tCourseInfoRecord.setType(2); - appuClient.addCourseInfoRecord(tCourseInfoRecord); + 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", ""); + } - if(tCoursePackagePayment.getLaveClassHours()<=3){ + CourseCounsum courseCounsum = new CourseCounsum(); + courseCounsum.setPaymentId(coursePackageOrderStudent.getId()); + courseCounsum.setChangeType(0); + courseCounsum.setNum(req.getNum()); + courseCounsum.setInsertTime(new Date()); + courseCounsum.setReason("体验购课"); + courseCounsum.setAppUserId(userId); + courseCounsumService.save(courseCounsum); + + + if (coursePackageOrderStudent.getLaveClassHours() <= 3) { Integer appUserId = userId; //调用推送 @@ -1194,9 +1589,9 @@ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); String s1 = appUserId + "_" + "Three"; //定时修改排课状态 - String s = internalRestTemplate.getForObject("http://mb-cloud-gateway/netty/sendMsgToClient?id="+s1, String.class); + String s = internalRestTemplate.getForObject("http://mb-cloud-gateway/netty/sendMsgToClient?id=" + s1, String.class); JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); - if(jsonObject1.getIntValue("code") != 200){ + if (jsonObject1.getIntValue("code") != 200) { System.err.println(jsonObject1.getString("msg")); } } @@ -1207,20 +1602,32 @@ @Override public void updateUseTime(Long id, Date date) { - this.baseMapper.updateUseTime(id,date); + this.baseMapper.updateUseTime(id, date); } @Override public List<Integer> getStudentIds(Long payId, Integer classId, Integer appId) { - return this.baseMapper.getStudentIds(payId,classId,appId); + return this.baseMapper.getStudentIds(payId, classId, appId); } @Override public boolean updateHoursById(TCoursePackagePayment byId, int i) { - return this.baseMapper.updateHoursById(byId.getId(),i); + return this.baseMapper.updateHoursById1(byId.getId(), i); } + public static Date[] generateDateArray(int numDays, Date date) { +// LocalDate tomorrow = LocalDate.now().plusDays(1); + LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1); + Date[] dates = new Date[numDays]; + + for (int i = 0; i < numDays; i++) { + LocalDate currentDate = tomorrow.plusDays(i); + dates[i] = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + return dates; + } } -- Gitblit v1.7.1