From 48323fce3b4b8013755421aa1d1feb9a73cddde9 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 03 一月 2024 11:42:17 +0800 Subject: [PATCH] 合并代码 --- cloud-server-other/src/main/java/com/dsh/other/model/TStoreOtherVo.java | 27 ++ cloud-server-account/src/main/java/com/dsh/account/util/GDMapGeocodingUtil.java | 3 cloud-server-course/pom.xml | 10 + cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 8 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 24 ++ cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 14 - cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 136 ++++++++++++ cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java | 6 cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java | 11 + cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java | 13 - cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java | 39 ++- cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java | 77 ++++++- cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java | 128 ++++++++++++ cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 14 - cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java | 40 +++ cloud-server-other/src/main/java/com/dsh/other/util/GDMapGeocodingUtil.java | 4 cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java | 4 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 9 cloud-server-other/src/main/java/com/dsh/other/controller/UserController.java | 29 ++ cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java | 3 20 files changed, 509 insertions(+), 90 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java index b421fad..3c38b0e 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java @@ -117,11 +117,7 @@ @ApiImplicitParam(value = "搜索", name = "search", required = true, dataType = "string"), }) public ResultUtil<List<StoreDetailList>> getStoreListCon(Integer space, String cityCode, String latitude, String longitude, String search) { -// try { return ResultUtil.success(tsService.queryStoreList(space, cityCode, longitude, latitude, search)); -// }catch (Exception e){ -// return ResultUtil.runErr(); -// } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java index c5a11cb..f0f8c64 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java @@ -714,30 +714,16 @@ citycodeResp.setLatitude(longitude); List<StoreDetailList> queryStoreList = storeClient.getQueryStoreList(citycodeResp); if (queryStoreList.size() > 0) { - if (ToolUtil.isEmpty(space) || space ==1) { queryStoreList = queryStoreList.stream().sorted(Comparator.comparing(o -> o.getStoreDistance())).collect(Collectors.toList()); - - } else { queryStoreList = queryStoreList.stream() .sorted(Comparator.comparing(StoreDetailList::getStoreDistance).reversed()) .collect(Collectors.toList()); } - - -// if (ToolUtil.isEmpty(space) || space == 2) { -// queryStoreList = queryStoreList.stream() -// .sorted(Comparator.comparing(StoreDetailList::getStoreDistance).reversed()) -// .collect(Collectors.toList()); -// -// } else { -// queryStoreList = queryStoreList.stream().sorted(Comparator.comparing(o -> o.getStoreDistance())).collect(Collectors.toList()); -// } if (ToolUtil.isNotEmpty(search)) { queryStoreList = queryStoreList.stream().filter(o -> o.getStoreName().contains(search)).collect(Collectors.toList()); } - } return queryStoreList; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/GDMapGeocodingUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/GDMapGeocodingUtil.java index 6a83b16..bb40cb1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/util/GDMapGeocodingUtil.java +++ b/cloud-server-account/src/main/java/com/dsh/account/util/GDMapGeocodingUtil.java @@ -121,7 +121,8 @@ String city = addressComponent.getString("city"); String district = addressComponent.getString("district"); if("[]".equals(code)){ - throw new Exception("经纬度转行政区划代码失败[" + lon + "," + lan + "]"); + System.err.println("经纬度转行政区划代码失败[" + lon + "," + lan + "]"); + return null; } map.put("province", province); map.put("provinceCode", code.substring(0, 2) + "0000"); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java index 4c33f44..7709f2d 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java @@ -297,12 +297,11 @@ List<IntegralCommodity> commodity = new ArrayList<>(); Map<String, String> geocode = gdMapGeocodingUtil.geocode(location.getLon(), location.getLat()); + if(null == geocode){ + return new ArrayList<>(); + } String provinceCode = geocode.get("provinceCode"); String cityCode = geocode.get("cityCode"); - - -// if(null != geocode) { - List<Store> stores = storeClient.queryStoreList(new QueryStoreList(provinceCode, cityCode)); Store s = null; Double d = 0D; @@ -314,14 +313,7 @@ d = wgs84; } } -// } - -// List<PointsMerchandiseCity> cityCode1 = pmdsCityService.list(new QueryWrapper<PointsMerchandiseCity>().eq("cityCode", cityCode)); List<Integer> cIds = new ArrayList<>(); -// for (PointsMerchandiseCity pointsMerchandiseCity : cityCode1) { -// cIds.add(pointsMerchandiseCity.getPointsMerchandiseId()); -// } - List<PointsMerchandiseStore> storesids = pointsMerchandiseStoreService.list(new QueryWrapper<PointsMerchandiseStore>().eq("storeId", s.getId())); for (PointsMerchandiseStore storesid : storesids) { cIds.add(storesid.getPointsMerchandiseId()); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java index ed0fd9d..38aea5c 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java @@ -4,7 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.entity.Coupon; import com.dsh.activity.entity.CouponStore; +import com.dsh.activity.entity.TStudent; import com.dsh.activity.entity.UserCoupon; +import com.dsh.activity.feignclient.account.AppUserClient; +import com.dsh.activity.feignclient.account.StudentClient; +import com.dsh.activity.feignclient.account.model.AppUser; import com.dsh.activity.feignclient.model.CouponStuAvailableVo; import com.dsh.activity.feignclient.model.QueryUserCouponByIdAndUserId; import com.dsh.activity.model.CouponListVo; @@ -21,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -43,9 +48,16 @@ @Autowired private UserCouponService userCouponService; - @Autowired private CouponStoreService csServie; + + @Resource + private AppUserClient appUserClient; + + @Resource + private StudentClient studentClient; + + private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); @@ -202,6 +214,28 @@ String couponIds = sendCouponReq.getCouponIds(); for (String s : couponIds.split(",")) { Coupon coupon = couponService.getById(s); + Integer userId = sendCouponReq.getUserId(); + if(coupon.getAuditStatus() != 2){ + continue; + } + if(coupon.getStatus() != 2){ + continue; + } + if(coupon.getState() != 1){ + continue; + } + if(coupon.getUserPopulation() == 2){ + AppUser appUser = appUserClient.queryAppUser(userId); + if(appUser.getIsVip() == 0){ + continue; + } + } + if(coupon.getUserPopulation() == 3){ + List<TStudent> tStudents = studentClient.queryStudentList(userId); + if(tStudents.size() == 0){ + continue; + } + } if (new Date().before(coupon.getStartTime()) && new Date().after(coupon.getEndTime())) { continue; } @@ -212,6 +246,10 @@ if (coupon.getQuantityIssued() <= counts) { continue; } + counts = userCouponService.count(new QueryWrapper<UserCoupon>().eq("couponId", s).eq("userId", userId)); + if (coupon.getPickUpQuantity() <= counts) { + continue; + } UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(Integer.valueOf(s)); diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java index f424503..a53fcb2 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java @@ -113,7 +113,8 @@ String city = addressComponent.getString("city"); String district = addressComponent.getString("district"); if("[]".equals(code)){ - throw new Exception("经纬度转行政区划代码失败[" + lon + "," + lan + "]"); + System.err.println("经纬度转行政区划代码失败[" + lon + "," + lan + "]"); + return null; } map.put("province", province); map.put("provinceCode", code.substring(0, 2) + "0000"); diff --git a/cloud-server-course/pom.xml b/cloud-server-course/pom.xml index 46b3c21..518fb93 100644 --- a/cloud-server-course/pom.xml +++ b/cloud-server-course/pom.xml @@ -137,6 +137,16 @@ <version>2.4</version> <classifier>jdk15</classifier> </dependency> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>aliyun-java-sdk-core</artifactId> + <version>4.4.3</version> + </dependency> + <dependency> + <groupId>com.aliyun.oss</groupId> + <artifactId>aliyun-sdk-oss</artifactId> + <version>3.8.0</version> + </dependency> </dependencies> <build> diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java index 9c0a149..74c3169 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java @@ -55,6 +55,9 @@ @Autowired private TokenUtil tokenUtil; + @Autowired + private ICoursePackageSchedulingService coursePackageSchedulingService; + /** * 根据门店ids获取课包ids 根据课包ids 获取购课记录的用户ids @@ -334,7 +337,12 @@ @ResponseBody @PostMapping("/coursePackage/updateCoursePackageById") public void updateCoursePackageById(@RequestBody TCoursePackage coursePackage) { + TCoursePackage coursePackage1 = coursePackageService.getById(coursePackage.getId()); coursePackageService.updateCoursePackageById(coursePackage); + //暂停课程后的开课操作(需要检查是否继续排课) + if(coursePackage1.getStatus() == 4 && coursePackage.getStatus() == 1){ + coursePackageSchedulingService.startAndScheduleClasses(coursePackage.getId()); + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index 81c1af4..ba122dc 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -138,6 +138,12 @@ @Autowired private ICoursePackageOrderStudentService coursePackageOrderStudentService; + @Autowired + private ALiSendSms aLiSendSms; + + @Resource + private AppUserClient appuClient; + /** * 查询学员入学时间 根据第一次购买课包的时间 @@ -1315,6 +1321,12 @@ TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId()); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() - paymentDeductionClassHour.getClassHour()); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + if(3 >= laveClassHours){ + AppUser appUser = appuClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); + //发送短信提醒 + aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); + } //判断剩余课时是否已经全部进行排课,如果排课需要删除已经排好的记录 List<CoursePackageScheduling> list1 = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>() .eq("studentId", coursePackageOrderStudent.getStudentId()).eq("status", 1) @@ -2383,6 +2395,13 @@ } coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()-coursePackage.getNeedNum()); orderStudentService.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(); courseCounsum.setPaymentId(coursePackageOrderStudent.getId()); courseCounsum.setChangeType(0); @@ -2600,6 +2619,7 @@ .eq(CoursePackageScheduling::getCoursePackageId, tCoursePackage.getId()) .like(CoursePackageScheduling::getClassDate, courseDetailReq.getTime()) ); + if (list3.isEmpty()) { detailsListVo.setType(2); objects.add(detailsListVo); @@ -2679,6 +2699,10 @@ objects.add(detailsListVo); } + //课程暂停 + if(tCoursePackage.getState() == 4){ + detailsListVo.setType(4); + } } map.put("data", objects); diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java index 4e064b4..1e18d25 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java @@ -10,11 +10,13 @@ import com.dsh.course.entity.dto.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.StudentClient; +import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.mapper.CoursePackageSchedulingMapper; import com.dsh.course.mapper.CoursePackageStudentMapper; import com.dsh.course.model.dto.ToClassDto; import com.dsh.course.service.*; +import com.dsh.course.util.ALiSendSms; import com.dsh.course.util.ResultUtil; import com.dsh.course.util.UUIDUtil; import io.swagger.annotations.Api; @@ -178,6 +180,9 @@ @Resource private AppUserClient appUserClient; + + @Autowired + private ALiSendSms aLiSendSms; @Autowired @@ -828,6 +833,12 @@ coursePackageOrderStudent.setAppUserId(null); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()-toHoliDto.getClassNum()); orderStudentService.updateById(coursePackageOrderStudent); + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + if(3 >= laveClassHours){ + AppUser appUser = appUserClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); + //发送短信提醒 + aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); + } //上课星期 String classWeeks = coursePackage1.getClassWeeks(); diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java index ff40d01..4d363cc 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java @@ -53,4 +53,10 @@ * 定时任务过期清零课时及排课数据 */ void taskOverdueClearing(); + + + /** + * 课程开课后检查排课 + */ + void startAndScheduleClasses(Integer coursePackageId); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java index f3f89c2..2bd5d02 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java @@ -162,21 +162,19 @@ @Override public void taskCoursePackageScheduling() { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List<TCoursePackage> list2 = coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("status", 2).eq("auditStatus", 2) + .eq("state", 1).eq("type", 1)); + List<Integer> collect = list2.stream().map(TCoursePackage::getId).collect(Collectors.toList()); + if(collect.size() == 0){ + return; + } List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() .eq("status", 1) .eq("state", 1) .gt("useTime", "now()") .gt("laveClassHours", 0) + .in("coursePackageId", collect) ); - - List<CoursePackageOrder> list1 = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>() - .eq("payStatus", 2) - .eq("status", 1) - .eq("state", 1) - .gt("laveClassHours", 0) - .orderByAsc("insertTime") - ); - for (CoursePackageOrderStudent coursePackageOrderStudent : list) { CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>() .eq("appUserId", coursePackageOrderStudent.getAppUserId()) @@ -615,8 +613,128 @@ coursePackageOrderStudentService.updateBatchById(list); } } + } + /** + * 课程开课后检查排课 + */ + @Override + public void startAndScheduleClasses(Integer coursePackageId) { + List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .eq("status", 1) + .eq("state", 1) + .gt("useTime", "now()") + .gt("laveClassHours", 0) + .eq("coursePackageId", coursePackageId) + ); + for (CoursePackageOrderStudent coursePackageOrderStudent : list) { + CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>() + .eq("appUserId", coursePackageOrderStudent.getAppUserId()) + .eq("studentId", coursePackageOrderStudent.getStudentId()) + .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()) + .eq("status", 1) + .orderByDesc("classDate") + .last(" limit 0, 1") + ); + //当前时间小于最后一次排课时间则交由定时任务排课 + if(null != coursePackageScheduling && System.currentTimeMillis() <= coursePackageScheduling.getClassDate().getTime()){ + continue; + } + + //当前时间大于最后一次排课时间,表明已经断开了定时任务的排课逻辑,需要从第二天手动排课。后续的排课还是让定时任务排课 + Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId()); + Date validity = student.getValidity(); + TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId()); + //上课星期 + String classWeeks = coursePackage.getClassWeeks(); + List<Integer> week = week(classWeeks); + //新排课的开始日期 + Calendar start = Calendar.getInstance(); + start.setTime(new Date()); + start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); + //需要排课的天数 + int day_week = start.get(Calendar.DAY_OF_WEEK); + day_week = day_week - 1 == 0 ? 7 : day_week - 1; + Integer num = 8 - day_week + 7; + + String classStartTime = coursePackage.getClassStartTime(); + String classEndTime = coursePackage.getClassEndTime(); + String[] split = classStartTime.split(","); + String[] split1 = classEndTime.split(","); + //有效期 + Date useTime = coursePackageOrderStudent.getUseTime(); + //剩余课时(需要扣除已排课但是还未上课的数据) + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + int count = this.count(new QueryWrapper<CoursePackageScheduling>() + .eq("appUserId", coursePackageOrderStudent.getAppUserId()) + .eq("studentId", coursePackageOrderStudent.getStudentId()) + .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()) + .eq("status", 1) + .eq("type", 1) + ); + Integer codeTime = coursePackage.getCodeTime(); + laveClassHours -= count; + //剩余数量不足以排课 + if (laveClassHours.compareTo(codeTime) < 0) { + break; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //生成一周的排课数据 + for (int i = 0; i < num; i++) { + String s = sdf.format(start.getTime()); + + //判断当天是否在排课星期内 + int day = start.get(Calendar.DAY_OF_WEEK); + day = day - 1 == 0 ? 7 : day - 1; + if (!week.contains(day)) { + start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); + continue; + } + //大于有效期不进行排课 + if (start.getTimeInMillis() >= validity.getTime()) { + break; + } + for (int j = 0; j < split.length; j++) { + //剩余数量不足以排课 + if (laveClassHours.compareTo(codeTime) < 0) { + break; + } + //减少剩余课时数量 + laveClassHours -= codeTime; + //开始组装排课数据 + CoursePackageScheduling packageScheduling = new CoursePackageScheduling(); + packageScheduling.setType(1); + packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId()); + packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId()); + packageScheduling.setCoursePackageId(coursePackage.getId()); + try { + Date parse = format.parse(s + " " + split[j]); + Date parse1 = format.parse(s + " " + split1[j]); + packageScheduling.setClassDate(parse); + packageScheduling.setEndDate(parse1); + packageScheduling.setStatus(1); + this.save(packageScheduling); + + CoursePackageStudent student1 = new CoursePackageStudent(); + student1.setAppUserId(coursePackageOrderStudent.getAppUserId()); + student1.setStudentId(coursePackageOrderStudent.getStudentId()); + student1.setCoursePackageId(coursePackage.getId()); + student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId()); + student1.setCoursePackageSchedulingId(packageScheduling.getId()); + student1.setSignInOrNot(1); + student1.setReservationStatus(1); + student1.setInsertTime(new Date()); + student1.setType(1); + coursePackageStudentMapper.insert(student1); + } catch (Exception e) { + e.printStackTrace(); + } + } + start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); + } + } } } 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 dbd2952..d8fc6ed 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 @@ -510,6 +510,9 @@ @Autowired private TCoursePackageService coursePackageService; + @Autowired + private ALiSendSms aLiSendSms; + @@ -1527,6 +1530,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(); diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java b/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java new file mode 100644 index 0000000..a9023a9 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java @@ -0,0 +1,128 @@ +package com.dsh.course.util; + + +import com.aliyuncs.CommonRequest; +import com.aliyuncs.CommonResponse; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; +import com.google.gson.Gson; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 阿里云短信工具类 + */ +@Component +public class ALiSendSms { + + // 设置鉴权参数,初始化客户端 + private DefaultProfile profile = DefaultProfile.getProfile( + "cn-hangzhou",// 地域ID + "LTAI5tSWQMMn9HNU9Zatoe1T",// 您的AccessKey ID + "kSOsRakIMPbvTlgXU19pYfbwmBXBA4");// 您的AccessKey Secret + private IAcsClient client = new DefaultAcsClient(profile); + + private static void log_print(String functionName, Object result) { + Gson gson = new Gson(); + System.out.println("-------------------------------" + functionName + "-------------------------------"); + System.out.println(gson.toJson(result)); + } + + /** + * 添加短信模板 + */ + public String addSmsTemplate() throws ClientException { + CommonRequest addSmsTemplateRequest = new CommonRequest(); + addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com"); + addSmsTemplateRequest.setSysAction("AddSmsTemplate"); + addSmsTemplateRequest.setSysVersion("2017-05-25"); + // 短信类型。0:验证码;1:短信通知;2:推广短信;3:国际/港澳台消息 + addSmsTemplateRequest.putQueryParameter("TemplateType", "0"); + // 模板名称,长度为1~30个字符 + addSmsTemplateRequest.putQueryParameter("TemplateName", "测试短信模板"); + // 模板内容,长度为1~500个字符 + addSmsTemplateRequest.putQueryParameter("TemplateContent", "您正在申请手机注册,验证码为:${code},5分钟内有效!"); + // 短信模板申请说明 + addSmsTemplateRequest.putQueryParameter("Remark", "测试"); + CommonResponse addSmsTemplateResponse = client.getCommonResponse(addSmsTemplateRequest); + String data = addSmsTemplateResponse.getData(); + // 消除返回文本中的反转义字符 + String sData = data.replaceAll("'\'", ""); + log_print("addSmsTemplate", sData); + Gson gson = new Gson(); + // 将字符串转换为Map类型,取TemplateCode字段值 + Map map = gson.fromJson(sData, Map.class); + Object templateCode = map.get("TemplateCode"); + return templateCode.toString(); + } + + /** + * 发送短信 + */ + public String sendSms(String phone, String templateCode, String json) { + try { + CommonRequest request = new CommonRequest(); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + // 接收短信的手机号码 + request.putQueryParameter("PhoneNumbers", phone); + // 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。 + request.putQueryParameter("SignName", "玩湃"); + // 短信模板ID + request.putQueryParameter("TemplateCode", templateCode); + // 短信模板变量对应的实际值,JSON格式。 + request.putQueryParameter("TemplateParam", json); + CommonResponse commonResponse = client.getCommonResponse(request); + String data = commonResponse.getData(); + String sData = data.replaceAll("'\'", ""); + log_print("sendSms", sData); + return sData; + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + + /** + * 查询发送详情 + */ + private void querySendDetails(String bizId) throws ClientException { + CommonRequest request = new CommonRequest(); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("QuerySendDetails"); + // 接收短信的手机号码 + request.putQueryParameter("PhoneNumber", "156xxxxxxxx"); + // 短信发送日期,支持查询最近30天的记录。格式为yyyyMMdd,例如20191010。 + request.putQueryParameter("SendDate", "20191010"); + // 分页记录数量 + request.putQueryParameter("PageSize", "10"); + // 分页当前页码 + request.putQueryParameter("CurrentPage", "1"); + // 发送回执ID,即发送流水号。 + request.putQueryParameter("BizId", bizId); + CommonResponse response = client.getCommonResponse(request); + log_print("querySendDetails", response.getData()); + } + +// public static void main(String[] args) { +// ALiSendSms sendSmsDemo = new ALiSendSms(); +// try { +// // 创建短信模板 +// String templateCode = sendSmsDemo.addSmsTemplate(); +// // 使用刚创建的短信模板发送短信 +// String sData = sendSmsDemo.sendSms("156xxxxxxxx", templateCode, "{\"code\":\"8888\"}"); +// Gson gson = new Gson(); +// Map map = gson.fromJson(sData, Map.class); +// String bizId = map.get("BizId").toString(); +// // 根据短信发送流水号查询短信发送情况 +// sendSmsDemo.querySendDetails(bizId); +// } catch (ClientException e) { +// e.printStackTrace(); +// } +// } +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java index df35d12..3d31715 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java @@ -10,10 +10,8 @@ import com.dsh.other.feignclient.account.AppUserClient; import com.dsh.other.feignclient.account.model.AppUser; import com.dsh.other.model.QueryMySiteVo; -import com.dsh.other.service.ISiteLockService; -import com.dsh.other.service.TGameConfigService; -import com.dsh.other.service.TGameRecordService; -import com.dsh.other.service.TGameService; +import com.dsh.other.model.User; +import com.dsh.other.service.*; import com.dsh.other.util.*; import com.dsh.other.util.httpClinet.HttpResult; import io.swagger.annotations.ApiImplicitParam; @@ -48,7 +46,7 @@ @Autowired private TokenUtil tokenUtil; - @Autowired + @Resource private AppUserClient appUserClient; @Autowired @@ -56,6 +54,12 @@ @Resource private CourseRecordClient courseRecordClient; + + @Autowired + private IUserService userService; + + @Autowired + private ISiteBookingService siteBookingService; @ResponseBody @@ -110,9 +114,7 @@ List<TGame> list = gameService.list(new LambdaQueryWrapper<TGame>().eq(TGame::getSiteId, siteId).eq(TGame::getStoreId, storeId).eq(TGame::getState, 0)); if (list.size() > 0) { Integer id = list.get(0).getId(); -// tGameConfigs = gameConfigService.list(new LambdaQueryWrapper<TGameConfig>().eq(TGameConfig::getOtherId, id)); tGameConfigs = gameConfigService.listJs(id); - } List<TGameConfig> filteredList = tGameConfigs.stream() .filter(gameConfig -> !gameConfig.getImg().isEmpty()) @@ -123,6 +125,48 @@ return ResultUtil.runErr(); } } + + + @ResponseBody + @PostMapping("/gameStartupCheck") + @ApiOperation(value = "扫码启动游戏前的校验(0=不通过,1=通过)", tags = {"用户—游戏"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "三方游戏id", name = "gameId", dataType = "int", required = true), + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + }) + public ResultUtil<Integer> gameStartupCheck(Integer gameId){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if (null == uid) { + return ResultUtil.tokenErr(); + } + //判断当前用户是否是员工 + AppUser appUser1 = appUserClient.queryAppUser(uid); + User one = userService.getOne(new QueryWrapper<User>().eq("phone", appUser1.getPhone()).eq("status", 1)); + if (null != one) { + return ResultUtil.success(1); + } + //普通用户校验当前时间是否在预约时间段内 + TGame game = gameService.getById(gameId); + Integer siteId = game.getSiteId(); + SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>() + .eq("state", 1) + .in("status", Arrays.asList(1, 2)) + .eq("appUserId", uid) + .eq("siteId", siteId) + .last(" and now() between startTime and endTime") + ); + return ResultUtil.success(null == siteBooking ? 0 : 1); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + + + + + @ResponseBody @@ -142,6 +186,13 @@ if (null == uid) { return ResultUtil.tokenErr(); } + //判断当前用户是否是员工 + AppUser appUser1 = appUserClient.queryAppUser(uid); + User one = userService.getOne(new QueryWrapper<User>().eq("phone", appUser1.getPhone()).eq("status", 1)); + if (null != one) { + Integer integer = startGame(uid, gameId, spaceId, sutuId); + return ResultUtil.success(); + } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); TGameConfig config = gameConfigService.getById(configId); @@ -152,6 +203,7 @@ tGameRecord.setNumber(code); tGameRecord.setTime(new Date()); gameRecordService.save(tGameRecord); + if (type == 1) { ResultUtil weixinpay = payMoneyUtil.weixinpay("游戏支付", "", code, config.getCash().toString(), "/base/course/weChatPaymentCourseCallback", "APP", ""); if (weixinpay.getCode() == 200) { @@ -211,10 +263,7 @@ } return weixinpay; } else if (type == 2) { -// Integer gameId, Integer configId,Integer type,Integer sutuId,Integer spaceId; - - String params = uid + "_" + gameId + "_" + spaceId + "_" + sutuId+"_"+code+"_"+configId; - + String params = uid + "_" + gameId + "_" + spaceId + "_" + sutuId + "_" + code + "_" + configId; ResultUtil alipay = payMoneyUtil.alipay("游戏支付", "游戏支付", params, code, config.getCash().toString(), "/base/site/gameCallback"); if (alipay.getCode() == 200) { new Thread(new Runnable() { @@ -240,9 +289,6 @@ * TRADE_SUCCESS(交易支付成功)、 * TRADE_FINISHED(交易结束,不可退款) */ -// Map<String, String> data1 = resultUtil.getData(); -// String s = data1.get("tradeStatus"); -// String tradeNo = data1.get("tradeNo"); String tradeNo = resultUtil.getTradeNo(); String s = resultUtil.getTradeStatus(); if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { @@ -255,7 +301,6 @@ coursePackagePayment.setOrderNo(tradeNo); CourseCounsum courseCounsum = new CourseCounsum(); -// courseCounsum.setPaymentId(paymentId); courseCounsum.setChangeType(3); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("智慧球场;" + config.getCash()); @@ -316,8 +361,6 @@ e.printStackTrace(); return ResultUtil.runErr(); } - - } diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java index 71470b8..59e44a1 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java @@ -396,14 +396,6 @@ String code = map.get("passback_params"); String trade_no = map.get("trade_no"); -// SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>().eq("orderNo", code).eq("state", 1)); -// if(siteBooking.getStatus() == 0){ -// siteBooking.setPayTime(new Date()); -// siteBooking.setStatus(1); -// siteBooking.setPayOrderNo(trade_no); -// siteBookingService.updateById(siteBooking); -// } - String[] s = code.split("_"); Integer i = startGame(Integer.valueOf(s[0]), Integer.valueOf(s[1]), Integer.valueOf(s[2]), Integer.valueOf(s[3])); List<TGameRecord> list = gameRecordService.list(new QueryWrapper<TGameRecord>().eq("number", s[4]).eq("payType", 2)); @@ -415,18 +407,13 @@ coursePackagePayment.setOrderNo(trade_no); CourseCounsum courseCounsum = new CourseCounsum(); -// courseCounsum.setPaymentId(paymentId); courseCounsum.setChangeType(3); courseCounsum.setInsertTime(new Date()); courseCounsum.setReason("智慧球场;" + config.getCash()); courseCounsum.setAppUserId(Integer.valueOf(s[0])); courseRecordClient.save(courseCounsum); - } gameRecordService.updateBatchById(list); - - - System.err.println("===========游戏回调游戏回调=========" + i); PrintWriter out = response.getWriter(); diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java index a5649bd..38e3a64 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java @@ -12,14 +12,17 @@ import com.dsh.other.util.GeodesyUtil; import com.dsh.other.util.ResultUtil; import com.dsh.other.util.ToolUtil; +import com.sun.javafx.binding.StringFormatter; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; @@ -202,37 +205,29 @@ if (citycodeResp.getCityCode() == null) { Map<String, String> geocode = gdMapGeocodingUtil.geocode(citycodeResp.getLongitude(), citycodeResp.getLatitude()); - String provinceCode = geocode.get("provinceCode"); - String cityCode = geocode.get("cityCode"); - citycodeResp.setCityCode(cityCode); + if(null != geocode){ + String cityCode = geocode.get("cityCode"); + citycodeResp.setCityCode(cityCode); + } } List<Store> list = storeService.list(new QueryWrapper<Store>() .eq("state", 1) .eq("cityCode", citycodeResp.getCityCode())); if (list.size() > 0) { -// if (ToolUtil.isEmpty(citycodeResp.getLongitude()) && ToolUtil.isEmpty(citycodeResp.getLatitude())){ -// return detailLists; -// } for (Store store : list) { String current = citycodeResp.getLongitude() + "," + citycodeResp.getLatitude(); String result = store.getLon() + "," + store.getLat(); - String distanceTOKilometer = gdMapGeocodingUtil.getDistanceTOKilometer(current, result); -// long l = Long.parseLong(distanceTOKilometer); -//// 取5公里范围内的门店 -// if ( l > 5){ -// continue; -// } + Map<String, Double> distance = GeodesyUtil.getDistance(current, result); StoreDetailList detailList = new StoreDetailList(); detailList.setStoreId(store.getId()); detailList.setStoreImg(store.getCoverDrawing()); detailList.setStoreName(store.getName()); detailList.setStoreAddress(store.getAddress()); detailList.setStorePhone(store.getPhone()); -// detailList.setStoreDistance(l); detailList.setStoreTime(store.getStartTime() + "-" + store.getEndTime()); detailList.setStoreInfo(store.getIntroduce()); - detailList.setStoreDistance(Double.valueOf(distanceTOKilometer)); + detailList.setStoreDistance(null != distance ? Double.valueOf(String.format("%.2f", distance.get("WGS84") / 1000)) : 0D); detailLists.add(detailList); } } @@ -422,7 +417,7 @@ @ApiImplicitParams({ @ApiImplicitParam(value = "门店id", name = "id", dataType = "int", required = true), }) - public ResultUtil<List<TStoreOtherConfigTrue>> queryIndexSet(Integer id) { + public ResultUtil<List<TStoreOtherVo>> queryIndexSet(Integer id) { try { List<TStoreOtherConfigTrue> tStoreOtherConfigTrues = new ArrayList<>(); @@ -430,14 +425,20 @@ if (list.size() > 0) { tStoreOtherConfigTrues = tStoreOtherConfigTrueService.list(new LambdaQueryWrapper<TStoreOtherConfigTrue>().in(TStoreOtherConfigTrue::getPid, list.stream().map(TStoreOther::getId).collect(Collectors.toList())).eq(TStoreOtherConfigTrue::getState, 1)); } - for (TStoreOtherConfigTrue tStoreOtherConfigTrue : tStoreOtherConfigTrues) { - for (TStoreOther tStoreOther : list) { + List<TStoreOtherVo> list1 = new ArrayList<>(); + for (TStoreOther tStoreOther : list) { + TStoreOtherVo storeOtherVo = new TStoreOtherVo(); + BeanUtils.copyProperties(tStoreOther, storeOtherVo); + List<TStoreOtherConfigTrue> lists = new ArrayList<>(); + for (TStoreOtherConfigTrue tStoreOtherConfigTrue : tStoreOtherConfigTrues) { if (tStoreOtherConfigTrue.getPid() == tStoreOther.getId()) { - tStoreOtherConfigTrue.setSort(tStoreOther.getSort()); + lists.add(tStoreOtherConfigTrue); } } + storeOtherVo.setList(lists); + list1.add(storeOtherVo); } - return ResultUtil.success(tStoreOtherConfigTrues); + return ResultUtil.success(list1); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/UserController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/UserController.java new file mode 100644 index 0000000..fa013de --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/UserController.java @@ -0,0 +1,29 @@ +package com.dsh.other.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.dsh.other.model.User; +import com.dsh.other.service.IUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author zhibing.pu + * @Date 2023/12/14 16:25 + */ +@RestController +@RequestMapping("") +public class UserController { + + @Autowired + private IUserService userService; + + + + @PostMapping("/user/getUserByPhone") + public User getUserByPhone(@RequestBody String phone){ + return userService.getOne(new QueryWrapper<User>().eq("phone", phone).eq("status", 1)); + } +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/TStoreOtherVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/TStoreOtherVo.java new file mode 100644 index 0000000..a6515c9 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/model/TStoreOtherVo.java @@ -0,0 +1,27 @@ +package com.dsh.other.model; + +import com.dsh.other.entity.TStoreOtherConfigTrue; +import lombok.Data; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2023/12/15 18:32 + */ +@Data +public class TStoreOtherVo { + private Integer id; + + private String name; + + private Integer storeId; + + private Integer sort; + /** + * 1开启 2关闭 + */ + private Integer state; + + private List<TStoreOtherConfigTrue> list; +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/GDMapGeocodingUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/GDMapGeocodingUtil.java index 400f97e..3611668 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/util/GDMapGeocodingUtil.java +++ b/cloud-server-other/src/main/java/com/dsh/other/util/GDMapGeocodingUtil.java @@ -121,6 +121,10 @@ String province = addressComponent.getString("province"); String city = addressComponent.getString("city"); String district = addressComponent.getString("district"); + if("[]".equals(code)){ + System.err.println("经纬度转行政区划代码失败[" + lon + "," + lan + "]"); + return null; + } map.put("province", province); map.put("provinceCode", code.substring(0, 2) + "0000"); map.put("city", city); -- Gitblit v1.7.1