From f88cfa02e36752e4acad7adc4b045155e8e50f21 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 08 十二月 2023 09:16:29 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

---
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java |  461 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 340 insertions(+), 121 deletions(-)

diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
index 2e4c389..e148d1e 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1,19 +1,10 @@
 package com.dsh.course.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.DefaultAlipayClient;
-import com.alipay.api.domain.*;
-import com.alipay.api.request.AlipayTradeOrderSettleRequest;
-import com.alipay.api.request.AlipayTradeRoyaltyRelationBindRequest;
-import com.alipay.api.response.AlipayTradeOrderSettleResponse;
 import com.alipay.api.response.AlipayTradeQueryResponse;
-import com.alipay.api.response.AlipayTradeRoyaltyRelationBindResponse;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,7 +13,6 @@
 import com.dsh.course.feignclient.account.StudentClient;
 import com.dsh.course.feignclient.account.model.AppUser;
 import com.dsh.course.feignclient.account.model.Student;
-import com.dsh.course.feignclient.account.model.TCourseInfoRecord;
 import com.dsh.course.feignclient.activity.CouponClient;
 import com.dsh.course.feignclient.activity.UserCouponClient;
 import com.dsh.course.feignclient.activity.model.Coupon;
@@ -36,7 +26,6 @@
 import com.dsh.course.model.*;
 import com.dsh.course.service.*;
 import com.dsh.course.util.*;
-import io.vertx.core.json.Json;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -106,15 +95,6 @@
     @Autowired
     private ICoursePackageOrderStudentService coursePackageOrderStudentService;
 
-
-    private String aliAppid = "2021004105665036";//支付宝appid
-
-    private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
-
-    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
-
-    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
-
     @Autowired
     private ICoursePackageOrderService coursePackageOrderService;
 
@@ -122,6 +102,9 @@
     private TOrderService orderService;
     @Autowired
     private TCoursePackageService coursePackageService;
+
+    @Resource
+    private CoursePackageStudentMapper coursePackageStudentMapper;
 
 
     @Override
@@ -140,9 +123,9 @@
     @Override
     public List<CoursePackageListVo> queryCourseList(Integer uid, CoursePackageList coursePackageList) throws Exception {
         AppUser appUser = appUserClient.queryAppUser(uid);
-        Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat());
-        String provinceCode = geocode.get("provinceCode");
-        String cityCode = geocode.get("cityCode");
+//        Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat());
+//        String provinceCode = geocode.get("provinceCode");
+//        String cityCode = geocode.get("cityCode");
 //        QueryWrapper<TCoursePackage> wrapper = new QueryWrapper<TCoursePackage>().in("status", Arrays.asList(1, 2))
 //                .eq("auditStatus", 2).eq("state", 1).eq("provinceCode", provinceCode).eq("cityCode", cityCode);
 
@@ -598,7 +581,7 @@
      * @throws Exception
      */
     @Override
-    public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception {
+    public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat, Integer stuId) throws Exception {
         AppUser appUser = appUserClient.queryAppUser(uid);
         TCoursePackage coursePackage = this.getById(id);
         CoursePackageInfo coursePackageInfo = new CoursePackageInfo();
@@ -627,7 +610,6 @@
         String[] split = coursePackage.getClassWeeks().split(";");
         coursePackageInfo.setWeeks(Arrays.asList(split));
 
-        // 2.0
         String classStartTime = coursePackage.getClassStartTime();
         String classEndTime = coursePackage.getClassEndTime();
         ArrayList<String> classTime = new ArrayList<>();
@@ -663,7 +645,6 @@
                 coursePackagePaymentConfigVo.setPayType(2);
             }
 
-//                coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType());
             //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低)
 //                if(appUser.getIsVip() == 0){//非会员
             List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
@@ -802,8 +783,13 @@
         });
         coursePackageInfo.setList(list);
 
-        Student student = studentClient.queryDefaultStudent(uid);
         StudentVo studentVo = new StudentVo();
