From f6ba3e15355e22767e69f8fc14ae22523f8db8dc Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期三, 22 十一月 2023 19:33:58 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

---
 cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java                               |    1 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java       |    6 
 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml                         |    5 
 cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java         |    2 
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java                        |    1 
 cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java          |    3 
 cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java         |    7 +
 cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java                                   |    9 
 cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java                |    2 
 cloud-server-other/src/main/resources/mapper/SiteMapper.xml                                           |    1 
 cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java                               |    2 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java          |  124 +++++++++++++-------
 cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java              |    1 
 cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml                       |    2 
 cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java       |    3 
 cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java             |   12 ++
 cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml                              |   11 +
 cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java           |    5 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java |   40 ++++++
 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java   |   18 ++
 cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java             |   20 +++
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java                      |    8 +
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java   |   52 +++++++-
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java                     |    4 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java  |   14 +-
 cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java              |    2 
 26 files changed, 271 insertions(+), 84 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
index 13bff14..9ef0f9b 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -360,6 +360,10 @@
             Double bim = weight/squareHeight;
 
             TStudent tStudent = new TStudent();
+
+
+
+
             tStudent.setId(stu.getStuId());
             tStudent.setBirthday(format.parse(stu.getBirthday()));
             tStudent.setHeadImg(stu.getHeadImg());
@@ -370,6 +374,14 @@
             tStudent.setName(stu.getName());
             tStudent.setIdCard(stu.getIdCard());
             tStudent.setBmi(bim);
+
+            if(ToolUtil.isNotEmpty(tStudent.getName()) && ToolUtil.isNotEmpty(tStudent.getIdCard())){
+                Boolean aBoolean = JuHeUtil.idcardAuthentication(tStudent.getIdCard(), tStudent.getName());
+                if(!aBoolean){
+                    return ResultUtil.error("身份证和姓名不匹配");
+                }
+            }
+
           return  ResultUtil.success(istuService.updateById(tStudent));
 
 //            return ResultUtil.success(istuService.commitEditStudentInfo(stu,userIdFormRedis));
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 1a48496..2f09f2a 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
@@ -119,7 +119,7 @@
     })
     public ResultUtil<List<StoreDetailList>> getStoreListCon(Integer space,String cityCode,String latitude,String longitude,String search){
 //        try {
-            return ResultUtil.success(tsService.queryStoreList(space,cityCode,"104.05349525280955","30.588087670753833",search));
+            return ResultUtil.success(tsService.queryStoreList(space,cityCode,longitude,latitude,search));
 //        }catch (Exception e){
 //            return ResultUtil.runErr();
 //        }
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 74ff933..7df8685 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
@@ -178,8 +178,28 @@
             return null;
         }
     }
