From 35c07cedf67346e9d79449ed185af39a567fa60b Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 05 七月 2023 08:31:11 +0800 Subject: [PATCH] 更新部分功能接口 --- cloud-server-course/pom.xml | 5 cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java | 86 +++++ cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java | 4 cloud-server-account/src/main/java/com/dsh/account/model/StudentVo.java | 20 + cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java | 3 cloud-server-course/src/main/java/com/dsh/course/model/StudentVo.java | 20 + cloud-server-activity/src/main/java/com/dsh/activity/feginClient/account/model/Student.java | 3 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java | 73 ++++ cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml | 1 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java | 59 +++ cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java | 2 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageService.java | 11 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java | 22 + cloud-server-course/src/main/resources/sharding-jdbc.properties | 25 + cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java | 18 + cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentConfigVo.java | 28 + cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 341 ++++++++++++++++---- cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java | 4 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java | 6 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageListVo.java | 4 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageInfo.java | 46 ++ 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 | 113 +++++++ cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java | 28 + cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java | 5 25 files changed, 839 insertions(+), 90 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java index 674b0e8..c264ecf 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java @@ -2,11 +2,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.account.entity.TStudent; +import com.dsh.account.model.StudentVo; +import com.dsh.account.service.TAppUserService; import com.dsh.account.service.TStudentService; +import com.dsh.account.util.ResultUtil; +import com.dsh.account.util.TokenUtil; +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.Date; import java.util.List; /** @@ -19,6 +28,9 @@ @Autowired private TStudentService studentService; + + @Autowired + private TokenUtil tokenUtil; /** @@ -37,4 +49,51 @@ return new ArrayList<>(); } } + + + + @ResponseBody + @PostMapping("/student/queryDefaultStudent") + public TStudent queryDefaultStudent(@RequestBody Integer appUserId){ + try { + TStudent one = studentService.getOne(new QueryWrapper<TStudent>().eq("appUserId", appUserId).eq("isDefault", 1).eq("state", 1)); + return one; + }catch (Exception e){ + e.printStackTrace(); + return null; + } + } + + + @ResponseBody + @PostMapping("/api/student/queryStudentList") + @ApiOperation(value = "获取学员列表", tags = {"APP-课程列表"}) + @ApiImplicitParams({ + @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<StudentVo>> queryStudentList(){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if(null == uid){ + return ResultUtil.tokenErr(); + } + List<TStudent> list = studentService.list(new QueryWrapper<TStudent>().eq("appUserId", uid).eq("state", 1)); + List<StudentVo> listVo = new ArrayList<>(); + for (TStudent tStudent : list) { + StudentVo studentVo = new StudentVo(); + studentVo.setId(tStudent.getId()); + studentVo.setPhone(tStudent.getPhone()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(tStudent.getBirthday()))); + listVo.add(studentVo); + } + return ResultUtil.success(listVo); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java index f059637..632e798 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java +++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java @@ -6,6 +6,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; @@ -46,6 +47,7 @@ /** * 生日 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date birthday; /** * 性别(1=男,2=女) @@ -78,6 +80,7 @@ /** * 添加时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; /** * 头像 diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/StudentVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/StudentVo.java new file mode 100644 index 0000000..7736a58 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/StudentVo.java @@ -0,0 +1,20 @@ +package com.dsh.account.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @date 2023/7/4 10:58 + */ +@Data +@ApiModel +public class StudentVo { + @ApiModelProperty("学员id") + private Integer id; + @ApiModelProperty("学员电话") + private String phone; + @ApiModelProperty("学员年龄") + private Integer age; +} 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/feginClient/account/model/Student.java index fa891cd..3731742 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/feginClient/account/model/Student.java @@ -1,5 +1,6 @@ package com.dsh.activity.feginClient.account.model; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @@ -26,6 +27,7 @@ /** * 生日 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date birthday; /** * 性别(1=男,2=女) @@ -58,6 +60,7 @@ /** * 添加时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; /** * 头像 diff --git a/cloud-server-course/pom.xml b/cloud-server-course/pom.xml index 2ba631f..191c909 100644 --- a/cloud-server-course/pom.xml +++ b/cloud-server-course/pom.xml @@ -114,6 +114,11 @@ <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-jdbc-core</artifactId> + <version>5.2.0</version> + </dependency> </dependencies> <build> diff --git a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/DatasourceModel.java new file mode 100644 index 0000000..ea4cd0f --- /dev/null +++ b/cloud-server-course/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-course/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/Master0DataSource.java new file mode 100644 index 0000000..e1bbbaa --- /dev/null +++ b/cloud-server-course/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-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 new file mode 100644 index 0000000..dbac4e9 --- /dev/null +++ b/cloud-server-course/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(gettCoursePackagePaymentTableRuleConfiguration()); + 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)); + result1.getKeyGenerators().put("t_course_package_payment-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); + + //分片规则配置 + result1.getTables().add(getCoursePackageStudentTableRuleConfiguration()); + Properties props2 = new Properties(); + props2.setProperty("algorithm-expression", "t_course_package_student$->{appUserId % 5 + 1}"); + result1.getShardingAlgorithms().put("t_course_package_student-inline", new AlgorithmConfiguration("INLINE", props2)); + result1.getKeyGenerators().put("t_course_package_student-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); + + linkedList.add(result1); + + return linkedList; + } + + /** + * 分片算法配置 + * @return + */ + private ShardingTableRuleConfiguration gettCoursePackagePaymentTableRuleConfiguration() { + 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")); + return result; + } + + + + /** + * 分片算法配置 + * @return + */ + private ShardingTableRuleConfiguration getCoursePackageStudentTableRuleConfiguration() { + ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_course_package_student", "m$->{0}.t_course_package_student$->{1..5}");//30 + result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("appUserId", "t_course_package_student-inline")); + result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_course_package_student-snowflake")); + return result; + } + +} 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 1953673..ac142ba 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 @@ -6,6 +6,7 @@ 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.service.TCoursePackageService; @@ -72,7 +73,7 @@ @ResponseBody @PostMapping("/api/course/queryCoursePackageType") - @ApiOperation(value = "获取课程类型列表", tags = {"APP-加入玩湃"}) + @ApiOperation(value = "获取课程类型列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ }) public ResultUtil<List<BaseVo>> queryCoursePackageType(){ @@ -97,7 +98,7 @@ @ResponseBody @PostMapping("/api/course/queryCourseList") - @ApiOperation(value = "获取课程列表", tags = {"APP-加入玩湃"}) + @ApiOperation(value = "获取课程列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) @@ -117,6 +118,27 @@ - + @ResponseBody + @PostMapping("/api/course/queryCourseInfo") + @ApiOperation(value = "获取课程详情", tags = {"APP-课程列表"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "课包id", name = "id", dataType = "int", 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<CoursePackageInfo> queryCourseInfo(@RequestBody Integer id, @RequestBody String lon, @RequestBody String lat){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if(null == uid){ + return ResultUtil.tokenErr(); + } + CoursePackageInfo coursePackageInfo = coursePackageService.queryCourseInfo(uid, id, lon, lat); + return ResultUtil.success(coursePackageInfo); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } } diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java index 6200eec..1b9c125 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java @@ -24,11 +24,6 @@ @TableField("coursePackageId") private Integer coursePackageId; /** - * 支付方式(1=现金,2=玩湃币) - */ - @TableField("payType") - private Integer payType; - /** * 课时数 */ @TableField("classHours") diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java index d18a280..8a2802b 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.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-course/src/main/java/com/dsh/course/entity/TCoursePackage.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java index 7d160ea..d6c3bc8 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 @@ -100,7 +100,7 @@ /** * 支付方式(1=现金,2=玩湃币) */ - private String payType; + private Integer payType; /** * 有效天数 */ diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java index 3542754..66956dd 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java @@ -4,6 +4,7 @@ import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -36,6 +37,11 @@ */ private Integer coursePackageId; /** + * 课包价格规则id + */ + @TableField("coursePackagePaymentConfigId") + private Integer coursePackagePaymentConfigId; + /** * 折扣类型(1=会员折扣,2=续课优惠,3=限时折扣,4=赠送课时) */ private Integer type; 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 5fa4ee6..b60ce2b 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 @@ -28,8 +28,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-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java new file mode 100644 index 0000000..d655517 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java @@ -0,0 +1,22 @@ +package com.dsh.course.feignclient.account; + +import com.dsh.course.feignclient.account.model.Student; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @author zhibing.pu + * @date 2023/7/4 23:38 + */ +@FeignClient("mb-cloud-account") +public interface StudentClient { + + + /** + * 获取默认学员 + * @param appUserId + * @return + */ + @PostMapping("/student/queryDefaultStudent") + Student queryDefaultStudent(Integer appUserId); +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java new file mode 100644 index 0000000..9f62653 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java @@ -0,0 +1,73 @@ +package com.dsh.course.feignclient.account.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @author zhibing.pu + * @date 2023/7/4 23:39 + */ +@Data +public class Student { + private Integer id; + /** + * 用户id + */ + private Integer appUserId; + /** + * 学员姓名 + */ + private String name; + /** + * 学员电话 + */ + private String phone; + /** + * 生日 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date birthday; + /** + * 性别(1=男,2=女) + */ + private Integer sex; + /** + * 身高 + */ + private Double height; + /** + * 体重 + */ + private Double weight; + /** + * bmi健康值 + */ + private Double bmi; + /** + * 身份证号 + */ + private String idCard; + /** + * 体侧表 + */ + private String lateralSurface; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; + /** + * 头像 + */ + private String headImg; + /** + * 是否默认 1默认 2不是默认 + */ + private Integer isDefault; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageInfo.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageInfo.java new file mode 100644 index 0000000..82469df --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageInfo.java @@ -0,0 +1,46 @@ +package com.dsh.course.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhibing.pu + * @date 2023/7/4 10:28 + */ +@Data +@ApiModel +public class CoursePackageInfo { + @ApiModelProperty("id") + private Integer id; + @ApiModelProperty("封面图") + private String coverDrawing; + @ApiModelProperty("课程名称") + private String name; + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("门店照片") + private String storeCoverDrawing; + @ApiModelProperty("门店地址") + private String storeAddress; + @ApiModelProperty("门店经度") + private String lon; + @ApiModelProperty("门店纬度") + private String lat; + @ApiModelProperty("距离") + private Double distance; + @ApiModelProperty("上课周") + private List<String> weeks; + @ApiModelProperty("上课时间") + private String times; + @ApiModelProperty("详情图片") + private String detailDrawing; + @ApiModelProperty("介绍图") + private String introduceDrawing; + @ApiModelProperty("课时套餐") + private List<CoursePackagePaymentConfigVo> list; + @ApiModelProperty("学员") + private StudentVo student; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageListVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageListVo.java index 4d62b27..e9da1da 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageListVo.java +++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageListVo.java @@ -23,12 +23,16 @@ private String classStartTime; @ApiModelProperty("已报名人数") private Integer applicantsNumber; + @ApiModelProperty("支付方式(1=现金,2=玩湃币)") + private Integer payType; @ApiModelProperty("原价") private Double originalPrice; @ApiModelProperty("会员价") private Double vipPrice; @ApiModelProperty("支付价") private Double paymentPrice; + @ApiModelProperty("玩湃价") + private Integer playPaiCoin; @ApiModelProperty("距离") private Double distance; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentConfigVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentConfigVo.java new file mode 100644 index 0000000..dd84450 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentConfigVo.java @@ -0,0 +1,28 @@ +package com.dsh.course.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @date 2023/7/4 10:44 + */ +@Data +@ApiModel +public class CoursePackagePaymentConfigVo { + @ApiModelProperty("套餐id") + private Integer id; + @ApiModelProperty("课时数") + private Integer classHours; + @ApiModelProperty("支付方式(1=现金,2=玩湃币)") + private Integer payType; + @ApiModelProperty("支付价") + private Double paymentPrice; + @ApiModelProperty("原价") + private Double originalPrice; + @ApiModelProperty("会员价") + private Double vipPrice; + @ApiModelProperty("玩湃价") + private Integer playPaiCoin; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/StudentVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/StudentVo.java new file mode 100644 index 0000000..6ed571b --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/StudentVo.java @@ -0,0 +1,20 @@ +package com.dsh.course.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @date 2023/7/4 10:58 + */ +@Data +@ApiModel +public class StudentVo { + @ApiModelProperty("学员id") + private Integer id; + @ApiModelProperty("学员电话") + private String phone; + @ApiModelProperty("学员年龄") + private Integer age; +} 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 7034949..0bb29d3 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackage; import com.dsh.course.feignclient.model.CourseOfStoreVo; +import com.dsh.course.model.CoursePackageInfo; import com.dsh.course.model.CoursePackageList; import com.dsh.course.model.CoursePackageListVo; @@ -29,4 +30,14 @@ * @throws Exception */ List<CoursePackageListVo> queryCourseList(Integer uid, CoursePackageList coursePackageList) throws Exception; + + + /** + * 获取课包详情 + * @param uid + * @param id + * @return + * @throws Exception + */ + CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) 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 ebc9270..cade892 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 @@ -9,13 +9,14 @@ import com.dsh.course.entity.TCoursePackage; import com.dsh.course.entity.TCoursePackageDiscount; 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.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.feignclient.model.CourseOfStoreVo; -import com.dsh.course.model.CoursePackageList; -import com.dsh.course.model.CoursePackageListVo; +import com.dsh.course.model.*; import com.dsh.course.service.ICoursePackagePaymentConfigService; import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.service.TCoursePackagePaymentService; @@ -27,6 +28,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -59,6 +62,9 @@ @Resource private AppUserClient appUserClient; + + @Resource + private StudentClient studentClient; @@ -106,7 +112,7 @@ Store store = storeClient.queryStoreById(coursePackage.getStoreId()); Integer integer = coursePackagePaymentService.queryCountNumber(coursePackage.getId()); CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getOne(new QueryWrapper<CoursePackagePaymentConfig>() - .eq("coursePackageId", coursePackage.getId()).last(" order by if(payType = 1, cashPayment, playPaiCoin)")); + .eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours limit 0, 1")); CoursePackageListVo coursePackageListVo = new CoursePackageListVo(); coursePackageListVo.setId(coursePackage.getId()); coursePackageListVo.setName(coursePackage.getName()); @@ -114,86 +120,113 @@ coursePackageListVo.setCoverDrawing(coursePackage.getCoverDrawing()); coursePackageListVo.setClassStartTime(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); coursePackageListVo.setApplicantsNumber(integer); + coursePackageListVo.setPayType(coursePackage.getPayType()); + coursePackageListVo.setPlayPaiCoin(coursePackageListVo.getPlayPaiCoin()); - coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getPayType() == 1 ? coursePackagePaymentConfig.getCashPayment() : coursePackagePaymentConfig.getPlayPaiCoin().doubleValue()); - TCoursePackageDiscount coursePackageDiscount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", coursePackage.getId()).eq("auditStatus", 2).eq("type", 1)); - if(1 == appUser.getIsVip() && null != coursePackageDiscount){ - //{"num1":100} - JSONObject jsonObject = JSON.parseObject(coursePackageDiscount.getContent()); - coursePackageListVo.setVipPrice(jsonObject.getDouble("num1")); - } - coursePackageDiscount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", coursePackage.getId()).eq("auditStatus", 2).eq("type", 3)); - if(null == coursePackageDiscount){ - coursePackageListVo.setPaymentPrice(coursePackageListVo.getOriginalPrice()); - }else{ + //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低) + if(appUser.getIsVip() == 0){//非会员 + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackageListVo.setVipPrice(vipPrice); + + Double paymentPrice = coursePackagePaymentConfig.getCashPayment(); + List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 3).eq("auditStatus", 2)); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - /** - * [{ - * "startDate": "2023-01-01 00:00:00", - * "endDate": "2023-12-31 23:59:59", - * "startTime": "02:00:00", - * "endTime": "23:00:00", - * "weeks": [1, 2, 7], - * "cashPayment": 100 - * }] - */ - JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - String startDate = jsonObject.getString("startDate"); - String endDate = jsonObject.getString("endDate"); - String startTime = jsonObject.getString("startTime"); - String endTime = jsonObject.getString("endTime"); - List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); - Double cashPayment = jsonObject.getDouble("cashPayment"); - Date startDate_date = sdf.parse(startDate); - Date endDate_date = sdf.parse(endDate); - long timeMillis = System.currentTimeMillis(); - if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){ - Date date = new Date(); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - int week = calendar.get(Calendar.DAY_OF_WEEK); - boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); - if(isFirstSunday){ - week = week - 1; - if(week == 0){ - week = 7; + for (TCoursePackageDiscount coursePackageDiscount : list3) { + /** + * [{ + * "startDate": "2023-01-01 00:00:00", + * "endDate": "2023-12-31 23:59:59", + * "startTime": "02:00:00", + * "endTime": "23:00:00", + * "weeks": [1, 2, 7], + * "cashPayment": 100 + * }] + */ + JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); + for (int i = 0; i < jsonArray.size(); i++) { + try { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String startDate = jsonObject.getString("startDate"); + String endDate = jsonObject.getString("endDate"); + String startTime = jsonObject.getString("startTime"); + String endTime = jsonObject.getString("endTime"); + List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Date startDate_date = sdf.parse(startDate); + Date endDate_date = sdf.parse(endDate); + long timeMillis = System.currentTimeMillis(); + if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){ + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int week = calendar.get(Calendar.DAY_OF_WEEK); + boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); + if(isFirstSunday){ + week = week - 1; + if(week == 0){ + week = 7; + } + } + if(!weeks.contains(week)){ + continue; + } + + String[] split1 = startTime.split(":"); + Integer hour1 = Integer.valueOf(split1[0]); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.HOUR_OF_DAY, hour1); + s.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + s.set(Calendar.SECOND, Integer.valueOf(split1[2])); + + String[] split2 = endTime.split(":"); + Integer hour2 = Integer.valueOf(split2[0]); + Calendar e = Calendar.getInstance(); + e.setTime(date); + e.set(Calendar.HOUR_OF_DAY, hour2); + e.set(Calendar.MINUTE, Integer.valueOf(split2[1])); + e.set(Calendar.SECOND, Integer.valueOf(split2[2])); + + if(hour1 > hour2){ + if(s.getTimeInMillis() > date.getTime()){ + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1); + }else{ + e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1); + } + } + if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){ + paymentPrice = cashPayment; + } } - } - if(!weeks.contains(week)){ - continue; - } - - String[] split = startTime.split(":"); - Integer hour1 = Integer.valueOf(split[0]); - Calendar s = Calendar.getInstance(); - s.setTime(date); - s.set(Calendar.HOUR_OF_DAY, hour1); - s.set(Calendar.MINUTE, Integer.valueOf(split[1])); - s.set(Calendar.SECOND, Integer.valueOf(split[2])); - - String[] split1 = endTime.split(":"); - Integer hour2 = Integer.valueOf(split1[0]); - Calendar e = Calendar.getInstance(); - e.setTime(date); - e.set(Calendar.HOUR_OF_DAY, hour2); - e.set(Calendar.MINUTE, Integer.valueOf(split1[1])); - e.set(Calendar.SECOND, Integer.valueOf(split1[2])); - - if(hour1 > hour2){ - if(s.getTimeInMillis() > date.getTime()){ - s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1); - }else{ - e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1); - } - } - if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis()){ - coursePackageListVo.setPaymentPrice(cashPayment); + }catch (Exception e){ + e.printStackTrace(); } } } + coursePackageListVo.setPaymentPrice(paymentPrice); + }else{ + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackageListVo.setPaymentPrice(vipPrice); + coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); } + Map<String, Double> distance = GeodesyUtil.getDistance(coursePackageList.getLon() + "," + coursePackageList.getLat(), store.getLon() + "," + store.getLat()); coursePackageListVo.setDistance(distance.get("WGS84") / 1000); listVos.add(coursePackageListVo); @@ -217,4 +250,160 @@ } return listVos; } + + + /** + * 获取课包详情 + * @param uid + * @param id + * @return + * @throws Exception + */ + @Override + public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception { + AppUser appUser = appUserClient.queryAppUser(uid); + TCoursePackage coursePackage = this.getById(id); + CoursePackageInfo coursePackageInfo = new CoursePackageInfo(); + coursePackageInfo.setId(id); + coursePackageInfo.setCoverDrawing(coursePackage.getCoverDrawing()); + coursePackageInfo.setName(coursePackage.getName()); + Store store = storeClient.queryStoreById(coursePackage.getStoreId()); + coursePackageInfo.setStoreName(store.getName()); + coursePackageInfo.setStoreCoverDrawing(store.getCoverDrawing()); + 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); + + String[] split = coursePackage.getClassWeeks().split(";"); + coursePackageInfo.setWeeks(Arrays.asList(split)); + coursePackageInfo.setTimes(coursePackage.getClassStartTime() + "-" + coursePackage.getClassEndTime()); + coursePackageInfo.setDetailDrawing(coursePackage.getDetailDrawing()); + coursePackageInfo.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); + List<CoursePackagePaymentConfigVo> list = new ArrayList<>(); + List<CoursePackagePaymentConfig> list1 = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id).orderByAsc("classHours")); + list1.forEach(coursePackagePaymentConfig -> { + CoursePackagePaymentConfigVo coursePackagePaymentConfigVo = new CoursePackagePaymentConfigVo(); + coursePackagePaymentConfigVo.setId(coursePackagePaymentConfig.getId()); + 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)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackagePaymentConfigVo.setVipPrice(vipPrice); + + Double paymentPrice = coursePackagePaymentConfig.getCashPayment(); + List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 3).eq("auditStatus", 2)); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (TCoursePackageDiscount coursePackageDiscount : list3) { + /** + * [{ + * "startDate": "2023-01-01 00:00:00", + * "endDate": "2023-12-31 23:59:59", + * "startTime": "02:00:00", + * "endTime": "23:00:00", + * "weeks": [1, 2, 7], + * "cashPayment": 100 + * }] + */ + JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); + for (int i = 0; i < jsonArray.size(); i++) { + try { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String startDate = jsonObject.getString("startDate"); + String endDate = jsonObject.getString("endDate"); + String startTime = jsonObject.getString("startTime"); + String endTime = jsonObject.getString("endTime"); + List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class); + Double cashPayment = jsonObject.getDouble("cashPayment"); + Date startDate_date = sdf.parse(startDate); + Date endDate_date = sdf.parse(endDate); + long timeMillis = System.currentTimeMillis(); + if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){ + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int week = calendar.get(Calendar.DAY_OF_WEEK); + boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); + if(isFirstSunday){ + week = week - 1; + if(week == 0){ + week = 7; + } + } + if(!weeks.contains(week)){ + continue; + } + + String[] split1 = startTime.split(":"); + Integer hour1 = Integer.valueOf(split1[0]); + Calendar s = Calendar.getInstance(); + s.setTime(date); + s.set(Calendar.HOUR_OF_DAY, hour1); + s.set(Calendar.MINUTE, Integer.valueOf(split1[1])); + s.set(Calendar.SECOND, Integer.valueOf(split1[2])); + + String[] split2 = endTime.split(":"); + Integer hour2 = Integer.valueOf(split2[0]); + Calendar e = Calendar.getInstance(); + e.setTime(date); + e.set(Calendar.HOUR_OF_DAY, hour2); + e.set(Calendar.MINUTE, Integer.valueOf(split2[1])); + e.set(Calendar.SECOND, Integer.valueOf(split2[2])); + + if(hour1 > hour2){ + if(s.getTimeInMillis() > date.getTime()){ + s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1); + }else{ + e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1); + } + } + if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){ + paymentPrice = cashPayment; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice); + }else{ + List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) + .eq("type", 1).eq("auditStatus", 2)); + Double vipPrice = coursePackagePaymentConfig.getCashPayment(); + for (TCoursePackageDiscount coursePackageDiscount : list2) { + Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("num1"); + if(vipPrice.compareTo(num1) > 0){ + vipPrice = num1; + } + } + coursePackagePaymentConfigVo.setPaymentPrice(vipPrice); + coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment()); + } + list.add(coursePackagePaymentConfigVo); + }); + coursePackageInfo.setList(list); + + Student student = studentClient.queryDefaultStudent(uid); + StudentVo studentVo = new StudentVo(); + studentVo.setId(student.getId()); + studentVo.setPhone(student.getPhone()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(student.getBirthday()))); + coursePackageInfo.setStudent(studentVo); + return coursePackageInfo; + } } diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml index bf24c93..95fc2a7 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml @@ -6,6 +6,7 @@ <resultMap id="BaseResultMap" type="com.dsh.course.entity.TCoursePackageDiscount"> <id column="id" property="id" /> <result column="coursePackageId" property="coursePackageId" /> + <result column="coursePackagePaymentConfigId" property="coursePackagePaymentConfigId"/> <result column="type" property="type" /> <result column="content" property="content" /> <result column="auditStatus" property="auditStatus" /> diff --git a/cloud-server-course/src/main/resources/sharding-jdbc.properties b/cloud-server-course/src/main/resources/sharding-jdbc.properties new file mode 100644 index 0000000..09e20a5 --- /dev/null +++ b/cloud-server-course/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_course?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_course?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-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java index 76be081..3ab7122 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java @@ -136,7 +136,7 @@ @ResponseBody @PostMapping("/base/store/queryStoreLists") - @ApiOperation(value = "获取门店列表", tags = {"APP-加入玩湃"}) + @ApiOperation(value = "获取门店列表", tags = {"APP-加入玩湃", "APP-课程列表"}) @ApiImplicitParams({ @ApiImplicitParam(value = "经纬", name = "lon", dataType = "string", required = true), @ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = true), -- Gitblit v1.7.1