+        Student student = null;
+        if(null != stuId){
+            student = studentClient.queryStudentById(stuId);
+        }else{
+            student = studentClient.queryDefaultStudent(uid);
+        }
         if (null != student) {
             studentVo.setId(student.getId());
             studentVo.setPhone(student.getPhone());
@@ -827,11 +813,11 @@
     @Override
     public ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception {
         AppUser appUser = appUserClient.queryAppUser(uid);
-        CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null);
+        CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null, null);
         //校验是否已经报满
         Integer integer = coursePackagePaymentService.queryCountNumber(paymentCourseVo.getId());
         TCoursePackage course = coursePackageService.getById(paymentCourseVo.getId());
-        if (course.getType() != 3) {
+        if (course.getType() == 1) {
 
             if (integer + paymentCourseVo.getStudentIds().split(";").length > course.getMaxSubscribeNumber()) {
                 return ResultUtil.error("报名失败,已达最大报名人数");
@@ -1001,6 +987,9 @@
                                     coursePackageOrder1.setOrderNumber(transaction_id);
                                     coursePackageOrder1.setAppUserId(null);
                                     coursePackageOrderService.updateById(coursePackageOrder1);
+                                    //修改课时有效期
+
+
                                     addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig);
                                     break;
                                 }
@@ -1034,24 +1023,29 @@
         String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
         //生成支付订单
         CoursePackageOrder coursePackageOrder = new CoursePackageOrder();
-        coursePackageOrder.setCode(code);
-        coursePackageOrder.setAppUserId(uid);
-        coursePackageOrder.setStudentIds(paymentCourseVo.getStudentIds());
-        coursePackageOrder.setCoursePackageId(paymentCourseVo.getId());
-        coursePackageOrder.setPayType(paymentCourseVo.getPayType());
-        coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours());
-        coursePackageOrder.setOriginalPrice(paymentCourseVo.getPrice());
-        coursePackageOrder.setUserCouponId(paymentCourseVo.getCouponId());
-        coursePackageOrder.setCashPayment(new BigDecimal(paymentPrice));
-        coursePackageOrder.setPayUserType(1);
-        coursePackageOrder.setPayStatus(1);
-        coursePackageOrder.setPayUserId(uid);
-        coursePackageOrder.setState(1);
-        coursePackageOrder.setInsertTime(new Date());
-        coursePackageOrderService.save(coursePackageOrder);
+        if (paymentCourseVo.getOrderId()==null) {
+            coursePackageOrder.setCode(code);
+            coursePackageOrder.setAppUserId(uid);
+            coursePackageOrder.setStudentIds(paymentCourseVo.getStudentIds());
+            coursePackageOrder.setCoursePackageId(paymentCourseVo.getId());
+            coursePackageOrder.setPayType(paymentCourseVo.getPayType());
+            coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours());
+            coursePackageOrder.setOriginalPrice(paymentCourseVo.getPrice());
+            coursePackageOrder.setUserCouponId(paymentCourseVo.getCouponId());
+            coursePackageOrder.setCashPayment(new BigDecimal(paymentPrice));
+            coursePackageOrder.setPayUserType(1);
+            coursePackageOrder.setPayStatus(1);
+            coursePackageOrder.setPayUserId(uid);
+            coursePackageOrder.setState(1);
+            coursePackageOrder.setInsertTime(new Date());
+            coursePackageOrderService.save(coursePackageOrder);
+        }else {
+            code = coursePackageOrderService.getById(paymentCourseVo.getOrderId()).getCode();
+        }
 
         ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
         if (alipay.getCode() == 200) {
+            String finalCode = code;
             new Thread(new Runnable() {
                 @Override
                 public void run() {
@@ -1065,11 +1059,11 @@
                             wait += (min * num);
                             Thread.sleep(wait);
                             CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>()
-                                    .eq("code", code).eq("state", 1));
+                                    .eq("code", finalCode).eq("state", 1));
                             if (coursePackageOrder1.getPayStatus() == 2) {
                                 break;
                             }
-                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
+                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode);
                             if (null != alipayTradeQueryResponse) {
                                 /**
                                  * WAIT_BUYER_PAY(交易创建,等待买家付款)、
@@ -1193,8 +1187,10 @@
         String[] split = coursePackageOrder.getStudentIds().split(";");
         for (String id : split) {
             if(coursePackage.getType() == 1){
+                //增加学员课时有效期
+                Student student = studentClient.queryStudentById(Integer.valueOf(id));
                 CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", id)
-                        .eq("coursePackageId", coursePackageOrder.getCoursePackageId()).eq("status", 1).eq("state", 1));
+                        .eq("coursePackageId", coursePackageOrder.getCoursePackageId()).eq("state", 1));
                 if (null == coursePackageOrderStudent) {
                     coursePackageOrderStudent = new CoursePackageOrderStudent();
                     coursePackageOrderStudent.setAppUserId(coursePackageOrder.getAppUserId());
@@ -1214,34 +1210,92 @@
                     calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                     coursePackageOrderStudent.setUseTime(calendar.getTime());
                     coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
+                    //更新学员课时有效期
+                    if(null == student.getValidity()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }else if(calendar.getTimeInMillis() > student.getValidity().getTime()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }
+                    studentClient.frozen(student);
 
                     //开始排课
-                    addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
+                    addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent, student.getValidity());
+                    //课时记录
+                    CourseCounsum courseCounsum = new CourseCounsum();
+                    courseCounsum.setPaymentId(coursePackageOrderStudent.getId());
+                    courseCounsum.setChangeType(1);
+                    courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
+                    courseCounsum.setInsertTime(new Date());
+                    courseCounsum.setReason("购买课包");
+                    courseCounsumService.save(courseCounsum);
+                    //账单记录
+                    if(coursePackageOrder.getPayType() != 3){
+                        CourseCounsum courseCounsum1 = new CourseCounsum();
+                        courseCounsum1.setPaymentId(coursePackageOrder.getId());
+                        courseCounsum1.setChangeType(3);
+                        courseCounsum1.setInsertTime(new Date());
+                        courseCounsum1.setReason("报名课程;"+coursePackageOrder.getCashPayment());
+                        courseCounsum1.setAppUserId(coursePackageOrder.getAppUserId());
+                        courseCounsumService.save(courseCounsum1);
+                    }
+
+
                 } else {
                     Date useTime = coursePackageOrderStudent.getUseTime();
                     coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + coursePackagePaymentConfig.getClassHours());
                     coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + coursePackagePaymentConfig.getClassHours());
+                    coursePackageOrderStudent.setStatus(1);
+                    coursePackageOrderStudent.setInsertTime(new Date());
                     Integer validDays = coursePackage.getValidDays();
                     Calendar calendar = Calendar.getInstance();
                     calendar.setTime(useTime.compareTo(new Date()) < 0 ? new Date() : useTime);
                     calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                     coursePackageOrderStudent.setUseTime(calendar.getTime());
                     coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
+                    //更新学员课时有效期
+                    if(null == student.getValidity()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }else if(calendar.getTimeInMillis() > student.getValidity().getTime()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }
+                    studentClient.frozen(student);
+
                     //中间断课,没有连续续费的情况需要重新排课
                     if (useTime.compareTo(new Date()) < 0) {
-                        addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
+                        addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent, student.getValidity());
                     }
+
+                    //课时记录
+                    CourseCounsum courseCounsum = new CourseCounsum();
+                    courseCounsum.setPaymentId(coursePackageOrderStudent.getId());
+                    courseCounsum.setChangeType(1);
+                    courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
+                    courseCounsum.setInsertTime(new Date());
+                    courseCounsum.setReason("续课");
+                    courseCounsumService.save(courseCounsum);
+                    //账单记录
+                    if(coursePackageOrder.getPayType() != 3){
+                        CourseCounsum courseCounsum1 = new CourseCounsum();
+                        courseCounsum1.setPaymentId(coursePackageOrder.getId());
+                        courseCounsum1.setChangeType(3);
+                        courseCounsum1.setInsertTime(new Date());
+                        courseCounsum1.setReason("续课;"+coursePackageOrder.getCashPayment());
+                        courseCounsum1.setAppUserId(coursePackageOrder.getAppUserId());
+                        courseCounsumService.save(courseCounsum1);
+                    }
+
+
                 }
-                CourseCounsum courseCounsum = new CourseCounsum();
-                courseCounsum.setPaymentId(coursePackageOrderStudent.getId());
-                courseCounsum.setChangeType(1);
-                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
-                courseCounsum.setInsertTime(new Date());
-                courseCounsum.setReason("购买课包");
-                courseCounsumService.save(courseCounsum);
+
+
+
             }
             if(coursePackage.getType() == 2){
-                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), null);
+                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), null, null);
             }
         }
     }
@@ -1254,7 +1308,7 @@
      * @param sId
      * @throws ParseException
      */
-    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent) {
+    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent, Date validity) {
         try {
             //1常规 2假期 3体验
             if (tCoursePackage.getType() == 1) {
@@ -1266,7 +1320,6 @@
                 String[] split1 = tCoursePackage.getClassEndTime().split(",");
                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                 SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-
 
                 //剩余课时
                 Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
@@ -1282,7 +1335,6 @@
                 int day_week = calendar.get(Calendar.DAY_OF_WEEK);
                 day_week = day_week - 1 == 0 ? 7 : day_week - 1;
                 int num = 8 - day_week + 7;
-                Date useTime = coursePackageOrderStudent.getUseTime();
 
                 for (int i = 0; i < num; i++) {
                     Date time = calendar.getTime();
@@ -1295,11 +1347,26 @@
                         continue;
                     }
 
-
                     //大于有效期不进行排课
-                    if (calendar.getTimeInMillis() >= useTime.getTime()) {
+                    if (calendar.getTimeInMillis() >= validity.getTime()) {
                         break;
                     }
+
+                    //检查是否有体验购课
+                    int count = coursePackageSchedulingService.count(new QueryWrapper<CoursePackageScheduling>()
+                            .eq("type", 3)
+                            .eq("appUserId", userId)
+                            .eq("studentId", sId)
+                            .eq("coursePackageId", tCoursePackage.getId())
+                            .eq("status", 1)
+                            .eq("DATE_FORMAT(classDate, '%Y-%m-%d')", format.format(time))
+                    );
+                    //有体验购课,不进行排课
+                    if(count != 0){
+                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                        continue;
+                    }
+
                     for (int j = 0; j < split.length; j++) {
                         //剩余数量不足以排课
                         if (laveClassHours.compareTo(codeTime) < 0) {
@@ -1383,7 +1450,7 @@
                         student1.setAppUserId(userId);
                         student1.setStudentId(sId);
                         student1.setCoursePackageId(tCoursePackage.getId());
-                        student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+                        student1.setCoursePackagePaymentId(null);
                         student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                         student1.setSignInOrNot(1);
                         student1.setReservationStatus(1);
@@ -1398,6 +1465,155 @@
             e.printStackTrace();
         }
     }
+
+
+    /**
+     * 课时有效期更新后-更新历史排课数据
+     * @param student
+     */
+    public void addOldPackageStudent(Student student){
+        Integer studentId = student.getId();
+        Date validity = student.getValidity();
+        List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+                .eq("studentId", studentId)
+                .eq("status", 1)
+                .gt("laveClassHours", 0)
+                .eq("state", 1)
+        );
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
+            TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
+            CoursePackageScheduling one = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>()
+                    .eq("studentId", studentId)
+                    .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+                    .eq("status", 1)
+                    .orderByDesc("classDate")
+                    .last(" limit 0, 1")
+            );
+
+            Calendar calendar = Calendar.getInstance();
+            if(null == one){
+                calendar.setTime(new Date());
+                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+            }else{
+                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+                Integer codeTime = coursePackage.getCodeTime();
+                String classStartTime = coursePackage.getClassStartTime();
+                String classEndTime = coursePackage.getClassEndTime();
+                String format = sdf1.format(one.getClassDate());
+                String time = format.substring(format.indexOf(" ") + 1);
+                String[] split = classStartTime.split(",");
+                String[] split1 = classEndTime.split(",");
+                int n = Arrays.asList(split).indexOf(time);
+                if(n != split.length - 1){
+                    calendar.setTime(one.getClassDate());
+                    //单独处理当天的剩余时间段
+                    n++;
+                    for (int i = n; i < split.length; i++) {
+                        //剩余数量不足以排课
+                        if (laveClassHours.compareTo(codeTime) < 0) {
+                            break;
+                        }
+                        laveClassHours -= codeTime;
+                        CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+                        packageScheduling.setType(coursePackage.getType());
+                        packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                        packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+                        packageScheduling.setCoursePackageId(coursePackage.getId());
+                        try {
+                            Date parse = sdf.parse(format.format(time) + " " + split[i]);
+                            Date parse1 = sdf.parse(format.format(time) + " " + split1[i]);
+                            packageScheduling.setClassDate(parse);
+                            packageScheduling.setEndDate(parse1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                        packageScheduling.setStatus(1);
+                        coursePackageSchedulingService.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());
+                        coursePackageStudentMapper.insert(student1);
+                    }
+
+                }else{
+                    calendar.setTime(one.getClassDate());
+                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                    calendar.set(Calendar.HOUR_OF_DAY, 0);
+                    calendar.set(Calendar.MINUTE, 0);
+                    calendar.set(Calendar.SECOND, 0);
+                    int day_week1 = calendar.get(Calendar.DAY_OF_WEEK);
+                    day_week1 = day_week1 - 1 == 0 ? 7 : day_week1 - 1;
+                    int num = 8 - day_week1 + 7;
+
+                    //上课星期
+                    String classWeeks = coursePackage.getClassWeeks();
+                    List<Integer> week = week(classWeeks);
+
+                    for (int i = 0; i < num; i++) {
+                        Date time1 = calendar.getTime();
+
+                        //判断当天是否在排课星期内
+                        int day = calendar.get(Calendar.DAY_OF_WEEK);
+                        day = day - 1 == 0 ? 7 : day - 1;
+                        if (!week.contains(day)) {
+                            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                            continue;
+                        }
+
+                        //大于有效期不进行排课
+                        if (calendar.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(coursePackage.getType());
+                            packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                            packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+                            packageScheduling.setCoursePackageId(coursePackage.getId());
+                            try {
+                                Date parse = sdf.parse(sdf1.format(time1) + " " + split[j]);
+                                Date parse1 = sdf.parse(sdf1.format(time1) + " " + split1[j]);
+                                packageScheduling.setClassDate(parse);
+                                packageScheduling.setEndDate(parse1);
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                            packageScheduling.setStatus(1);
+                            coursePackageSchedulingService.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());
+                            coursePackageStudentMapper.insert(student1);
+                        }
+                        //增加日期,用于判断
+                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                    }
+                }
+            }
+        }
+    }
+
 
 
     public static Date[] generateDateArray1(Date startDate, Date endDate) {
@@ -1506,9 +1722,8 @@
     @Override
     public Integer addCoursePackage(TCoursePackage coursePackage) {
         try {
-
+            coursePackage.setInsertTime(new Date());
             this.baseMapper.insert(coursePackage);
-
             if (coursePackage.getClassStartTime() != null && coursePackage.getClassStartTime() != "") {
                 //生成排课数据
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -1587,6 +1802,8 @@
     }
 
 
+    @Autowired
+    private ICoursePackageOrderStudentService orderStudentService;
     /**
      * 修改数据
      *
@@ -1603,65 +1820,67 @@
                 coursePackageSchedulingQueryWrapper.notIn("id", collect);
             }
             coursePackageSchedulingService.remove(coursePackageSchedulingQueryWrapper);
+            int coursePackageId = orderStudentService.count(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId", coursePackage.getId()));
+            if (coursePackageId>0) {
+                this.baseMapper.updateById(coursePackage);
 
-            this.baseMapper.updateById(coursePackage);
-
-            //生成排课数据
-            Date date = null;
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()).last(" and classDate > now() order by classDate desc limit 0, 1"));
-            if (null != coursePackageScheduling) {
-                date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00");
-            } else {
-                date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
-            }
-            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
-            String classStartTime = coursePackage.getClassStartTime();
-            String[] split = classStartTime.split(":");
-            String classEndTime = coursePackage.getClassEndTime();
-            String[] split1 = classEndTime.split(":");
-            Calendar s = Calendar.getInstance();
-            s.setTime(date);
-            s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
-
-            Calendar e = Calendar.getInstance();
-            e.setTime(date);
-            if (null != coursePackageScheduling) {
-                long time = sdf1.parse(sdf.format(new Date()) + " 00:00:00").getTime();
-                int d = Long.valueOf(14L - ((s.getTimeInMillis() - time) / 86400000L)).intValue();
-                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + d);
-            } else {
-                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 14);
-            }
-            long timeInMillis = e.getTimeInMillis();
-
-            while (true) {
-                int w = s.get(Calendar.DAY_OF_WEEK);
-                WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
-                if (list.contains(weekEnum.getChineseName())) {
-                    Calendar classDate = Calendar.getInstance();
-                    classDate.setTime(s.getTime());
-                    classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
-                    classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
-                    classDate.set(Calendar.SECOND, 0);
-
-                    Calendar endDate = Calendar.getInstance();
-                    endDate.setTime(s.getTime());
-                    endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
-                    endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
-                    endDate.set(Calendar.SECOND, 0);
-
-                    CoursePackageScheduling coursePackageScheduling1 = new CoursePackageScheduling();
-                    coursePackageScheduling1.setCoursePackageId(coursePackage.getId());
-                    coursePackageScheduling1.setClassDate(classDate.getTime());
-                    coursePackageScheduling1.setEndDate(endDate.getTime());
-                    coursePackageScheduling1.setStatus(1);
-                    coursePackageSchedulingService.save(coursePackageScheduling1);
+                //生成排课数据
+                Date date = null;
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()).last(" and classDate > now() order by classDate desc limit 0, 1"));
+                if (null != coursePackageScheduling) {
+                    date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00");
+                } else {
+                    date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
                 }
+                List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
+                String classStartTime = coursePackage.getClassStartTime();
+                String[] split = classStartTime.split(":");
+                String classEndTime = coursePackage.getClassEndTime();
+                String[] split1 = classEndTime.split(":");
+                Calendar s = Calendar.getInstance();
+                s.setTime(date);
                 s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
-                if (s.getTimeInMillis() > timeInMillis) {
-                    break;
+
+                Calendar e = Calendar.getInstance();
+                e.setTime(date);
+                if (null != coursePackageScheduling) {
+                    long time = sdf1.parse(sdf.format(new Date()) + " 00:00:00").getTime();
+                    int d = Long.valueOf(14L - ((s.getTimeInMillis() - time) / 86400000L)).intValue();
+                    e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + d);
+                } else {
+                    e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 14);
+                }
+                long timeInMillis = e.getTimeInMillis();
+
+                while (true) {
+                    int w = s.get(Calendar.DAY_OF_WEEK);
+                    WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
+                    if (list.contains(weekEnum.getChineseName())) {
+                        Calendar classDate = Calendar.getInstance();
+                        classDate.setTime(s.getTime());
+                        classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+                        classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
+                        classDate.set(Calendar.SECOND, 0);
+
+                        Calendar endDate = Calendar.getInstance();
+                        endDate.setTime(s.getTime());
+                        endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
+                        endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
+                        endDate.set(Calendar.SECOND, 0);
+
+                        CoursePackageScheduling coursePackageScheduling1 = new CoursePackageScheduling();
+                        coursePackageScheduling1.setCoursePackageId(coursePackage.getId());
+                        coursePackageScheduling1.setClassDate(classDate.getTime());
+                        coursePackageScheduling1.setEndDate(endDate.getTime());
+                        coursePackageScheduling1.setStatus(1);
+                        coursePackageSchedulingService.save(coursePackageScheduling1);
+                    }
+                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
+                    if (s.getTimeInMillis() > timeInMillis) {
+                        break;
+                    }
                 }
             }
         } catch (Exception e) {

--
Gitblit v1.7.1