+
+    @ResponseBody
+    @PostMapping("/userCoupon/queryUserCouponById1")
+    public UserCoupon queryUserCouponById1(@RequestBody Long id){
+        try {
+            UserCoupon userCoupon = userCouponService.getOne(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getId,id));
+            return userCoupon;
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
     @Autowired
     private ICouponService couponService;
+
+    @PostMapping("/userCoupon/edit")
+    public void edit(@RequestBody UserCoupon userCoupon) {
+        userCoupon.setUserId(null);
+        userCouponService.updateById(userCoupon);
+
+    }
+
     @PostMapping("/userCoupon/sendUserCoupon")
     public void sendUserCoupon(@RequestBody SendCouponReq sendCouponReq){
         try {
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java
index 6d9629e..c6b09b9 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java
@@ -159,6 +159,7 @@
     @TableField("cityManagerId")
     private Integer cityManagerId;
 
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java b/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
index 3c14dba..7ec615f 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
@@ -41,5 +41,5 @@
 
     Integer counts(@Param("id")Long id);
 
-    void deleteTenMinutes();
+    void deleteTenMinutes(@Param("pays") List<Long> pays);
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
index ccf0e10..e8a2393 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -31,6 +31,7 @@
 import com.dsh.competition.service.IPaymentCompetitionService;
 import com.dsh.competition.service.UserCompetitionService;
 import com.dsh.competition.util.*;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -227,6 +228,7 @@
         AppUser appUser = appUserClient.queryAppUser(uid);
         String[] split = paymentCompetitionVo.getIds().split(";");
         Competition competition = this.getById(paymentCompetitionVo.getId());
+
         int competitionId = userCompetitionService.count(new QueryWrapper<UserCompetition>().eq("competitionId", paymentCompetitionVo.getId()));
         if ((competitionId+split.length)>competition.getApplicantsNumber()){
             return ResultUtil.error("报名人数超过最大限制");
@@ -557,11 +559,25 @@
     /**
      * 定时任务修改赛事状态
      */
+
     @Override
     public void taskSetStatus() {
         this.baseMapper.taskSetStatusStart();
         this.baseMapper.taskSetStatusEnd();
-        this.baseMapper.deleteTenMinutes();
+
+        Date currentTime = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentTime);
+        calendar.add(Calendar.MINUTE, -10);
+        Date tenMinutesAgo = calendar.getTime();
+        List<PaymentCompetition> payStatus = paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>().eq("payStatus", 1).le("insertTime", tenMinutesAgo));
+        List<Long> pays = new ArrayList<>();
+        for (PaymentCompetition status : payStatus) {
+            pays.add(status.getId());
+        }
+        if (!pays.isEmpty()) {
+            this.baseMapper.deleteTenMinutes(pays);
+        }
     }
 
     @Override
diff --git a/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml b/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
index 0ec4bbc..bca16db 100644
--- a/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
+++ b/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
@@ -3,9 +3,12 @@
 <mapper namespace="com.dsh.competition.mapper.CompetitionMapper">
 
     <delete id="deleteTenMinutes">
-        delete from t_payment_competition
-        WHERE payStatus = 1
-        AND DATE_ADD(insertTime, INTERVAL 10 MINUTE) &lt;= NOW()
+        delete from t_user_competition
+
+            where paymentCompetitionId in
+        <foreach collection="pays" item="pay" separator="," open="(" close=")">
+            #{pay}
+        </foreach>
     </delete>
 
 
@@ -41,7 +44,7 @@
         FROM
         t_competition a
         WHERE
-        a.auditStatus = 2
+        a.auditStatus = 2 and a.status != 4
         AND a.state = 1
             <if test="null != cityCode and '' != cityCode">
                 and a.cityCode = #{cityCode}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
index aca0e77..74fc79f 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -175,7 +175,7 @@
             @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false),
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil<CoursePackageInfo> queryCourseInfo(Integer id, String lon, String lat){
+    public ResultUtil<CoursePackageInfo> queryCourseInfo(Integer id, String lon, String lat,Long payId){
         try {
             Integer uid = tokenUtil.getUserIdFormRedis();
             if(null == uid){
@@ -198,7 +198,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil paymentCourse(PaymentCourseVo paymentCourseVo){
+    public synchronized ResultUtil paymentCourse(PaymentCourseVo paymentCourseVo){
         try {
             Integer uid = tokenUtil.getUserIdFormRedis();
             if(null == uid){
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 9e47a70..1c6fbef 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
@@ -1074,9 +1074,11 @@
     @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"})
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "经度", name = "lon", dataType = "string", required = false),
+            @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false),
             @ApiImplicitParam(name = "coursePayId" ,value = "课包记录id",dataType = "long"),
     })
-    public ResultUtil<CourseDetailsResponse> getRegisteredData(Long coursePayId){
+    public ResultUtil<CourseDetailsResponse> getRegisteredData(Long coursePayId, String lon, String lat){
         try {
             Integer appUserId = tokenUtil.getUserIdFormRedis();
             if(null == appUserId){
@@ -2203,7 +2205,7 @@
 
                     List<CoursePackageStudent> list5 = cspsService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", courseDetailReq.getStuId()).eq("coursePackageId",tCoursePackage.getId()));
 
-                    if(list5.size()>0){
+                    if(list5.size()>0&&list4.size()>0){
                         Integer signInOrNot = list4.get(0).getSignInOrNot();
                         detailsListVo.setType(1);
 
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java
index 704dc64..5c2c179 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java
@@ -4,6 +4,7 @@
 import com.dsh.course.feignclient.activity.model.UserCoupon;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * @author zhibing.pu
@@ -18,7 +19,7 @@
      * @param id
      * @return
      */
-    @PostMapping("/userCoupon/queryUserCouponById")
+    @PostMapping("/userCoupon/queryUserCouponById1")
     UserCoupon queryUserCouponById(Long id);
 
     /**
@@ -27,4 +28,6 @@
      */
     @PostMapping("/userCoupon/sendUserCoupon")
     void sendUserCoupon(SendCouponReq sendCouponReq);
+    @PostMapping("/userCoupon/edit")
+    void edit(@RequestBody UserCoupon userCoupon);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
index 9fd00ff..8469fd3 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -67,6 +67,7 @@
     List<Integer> getStudentIds(@Param("id")Long payId,@Param("classId")Integer classId,@Param("appId")Integer appId);
 
     boolean updateHoursById(@Param("id") Long id, @Param("i") int i);
+    boolean updateHoursById1(@Param("id") Long id, @Param("i") int i);
 
     void updateBytime(@Param("coursePackagePayment") TCoursePackagePayment coursePackagePayment);
 
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java
index e10b741..bba420d 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java
@@ -13,4 +13,7 @@
     @ApiModelProperty(value = "课包id")
     private Integer coursePackageId;
 
+    @ApiModelProperty(value = "排课id")
+    private Long scId;
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java
index f11002e..d7f4757 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java
@@ -34,4 +34,7 @@
     @ApiModelProperty(value = "课程视频")
     private String courseVideo;
 
+    @ApiModelProperty(value = "排课id")
+    private Long scId;
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
index 39dfbb8..f3d7306 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
@@ -56,5 +56,12 @@
     @ApiModelProperty("课时套餐")
     private List<CoursePackagePaymentConfigVo> list;
 
+    @ApiModelProperty("门店地址")
+    private String storeAddress;
+    @ApiModelProperty("门店名称")
+    private String storeName;
+    @ApiModelProperty("距离")
+    private Double distance;
+
 
 }
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 3647dd0..8614d8e 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
@@ -37,4 +37,6 @@
     void taskSetStatus();
 
     List<AppUserVideoResponse> queryAll(List<Long> longs);
+
+    void cancel();
 }
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 b88f008..c9b155c 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
@@ -3,23 +3,23 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.controller.CoursePackagePaymentController;
 import com.dsh.course.entity.CoursePackageScheduling;
 import com.dsh.course.entity.CoursePackageStudent;
 import com.dsh.course.entity.TCoursePackage;
+import com.dsh.course.entity.TCoursePackagePayment;
 import com.dsh.course.mapper.CoursePackageSchedulingMapper;
 import com.dsh.course.model.QueryCoursePackageSchedulingList;
 import com.dsh.course.model.vo.response.AppUserVideoResponse;
 import com.dsh.course.service.CoursePackageStudentService;
 import com.dsh.course.service.ICoursePackageSchedulingService;
+import com.dsh.course.service.TCoursePackagePaymentService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author zhibing.pu
@@ -104,6 +104,38 @@
     }
 
 
+    @Autowired
+    private TCoursePackagePaymentService packagePaymentService;
+    /**
+     * 定时修改状态
+     */
+    @Override
+    public void cancel() {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                List<TCoursePackagePayment> list = packagePaymentService.list();
+                Date now = new Date();
+                List<Long> pays = new ArrayList<>();
+                for (TCoursePackagePayment coursePackagePayment : list) {
+                    if (now.before(coursePackagePayment.getUseTime())){
+                        pays.add(coursePackagePayment.getId());
+                    }
+                }
+
+                List<CoursePackageStudent> coursePackagePaymentId = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays));
+                List<Long> scs = new ArrayList<>();
+                for (CoursePackageStudent coursePackageStudent : coursePackagePaymentId) {
+                    scs.add(coursePackageStudent.getCoursePackageSchedulingId());
+                }
+                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays));
+                coursePackageSchedulingMapper.delete(new QueryWrapper<CoursePackageScheduling>().in("id",scs));
+
+
+            }
+        }).start();
+    }
+
     /**
      * 定时修改状态
      */
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
index 525eb9b..b032e53 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
@@ -76,13 +76,13 @@
                 for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
                     TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
 //                    判断预约人数是否已满
-                    Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber();
-                    Integer integer = tcppMapper.selectCount(new QueryWrapper<TCoursePackagePayment>()
-                            .eq("appUserId",appUserId )
-                            .eq("status",1));
-                    if (integer >= maxSubscribeNumber){
-                        continue;
-                    }
+//                    Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber();
+//                    Integer integer = tcppMapper.selectCount(new QueryWrapper<TCoursePackagePayment>()
+//                            .eq("appUserId",appUserId )
+//                            .eq("status",1));
+//                    if (integer >= maxSubscribeNumber){
+//                        continue;
+//                    }
                     try {
                         JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent());
                         JSONObject jsonObject = jsonArray.getJSONObject(0);
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 82a599e..8380310 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
@@ -328,13 +328,16 @@
 //        BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId());
         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());
