From ac6a07af9baba0e0fc8d181aae904da679ae8f5a Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 06 七月 2023 10:04:07 +0800
Subject: [PATCH] 更新部分功能接口
---
cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java | 11
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java | 4
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java | 12
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 81 +
cloud-server-activity/pom.xml | 19
cloud-server-activity/src/main/resources/sharding-jdbc.properties | 25
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java | 4
cloud-server-activity/src/main/java/com/dsh/activity/model/CouponListVo.java | 2
cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java | 148 +++
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 112 ++
cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpClientUtil.java | 267 ++++++
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java | 21
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java | 12
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java | 22
cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java | 17
cloud-server-course/src/main/java/com/dsh/course/model/PaymentCourseVo.java | 26
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuOfCoursesDetails.java | 13
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageClient.java | 22
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java | 2
cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java | 4
cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java | 23
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java | 18
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/Coupon.java | 115 ++
cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpResult.java | 31
cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java | 4
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 36
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 2
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java | 70 +
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/UserCoupon.java | 41 +
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java | 22
cloud-server-course/src/main/java/com/dsh/course/feignclient/model/CourseHoursType.java | 2
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/Student.java | 2
cloud-server-activity/src/main/resources/mapper/UserCouponMapper.xml | 16
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/GetStuSourseList.java | 19
cloud-server-activity/src/main/java/com/dsh/activity/entity/UserCoupon.java | 7
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStudentCourse.java | 14
cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java | 113 ++
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java | 8
cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java | 4
cloud-server-activity/src/main/java/com/dsh/activity/util/ToolUtil.java | 544 +++++++++++++
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java | 12
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuSessionList.java | 20
/dev/null | 30
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/AppUser.java | 2
cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java | 130 +++
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/GetAllNearbyStoreList.java | 13
cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java | 86 ++
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseSessionNameClient.java | 11
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java | 128 +++
cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java | 18
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java | 5
51 files changed, 2,247 insertions(+), 123 deletions(-)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java
index 66a66b2..594eb18 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java
@@ -1,6 +1,7 @@
package com.dsh.account.feignclient.competition;
+import com.dsh.account.feignclient.competition.model.GetStuSourseList;
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@@ -12,8 +13,6 @@
@FeignClient(value = "mb-cloud-competition")
public interface DeductionCompetitionsClient {
@PostMapping("/competition/getCompetitionsDetails")
- public List<PurchaseRecordVo> getStuSourseList(@RequestBody Date startTime,
- @RequestBody Date endTime,
- @RequestBody Integer appUserId);
+ List<PurchaseRecordVo> getStuSourseList(GetStuSourseList getStuSourseList);
}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/GetStuSourseList.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/GetStuSourseList.java
new file mode 100644
index 0000000..2d1fbdb
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/GetStuSourseList.java
@@ -0,0 +1,19 @@
+package com.dsh.account.feignclient.competition.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/6 9:59
+ */
+@Data
+public class GetStuSourseList {
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+ private Integer appUserId;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
index 7b0264c..0607def 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -1,9 +1,6 @@
package com.dsh.account.feignclient.course;
-import com.dsh.account.feignclient.course.model.CourseOfStoreVo;
-import com.dsh.account.feignclient.course.model.StuCourseResp;
-import com.dsh.account.feignclient.course.model.StuWithCoursesListVo;
-import com.dsh.account.feignclient.course.model.StudentOfCourseVo;
+import com.dsh.account.feignclient.course.model.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -22,11 +19,8 @@
List<CourseOfStoreVo> getStoreOfCourses();
@PostMapping("/coursePack/stuOfCourses")
- StuWithCoursesListVo getStuOfCoursesDetails(@RequestBody Integer stuId,
- @RequestBody Integer appUserId);
+ StuWithCoursesListVo getStuOfCoursesDetails(GetStuOfCoursesDetails getStuOfCoursesDetails);
@PostMapping("/coursePack/continuingCourse")
- StudentOfCourseVo getStudentCourse(@RequestBody Integer courseId,
- @RequestBody Integer stuId,
- @RequestBody Integer appUserId);
+ StudentOfCourseVo getStudentCourse(GetStudentCourse getStudentCourse);
}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseSessionNameClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseSessionNameClient.java
index ef01dd4..31452b2 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseSessionNameClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseSessionNameClient.java
@@ -2,6 +2,7 @@
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
+import com.dsh.account.feignclient.course.model.GetStuSessionList;
import com.dsh.account.feignclient.course.model.StuSessionDetailsVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@@ -15,15 +16,9 @@
@PostMapping("/coursePack/sessionNames")
- List<StuSessionDetailsVo> getStuSessionList(@RequestBody Date startTime,
- @RequestBody Date endTime,
- @RequestBody Integer stuId,
- @RequestBody Integer appUserId);
+ List<StuSessionDetailsVo> getStuSessionList(GetStuSessionList getStuSessionList);
@PostMapping("/coursePack/paymentCourse")
- public List<PurchaseRecordVo> queryCourseDetails(@RequestBody Date startTime,
- @RequestBody Date endTime,
- @RequestBody Integer stuId,
- @RequestBody Integer appUserId);
+ public List<PurchaseRecordVo> queryCourseDetails(GetStuSessionList getStuSessionList);
}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuOfCoursesDetails.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuOfCoursesDetails.java
new file mode 100644
index 0000000..6fb419f
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuOfCoursesDetails.java
@@ -0,0 +1,13 @@
+package com.dsh.account.feignclient.course.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/6 9:46
+ */
+@Data
+public class GetStuOfCoursesDetails {
+ private Integer stuId;
+ private Integer appUserId;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuSessionList.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuSessionList.java
new file mode 100644
index 0000000..6361c95
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStuSessionList.java
@@ -0,0 +1,20 @@
+package com.dsh.account.feignclient.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/6 9:55
+ */
+@Data
+public class GetStuSessionList {
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+ private Integer stuId;
+ private Integer appUserId;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStudentCourse.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStudentCourse.java
new file mode 100644
index 0000000..cf4f7fb
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/GetStudentCourse.java
@@ -0,0 +1,14 @@
+package com.dsh.account.feignclient.course.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/6 9:48
+ */
+@Data
+public class GetStudentCourse {
+ private Integer courseId;
+ private Integer stuId;
+ private Integer appUserId;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java
index 0b60f71..a3469b0 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java
@@ -1,7 +1,7 @@
package com.dsh.account.feignclient.other;
import com.dsh.account.feignclient.course.model.QueryStoreList;
-import com.dsh.account.feignclient.other.model.Store;
+import com.dsh.account.feignclient.other.model.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@@ -11,9 +11,6 @@
* @author zhibing.pu
* @date 2023/6/24 15:54
*/
-import com.dsh.account.feignclient.other.model.StoreDetailOfCourse;
-import com.dsh.account.feignclient.other.model.StoreInfo;
-import com.dsh.account.feignclient.other.model.StoreLonLatList;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -24,11 +21,6 @@
public interface StoreClient {
-
-
-
-
-
/**
* 获取门店列表
* @return
@@ -37,16 +29,14 @@
List<Store> queryStoreList(QueryStoreList queryStoreList);
-
-
@PostMapping("/storeDetail/courseOfSto")
- public StoreDetailOfCourse getCourseOfStore(@RequestBody Integer storeId);
+ StoreDetailOfCourse getCourseOfStore(@RequestBody Integer storeId);
@PostMapping("/storeDetail/nearbyStore")
- List<StoreInfo> getAllNearbyStoreList(@RequestBody String longitude, @RequestBody String latitude);
+ List<StoreInfo> getAllNearbyStoreList(GetAllNearbyStoreList getAllNearbyStoreList);
@PostMapping("/storeDetail/storeOfLonLat")
- public List<StoreLonLatList> getAllStoreLonLats(@RequestBody String longitude, @RequestBody String latitude);
+ List<StoreLonLatList> getAllStoreLonLats(GetAllNearbyStoreList getAllNearbyStoreList);
}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/GetAllNearbyStoreList.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/GetAllNearbyStoreList.java
new file mode 100644
index 0000000..cc842c2
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/GetAllNearbyStoreList.java
@@ -0,0 +1,13 @@
+package com.dsh.account.feignclient.other.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/6 9:52
+ */
+@Data
+public class GetAllNearbyStoreList {
+ private String longitude;
+ private String latitude;
+}
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 515f5bc..17ea0eb 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
@@ -7,21 +7,17 @@
import com.dsh.account.feignclient.activity.IntroduceRewardsClient;
import com.dsh.account.feignclient.activity.UserConponClient;
import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
+import com.dsh.account.feignclient.competition.model.GetStuSourseList;
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import com.dsh.account.feignclient.course.CancelListClient;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.CourseRecordClient;
import com.dsh.account.feignclient.course.CourseSessionNameClient;
-import com.dsh.account.feignclient.course.model.StuSessionDetailsVo;
-import com.dsh.account.feignclient.course.model.StuWithCoursesListVo;
-import com.dsh.account.feignclient.course.model.StudentOfCourseVo;
+import com.dsh.account.feignclient.course.model.*;
import com.dsh.account.feignclient.other.NoticeClient;
import com.dsh.account.feignclient.other.QuestionClient;
import com.dsh.account.feignclient.other.StoreClient;
-import com.dsh.account.feignclient.other.model.StoreDetailOfCourse;
-import com.dsh.account.feignclient.other.model.StoreInfo;
-import com.dsh.account.feignclient.other.model.StoreLonLatList;
-import com.dsh.account.feignclient.other.model.SysNotice;
+import com.dsh.account.feignclient.other.model.*;
import com.dsh.account.mapper.TAppUserMapper;
import com.dsh.account.mapper.TStudentMapper;
import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo;
@@ -41,6 +37,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -58,37 +55,37 @@
@Service
public class TStudentServiceImpl extends ServiceImpl<TStudentMapper, TStudent> implements TStudentService {
- @Autowired
+ @Resource
private CourseSessionNameClient sessionNameClient;
- @Autowired
+ @Resource
private DeductionCompetitionsClient dcttClient;
- @Autowired
+ @Resource
private CancelListClient cancelcClient;
- @Autowired
+ @Resource
private IntroduceRewardsClient idrClient;
- @Autowired
+ @Resource
private CourseRecordClient crClient;
- @Autowired
+ @Resource
private CoursePaymentClient couPayClient;
- @Autowired
+ @Resource
private UserConponClient userCClient;
- @Autowired
+ @Resource
private StoreClient storeClient;
- @Autowired
+ @Resource
private NoticeClient noClient;
- @Autowired
+ @Resource
private QuestionClient quesClient;
- @Autowired
+ @Resource
private TAppUserMapper tauMapper;
@Override
@@ -117,7 +114,12 @@
ClassDetailsInsVo insVo = new ClassDetailsInsVo();
Date localMonthStart = DateTimeHelper.getCurrentMouthStart();
Date localMonthEnd = DateTimeHelper.getCurrentMouthEnd();
- List<StuSessionDetailsVo> stuSessionList = sessionNameClient.getStuSessionList(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
+ GetStuSessionList getStuSessionList = new GetStuSessionList();
+ getStuSessionList.setStartTime(localMonthStart);
+ getStuSessionList.setEndTime(localMonthEnd);
+ getStuSessionList.setStuId(stuId);
+ getStuSessionList.setAppUserId(userIdFormRedis);
+ List<StuSessionDetailsVo> stuSessionList = sessionNameClient.getStuSessionList(getStuSessionList);
TStudent tStudent = this.baseMapper.selectById(stuId);
if (ToolUtil.isNotEmpty(tStudent)){
insVo.setStuId(tStudent.getId());
@@ -125,12 +127,15 @@
insVo.setStuImage(tStudent.getHeadImg());
List<PurchaseRecordVo> purchaseRecordVoList = new ArrayList<>();
-
- List<PurchaseRecordVo> stuSourseList = dcttClient.getStuSourseList(localMonthStart,localMonthEnd,userIdFormRedis);
+ GetStuSourseList getStuSourseList = new GetStuSourseList();
+ getStuSourseList.setStartTime(localMonthStart);
+ getStuSourseList.setEndTime(localMonthEnd);
+ getStuSourseList.setAppUserId(userIdFormRedis);
+ List<PurchaseRecordVo> stuSourseList = dcttClient.getStuSourseList(getStuSourseList);
purchaseRecordVoList.addAll(stuSourseList);
List<PurchaseRecordVo> cancelCourseList = cancelcClient.getCancelCourseList(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
purchaseRecordVoList.addAll(cancelCourseList);
- List<PurchaseRecordVo> purchaseRecordVos = sessionNameClient.queryCourseDetails(localMonthStart,localMonthEnd,stuId,userIdFormRedis);
+ List<PurchaseRecordVo> purchaseRecordVos = sessionNameClient.queryCourseDetails(getStuSessionList);
purchaseRecordVoList.addAll(purchaseRecordVos);
List<TAppUser> tAppUsers = tauMapper.selectList(new QueryWrapper<TAppUser>()
.eq("referralUserId",userIdFormRedis )
@@ -140,7 +145,10 @@
purchaseRecordVoList.addAll(purchaseRecordVos1);
insVo.setSessionNames(stuSessionList);
insVo.setDetails(dealDataOfTime(purchaseRecordVoList));
- StuWithCoursesListVo stuOfCoursesDetails = couPayClient.getStuOfCoursesDetails(stuId, userIdFormRedis);
+ GetStuOfCoursesDetails getStuOfCoursesDetails = new GetStuOfCoursesDetails();
+ getStuOfCoursesDetails.setStuId(stuId);
+ getStuOfCoursesDetails.setAppUserId(userIdFormRedis);
+ StuWithCoursesListVo stuOfCoursesDetails = couPayClient.getStuOfCoursesDetails(getStuOfCoursesDetails);
insVo.setTotalNums(stuOfCoursesDetails.getTotalNums());
insVo.setDeductedNums(stuOfCoursesDetails.getDeductedNums());
insVo.setRemainingNums(stuOfCoursesDetails.getRemainingNums());
@@ -156,12 +164,20 @@
List<PurchaseRecordVo> purchaseRecordVoList = new ArrayList<>();
Date startTime = DateTimeHelper.getCurrentIdetMouthStart(timeRequest.getStartTime());
Date endTime = DateTimeHelper.getCurrentIdeaMouthEnd(timeRequest.getEndTime());
-
- List<PurchaseRecordVo> stuSourseList = dcttClient.getStuSourseList(startTime,endTime,appUserId);
+ GetStuSourseList getStuSourseList = new GetStuSourseList();
+ getStuSourseList.setStartTime(startTime);
+ getStuSourseList.setEndTime(endTime);
+ getStuSourseList.setAppUserId(appUserId);
+ List<PurchaseRecordVo> stuSourseList = dcttClient.getStuSourseList(getStuSourseList);
purchaseRecordVoList.addAll(stuSourseList);
List<PurchaseRecordVo> cancelCourseList = cancelcClient.getCancelCourseList(startTime,endTime,timeRequest.getStuId(),appUserId);
purchaseRecordVoList.addAll(cancelCourseList);
- List<PurchaseRecordVo> purchaseRecordVos = sessionNameClient.queryCourseDetails(startTime,endTime,timeRequest.getStuId(),appUserId);
+ GetStuSessionList getStuSessionList = new GetStuSessionList();
+ getStuSessionList.setStartTime(startTime);
+ getStuSessionList.setEndTime(endTime);
+ getStuSessionList.setStuId(timeRequest.getStuId());
+ getStuSessionList.setAppUserId(appUserId);
+ List<PurchaseRecordVo> purchaseRecordVos = sessionNameClient.queryCourseDetails(getStuSessionList);
purchaseRecordVoList.addAll(purchaseRecordVos);
List<TAppUser> tAppUsers = tauMapper.selectList(new QueryWrapper<TAppUser>()
.eq("referralUserId",appUserId )
@@ -185,7 +201,11 @@
public CourseDetailsOfContinuationResp queryStuOfCourseDetails(Integer lessonId, Integer stuId, Integer appUserId) {
CourseDetailsOfContinuationResp resp = new CourseDetailsOfContinuationResp();
- StudentOfCourseVo studentCourse = couPayClient.getStudentCourse(lessonId,stuId,appUserId);
+ GetStudentCourse getStudentCourse = new GetStudentCourse();
+ getStudentCourse.setCourseId(lessonId);
+ getStudentCourse.setStuId(stuId);
+ getStudentCourse.setAppUserId(appUserId);
+ StudentOfCourseVo studentCourse = couPayClient.getStudentCourse(getStudentCourse);
StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(studentCourse.getStoreId());
@@ -220,8 +240,11 @@
@Override
public ExploreDatasVo queryIndexOfExplores(LonLatRequest llrequest) {
ExploreDatasVo datasVo = new ExploreDatasVo();
- List<StoreInfo> allNearbyStoreList = storeClient.getAllNearbyStoreList(llrequest.getLongitude(),llrequest.getLatitude());
- List<StoreLonLatList> allStoreLonLats = storeClient.getAllStoreLonLats(llrequest.getLongitude(), llrequest.getLatitude());
+ GetAllNearbyStoreList getAllNearbyStoreList = new GetAllNearbyStoreList();
+ getAllNearbyStoreList.setLongitude(llrequest.getLongitude());
+ getAllNearbyStoreList.setLatitude(llrequest.getLatitude());
+ List<StoreInfo> allNearbyStoreList = storeClient.getAllNearbyStoreList(getAllNearbyStoreList);
+ List<StoreLonLatList> allStoreLonLats = storeClient.getAllStoreLonLats(getAllNearbyStoreList);
datasVo.setStoreLists(allNearbyStoreList);
datasVo.setLonLatLists(allStoreLonLats);
return datasVo;
diff --git a/cloud-server-activity/pom.xml b/cloud-server-activity/pom.xml
index b49f87f..535bb1a 100644
--- a/cloud-server-activity/pom.xml
+++ b/cloud-server-activity/pom.xml
@@ -75,6 +75,25 @@
<artifactId>swagger-models</artifactId>
<version>1.5.22</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-jdbc-core</artifactId>
+ <version>5.2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpmime</artifactId>
+ <version>4.5.2</version>
+ </dependency>
</dependencies>
<build>
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
index dcf1887..c52a588 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -1,5 +1,6 @@
package com.dsh.activity.controller;
+import com.dsh.activity.entity.Coupon;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.service.ICouponService;
import com.dsh.activity.util.ResultUtil;
@@ -36,7 +37,7 @@
@ApiImplicitParam(value = "1=积分购买,2=注册赠送", name = "distributionMethod", dataType = "int", required = true),
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
})
- public ResultUtil queryCouponList(@RequestBody Integer distributionMethod){
+ public ResultUtil<List<CouponListVo>> queryCouponList(@RequestBody Integer distributionMethod){
if(null == distributionMethod){
return ResultUtil.paranErr("distributionMethod");
}
@@ -52,4 +53,22 @@
return ResultUtil.success();
}
}
+
+
+ /**
+ * 根据id获取优惠券信息
+ * @param id
+ * @return
+ */
+ @ResponseBody
+ @PostMapping("/coupon/queryCouponById")
+ public Coupon queryCouponById(@RequestBody Integer id){
+ try {
+ Coupon coupon = couponService.getById(id);
+ return coupon;
+ }catch (Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ }
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserConponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserConponController.java
deleted file mode 100644
index 2978d06..0000000
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserConponController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.dsh.activity.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.dsh.activity.entity.Coupon;
-import com.dsh.activity.entity.UserCoupon;
-import com.dsh.activity.feignclient.model.CouponStuAvailableVo;
-import com.dsh.activity.service.ICouponService;
-import com.dsh.activity.service.UserCouponService;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Api
-@CrossOrigin
-@RestController
-@RequestMapping("")
-public class UserConponController {
-
- @Autowired
- private UserCouponService uconService;
-
- @Autowired
- private ICouponService cService;
-
- private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-
- @PostMapping("/userConpon/getStuOfConpons")
- public List<CouponStuAvailableVo> queryUserWithConponList(@RequestBody Integer appUserId){
-
- List<CouponStuAvailableVo> availableVos = new ArrayList<>();
-
- List<UserCoupon> list = uconService.list(new QueryWrapper<UserCoupon>()
- .eq("userId", appUserId)
- .eq("status",1));
- if (list.size() > 0){
- List<Integer> collect = list.stream().map(UserCoupon::getCouponId).collect(Collectors.toList());
- List<Coupon> conponList = cService.list(new QueryWrapper<Coupon>()
- .in("id", collect));
- for (Coupon coupon : conponList) {
- CouponStuAvailableVo availableVo = new CouponStuAvailableVo();
- availableVo.setConponId(coupon.getId());
- availableVo.setConponName(coupon.getName());
- availableVo.setConponType(coupon.getType());
- Map<String,Object> conponRuleMap = cService.queryConponRuleOfJson(coupon.getId());
- switch (coupon.getType()){
- case 1:
- Object conditionalAmount = conponRuleMap.get("conditionalAmount");
- Object deductionAmount = conponRuleMap.get("deductionAmount");
- availableVo.setConditionalAmount((double) conditionalAmount);
- availableVo.setAmount((double) deductionAmount);
- break;
- case 2:
- Object amount = conponRuleMap.get("deductionAmount");
- availableVo.setAmount((double)amount);
- break;
- default:
- break;
- }
- availableVo.setLifespan(format.format(coupon.getEndTime()));
- availableVos.add(availableVo);
- }
- }
- return availableVos;
- }
-
-
-}
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
new file mode 100644
index 0000000..b5ebd02
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java
@@ -0,0 +1,130 @@
+package com.dsh.activity.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.activity.entity.Coupon;
+import com.dsh.activity.entity.UserCoupon;
+import com.dsh.activity.feignclient.model.CouponStuAvailableVo;
+import com.dsh.activity.model.CouponListVo;
+import com.dsh.activity.service.ICouponService;
+import com.dsh.activity.service.UserCouponService;
+import com.dsh.activity.util.ResultUtil;
+import com.dsh.activity.util.TokenUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Api
+@CrossOrigin
+@RestController
+@RequestMapping("")
+public class UserCouponController {
+
+ @Autowired
+ private UserCouponService uconService;
+
+ @Autowired
+ private ICouponService cService;
+
+ @Autowired
+ private TokenUtil tokenUtil;
+
+ @Autowired
+ private UserCouponService userCouponService;
+
+
+
+
+ private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+
+ @PostMapping("/userConpon/getStuOfConpons")
+ public List<CouponStuAvailableVo> queryUserWithConponList(@RequestBody Integer appUserId){
+
+ List<CouponStuAvailableVo> availableVos = new ArrayList<>();
+
+ List<UserCoupon> list = uconService.list(new QueryWrapper<UserCoupon>()
+ .eq("userId", appUserId)
+ .eq("status",1));
+ if (list.size() > 0){
+ List<Integer> collect = list.stream().map(UserCoupon::getCouponId).collect(Collectors.toList());
+ List<Coupon> conponList = cService.list(new QueryWrapper<Coupon>()
+ .in("id", collect));
+ for (Coupon coupon : conponList) {
+ CouponStuAvailableVo availableVo = new CouponStuAvailableVo();
+ availableVo.setConponId(coupon.getId());
+ availableVo.setConponName(coupon.getName());
+ availableVo.setConponType(coupon.getType());
+ Map<String,Object> conponRuleMap = cService.queryConponRuleOfJson(coupon.getId());
+ switch (coupon.getType()){
+ case 1:
+ Object conditionalAmount = conponRuleMap.get("conditionalAmount");
+ Object deductionAmount = conponRuleMap.get("deductionAmount");
+ availableVo.setConditionalAmount((double) conditionalAmount);
+ availableVo.setAmount((double) deductionAmount);
+ break;
+ case 2:
+ Object amount = conponRuleMap.get("deductionAmount");
+ availableVo.setAmount((double)amount);
+ break;
+ default:
+ break;
+ }
+ availableVo.setLifespan(format.format(coupon.getEndTime()));
+ availableVos.add(availableVo);
+ }
+ }
+ return availableVos;
+ }
+
+
+
+ @ResponseBody
+ @PostMapping("/api/coupon/queryAvailableCouponList")
+ @ApiOperation(value = "获取课程支付页面可用优惠券列表", tags = {"APP-课程列表", ""})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "课程id", name = "coursePackageId", dataType = "int", required = true),
+ @ApiImplicitParam(value = "支付金额", name = "price", dataType = "double", required = true),
+ @ApiImplicitParam(value = "经度", name = "lon", dataType = "string", required = true),
+ @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = true),
+ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+ })
+ public ResultUtil<List<CouponListVo>> queryAvailableCouponList(@RequestBody Integer coursePackageId, @RequestBody Double price, @RequestBody String lon, @RequestBody String lat){
+ try {
+ Integer uid = tokenUtil.getUserIdFormRedis();
+ if(null == uid){
+ return ResultUtil.tokenErr();
+ }
+ List<CouponListVo> listVos = userCouponService.queryAvailableCouponList(uid, coursePackageId, price, lon, lat);
+ return ResultUtil.success(listVos);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
+
+ /**
+ * 根据id获取用户优惠券数据
+ * @param id
+ * @return
+ */
+ @ResponseBody
+ @PostMapping("/userCoupon/queryUserCouponById")
+ public UserCoupon queryUserCouponById(@RequestBody Long id){
+ try {
+ UserCoupon userCoupon = userCouponService.getById(id);
+ return userCoupon;
+ }catch (Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
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 3f00b17..7392b3d 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
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -80,10 +81,12 @@
/**
* 开始时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
/**
* 结束时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
/**
* 使用范围(1=全国,2=指定城市,3=指定门店)
@@ -128,6 +131,7 @@
/**
* 添加时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date insertTime;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserCoupon.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserCoupon.java
index 110f152..8ce4a39 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserCoupon.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserCoupon.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -30,8 +31,8 @@
/**
* 主键
*/
- @TableId(value = "id", type = IdType.AUTO)
- private Integer id;
+ @TableId(value = "id", type = IdType.INPUT)
+ private Long id;
/**
* 优惠券id
*/
@@ -51,10 +52,12 @@
/**
* 核销时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date verificationTime;
/**
* 领取时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date insertTime;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
index 1bba930..5969073 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
@@ -30,8 +30,8 @@
/**
* 主键
*/
- @TableId(value = "id", type = IdType.AUTO)
- private Integer id;
+ @TableId(value = "id", type = IdType.INPUT)
+ private Long id;
/**
* 优惠券id
*/
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/AppUserClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
similarity index 80%
rename from cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/AppUserClient.java
rename to cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
index f0ff7d7..dc45750 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/AppUserClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
@@ -1,6 +1,6 @@
-package com.dsh.activity.feginClient.account;
+package com.dsh.activity.feignclient.account;
-import com.dsh.activity.feginClient.account.model.AppUser;
+import com.dsh.activity.feignclient.account.model.AppUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/StudentClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
similarity index 81%
rename from cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/StudentClient.java
rename to cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
index 1ac20a9..af6ce71 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/StudentClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
@@ -1,6 +1,6 @@
-package com.dsh.activity.feginClient.account;
+package com.dsh.activity.feignclient.account;
-import com.dsh.activity.feginClient.account.model.Student;
+import com.dsh.activity.feignclient.account.model.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/AppUser.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/AppUser.java
similarity index 96%
rename from cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/AppUser.java
rename to cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/AppUser.java
index e358646..122dc9a 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/AppUser.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/AppUser.java
@@ -1,4 +1,4 @@
-package com.dsh.activity.feginClient.account.model;
+package com.dsh.activity.feignclient.account.model;
import lombok.Data;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/Student.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/Student.java
similarity index 95%
rename from cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/Student.java
rename to cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/Student.java
index 3731742..c0386be 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/Student.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/Student.java
@@ -1,4 +1,4 @@
-package com.dsh.activity.feginClient.account.model;
+package com.dsh.activity.feignclient.account.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageClient.java
new file mode 100644
index 0000000..9b1333e
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageClient.java
@@ -0,0 +1,22 @@
+package com.dsh.activity.feignclient.course;
+
+import com.dsh.activity.feignclient.course.model.CoursePackage;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 9:55
+ */
+@FeignClient("mb-cloud-course")
+public interface CoursePackageClient {
+
+
+ /**
+ * 根据id获取课包
+ * @param id
+ * @return
+ */
+ @PostMapping("/coursePackage/queryCoursePackageById")
+ CoursePackage queryCoursePackageById(Integer id);
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java
new file mode 100644
index 0000000..3d6097c
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java
@@ -0,0 +1,128 @@
+package com.dsh.activity.feignclient.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 9:56
+ */
+@Data
+public class CoursePackage {
+ private Integer id;
+ /**
+ * 省
+ */
+ private String province;
+ /**
+ * 省编号
+ */
+ private String provinceCode;
+ /**
+ * 市
+ */
+ private String city;
+ /**
+ * 市编号
+ */
+ private String cityCode;
+ /**
+ * 门店id
+ */
+ private Integer storeId;
+ /**
+ * 课包类型id
+ */
+ private Integer coursePackageTypeId;
+ /**
+ * 课包名称
+ */
+ private String name;
+ /**
+ * 上课场地id
+ */
+ private Integer siteId;
+ /**
+ * 教练id
+ */
+ private Integer coachId;
+ /**
+ * 最多预约人数
+ */
+ private Integer maxSubscribeNumber;
+ /**
+ * 上课开始时间
+ */
+ private String classStartTime;
+ /**
+ * 上课结束时段
+ */
+ private String classEndTime;
+ /**
+ * 上课周,多个分号分隔
+ */
+ private String classWeeks;
+ /**
+ * 封面图
+ */
+ private String coverDrawing;
+ /**
+ * 详情图
+ */
+ private String detailDrawing;
+ /**
+ * 介绍图
+ */
+ private String introduceDrawing;
+ /**
+ * 排序
+ */
+ private Integer sort;
+ /**
+ * 支付方式(1=现金,2=玩湃币)
+ */
+ private Integer payType;
+ /**
+ * 有效天数
+ */
+ private Integer validDays;
+ /**
+ * 课后练习课程id
+ */
+ private Integer courseId;
+ /**
+ * 课后练习视频介绍
+ */
+ private String introduce;
+ /**
+ * 完成课后练习获取积分
+ */
+ private Integer integral;
+ /**
+ * 课程状态(1=未开始,2=进行中,3=已结束,4=已取消)
+ */
+ private Integer status;
+ /**
+ * 审核状态(1=待审核,2=已同意,3=已拒绝)
+ */
+ private Integer auditStatus;
+ /**
+ * 审核人id
+ */
+ private Integer auditUserId;
+ /**
+ * 审核备注
+ */
+ private String authRemark;
+ /**
+ * 状态(1=正常,2=冻结,3=删除)
+ */
+ private Integer state;
+ /**
+ * 添加时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date insertTime;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java
index d70eed1..62546d5 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.UserCoupon;
+import com.dsh.activity.model.CouponListVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -13,4 +18,16 @@
*/
public interface UserCouponMapper extends BaseMapper<UserCoupon> {
+
+ /**
+ * 获取购买课程可用优惠券列表
+ * @param uid
+ * @param storeId
+ * @param provinceCode
+ * @param cityCode
+ * @return
+ */
+ List<Map<String, Object>> queryAvailableCouponList(@Param("uid") Integer uid, @Param("storeId") Integer storeId,
+ @Param("provinceCode") String provinceCode, @Param("cityCode") String cityCode);
+
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponListVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponListVo.java
index 882772a..4e4aaea 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponListVo.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/CouponListVo.java
@@ -12,7 +12,7 @@
@ApiModel
public class CouponListVo {
@ApiModelProperty("优惠券id")
- private Integer id;
+ private Long id;
@ApiModelProperty("优惠券名称")
private String name;
@ApiModelProperty("优惠券类型(1=满减券,2=代金券,3=体验券)")
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java
index 6a21198..2d73f97 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.UserCoupon;
+import com.dsh.activity.model.CouponListVo;
+
+import java.util.List;
/**
* <p>
@@ -13,4 +16,12 @@
*/
public interface UserCouponService extends IService<UserCoupon> {
+
+ /**
+ * 获取购买课程可用优惠券列表
+ * @param uid
+ * @param coursePackageId
+ * @return
+ */
+ List<CouponListVo> queryAvailableCouponList(Integer uid, Integer coursePackageId, Double price, String lon, String lat) throws Exception;
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
index a61bebf..8187b53 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
@@ -6,10 +6,10 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.Coupon;
-import com.dsh.activity.feginClient.account.AppUserClient;
-import com.dsh.activity.feginClient.account.StudentClient;
-import com.dsh.activity.feginClient.account.model.AppUser;
-import com.dsh.activity.feginClient.account.model.Student;
+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.account.model.Student;
import com.dsh.activity.mapper.CouponMapper;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.service.ICouponService;
@@ -65,7 +65,7 @@
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (Coupon coupon : list) {
CouponListVo couponListVo = new CouponListVo();
- couponListVo.setId(coupon.getId());
+ couponListVo.setId(coupon.getId().longValue());
couponListVo.setName(coupon.getName());
couponListVo.setType(coupon.getType());
couponListVo.setEffectiveTime(sdf.format(coupon.getStartTime()) + "-" + sdf.format(coupon.getEndTime()));
@@ -75,7 +75,7 @@
couponListVo.setUseCondition("满" + jsonObject.getDouble("num1") + "元可用");
couponListVo.setFavorable(jsonObject.getDouble("num2") + "元");
}
- if (coupon.getType() == 2) {//满减{"num1":1}
+ if (coupon.getType() == 2) {//代金券{"num1":1}
JSONObject jsonObject = JSON.parseObject(content);
couponListVo.setUseCondition("");
couponListVo.setFavorable(jsonObject.getDouble("num1") + "元");
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
index d646a5b..c8441cd 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
@@ -1,10 +1,23 @@
package com.dsh.activity.service.impl;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.UserCoupon;
+import com.dsh.activity.feignclient.course.CoursePackageClient;
+import com.dsh.activity.feignclient.course.model.CoursePackage;
import com.dsh.activity.mapper.UserCouponMapper;
+import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.service.UserCouponService;
+import com.dsh.activity.util.GDMapGeocodingUtil;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -17,4 +30,61 @@
@Service
public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService {
+ @Resource
+ private CoursePackageClient coursePackageClient;
+
+ @Autowired
+ private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+
+ /**
+ * 获取购买课程可用优惠券列表
+ * @param uid
+ * @param coursePackageId
+ * @return
+ */
+ @Override
+ public List<CouponListVo> queryAvailableCouponList(Integer uid, Integer coursePackageId, Double price, String lon, String lat) throws Exception {
+ CoursePackage coursePackage = coursePackageClient.queryCoursePackageById(coursePackageId);
+ Integer storeId = coursePackage.getStoreId();
+ Map<String, String> geocode = gdMapGeocodingUtil.geocode(lon, lat);
+ String provinceCode = geocode.get("provinceCode");
+ String cityCode = geocode.get("cityCode");
+ List<Map<String, Object>> userCoupons = this.baseMapper.queryAvailableCouponList(uid, storeId, provinceCode, cityCode);
+ List<CouponListVo> listVos = new ArrayList<>();
+ for (Map<String, Object> userCoupon : userCoupons) {
+ Integer type = Integer.valueOf(userCoupon.get("type").toString());
+ CouponListVo couponListVo = new CouponListVo();
+ couponListVo.setId(Long.valueOf(userCoupon.get("id").toString()));
+ couponListVo.setName(userCoupon.get("name").toString());
+ couponListVo.setType(type);
+ couponListVo.setEffectiveTime(userCoupon.get("endTime").toString());
+ String content = userCoupon.get("content").toString();
+ if (type == 1) {//满减{"num1":1,"num2":1}
+ JSONObject jsonObject = JSON.parseObject(content);
+ Double num1 = jsonObject.getDouble("num1");
+ if(price.compareTo(num1) <= 0){
+ continue;
+ }
+ couponListVo.setUseCondition("满" + num1 + "元可用");
+ couponListVo.setFavorable(jsonObject.getDouble("num2") + "元");
+ }
+ if (type == 2) {//代金券{"num1":1}
+ JSONObject jsonObject = JSON.parseObject(content);
+ Double num1 = jsonObject.getDouble("num1");
+ if(price.compareTo(num1) <= 0){
+ continue;
+ }
+ couponListVo.setUseCondition("");
+ couponListVo.setFavorable(num1 + "元");
+ }
+ if (type == 3) {//体验券{"num1":1}
+ JSONObject jsonObject = JSON.parseObject(content);
+ couponListVo.setUseCondition("");
+ couponListVo.setFavorable(jsonObject.getString("num1"));
+ }
+ listVos.add(couponListVo);
+ }
+ return listVos;
+ }
}
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
new file mode 100644
index 0000000..5d97b54
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/GDMapGeocodingUtil.java
@@ -0,0 +1,148 @@
+package com.dsh.activity.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.dsh.activity.util.httpClinet.HttpClientUtil;
+import com.dsh.activity.util.httpClinet.HttpResult;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 高德地图的地理编码工具类
+ */
+@Component
+public class GDMapGeocodingUtil {
+
+ private String key = "fb131ad2dbfb3f39d7d37d244b92aa2d";
+
+
+ /**
+ * 将行政区域名称转化为坐标
+ * @param province
+ * @param city
+ * @param county
+ * @param address
+ * @return
+ */
+ public Map<String, Object> geocoding(String province, String city, String county, String address) throws Exception{
+ Map<String, Object> map = new HashMap<>();
+ if(ToolUtil.isEmpty(province)){
+ map.put("status", -1);
+ map.put("data", "省不能为空");
+ return map;
+ }
+ if((ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(county)) || (ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(address))){
+ map.put("status", -1);
+ map.put("data", "市不能为空");
+ return map;
+ }
+ if((ToolUtil.isEmpty(county) && ToolUtil.isNotEmpty(address))){
+ map.put("status", -1);
+ map.put("data", "县/区不能为空");
+ return map;
+ }
+
+ String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON";
+ url += "&address=" + province + (ToolUtil.isNotEmpty(city) ? city : "") + (ToolUtil.isNotEmpty(county) ? county : "") + (ToolUtil.isNotEmpty(address) ? address : "");
+ HttpResult httpResult = HttpClientUtil.pushHttpRequset("GET", url, null, null, "json");
+ JSONObject jsonObject = JSON.parseObject(httpResult.getData());
+ String status = jsonObject.getString("status");
+ List<String> list = new ArrayList<>();
+
+ if(status.equals("1")){
+ JSONArray geocodes = jsonObject.getJSONArray("geocodes");
+ for(int i = 0; i < geocodes.size(); i++){
+ String location = geocodes.getJSONObject(i).getString("location");
+ list.add(location);
+ }
+ }
+ map.put("status", 0);
+ map.put("data", list);
+ return map;
+ }
+
+
+
+ public Map<String, Object> geocoding(String address) throws Exception{
+ Map<String, Object> map = new HashMap<>();
+ String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON&address=" + address;
+ HttpResult httpResult = HttpClientUtil.pushHttpRequset("GET", url, null, null, "json");
+ JSONObject jsonObject = JSON.parseObject(httpResult.getData());
+ String status = jsonObject.getString("status");
+ List<String> list = new ArrayList<>();
+
+ if(status.equals("1")){
+ JSONArray geocodes = jsonObject.getJSONArray("geocodes");
+ for(int i = 0; i < geocodes.size(); i++){
+ String location = geocodes.getJSONObject(i).getString("location");
+ list.add(location);
+ }
+ }
+ map.put("status", 0);
+ map.put("data", list);
+ return map;
+ }
+
+
+
+ /**
+ * 根据经纬度获取行政区域信息
+ * @param lon
+ * @param lan
+ * @return
+ * @throws Exception
+ */
+ public Map<String, String> geocode(String lon, String lan) throws Exception{
+ String url = "https://restapi.amap.com/v3/geocode/regeo?key=" + key + "&location=" + lon + "," + lan;
+ HttpResult httpResult = HttpClientUtil.pushHttpRequset("GET", url, null, null, "json");
+ JSONObject jsonObject = JSON.parseObject(httpResult.getData());
+ Map<String, String> map = new HashMap<>();
+
+ if(jsonObject.getString("status").equals("1")){
+ JSONObject regeocode = jsonObject.getJSONObject("regeocode");
+ JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
+ String address = regeocode.getString("formatted_address");
+ map.put("address", address);
+ String code = addressComponent.getString("adcode");
+ String province = addressComponent.getString("province");
+ String city = addressComponent.getString("city");
+ String district = addressComponent.getString("district");
+ map.put("province", province);
+ map.put("provinceCode", code.substring(0, 2) + "0000");
+ map.put("city", city);
+ map.put("cityCode", code.substring(0, 4) + "00");
+ map.put("district", district);
+ map.put("districtCode", code);
+ }
+ return map;
+ }
+
+
+ /**
+ * 坐标转换
+ * @param locations 经度和纬度用","分割,经度在前,纬度在后,经纬度小数点后不得超过6位。多个坐标对之间用”|”进行分隔最多支持40对坐标。
+ * @param coordsys 可选值:gps;mapbar;baidu;autonavi(不进行转换)
+ * @return
+ * @throws Exception
+ */
+ public Map<String, String> convert(String locations, String coordsys) throws Exception{
+ String url = "https://restapi.amap.com/v3/assistant/coordinate/convert?locations=" + locations + "&coordsys=" + coordsys + "&output=json&key=" + key;
+ HttpResult httpResult = HttpClientUtil.pushHttpRequset("GET", url, null, null, "json");
+ JSONObject jsonObject = JSON.parseObject(httpResult.getData());
+ Map<String, String> map = new HashMap<>();
+ if("1".equals(jsonObject.getString("status"))){
+ map.put("code", jsonObject.getString("infocode"));//"10000"
+ map.put("info", jsonObject.getString("info"));//status为0时,info返回错误原;否则返回“OK”。
+ map.put("locations", jsonObject.getString("locations").split(";")[0]);//转换之后的坐标。若有多个坐标,则用 “;”进行区分和间隔
+ }else{
+ map.put("code", jsonObject.getString("infocode"));
+ map.put("info", jsonObject.getString("info"));//status为0时,info返回错误原;否则返回“OK”。
+ }
+ return map;
+ }
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/ToolUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/ToolUtil.java
new file mode 100644
index 0000000..cce7ff1
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/ToolUtil.java
@@ -0,0 +1,544 @@
+/**
+ * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.dsh.activity.util;
+
+
+
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Array;
+import java.math.BigDecimal;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.Map.Entry;
+
+/**
+ * 高频方法集合类
+ */
+public class ToolUtil {
+
+ /**
+ * 获取随机位数的字符串
+ *
+ * @author fengshuonan
+ * @Date 2017/8/24 14:09
+ */
+ public static String getRandomString(int length) {
+ String base = "abcdefghijklmnopqrstuvwxyz0123456789";
+ Random random = new Random();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < length; i++) {
+ int number = random.nextInt(base.length());
+ sb.append(base.charAt(number));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 判断一个对象是否是时间类型
+ *
+ * @author stylefeng
+ * @Date 2017/4/18 12:55
+ */
+ public static String dateType(Object o) {
+ if (o instanceof Date) {
+ return DateUtil.getDay((Date) o);
+ } else {
+ return o.toString();
+ }
+ }
+
+ /**
+ * 获取异常的具体信息
+ *
+ * @author fengshuonan
+ * @Date 2017/3/30 9:21
+ * @version 2.0
+ */
+ public static String getExceptionMsg(Exception e) {
+ StringWriter sw = new StringWriter();
+ try {
+ e.printStackTrace(new PrintWriter(sw));
+ } finally {
+ try {
+ sw.close();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+ return sw.getBuffer().toString().replaceAll("\\$", "T");
+ }
+
+ /**
+ * 比较两个对象是否相等。<br>
+ * 相同的条件有两个,满足其一即可:<br>
+ * 1. obj1 == null && obj2 == null; 2. obj1.equals(obj2)
+ *
+ * @param obj1 对象1
+ * @param obj2 对象2
+ * @return 是否相等
+ */
+ public static boolean equals(Object obj1, Object obj2) {
+ return (obj1 != null) ? (obj1.equals(obj2)) : (obj2 == null);
+ }
+
+ /**
+ * 计算对象长度,如果是字符串调用其length函数,集合类调用其size函数,数组调用其length属性,其他可遍历对象遍历计算长度
+ *
+ * @param obj 被计算长度的对象
+ * @return 长度
+ */
+ public static int length(Object obj) {
+ if (obj == null) {
+ return 0;
+ }
+ if (obj instanceof CharSequence) {
+ return ((CharSequence) obj).length();
+ }
+ if (obj instanceof Collection) {
+ return ((Collection<?>) obj).size();
+ }
+ if (obj instanceof Map) {
+ return ((Map<?, ?>) obj).size();
+ }
+
+ int count;
+ if (obj instanceof Iterator) {
+ Iterator<?> iter = (Iterator<?>) obj;
+ count = 0;
+ while (iter.hasNext()) {
+ count++;
+ iter.next();
+ }
+ return count;
+ }
+ if (obj instanceof Enumeration) {
+ Enumeration<?> enumeration = (Enumeration<?>) obj;
+ count = 0;
+ while (enumeration.hasMoreElements()) {
+ count++;
+ enumeration.nextElement();
+ }
+ return count;
+ }
+ if (obj.getClass().isArray() == true) {
+ return Array.getLength(obj);
+ }
+ return -1;
+ }
+
+ /**
+ * 对象中是否包含元素
+ *
+ * @param obj 对象
+ * @param element 元素
+ * @return 是否包含
+ */
+ public static boolean contains(Object obj, Object element) {
+ if (obj == null) {
+ return false;
+ }
+ if (obj instanceof String) {
+ if (element == null) {
+ return false;
+ }
+ return ((String) obj).contains(element.toString());
+ }
+ if (obj instanceof Collection) {
+ return ((Collection<?>) obj).contains(element);
+ }
+ if (obj instanceof Map) {
+ return ((Map<?, ?>) obj).values().contains(element);
+ }
+
+ if (obj instanceof Iterator) {
+ Iterator<?> iter = (Iterator<?>) obj;
+ while (iter.hasNext()) {
+ Object o = iter.next();
+ if (equals(o, element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (obj instanceof Enumeration) {
+ Enumeration<?> enumeration = (Enumeration<?>) obj;
+ while (enumeration.hasMoreElements()) {
+ Object o = enumeration.nextElement();
+ if (equals(o, element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (obj.getClass().isArray() == true) {
+ int len = Array.getLength(obj);
+ for (int i = 0; i < len; i++) {
+ Object o = Array.get(obj, i);
+ if (equals(o, element)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 对象是否不为空(新增)
+ *
+ * @param o String,List,Map,Object[],int[],long[]
+ * @return
+ */
+ public static boolean isNotEmpty(Object o) {
+ return !isEmpty(o);
+ }
+
+ /**
+ * 对象是否为空
+ *
+ * @param o String,List,Map,Object[],int[],long[]
+ * @return
+ */
+ @SuppressWarnings("rawtypes")
+ public static boolean isEmpty(Object o) {
+ if (o == null) {
+ return true;
+ }
+ if (o instanceof String) {
+ if (o.toString().trim().equals("")) {
+ return true;
+ }
+ } else if (o instanceof List) {
+ if (((List) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Map) {
+ if (((Map) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Set) {
+ if (((Set) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Object[]) {
+ if (((Object[]) o).length == 0) {
+ return true;
+ }
+ } else if (o instanceof int[]) {
+ if (((int[]) o).length == 0) {
+ return true;
+ }
+ } else if (o instanceof long[]) {
+ if (((long[]) o).length == 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 对象组中是否存在 Empty Object
+ *
+ * @param os 对象组
+ * @return
+ */
+ public static boolean isOneEmpty(Object... os) {
+ for (Object o : os) {
+ if (isEmpty(o)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 对象组中是否全是 Empty Object
+ *
+ * @param os
+ * @return
+ */
+ public static boolean isAllEmpty(Object... os) {
+ for (Object o : os) {
+ if (!isEmpty(o)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 是否为数字
+ *
+ * @param obj
+ * @return
+ */
+ public static boolean isNum(Object obj) {
+ try {
+ Integer.parseInt(obj.toString());
+ } catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 如果为空, 则调用默认值
+ *
+ * @param str
+ * @return
+ */
+ public static Object getValue(Object str, Object defaultValue) {
+ if (isEmpty(str)) {
+ return defaultValue;
+ }
+ return str;
+ }
+
+
+ /**
+ * 强转->string,并去掉多余空格
+ *
+ * @param str
+ * @return
+ */
+ public static String toStr(Object str) {
+ return toStr(str, "");
+ }
+
+ /**
+ * 强转->string,并去掉多余空格
+ *
+ * @param str
+ * @param defaultValue
+ * @return
+ */
+ public static String toStr(Object str, String defaultValue) {
+ if (null == str) {
+ return defaultValue;
+ }
+ return str.toString().trim();
+ }
+
+ /**
+ * 强转->int
+ *
+ * @param obj
+ * @return
+ */
+// public static int toInt(Object value) {
+// return toInt(value, -1);
+// }
+
+ /**
+ * 强转->int
+ *
+ * @param obj
+ * @param defaultValue
+ * @return
+ */
+// public static int toInt(Object value, int defaultValue) {
+// return Convert.toInt(value, defaultValue);
+// }
+
+ /**
+ * 强转->long
+ *
+ * @param obj
+ * @return
+ */
+// public static long toLong(Object value) {
+// return toLong(value, -1);
+// }
+
+ /**
+ * 强转->long
+ *
+ * @param obj
+ * @param defaultValue
+ * @return
+ */
+// public static long toLong(Object value, long defaultValue) {
+// return Convert.toLong(value, defaultValue);
+// }
+//
+// public static String encodeUrl(String url) {
+// return URLKit.encode(url, CharsetKit.UTF_8);
+// }
+//
+// public static String decodeUrl(String url) {
+// return URLKit.decode(url, CharsetKit.UTF_8);
+// }
+
+ /**
+ * map的key转为小写
+ *
+ * @param map
+ * @return Map<String , Object>
+ */
+ public static Map<String, Object> caseInsensitiveMap(Map<String, Object> map) {
+ Map<String, Object> tempMap = new HashMap<>();
+ for (String key : map.keySet()) {
+ tempMap.put(key.toLowerCase(), map.get(key));
+ }
+ return tempMap;
+ }
+
+ /**
+ * 获取map中第一个数据值
+ *
+ * @param <K> Key的类型
+ * @param <V> Value的类型
+ * @param map 数据源
+ * @return 返回的值
+ */
+ public static <K, V> V getFirstOrNull(Map<K, V> map) {
+ V obj = null;
+ for (Entry<K, V> entry : map.entrySet()) {
+ obj = entry.getValue();
+ if (obj != null) {
+ break;
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * 创建StringBuilder对象
+ *
+ * @return StringBuilder对象
+ */
+ public static StringBuilder builder(String... strs) {
+ final StringBuilder sb = new StringBuilder();
+ for (String str : strs) {
+ sb.append(str);
+ }
+ return sb;
+ }
+
+ /**
+ * 创建StringBuilder对象
+ *
+ * @return StringBuilder对象
+ */
+ public static void builder(StringBuilder sb, String... strs) {
+ for (String str : strs) {
+ sb.append(str);
+ }
+ }
+
+ /**
+ * 去掉指定后缀
+ *
+ * @param str 字符串
+ * @param suffix 后缀
+ * @return 切掉后的字符串,若后缀不是 suffix, 返回原字符串
+ */
+ public static String removeSuffix(String str, String suffix) {
+ if (isEmpty(str) || isEmpty(suffix)) {
+ return str;
+ }
+
+ if (str.endsWith(suffix)) {
+ return str.substring(0, str.length() - suffix.length());
+ }
+ return str;
+ }
+
+ /**
+ * 当前时间
+ *
+ * @author stylefeng
+ * @Date 2017/5/7 21:56
+ */
+ public static String currentTime() {
+ return DateUtil.getTime();
+ }
+
+
+
+ /**
+ * 判断是否是windows操作系统
+ *
+ * @author stylefeng
+ * @Date 2017/5/24 22:34
+ */
+ public static Boolean isWinOs() {
+ String os = System.getProperty("os.name");
+ if (os.toLowerCase().startsWith("win")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * 获取临时目录
+ *
+ * @author stylefeng
+ * @Date 2017/5/24 22:35
+ */
+ public static String getTempPath() {
+ return System.getProperty("java.io.tmpdir");
+ }
+
+ /**
+ * 把一个数转化为int
+ *
+ * @author fengshuonan
+ * @Date 2017/11/15 下午11:10
+ */
+ public static Integer toInt(Object val) {
+ if (val instanceof Double) {
+ BigDecimal bigDecimal = new BigDecimal((Double) val);
+ return bigDecimal.intValue();
+ } else {
+ return Integer.valueOf(val.toString());
+ }
+
+ }
+
+ /**
+ * 获取项目路径
+ */
+ public static String getWebRootPath(String filePath) {
+ try {
+ String path = ToolUtil.class.getClassLoader().getResource("").toURI().getPath();
+ path = path.replace("/WEB-INF/classes/", "");
+ path = path.replace("/target/classes/", "");
+ path = path.replace("file:/", "");
+ if (ToolUtil.isEmpty(filePath)) {
+ return path;
+ } else {
+ return path + "/" + filePath;
+ }
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 获取文件后缀名 不包含点
+ */
+ public static String getFileSuffix(String fileWholeName) {
+ if (ToolUtil.isEmpty(fileWholeName)) {
+ return "none";
+ }
+ int lastIndexOf = fileWholeName.lastIndexOf(".");
+ return fileWholeName.substring(lastIndexOf + 1);
+ }
+}
\ No newline at end of file
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpClientUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpClientUtil.java
new file mode 100644
index 0000000..20112fe
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpClientUtil.java
@@ -0,0 +1,267 @@
+package com.dsh.activity.util.httpClinet;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.SSLContext;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.security.KeyStore;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * http工具类
+ */
+public class HttpClientUtil {
+
+ private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
+
+ private static PoolingHttpClientConnectionManager connectionManager;
+
+
+ {
+ //1.创建连接池管理器
+ connectionManager = new PoolingHttpClientConnectionManager(60000,
+ TimeUnit.MILLISECONDS);
+ connectionManager.setMaxTotal(1000);
+ connectionManager.setDefaultMaxPerRoute(50);
+ }
+
+ /**
+ * 创建一个httpClient对象
+ */
+ private static CloseableHttpClient getHttpCline(){
+ return HttpClients.custom()
+ .setConnectionManager(connectionManager)
+ .disableAutomaticRetries()
+ .build();
+ }
+
+ private static RequestConfig getRequestConfig(){
+ RequestConfig.Builder builder = RequestConfig.custom();
+ builder.setSocketTimeout(60000)//3.1设置客户端等待服务端返回数据的超时时间
+ .setConnectTimeout(30000)//3.2设置客户端发起TCP连接请求的超时时间
+ .setExpectContinueEnabled(true)
+ .setConnectionRequestTimeout(30000);//3.3设置客户端从连接池获取链接的超时时间
+ return builder.build();
+ }
+
+
+
+ /**
+ * 创建一个POST请求实例
+ * @param url 请求地址
+ * @param params 请求参数
+ */
+ private static CloseableHttpResponse setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{
+ HttpPost httpPost = new HttpPost(url);
+ httpPost.setConfig(getRequestConfig());
+ if(null != header){
+ for(String key : header.keySet()){
+ httpPost.setHeader(key, header.get(key));
+ }
+ }
+ List<NameValuePair> list = new ArrayList<>();
+ if(null != params){
+ Set<String> keys = params.keySet();
+ for(String key : keys){
+ list.add(new BasicNameValuePair(key, null == params.get(key) ? null : params.get(key).toString()));
+ }
+ }
+ switch (contentType){
+ case "form":
+ httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
+ break;
+ case "json":
+ ObjectMapper objectMapper = new ObjectMapper();
+ String s =objectMapper.writeValueAsString(params);
+ httpPost.setEntity(new StringEntity(s, ContentType.create(ContentType.APPLICATION_JSON.getMimeType(), Charset.forName("UTF-8"))));
+ break;
+ }
+ return getHttpCline().execute(httpPost);
+ }
+
+
+ /**
+ * 获取get请求实例
+ * @param url 请求地址
+ * @param params 请求参数
+ */
+ private static CloseableHttpResponse setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header) throws Exception{
+ StringBuffer sb = new StringBuffer();
+ String p = "";
+ if(null != params){
+ Set<String> keys = params.keySet();
+ for(String key : keys){
+ sb.append(key + "=" + params.get(key) + "&");
+ }
+ p = "?" + sb.substring(0, sb.length() - 1);
+ }
+ HttpGet httpGet = new HttpGet(url + p);
+ httpGet.setConfig(getRequestConfig());
+ if(null != header){
+ for(String key : header.keySet()){
+ httpGet.setHeader(key, header.get(key));
+ }
+ }
+ return getHttpCline().execute(httpGet);
+ }
+
+
+ /**
+ * 发送http请求
+ * @param mothed "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS"
+ * @param url 请求地址
+ * @param params 请求参数
+ * @param header 请求头
+ * @param contentType 参数请求方式form/json
+ * @return
+ */
+ public static HttpResult pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{
+ String randome = UUID.randomUUID().toString();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
+ logger.info(sdf.format(new Date()) + "----(" + randome + ")请求参数:" + JSON.toJSONString(params));
+ CloseableHttpResponse httpResponse = null;
+ switch (mothed){
+ case "GET":
+ httpResponse = setGetHttpRequset(url, params, header);
+ break;
+ case "POST":
+ httpResponse = setPostHttpRequset(url, params, header, contentType);
+ break;
+ }
+ int statusCode = httpResponse.getStatusLine().getStatusCode();
+ String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
+ logger.info(sdf.format(new Date()) + "----(" + randome + ")返回结果:" + content);
+ HttpResult httpResult = HttpResult.getHttpResult(statusCode, content);
+ close(httpResponse);
+ return httpResult;
+ }
+
+
+ /**
+ * 发送XML请求
+ * @param url 请求地址
+ * @param xml XML数据
+ * @param header 自定义请求头
+ * @return
+ */
+ public static HttpResult pushHttpRequsetXml(String url, String xml, Map<String, String> header) throws Exception{
+ HttpPost httpPost = new HttpPost(url);
+ httpPost.setConfig(getRequestConfig());
+ for(String key : header.keySet()){
+ httpPost.setHeader(key, header.get(key));
+ }
+ httpPost.setHeader("Content-Type", "application/xml");
+ httpPost.setEntity(new StringEntity(xml, "UTF-8"));
+ CloseableHttpResponse httpResponse = getHttpCline().execute(httpPost);
+ int statusCode = httpResponse.getStatusLine().getStatusCode();
+ String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
+ HttpResult httpResult = HttpResult.getHttpResult(statusCode, content);
+ close(httpResponse);
+ return httpResult;
+ }
+
+
+
+ /**
+ * 请求https发送XML请求
+ * @param url 接口路径
+ * @param xml 内容
+ * @param header 请求头
+ * @param certPassword 证书密码
+ * @param certPath 证书路径
+ * @param certType 证书类型
+ * @return
+ * @throws Exception
+ */
+ public String pushHttpsRequsetXml(String url, String xml, Map<String, String> header, String certPassword, String certPath, String certType) throws Exception{
+ HttpPost httpPost = new HttpPost(url);
+ for(String key : header.keySet()){
+ httpPost.setHeader(key, header.get(key));
+ }
+ httpPost.setHeader("Content-Type", "application/xml");
+ httpPost.setEntity(new StringEntity(xml, "UTF-8"));
+ CloseableHttpClient httpCline = this.initCert(certPassword, certPath, certType);
+ CloseableHttpResponse httpResponse = httpCline.execute(httpPost);
+ String content = null;
+ if(httpResponse.getStatusLine().getStatusCode() == 200){
+ content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
+ }else{
+ content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity());
+ }
+ this.close(httpResponse);
+ httpCline.close();
+ return content;
+ }
+
+
+ /**
+ * 初始化https对象(带证书)
+ * @param key 证书密码
+ * @param certPath 证书路径
+ * @param certType 证书类型
+ * @throws Exception
+ */
+ private CloseableHttpClient initCert(String key, String certPath, String certType) throws Exception {
+ KeyStore keyStore = KeyStore.getInstance(certType);
+ InputStream inputStream = new FileInputStream(new File(certPath));
+ try {
+ keyStore.load(inputStream, key.toCharArray());
+ } finally {
+ inputStream.close();
+ }
+ SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build();
+ SSLConnectionSocketFactory sslsf =
+ new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+ }
+
+
+
+ /**
+ * 关闭资源
+ */
+ private static void close(CloseableHttpResponse httpResponse){
+ try {
+ if(null != httpResponse){
+ EntityUtils.consume(httpResponse.getEntity());//此处高能,通过源码分析,由EntityUtils是否回收HttpEntity
+ httpResponse.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }finally {
+ try {
+ if(null != httpResponse){
+ httpResponse.close();
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpResult.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpResult.java
new file mode 100644
index 0000000..6192740
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/httpClinet/HttpResult.java
@@ -0,0 +1,31 @@
+package com.dsh.activity.util.httpClinet;
+
+import lombok.Data;
+
+/**
+ * http请求返回封装
+ */
+@Data
+public class HttpResult {
+ /**
+ * 返回状态码
+ */
+ private Integer code;
+ /**
+ * 返回结果
+ */
+ private String data;
+
+ /**
+ * 返回封装结果
+ * @param code
+ * @param data
+ * @return
+ */
+ public static HttpResult getHttpResult(Integer code, String data){
+ HttpResult httpResult = new HttpResult();
+ httpResult.setCode(code);
+ httpResult.setData(data);
+ return httpResult;
+ }
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java
new file mode 100644
index 0000000..ea4cd0f
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java
@@ -0,0 +1,86 @@
+package com.dsh.config.Sharding_jdbc;
+
+
+/**
+* 数据源
+* @author pzb
+* @Date 2022/11/21 21:13
+*/
+public class DatasourceModel {
+ private String url;
+ private String username;
+ private String password;
+ private String driverClassName;
+ private Integer maxActive;
+ private Long maxWait;
+ private Integer minIdle;
+ private Integer initialSize;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getDriverClassName() {
+ return driverClassName;
+ }
+
+ public void setDriverClassName(String driverClassName) {
+ this.driverClassName = driverClassName;
+ }
+
+ public DatasourceModel getDatasourceModel(){
+ return this;
+ }
+
+ public Integer getMaxActive() {
+ return maxActive;
+ }
+
+ public void setMaxActive(Integer maxActive) {
+ this.maxActive = maxActive;
+ }
+
+ public Long getMaxWait() {
+ return maxWait;
+ }
+
+ public void setMaxWait(Long maxWait) {
+ this.maxWait = maxWait;
+ }
+
+ public Integer getMinIdle() {
+ return minIdle;
+ }
+
+ public void setMinIdle(Integer minIdle) {
+ this.minIdle = minIdle;
+ }
+
+ public Integer getInitialSize() {
+ return initialSize;
+ }
+
+ public void setInitialSize(Integer initialSize) {
+ this.initialSize = initialSize;
+ }
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java
new file mode 100644
index 0000000..e1bbbaa
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java
@@ -0,0 +1,18 @@
+package com.dsh.config.Sharding_jdbc;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+
+/**
+* 数据源配置
+* @author pzb
+* @Date 2022/11/21 20:32
+*/
+@Component
+@PropertySource(value = "classpath:sharding-jdbc.properties")
+@ConfigurationProperties(prefix = "datasource.master0")
+public class Master0DataSource extends DatasourceModel {
+
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
new file mode 100644
index 0000000..75f7e69
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -0,0 +1,113 @@
+package com.dsh.config.Sharding_jdbc;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.*;
+
+@Configuration
+public class ShardingConfig {
+
+ @Autowired
+ private Master0DataSource master0DataSource;
+
+
+ @Bean
+ public DataSource getDataSource(){
+ DataSource dataSource = null;
+ try {
+ Properties properties = new Properties();
+ properties.setProperty("sql-show", "true");
+ String databaseName = "m_0";//真实数据源名称,多个数据源用逗号区分
+ dataSource = ShardingSphereDataSourceFactory.createDataSource(databaseName, createDataSourceMap(), createShardingRuleConfiguration(), properties);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return dataSource;
+ }
+
+
+ /**
+ * 配置多数据源
+ * @return
+ */
+ private Map<String, DataSource> createDataSourceMap() {
+ Map<String, DataSource> dataSourceMap = new HashMap<>();
+ // 配置第 1 个数据源
+ DruidDataSource dataSource1 = new DruidDataSource();
+ dataSource1.setDriverClassName(master0DataSource.getDriverClassName());
+ dataSource1.setUrl(master0DataSource.getUrl());
+ dataSource1.setUsername(master0DataSource.getUsername());
+ dataSource1.setPassword(master0DataSource.getPassword());
+ dataSource1.setMaxActive(master0DataSource.getMaxActive());
+ dataSource1.setMaxWait(master0DataSource.getMaxWait());
+ dataSource1.setMinIdle(master0DataSource.getMinIdle());
+ dataSource1.setInitialSize(master0DataSource.getInitialSize());
+ dataSourceMap.put("m_0", dataSource1);
+ return dataSourceMap;
+ }
+
+
+ /**
+ * 分片配置
+ * @return
+ */
+ private Collection<RuleConfiguration> createShardingRuleConfiguration() {
+ LinkedList<RuleConfiguration> linkedList = new LinkedList();
+
+ //分片规则配置
+ ShardingRuleConfiguration result1 = new ShardingRuleConfiguration();
+ result1.getTables().add(getUserCouponTableRuleConfiguration());
+ Properties props1 = new Properties();
+ props1.setProperty("algorithm-expression", "t_user_coupon$->{userId % 5 + 1}");
+ result1.getShardingAlgorithms().put("t_user_coupon-inline", new AlgorithmConfiguration("INLINE", props1));
+ result1.getKeyGenerators().put("t_user_coupon-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+
+ //分片规则配置
+ result1.getTables().add(getUserPointsMerchandiseTableRuleConfiguration());
+ Properties props2 = new Properties();
+ props2.setProperty("algorithm-expression", "t_user_points_merchandise$->{userId % 5 + 1}");
+ result1.getShardingAlgorithms().put("t_user_points_merchandise-inline", new AlgorithmConfiguration("INLINE", props2));
+ result1.getKeyGenerators().put("t_user_points_merchandise-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+
+ linkedList.add(result1);
+
+ return linkedList;
+ }
+
+ /**
+ * 分片算法配置
+ * @return
+ */
+ private ShardingTableRuleConfiguration getUserCouponTableRuleConfiguration() {
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_user_coupon", "m$->{0}.t_user_coupon->{1..5}");//50
+ result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("userId", "t_user_coupon-inline"));
+ result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_user_coupon-snowflake"));
+ return result;
+ }
+
+
+
+ /**
+ * 分片算法配置
+ * @return
+ */
+ private ShardingTableRuleConfiguration getUserPointsMerchandiseTableRuleConfiguration() {
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_user_points_merchandise", "m$->{0}.t_user_points_merchandise$->{1..5}");//30
+ result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("userId", "t_user_points_merchandise-inline"));
+ result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_user_points_merchandise-snowflake"));
+ return result;
+ }
+
+}
diff --git a/cloud-server-activity/src/main/resources/mapper/UserCouponMapper.xml b/cloud-server-activity/src/main/resources/mapper/UserCouponMapper.xml
index 9a81eac..4a2ac89 100644
--- a/cloud-server-activity/src/main/resources/mapper/UserCouponMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/UserCouponMapper.xml
@@ -5,4 +5,20 @@
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
+
+
+ <select id="queryAvailableCouponList" resultType="map">
+ select
+ a.id,
+ b.`name`,
+ b.type,
+ b.content,
+ DATE_FORMAT('%y-%M-%d', b.startTime) as startTime,
+ DATE_FORMAT('%y-%M-%d', b.endTime) as endTime
+ from t_user_coupon a
+ left join t_coupon b on (a.couponId = b.id)
+ where a.`status` = 1 and b.type != 3 and a.userId = #{uid} and (
+ b.useScope = 1 or (b.useScope = 2 and provinceCode = #{provinceCode} and cityCode = #{cityCode})
+ or (b.useScope = 3 and b.id in (select couponId from t_coupon_store where storeId = #{storeId})))
+ </select>
</mapper>
diff --git a/cloud-server-activity/src/main/resources/sharding-jdbc.properties b/cloud-server-activity/src/main/resources/sharding-jdbc.properties
new file mode 100644
index 0000000..54db095
--- /dev/null
+++ b/cloud-server-activity/src/main/resources/sharding-jdbc.properties
@@ -0,0 +1,25 @@
+datasource.names=master0
+
+#��������
+datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
+datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
+datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
+datasource.master0.username=root
+datasource.master0.password=123456
+datasource.master0.maxActive=20
+datasource.master0.maxWait=60000
+datasource.master0.minIdle=5
+datasource.master0.initialSize=2
+
+#��������
+#datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
+#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
+#datasource.master0.url=jdbc:mysql://110.239.68.140:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B7
+#datasource.master0.username=root
+#datasource.master0.password=G4LLlNouAGH1dijbyU&xDo$X
+#datasource.master0.maxActive=200
+#datasource.master0.maxWait=60000
+#datasource.master0.minIdle=100
+#datasource.master0.initialSize=100
+
+
diff --git a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
index dbac4e9..179ef3d 100644
--- a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
+++ b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -68,7 +68,7 @@
//分片规则配置
ShardingRuleConfiguration result1 = new ShardingRuleConfiguration();
- result1.getTables().add(gettCoursePackagePaymentTableRuleConfiguration());
+ result1.getTables().add(getCoursePackagePaymentTableRuleConfiguration());
Properties props1 = new Properties();
props1.setProperty("algorithm-expression", "t_course_package_payment$->{appUserId % 5 + 1}");
result1.getShardingAlgorithms().put("t_course_package_payment-inline", new AlgorithmConfiguration("INLINE", props1));
@@ -90,7 +90,7 @@
* 分片算法配置
* @return
*/
- private ShardingTableRuleConfiguration gettCoursePackagePaymentTableRuleConfiguration() {
+ private ShardingTableRuleConfiguration getCoursePackagePaymentTableRuleConfiguration() {
ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_course_package_payment", "m$->{0}.t_course_package_payment$->{1..5}");//50
result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("appUserId", "t_course_package_payment-inline"));
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_course_package_payment-snowflake"));
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 ac142ba..0400ac4 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
@@ -5,10 +5,7 @@
import com.dsh.course.entity.TCourse;
import com.dsh.course.entity.TCoursePackageType;
import com.dsh.course.feignclient.model.ExerciseVideo;
-import com.dsh.course.model.BaseVo;
-import com.dsh.course.model.CoursePackageInfo;
-import com.dsh.course.model.CoursePackageList;
-import com.dsh.course.model.CoursePackageListVo;
+import com.dsh.course.model.*;
import com.dsh.course.service.TCoursePackageService;
import com.dsh.course.service.TCoursePackageTypeService;
import com.dsh.course.service.TCourseService;
@@ -141,4 +138,22 @@
}
}
+
+
+
+
+
+ public ResultUtil paymentCourse(@RequestBody PaymentCourseVo paymentCourseVo){
+ try {
+ Integer uid = tokenUtil.getUserIdFormRedis();
+ if(null == uid){
+ return ResultUtil.tokenErr();
+ }
+ return coursePackageService.paymentCourse(uid, paymentCourseVo);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
}
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
new file mode 100644
index 0000000..3c83277
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -0,0 +1,36 @@
+package com.dsh.course.controller;
+
+import com.dsh.course.entity.TCoursePackage;
+import com.dsh.course.service.TCoursePackageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 9:58
+ */
+@RestController
+@RequestMapping("")
+public class CoursePackageController {
+
+ @Autowired
+ private TCoursePackageService coursePackageService;
+
+
+ /**
+ * 根据id获取课包
+ * @param id
+ * @return
+ */
+ @ResponseBody
+ @PostMapping("/coursePackage/queryCoursePackageById")
+ public TCoursePackage queryCoursePackageById(@RequestBody Integer id){
+ try {
+ TCoursePackage coursePackage = coursePackageService.getById(id);
+ return coursePackage;
+ }catch (Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
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 ab7af9d..66e508c 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
@@ -159,7 +159,7 @@
tCoursePackagePayments.forEach(cou -> {
CourseHoursType hoursType = new CourseHoursType();
hoursType.setCourseConfigId(cou.getId());
- hoursType.setCourseConfigId(cou.getClassHours());
+ hoursType.setCourseHourNums(cou.getClassHours());
typeList.add(hoursType);
});
TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0);
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java
index d6c3bc8..f58b478 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -140,6 +141,7 @@
/**
* 添加时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date insertTime;
}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
index b60ce2b..2869623 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
@@ -51,6 +51,14 @@
*/
private Integer classHours;
/**
+ * 原价
+ */
+ private Double originalPrice;
+ /**
+ * 优惠券id
+ */
+ private Long userCouponId;
+ /**
* 现金支付价格
*/
private BigDecimal cashPayment;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
deleted file mode 100644
index cc51aa7..0000000
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dsh.course.feignclient;
-
-
-
-import com.dsh.course.feignclient.model.*;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import java.util.List;
-
-@FeignClient(value = "mb-cloud-course")
-public interface CoursePaymentClient {
-
-
- @PostMapping("/coursePack/queryPayment")
- List<StuCourseResp> getStuCoursePayment();
-
- @PostMapping("/coursePack/storeOfCourse")
- List<CourseOfStoreVo> getStoreOfCourses();
-
- @PostMapping("/coursePack/stuOfCourses")
- StuWithCoursesListVo getStuOfCoursesDetails(@RequestBody Integer stuId,@RequestBody Integer appUserId);
-
- @PostMapping("/coursePack/continuingCourse")
- StudentOfCourseVo getStudentCourse(@RequestBody Integer courseId,
- @RequestBody Integer stuId,
- @RequestBody Integer appUserId);
-
-}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java
new file mode 100644
index 0000000..8b18450
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java
@@ -0,0 +1,22 @@
+package com.dsh.course.feignclient.activity;
+
+import com.dsh.course.feignclient.activity.model.Coupon;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 21:06
+ */
+@FeignClient("mb-cloud-activity")
+public interface CouponClient {
+
+
+ /**
+ * 根据id获取优惠券
+ * @param id
+ * @return
+ */
+ @PostMapping("/coupon/queryCouponById")
+ Coupon queryCouponById(Integer id);
+}
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
new file mode 100644
index 0000000..4e4b546
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/UserCouponClient.java
@@ -0,0 +1,22 @@
+package com.dsh.course.feignclient.activity;
+
+import com.dsh.course.feignclient.activity.model.UserCoupon;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 20:54
+ */
+@FeignClient("mb-cloud-activity")
+public interface UserCouponClient {
+
+
+ /**
+ * 根据id获取用户优惠券数据
+ * @param id
+ * @return
+ */
+ @PostMapping("/userCoupon/queryUserCouponById")
+ UserCoupon queryUserCouponById(Long id);
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/Coupon.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/Coupon.java
new file mode 100644
index 0000000..eaa0e5f
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/Coupon.java
@@ -0,0 +1,115 @@
+package com.dsh.course.feignclient.activity.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 21:06
+ */
+@Data
+public class Coupon {
+ private Integer id;
+ /**
+ * 优惠券名称
+ */
+ private String name;
+ /**
+ * 优惠券类型(1=满减券,2=代金券,3=体验券)
+ */
+ private Integer type;
+ /**
+ * 优惠券规则JSON
+ */
+ private String content;
+ /**
+ * 优惠券说明
+ */
+ private String illustrate;
+ /**
+ * 发放方式(1=积分购买,2=注册赠送,3=自动发券)
+ */
+ private Integer distributionMethod;
+ /**
+ * 兑换方式(1=积分,2=积分+现金)
+ */
+ private Integer redemptionMethod;
+ /**
+ * 所需现金
+ */
+ private BigDecimal cash;
+ /**
+ * 所属积分
+ */
+ private BigDecimal integral;
+ /**
+ * 用户人群(1=全部用户,2=年度会员,3=已有学员用户)
+ */
+ private Integer userPopulation;
+ /**
+ * 发放数量
+ */
+ private Integer quantityIssued;
+ /**
+ * 限领数量
+ */
+ private Integer pickUpQuantity;
+ /**
+ * 开始时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+ /**
+ * 结束时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+ /**
+ * 使用范围(1=全国,2=指定城市,3=指定门店)
+ */
+ private Integer useScope;
+ /**
+ * 省
+ */
+ private String province;
+ /**
+ * 省编号
+ */
+ private String provinceCode;
+ /**
+ * 市
+ */
+ private String city;
+ /**
+ * 市编号
+ */
+ private String cityCode;
+ /**
+ * 审核状态(1=待审核,2=已通过,3=已拒绝)
+ */
+ private Integer auditStatus;
+ /**
+ * 审核人id
+ */
+ private Integer auditUserId;
+ /**
+ * 审核备注
+ */
+ private String auditRemark;
+ /**
+ * 状态(1=未开始,2=已开始,3=已结束,4=已取消)
+ */
+ private Integer status;
+ /**
+ * 状态(1=正常,2=冻结,3=删除)
+ */
+ private Integer state;
+ /**
+ * 添加时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date insertTime;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/UserCoupon.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/UserCoupon.java
new file mode 100644
index 0000000..9a82e0b
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/UserCoupon.java
@@ -0,0 +1,41 @@
+package com.dsh.course.feignclient.activity.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 20:55
+ */
+@Data
+public class UserCoupon {
+ private Long id;
+ /**
+ * 优惠券id
+ */
+ private Integer couponId;
+ /**
+ * 用户id
+ */
+ private Integer userId;
+ /**
+ * 状态(1=待核销,2=已核销)
+ */
+ private Integer status;
+ /**
+ * 核销人员id
+ */
+ private Integer verificationUserId;
+ /**
+ * 核销时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date verificationTime;
+ /**
+ * 领取时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date insertTime;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/CourseHoursType.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/CourseHoursType.java
index 3877b72..6042f1d 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/CourseHoursType.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/CourseHoursType.java
@@ -8,7 +8,7 @@
public class CourseHoursType {
@ApiModelProperty(value = "课时id")
- private Integer courseConfigId;
+ private Long courseConfigId;
@ApiModelProperty(value = "课时数")
private Integer courseHourNums;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/PaymentCourseVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/PaymentCourseVo.java
new file mode 100644
index 0000000..3d8757d
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/PaymentCourseVo.java
@@ -0,0 +1,26 @@
+package com.dsh.course.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/5 20:29
+ */
+@Data
+@ApiModel
+public class PaymentCourseVo {
+ @ApiModelProperty(value = "课程id", dataType = "int", required = true)
+ private Integer id;
+ @ApiModelProperty(value = "支付方式(1=微信,2=支付宝,3=玩湃币)", dataType = "int", required = true)
+ private Integer payType;
+ @ApiModelProperty(value = "支付金额", dataType = "double", required = true)
+ private Double price;
+ @ApiModelProperty(value = "课时id", dataType = "int", required = true)
+ private Integer coursePackagePaymentConfigId;
+ @ApiModelProperty(value = "学员id,多个分号分隔", dataType = "string", required = true)
+ private String studentIds;
+ @ApiModelProperty(value = "优惠券id", dataType = "long", required = false)
+ private Long couponId;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java
index 0bb29d3..f45d97a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java
@@ -6,6 +6,8 @@
import com.dsh.course.model.CoursePackageInfo;
import com.dsh.course.model.CoursePackageList;
import com.dsh.course.model.CoursePackageListVo;
+import com.dsh.course.model.PaymentCourseVo;
+import com.dsh.course.util.ResultUtil;
import java.util.List;
@@ -40,4 +42,14 @@
* @throws Exception
*/
CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception;
+
+
+ /**
+ * 课程报名支付
+ * @param uid
+ * @param paymentCourseVo
+ * @return
+ * @throws Exception
+ */
+ ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception;
}
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 cade892..356f640 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
@@ -8,10 +8,15 @@
import com.dsh.course.entity.CoursePackagePaymentConfig;
import com.dsh.course.entity.TCoursePackage;
import com.dsh.course.entity.TCoursePackageDiscount;
+import com.dsh.course.entity.TCoursePackagePayment;
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.feignclient.activity.CouponClient;
+import com.dsh.course.feignclient.activity.UserCouponClient;
+import com.dsh.course.feignclient.activity.model.Coupon;
+import com.dsh.course.feignclient.activity.model.UserCoupon;
import com.dsh.course.feignclient.other.StoreClient;
import com.dsh.course.feignclient.other.model.Store;
import com.dsh.course.mapper.TCoursePackageMapper;
@@ -23,6 +28,7 @@
import com.dsh.course.service.TCoursePackageService;
import com.dsh.course.util.GDMapGeocodingUtil;
import com.dsh.course.util.GeodesyUtil;
+import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -65,6 +71,12 @@
@Resource
private StudentClient studentClient;
+
+ @Resource
+ private UserCouponClient userCouponClient;
+
+ @Resource
+ private CouponClient couponClient;
@@ -273,9 +285,11 @@
coursePackageInfo.setStoreAddress(store.getAddress());
coursePackageInfo.setLon(store.getLon());
coursePackageInfo.setLat(store.getLat());
- 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();
- coursePackageInfo.setDistance(wgs84);
+ 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();
+ coursePackageInfo.setDistance(wgs84);
+ }
String[] split = coursePackage.getClassWeeks().split(";");
coursePackageInfo.setWeeks(Arrays.asList(split));
@@ -290,7 +304,7 @@
coursePackagePaymentConfigVo.setClassHours(coursePackagePaymentConfig.getClassHours());
coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType());
coursePackagePaymentConfigVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
- //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低)
+ //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低)
if(appUser.getIsVip() == 0){//非会员
List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
.eq("type", 1).eq("auditStatus", 2));
@@ -406,4 +420,94 @@
coursePackageInfo.setStudent(studentVo);
return coursePackageInfo;
}
+
+
+ /**
+ * 课程包名支付
+ * @param uid
+ * @param paymentCourseVo
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception {
+ AppUser appUser = appUserClient.queryAppUser(uid);
+ CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null);
+ List<CoursePackagePaymentConfigVo> list = coursePackageInfo.getList();
+
+ String[] students = paymentCourseVo.getStudentIds().split(";");
+ for (CoursePackagePaymentConfigVo coursePackagePaymentConfigVo : list) {
+ if(paymentCourseVo.getCoursePackagePaymentConfigId().compareTo(coursePackagePaymentConfigVo.getId()) == 0){
+ Integer payType = coursePackagePaymentConfigVo.getPayType();
+ if(payType == 1 && paymentCourseVo.getPayType() == 3){//现金支付
+ return ResultUtil.error("支付方式错误,请刷新后重试");
+ }
+ if(payType == 2 && paymentCourseVo.getPayType() != 3){//玩湃币支付
+ return ResultUtil.error("支付方式错误,请刷新后重试");
+ }
+ Double paymentPrice = coursePackagePaymentConfigVo.getPaymentPrice();//支付价
+ paymentPrice = new BigDecimal(students.length).multiply(new BigDecimal(paymentPrice)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+ Double playPaiCoin = coursePackagePaymentConfigVo.getPlayPaiCoin().doubleValue();//支付币
+ playPaiCoin = new BigDecimal(students.length).multiply(new BigDecimal(playPaiCoin)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+ if(payType == 1 && paymentPrice.compareTo(paymentCourseVo.getPrice()) != 0){
+ return ResultUtil.error("支付金额异常,请刷新后重试");
+ }
+ if(payType == 2 && playPaiCoin.compareTo(paymentCourseVo.getPrice()) != 0){
+ return ResultUtil.error("支付金额异常,请刷新后重试");
+ }
+ }
+ }
+
+ Double price = paymentCourseVo.getPrice();//支付金额
+
+ //校验优惠券
+ Long couponId = paymentCourseVo.getCouponId();
+ if(null != couponId && paymentCourseVo.getPayType() != 3){
+ UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId);
+ if(userCoupon.getStatus() == 2){
+ return ResultUtil.error("优惠券已被核销");
+ }
+ Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
+ long time = coupon.getEndTime().getTime();
+ if(System.currentTimeMillis() >= time){
+ return ResultUtil.error("优惠券已过期");
+ }
+ if(coupon.getType() == 1){//满减
+ JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+ Double num1 = jsonObject.getDouble("num1");
+ Double num2 = jsonObject.getDouble("num2");
+ if(price.compareTo(num1) <= 0){
+ return ResultUtil.error("该优惠券无法使用");
+ }
+
+ price = new BigDecimal(price).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+ }
+ if(coupon.getType() == 2){//代金券
+ JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+ Double num1 = jsonObject.getDouble("num1");
+ if(price.compareTo(num1) <= 0){
+ return ResultUtil.error("该优惠券无法使用");
+ }
+ price = new BigDecimal(price).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+ }
+ }
+
+ if(paymentCourseVo.getPayType() == 1){//微信支付
+
+ }
+ if(paymentCourseVo.getPayType() == 2){//支付宝支付
+
+ }
+ if(paymentCourseVo.getPayType() == 3){//玩湃币支付
+
+ }
+ return null;
+ }
+
+
+ public ResultUtil weChatPaymentCourse(Integer uid, PaymentCourseVo paymentCourseVo){
+ TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment();
+// coursePackagePayment
+ return ResultUtil.success();
+ }
}
--
Gitblit v1.7.1