-//            response.setIntegral(byId.getIntegral());
             UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>()
                     .eq("appUserId",appUserId )
                     .eq("coursePackageId",coursePackage.getId())
@@ -349,6 +352,10 @@
             response.setSynopsis(byId.getIntroduce());
             response.setDetailedDiagram(byId.getIntroductionDrawing());
             response.setCover(byId.getCoverDrawing());
+            if (byId1.getIntegral()!=null) {
+                response.setIntegral(String.valueOf(byId1.getIntegral()));
+            }
+
         }
 
         return response;
@@ -482,6 +489,18 @@
             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.setStoreCoverDrawing(store.getCoverDrawing());
+//            response.setStoreAddress(store.getAddress());
+//            response.setLon(store.getLon());
+//            response.setLat(store.getLat());
+//            if(ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)){
+//                Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
+//                double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+//                response.setDistance(wgs84);
+//            }
 
 
             response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
@@ -1361,6 +1380,9 @@
     @Autowired
     private CoursePackageStudentService coursePackageStudentService;
 
+    @Autowired
+    private  CourseCounsumService courseCounsumService;
+
     @Override
     @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
     public ResultUtil payCourse(PayCourseReq req,Integer userId) throws ParseException {
@@ -1513,14 +1535,24 @@
 
 
         // 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);
+//        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);
+
+        CourseCounsum courseCounsum = new CourseCounsum();
+        courseCounsum.setPaymentId(tCoursePackagePayment.getId());
+        courseCounsum.setChangeType(0);
+        courseCounsum.setNum(req.getNum());
+        courseCounsum.setInsertTime(new Date());
+        courseCounsum.setReason("体验购课");
+        courseCounsum.setAppUserId(userId);
+        courseCounsumService.save(courseCounsum);
+
 
 
         if(tCoursePackagePayment.getLaveClassHours()<=3){
@@ -1555,7 +1587,7 @@
 
     @Override
     public boolean updateHoursById(TCoursePackagePayment byId, int i) {
-        return this.baseMapper.updateHoursById(byId.getId(),i);
+        return this.baseMapper.updateHoursById1(byId.getId(),i);
     }
 
 
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 3709539..ecd2b5c 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
@@ -298,12 +298,14 @@
             double originalPrice1 = coursePackageListVo.getOriginalPrice();
             double paymentPrice1 = coursePackageListVo.getPaymentPrice();
 
-            double minPrice = Math.min(vipPrice1, Math.min(originalPrice1, paymentPrice1));
-            double maxPrice = Math.max(vipPrice1, Math.max(originalPrice1, paymentPrice1));
-            coursePackageListVo.setPaymentPrice(minPrice);
-            coursePackageListVo.setOriginalPrice(maxPrice);
-            System.out.println("Minimum price: " + minPrice);
-            System.out.println("Maximum price: " + maxPrice);
+//            double minPrice = Math.min(vipPrice1, Math.min(originalPrice1, paymentPrice1));
+//            double maxPrice = Math.max(vipPrice1, Math.max(originalPrice1, paymentPrice1));
+//            coursePackageListVo.setPaymentPrice(minPrice);
+//            coursePackageListVo.setOriginalPrice(maxPrice);
+//            System.out.println("Minimum price: " + minPrice);
+
+
+
 //            }
 //            else{
 //                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
@@ -318,6 +320,20 @@
 //                coursePackageListVo.setPaymentPrice(vipPrice);
 //                coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
 //            }
+
+            if (coursePackageListVo.getPaymentPrice()<coursePackageListVo.getVipPrice()){
+                coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
+//                coursePackageListVo.setVipPrice(null);
+            }
+
+            if(appUser.getIsVip() == 1) {
+                if (coursePackageListVo.getVipPrice() < coursePackageListVo.getPaymentPrice()) {
+                    coursePackageListVo.setPaymentPrice(coursePackageListVo.getVipPrice());
+                }
+            }else {
+                coursePackageListVo.setVipPrice(null);
+            }
+
 
             Map<String, Double> distance = GeodesyUtil.getDistance(coursePackageList.getLon() + "," + coursePackageList.getLat(), store.getLon() + "," + store.getLat());
             coursePackageListVo.setDistance(distance.get("WGS84") / 1000);
@@ -637,7 +653,7 @@
 
 //                coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType());
                 //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低)
-                if(appUser.getIsVip() == 0){//非会员
+//                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();
@@ -728,42 +744,50 @@
 
 
 
-                    TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
-                            .eq("type", 2).eq("auditStatus", 2));
+//                    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(appUser.getIsVip() == 1) {
+                        if (coursePackagePaymentConfigVo.getVipPrice()<coursePackagePaymentConfigVo.getPaymentPrice()){
+                            coursePackagePaymentConfigVo.setPaymentPrice(coursePackagePaymentConfigVo.getVipPrice());
+                        }
 
+                                }
 
-                    //这里是续课优惠
-                    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()){
+                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 coursePackageDiscount : list2) {
-                        Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
-                        if(vipPrice.compareTo(num1) > 0){
-                            vipPrice = num1;
-                        }
-                    }
-                    coursePackagePaymentConfigVo.setPaymentPrice(vipPrice);
-                    coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
-                }
+
+
+
+//                }
+//                else{
+//                    List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
+//                            .eq("type", 1).eq("auditStatus", 2));
+//                    Double vipPrice = coursePackagePaymentConfig.getCashPayment();
+//                    for (TCoursePackageDiscount coursePackageDiscount : list2) {
+//                        Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
+//                        if(vipPrice.compareTo(num1) > 0){
+//                            vipPrice = num1;
+//                        }
+//                    }
+//                    coursePackagePaymentConfigVo.setPaymentPrice(vipPrice);
+//                    coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
+//                }
                 list.add(coursePackagePaymentConfigVo);
             });
             coursePackageInfo.setList(list);
@@ -872,6 +896,9 @@
                 }
                 price = new BigDecimal(price).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
             }
+            userCoupon.setStatus(2);
+           userCouponClient.edit(userCoupon);
+
         }
 
         if(paymentCourseVo.getPayType() == 1){//微信支付
@@ -1126,11 +1153,13 @@
 //                coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
 //                coursePackagePaymentServiceOne.setTotalClassHours(coursePackagePaymentServiceOne.getTotalClassHours()+coursePackagePaymentConfig.getClassHours());
 //                coursePackagePaymentServiceOne.setLaveClassHours(coursePackagePaymentServiceOne.getLaveClassHours()+coursePackagePaymentConfig.getClassHours());
-//                coursePackagePaymentServiceOne.setCode(code);
+                coursePackagePaymentServiceOne.setCode(code);
 //
-//                coursePackagePaymentServiceOne.setAppUserId(null);
+                coursePackagePaymentServiceOne.setPayStatus(2);
+                coursePackagePaymentServiceOne.setSalesName("续课");
+                coursePackagePaymentServiceOne.setAppUserId(null);
 //                coursePackagePaymentServiceOne.setPayStatus(2);
-//                coursePackagePaymentService.updateById(coursePackagePaymentServiceOne);
+                coursePackagePaymentService.updateById(coursePackagePaymentServiceOne);
 //
 //                Integer sId = null;
 //                Student student = studentClient.queryDefaultStudent(uid);
@@ -1165,6 +1194,8 @@
                 @Override
                 public void run() {
                     try {
+                        Thread.sleep(1000);
+
                         int num = 1;
                         int wait = 0;
                         while (num <= 10){
@@ -1173,10 +1204,11 @@
                             Thread.sleep(wait);
                             List<TCoursePackagePayment> list = coursePackagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("state", 1).eq("code", code).eq("payType", 2));
                             TCoursePackagePayment one = list.get(0);
+                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
                             if(one.getPayStatus() == 2){
                                 break;
                             }
-                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
+
                             if( one.getPayStatus() == 1){
                                 /**
                                  * WAIT_BUYER_PAY(交易创建,等待买家付款)、
@@ -1188,7 +1220,13 @@
 
                                 String tradeNo = alipayTradeQueryResponse.getTradeNo();
                                 if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
-                                    for (TCoursePackagePayment coursePackagePayment : list) {
+                                        for (TCoursePackagePayment coursePackagePayment : list) {
+                                        if (coursePackagePayment.getStudentName()!=null){
+                                        if (coursePackagePayment.getStudentName().equals("续课")){
+                                            coursePackagePayment.setPayStatus(2);
+                                        }
+                                        }
+
                                         coursePackagePayment.setStatus(3);
                                     }
                                     coursePackagePaymentService.updateBatchById(list);
@@ -1632,7 +1670,7 @@
                 if (count == can) {
                     break;
                 }
-                int wei = DateUtil.dayOfWeek(date);
+                int wei = DateUtil.dayOfWeek(date)-1;
                 if (week.contains(wei)) {
                     for (int i1 = 0; i1 < split.length; i1++) {
                         if (count == can) {
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java
index 57260e2..42b3ddb 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java
@@ -93,9 +93,10 @@
     /**
      * 零时任务
      */
-//    @Scheduled(cron = "0 0 0 * * *")
-//    public void zeroTask(){
-//        //定时添加排课数据
+    @Scheduled(cron = "0 0 0 * * *")
+    public void zeroTask(){
+        //定时添加排课数据
 //        coursePackageSchedulingService.taskAddData();
-//    }
+        coursePackageSchedulingService.cancel();
+    }
 }
diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml
index b10c78f..66183af 100644
--- a/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/CoursePackageSchedulingMapper.xml
@@ -31,7 +31,7 @@
     </select>
     <select id="queryAll" resultType="com.dsh.course.model.vo.response.AppUserVideoResponse">
 
-        SELECT cs.courseId as videoId,cs.coursePackageId as coursePackageId,tc.coverDrawing as coverImage,tc.name as videoName,tc.introduce as synopsis,cs.integral,tc.courseVideo as courseVideo,cp.name as packageName
+        SELECT cs.courseId as videoId,cs.coursePackageId as coursePackageId,tc.coverDrawing as coverImage,tc.name as videoName,tc.introduce as synopsis,cs.integral,tc.courseVideo as courseVideo,cp.name as packageName,cs.id as scId
         FROM t_course_package_scheduling cs
                  LEFT JOIN t_course tc ON cs.courseId = tc.id
         left join  t_course_package cp on cs.coursePackageId = cp.id
diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
index 8d36281..5d7eeb1 100644
--- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -31,7 +31,10 @@
         where id = #{id}
     </update>
     <update id="updateHoursById">
-        update t_course_package_payment set totalClassHours =totalClassHours +#{i},classHours =classHours+#{i},laveClassHours =laveClassHours+#{i} where id =#{id}
+        update t_course_package_payment set classHours =classHours+#{i},laveClassHours =laveClassHours+#{i} where id =#{id}
+    </update>
+    <update id="updateHoursById1">
+        update t_course_package_payment set totalClassHours = totalClassHours+#{i},classHours =classHours+#{i},laveClassHours =laveClassHours+#{i} where id =#{id}
     </update>
 
     <select id="queryCountNumber" resultType="int">
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 ebe6326..117e660 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
@@ -224,6 +224,7 @@
 //                detailList.setStoreDistance(l);
                 detailList.setStoreTime(store.getStartTime() + "-" + store.getEndTime());
                 detailList.setStoreInfo(store.getIntroduce());
+                detailList.setStoreDistance(Long.valueOf(distanceTOKilometer.lastIndexOf(".")));
                 detailLists.add(detailList);
             }
         }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java
index b63f3b1..baa34e5 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/QueryMySiteVo.java
@@ -37,4 +37,6 @@
     private Long insertTime;
     @ApiModelProperty("支付方式2玩湃币,其他rmb")
     private Integer payType;
+    @ApiModelProperty("1是半场,2 不是")
+    private Integer isHalf;
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index 8008cf7..83ca307 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -634,7 +634,11 @@
             Site site = this.getById(siteBooking.getSiteId());
             String[] split = siteBooking.getTimes().split(";");
             if(site!=null){
-                queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length);
+                if (queryMySiteVo.getIsHalf()==1) {
+                    queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length);
+                }else {
+                    queryMySiteVo.setPlayPaiCoin((int) (site.getPlayPaiCoinOne() * split.length));
+                }
             }
         }
         return queryMySiteVos;
@@ -852,7 +856,7 @@
 
         //校验优惠券
         Long couponId = siteBooking.getUserCouponId();
-        if(null != couponId){
+        if(null != couponId&&couponId!=0){
             UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(),siteBooking.getAppUserId()));
             Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
             if(coupon.getType() == 1){//满减
diff --git a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
index 738ef18..2e37209 100644
--- a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
+++ b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
@@ -60,6 +60,7 @@
         c.lat as storeLat,
         a.payMoney as payMoney,
         a.payType  as payType,
+        a.isHalf as isHalf,
         CONCAT(DATE_FORMAT(a.startTime, '%Y-%m-%d %H:%i'), '-', DATE_FORMAT(a.endTime, '%H:%i')) as appointment,
         a.`status`,
         UNIX_TIMESTAMP(a.insertTime) * 1000 as insertTime

--
Gitblit v1.7.1