cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -108,7 +108,6 @@ @PostMapping("/api/startCource/addData") @ApiOperation(value = "添加学员信息", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(value = "学员信息", name = "stu", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) @Transactional @@ -370,57 +369,6 @@ }catch (Exception e){ return ResultUtil.runErr(); } } /** * 课后视频课表 */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetails") @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil queryAfterSourceDetails(@RequestParam("stuId") Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } // TODO: 2023/7/4 return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 已报名课程列表 */ @ResponseBody @PostMapping("/api/startCource/registeredCourses") @ApiOperation(value = "已报名课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails(@RequestParam("stuId") Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java
New file @@ -0,0 +1,31 @@ package com.dsh.account.controller; import com.dsh.account.entity.Coach; import com.dsh.account.service.CoachService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("") public class CoachController { @Autowired private CoachService service; /** * 根据门店 * @param id * @return */ @ResponseBody @PostMapping("/coach/queryCoachById") public Coach queryCoachById( Integer id){ try { return service.getById(id); }catch (Exception e){ e.printStackTrace(); return null; } } } cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
@@ -58,7 +58,7 @@ @ResponseBody @PostMapping("/base/exploreWP/noticeDetail") @ApiOperation(value = "联系客服-公告详情", tags = {"APP-探索玩湃"}) public ResultUtil<SysNotice> queryNotice(@RequestBody Integer noId){ public ResultUtil<SysNotice> queryNotice(Integer noId){ try { return ResultUtil.success(tsService.queryNoticeData(noId)); }catch (Exception e){ @@ -82,7 +82,7 @@ @ResponseBody @PostMapping("/base/exploreWP/exceptionDetail") @ApiOperation(value = "联系客服-常见问题详情", tags = {"APP-探索玩湃"}) public ResultUtil<QuestionIns> queryQuestionData(@RequestBody Integer quesId){ public ResultUtil<QuestionIns> queryQuestionData(Integer quesId){ try { return ResultUtil.success(tsService.queryQuestionDataInfo(quesId)); }catch (Exception e){ cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -2,6 +2,7 @@ import com.dsh.account.entity.TAppUser; import com.dsh.account.feignclient.other.SysLogClient; import com.dsh.account.model.vo.userBenefitDetail.AppUserDetailsVo; import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo; import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo; @@ -16,6 +17,10 @@ import java.text.SimpleDateFormat; /** * 使用福利 控制器 */ @RestController @RequestMapping("") public class UseBenefitsController { @@ -26,6 +31,9 @@ @Autowired private TokenUtil tokenUtil; @Autowired private SysLogClient slClient; private final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); @@ -78,6 +86,58 @@ } } @ResponseBody @PostMapping("/api/useBenefit/cancellation") @ApiOperation(value = "个人信息-注销账号", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil cancellationAccount(){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } // 变更账号的状态为删除 tauService.cancellation(appUserId); // 增加一条注销账号的日志 slClient.cancellation(appUserId); // 删除redis中用户key tokenUtil.logout(); return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/useBenefit/logOut") @ApiOperation(value = "个人信息-退出登录", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil logOutAccount(){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } // 增加一条退出账号的日志 slClient.logOut(appUserId); // 删除redis中用户key tokenUtil.logout(); return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/useBenefit/userBilling") @ApiOperation(value = "账单", tags = {"APP-使用福利"}) cloud-server-account/src/main/java/com/dsh/account/feignclient/CoachClient.java
New file @@ -0,0 +1,15 @@ package com.dsh.account.feignclient; import com.dsh.account.entity.Coach; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-account") public interface CoachClient { @PostMapping("/coach/queryCoachById") Coach queryCoachById(@RequestBody Integer id); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -27,4 +27,7 @@ @PostMapping("/base/coursePack/afterCourseTwos") List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId); @PostMapping("/base/coursePack/courseOfPurchased") List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java
New file @@ -0,0 +1,16 @@ package com.dsh.account.feignclient.course.model; import lombok.Data; @Data public class CourseTypeResp { private Integer appUserId; private Integer courseTypeId; private String search; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java
New file @@ -0,0 +1,37 @@ package com.dsh.account.feignclient.course.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class PurchaseVo { @ApiModelProperty(value = "课包id") private Integer courseId; @ApiModelProperty(value = "课包封面图") private String packageImg; @ApiModelProperty(value = "课包名称") private String courseName; @ApiModelProperty(value = "上课时间段") private String courseTime; @ApiModelProperty(value = "授课老师id") private Integer teacherId; @ApiModelProperty(value = "门店id") private Integer storeId; @ApiModelProperty(value = "已上课时数") private Integer courseNums; @ApiModelProperty(value = "课包状态 1=待支付 2=已购买") private Integer courseStatus; @ApiModelProperty(value = "课包类型id") private Integer courseTypeId; } cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SysLogClient.java
New file @@ -0,0 +1,16 @@ package com.dsh.account.feignclient.other; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-other") public interface SysLogClient { @PostMapping("/appUser/logOut") void logOut(@RequestBody Integer appUserId); @PostMapping("/appUser/cancellation") void cancellation(@RequestBody Integer appUserId); } cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -109,4 +109,10 @@ */ BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId); /** * 注销账号 * @param appUserId */ void cancellation(Integer appUserId); } cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -463,8 +463,28 @@ @Override public BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId) { System.out.println("账单传参:yearMonth"+yearMonth+"|"+"recordId"+recordId); // TODO: 2023/7/4 return null; BillingDetailsVo vo = new BillingDetailsVo(); if (null != yearMonth){ Date monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth); Date monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth); }else { Date currentMouthStart = DateTimeHelper.getCurrentMouthStart(); Date currentMouthEnd = DateTimeHelper.getCurrentMouthEnd(); } return vo; } @Override public void cancellation(Integer appUserId) { TAppUser tAppUser = this.baseMapper.selectById(appUserId); if (null != tAppUser){ tAppUser.setState(3); this.baseMapper.updateById(tAppUser); } } } cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -374,7 +374,7 @@ @Override public ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request) { // TODO: 2023/7/5 // TODO: 2023/7/5 续课支付 switch (request.getPayType()){ case 1: WeChatPayment(); cloud-server-account/src/main/java/com/dsh/account/util/TokenUtil.java
@@ -33,4 +33,22 @@ return null; } } public void logout() { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); String requestHeader = request.getHeader("Authorization"); if (requestHeader != null && requestHeader.startsWith("Bearer ")) { requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); String key = null; int length = requestHeader.length(); if (length > 32) { key = requestHeader.substring(length - 32); } else { key = requestHeader; } redisUtil.remove(key); // 删除存储在Redis中的对应用户信息 } } } cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
New file @@ -0,0 +1,29 @@ package com.dsh.activity.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.entity.BenefitsVideos; import com.dsh.activity.service.BenefitsVideosService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("") public class BenefitVideoController { @Autowired private BenefitsVideosService bfvService; @PostMapping("base/benefitVideo/getList") public BenefitsVideos getVideosWithIds(@RequestBody Integer id){ return bfvService.getOne(new QueryWrapper<BenefitsVideos>().eq("id",id).eq("state",1)); } } cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -2,7 +2,10 @@ import com.dsh.activity.entity.Coupon; import com.dsh.activity.model.CouponListVo; import com.dsh.activity.model.request.CouponPackageReq; import com.dsh.activity.model.response.CouponPackageResp; 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.ApiImplicitParam; @@ -26,6 +29,9 @@ @Autowired private TokenUtil tokenUtil; @Autowired private UserCouponService ucService; @@ -71,4 +77,30 @@ return null; } } /** * 我的券包列表 * @param req * @return */ @ResponseBody @PostMapping("/api/coupon/queryCouponPackage") @ApiOperation(value = "我的券包列表", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<List<CouponPackageResp>> queryAppuserCouponList( CouponPackageReq req){ try { Integer uid = tokenUtil.getUserIdFormRedis(); if(null == uid){ return ResultUtil.tokenErr(); } return ResultUtil.success(ucService.queryCouponPackagesList(uid, req)); }catch (Exception e){ e.printStackTrace(); return ResultUtil.success(); } } } cloud-server-activity/src/main/java/com/dsh/activity/controller/IntroduceRewardsController.java
@@ -28,7 +28,7 @@ @PostMapping("/base/introduce/useOfRewards") public List<PurchaseRecordVo> queryAppUsersofIntroduce(@RequestBody IntrduceOfUserRequest request){ public List<PurchaseRecordVo> queryAppUsersofIntroduce( IntrduceOfUserRequest request){ List<PurchaseRecordVo> recordVos = new ArrayList<>(); List<IntroduceRewards> list = idrService.list(new QueryWrapper<IntroduceRewards>() .ge("startTime",request.getStartTime()) cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
New file @@ -0,0 +1,74 @@ package com.dsh.activity.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 福利视频 * </p> * * @author jqs * @since 2023-07-06 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_benefits_videos") public class BenefitsVideos extends Model<BenefitsVideos> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 分类id */ private Integer benefitsVideoClassificationId; /** * 视频名称 */ private String name; /** * 视频封面 */ private String cover; /** * 视频简介 */ private String introduction; /** * 视频地址 */ private String videos; /** * 可得积分 */ private String integral; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ private Date insertTime; @Override protected Serializable pkVal() { return this.id; } } cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponStore.java
New file @@ -0,0 +1,49 @@ package com.dsh.activity.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; /** * <p> * 优惠券使用门店关系数据 * </p> * * @author jqs * @since 2023-07-07 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_coupon_store") public class CouponStore extends Model<CouponStore> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 优惠券id */ private Integer couponId; /** * 门店id */ private Integer storeId; @Override protected Serializable pkVal() { return this.id; } } cloud-server-activity/src/main/java/com/dsh/activity/entity/JSONConpon.java
File was deleted cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.feignclient; import com.dsh.activity.entity.BenefitsVideos; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-activity") public interface BenefitVideoClient { @PostMapping("base/benefitVideo/getList") BenefitsVideos getVideosWithIds(@RequestBody Integer id); } cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java
New file @@ -0,0 +1,14 @@ package com.dsh.activity.feignclient.other; import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(value = "mb-cloud-other") public interface StoreClient { @PostMapping("/base/protocol/storeDetail/courseOfSto") StoreDetailOfCourse getCourseOfStore(@RequestParam("storeId") Integer storeId); } cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/model/StoreDetailOfCourse.java
New file @@ -0,0 +1,13 @@ package com.dsh.activity.feignclient.other.model; import lombok.Data; @Data public class StoreDetailOfCourse { String storeName; String storeAddr; } cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.activity.entity.BenefitsVideos; /** * <p> * 福利视频 Mapper 接口 * </p> * * @author jqs * @since 2023-07-06 */ public interface BenefitsVideosMapper extends BaseMapper<BenefitsVideos> { } cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponStoreMapper.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.activity.entity.CouponStore; /** * <p> * 优惠券使用门店关系数据 Mapper 接口 * </p> * * @author jqs * @since 2023-07-07 */ public interface CouponStoreMapper extends BaseMapper<CouponStore> { } cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java
@@ -2,7 +2,6 @@ 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; @@ -30,4 +29,5 @@ List<Map<String, Object>> queryAvailableCouponList(@Param("uid") Integer uid, @Param("storeId") Integer storeId, @Param("provinceCode") String provinceCode, @Param("cityCode") String cityCode); } cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java
@@ -1,5 +1,6 @@ package com.dsh.activity.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -9,14 +10,17 @@ /** * 条件金额 */ double conditionalAmount; @ApiModelProperty("条件金额(例如 :满xx可用)") String conditionalAmount; /** * 抵扣金额(代金券 取 该字段) */ double deductionAmount; @ApiModelProperty("抵扣金额(代金券 取 该字段) 例如:¥ xxx") String deductionAmount; /** * 体验券名称 */ @ApiModelProperty("体验券名称 ") String experienceName; } cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponPackageReq.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.model.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CouponPackageReq { @ApiModelProperty(value = "(1=满减券,2=代金券,3=体验券)") Integer couponType; @ApiModelProperty(value = "(1=未使用 2=已使用 3=已过期)") Integer useStatus; } cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java
New file @@ -0,0 +1,41 @@ package com.dsh.activity.model.response; import com.dsh.activity.model.ConponJsonRuleModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CouponPackageResp { @ApiModelProperty("优惠券id") private Integer id; @ApiModelProperty("优惠券名称") private String name; @ApiModelProperty("优惠券类型(1=满减券,2=代金券,3=体验券)") private Integer type; @ApiModelProperty("适用范围1全国通用 2指定城市可用 3指定门店可用") private Integer useCondition; @ApiModelProperty("适用范围名称") private String available; @ApiModelProperty("useCondition = 2,为地址字符串;useCondition = 3,为门店名称+地址字符串") private String cityOrStore; @ApiModelProperty("优惠券说明(使用说明)") private String instructionsForUse; @ApiModelProperty("金额条件封装") private ConponJsonRuleModel ruleModel; @ApiModelProperty("有效时间(2021-05-05)") private String effectiveTime; @ApiModelProperty("使用状态(1未使用 2已使用 3已过期)") private Integer useStatus; } cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.BenefitsVideos; /** * <p> * 福利视频 服务类 * </p> * * @author jqs * @since 2023-07-06 */ public interface BenefitsVideosService extends IService<BenefitsVideos> { } cloud-server-activity/src/main/java/com/dsh/activity/service/CouponStoreService.java
New file @@ -0,0 +1,16 @@ package com.dsh.activity.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.CouponStore; /** * <p> * 优惠券使用门店关系数据 服务类 * </p> * * @author jqs * @since 2023-07-07 */ public interface CouponStoreService extends IService<CouponStore> { } cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.entity.UserCoupon; import com.dsh.activity.model.CouponListVo; import com.dsh.activity.model.request.CouponPackageReq; import com.dsh.activity.model.response.CouponPackageResp; import java.util.List; @@ -24,4 +26,6 @@ * @return */ List<CouponListVo> queryAvailableCouponList(Integer uid, Integer coursePackageId, Double price, String lon, String lat) throws Exception; List<CouponPackageResp> queryCouponPackagesList(Integer uid, CouponPackageReq req); } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.dsh.activity.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.BenefitsVideos; import com.dsh.activity.mapper.BenefitsVideosMapper; import com.dsh.activity.service.BenefitsVideosService; import org.springframework.stereotype.Service; /** * <p> * 福利视频 服务实现类 * </p> * * @author jqs * @since 2023-07-06 */ @Service public class BenefitsVideosServiceImpl extends ServiceImpl<BenefitsVideosMapper, BenefitsVideos> implements BenefitsVideosService { } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponStoreServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.dsh.activity.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.entity.CouponStore; import com.dsh.activity.mapper.CouponStoreMapper; import com.dsh.activity.service.CouponStoreService; import org.springframework.stereotype.Service; /** * <p> * 优惠券使用门店关系数据 服务实现类 * </p> * * @author jqs * @since 2023-07-07 */ @Service public class CouponStoreServiceImpl extends ServiceImpl<CouponStoreMapper, CouponStore> implements CouponStoreService { } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
@@ -4,20 +4,35 @@ 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.Coupon; import com.dsh.activity.entity.CouponStore; import com.dsh.activity.entity.UserCoupon; import com.dsh.activity.feignclient.account.AppUserClient; import com.dsh.activity.feignclient.account.StudentClient; import com.dsh.activity.feignclient.account.model.AppUser; import com.dsh.activity.feignclient.course.CoursePackageClient; import com.dsh.activity.feignclient.course.model.CoursePackage; import com.dsh.activity.feignclient.other.StoreClient; import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; import com.dsh.activity.mapper.CouponMapper; import com.dsh.activity.mapper.CouponStoreMapper; import com.dsh.activity.mapper.UserCouponMapper; import com.dsh.activity.model.ConponJsonRuleModel; import com.dsh.activity.model.CouponListVo; import com.dsh.activity.model.request.CouponPackageReq; import com.dsh.activity.model.response.CouponPackageResp; import com.dsh.activity.service.UserCouponService; import com.dsh.activity.util.DateUtil; import com.dsh.activity.util.GDMapGeocodingUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -36,6 +51,20 @@ @Autowired private GDMapGeocodingUtil gdMapGeocodingUtil; @Autowired private AppUserClient appClient; @Autowired private StudentClient studentClient; @Autowired private CouponMapper couponMapper; @Autowired private StoreClient storeClient; @Autowired private CouponStoreMapper csMapper; /** * 获取购买课程可用优惠券列表 @@ -87,4 +116,100 @@ } return listVos; } @Override public List<CouponPackageResp> queryCouponPackagesList(Integer uid, CouponPackageReq req) { List<CouponPackageResp> respList = new ArrayList<>(); AppUser appUser = appClient.queryAppUser(uid); if (null != appUser) { List<UserCoupon> userCoupons = this.baseMapper.selectList(new QueryWrapper<UserCoupon>() .eq("userId",appUser.getId() ) .orderByDesc("insertTime")); if (userCoupons.size() > 0){ for (UserCoupon userCoupon : userCoupons) { Coupon coupon = couponMapper.selectById(userCoupon.getCouponId()); CouponPackageResp packageResp = new CouponPackageResp(); packageResp.setId(coupon.getId()); packageResp.setName(coupon.getName()); packageResp.setType(coupon.getType()); packageResp.setUseCondition(coupon.getUseScope()); switch (coupon.getUseScope()){ case 1: packageResp.setAvailable("全国通用"); break; case 2: packageResp.setAvailable("指定城市可用"); packageResp.setCityOrStore(""); break; case 3: packageResp.setAvailable("指定门店可用"); CouponStore couponStore = csMapper.selectOne(new QueryWrapper<CouponStore>() .eq("couponId",coupon.getId())); StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(couponStore.getStoreId()); packageResp.setCityOrStore(courseOfStore.getStoreName()+","+courseOfStore.getStoreAddr()); break; default: break; } packageResp.setInstructionsForUse(coupon.getIllustrate()); ConponJsonRuleModel ruleModel = new ConponJsonRuleModel(); JSONObject jsonObject = JSON.parseObject(coupon.getContent()); switch (coupon.getType()) { case 1: // 满减券 Double num1 = jsonObject.getDouble("num1"); Double num2 = jsonObject.getDouble("num2"); ruleModel.setConditionalAmount("满"+num1+"可用"); ruleModel.setDeductionAmount("¥ "+num2); ruleModel.setExperienceName(""); break; case 2: // 代金券 Double jsonObjectDouble = jsonObject.getDouble("num1"); ruleModel.setConditionalAmount(""); ruleModel.setDeductionAmount("¥ "+jsonObjectDouble); ruleModel.setExperienceName(""); break; case 3: // 体验券 ruleModel.setConditionalAmount(""); ruleModel.setDeductionAmount(""); ruleModel.setExperienceName(jsonObject.getString("num1")); break; default: break; } packageResp.setRuleModel(ruleModel); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); packageResp.setEffectiveTime(simpleDateFormat.format(coupon.getEndTime())); if (userCoupon.getStatus() == 1){ if (DateUtil.getDate().before(coupon.getEndTime())){ packageResp.setUseStatus(1); }else { packageResp.setUseStatus(3); } } if (userCoupon.getStatus() == 2){ packageResp.setUseStatus(2); } respList.add(packageResp); } if (null != req.getCouponType()){ respList = respList.stream() .filter(couponPackageResp -> couponPackageResp.getType().equals(req.getCouponType())) .collect(Collectors.toList()); } if (null != req.getUseStatus()){ respList = respList.stream() .filter(couponPackageResp -> couponPackageResp.getUseStatus().equals(req.getUseStatus())) .collect(Collectors.toList()); } } } return respList; } } cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java
File was deleted cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.activity.mapper.BenefitsVideosMapper"> </mapper> cloud-server-activity/src/main/resources/mapper/CouponStoreMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.activity.mapper.CouponStoreMapper"> </mapper> cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -59,7 +59,10 @@ .eq("payType",3 ) .eq("auditStatus",2)); List<Integer> comIds = list.stream().map(Competition::getId).collect(Collectors.toList()); List<UserCompetition> userCompetitions = ucttService.queryUsersCompetetions(sourseList.getStartTime(),sourseList.getEndTime(),sourseList.getAppUserId(),comIds); List<UserCompetition> userCompetitions = ucttService.list(new QueryWrapper<UserCompetition>() .between("insertTime", sourseList.getStartTime(),sourseList.getEndTime() ) .eq("userId", sourseList.getAppUserId()) .in("competitionId",comIds )); if (userCompetitions.size() > 0){ userCompetitions.forEach(coms ->{ PurchaseRecordVo recordVo = new PurchaseRecordVo(); cloud-server-competition/src/main/java/com/dsh/competition/mapper/UserCompetitionMapper.java
@@ -2,10 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.competition.entity.UserCompetition; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; /** * <p> @@ -17,10 +13,5 @@ */ public interface UserCompetitionMapper extends BaseMapper<UserCompetition> { List<UserCompetition> queryUsersCompetetions(@Param("startTime") Date startTime, @Param("endTime") Date endTime , @Param("appUserId") Integer appUserId, @Param("comIds") List<Integer> comIds); } cloud-server-competition/src/main/java/com/dsh/competition/service/UserCompetitionService.java
@@ -3,9 +3,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.competition.entity.UserCompetition; import java.util.Date; import java.util.List; /** * <p> * 赛事报名记录 服务类 @@ -16,7 +13,5 @@ */ public interface UserCompetitionService extends IService<UserCompetition> { List<UserCompetition> queryUsersCompetetions(Date startTime, Date endTime ,Integer appUserId, List<Integer> comIds); } cloud-server-competition/src/main/java/com/dsh/competition/service/impl/UserCompetitionServiceImpl.java
@@ -20,9 +20,4 @@ @Service public class UserCompetitionServiceImpl extends ServiceImpl<UserCompetitionMapper, UserCompetition> implements UserCompetitionService { @Override public List<UserCompetition> queryUsersCompetetions(Date startTime, Date endTime , Integer appUserId, List<Integer> comIds) { return this.baseMapper.queryUsersCompetetions(startTime,endTime,appUserId,comIds); } } cloud-server-competition/src/main/resources/mapper/UserCompetitionMapper.xml
@@ -2,37 +2,5 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.competition.mapper.UserCompetitionMapper"> <select id="queryUsersCompetetions" resultType="com.dsh.competition.entity.UserCompetition"> SELECT * FROM t_user_competition UNION ALL SELECT * FROM t_user_competition1 UNION ALL SELECT * FROM t_user_competition2 UNION ALL SELECT * FROM t_user_competition3 UNION ALL SELECT * FROM t_user_competition4 UNION ALL SELECT * FROM t_user_competition5 WHERE 1 = 1 <if test=" stuId != null"> and studentId = #{stuId} </if> <if test="appUserId != null"> and competitionId in <foreach collection="comIds" item="item" separator="," open="(" index="index" close=")"> #{item} </foreach> </if> <if test="startTime != null and endTime != null"> and (insertTime between #{startTime} and #{endTime}) </if> </select> </mapper> cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java
@@ -42,8 +42,10 @@ @PostMapping("/base/cancelSource/cancelList") public List<PurchaseRecordVo> getCancelCourseList(@RequestBody GetStuSessionList sessionList){ List<PurchaseRecordVo> purchaseRecordVos = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = tcppService.queryAllCoursePackage(sessionList.getStartTime(),sessionList.getEndTime(),null,sessionList.getStuId(), sessionList.getAppUserId()); List<TCoursePackagePayment> tCoursePackagePayments = tcppService.list(new QueryWrapper<TCoursePackagePayment>() .between("insertTime", sessionList.getStartTime(),sessionList.getEndTime()) .eq("appUserId",sessionList.getAppUserId()) .eq("studentId",sessionList.getStuId())); List<Long> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList()); List<CancelledClasses> list = caceService.list(new QueryWrapper<CancelledClasses>() cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -6,20 +6,33 @@ import com.dsh.course.entity.TCoursePackage; import com.dsh.course.entity.TCoursePackageDiscount; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.entity.TCoursePackageType; import com.dsh.course.feignclient.model.*; import com.dsh.course.model.BaseVo; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.CourseDetailRequest; import com.dsh.course.service.PostCourseVideoService; import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.service.TCoursePackageService; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; import com.dsh.course.model.vo.request.CourseOfAfterRequest; import com.dsh.course.model.vo.request.CourseWithDetailsRequest; import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; import com.dsh.course.model.vo.response.AppUserVideoResponse; import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.service.*; import com.dsh.course.util.DateUtil; import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; import com.dsh.course.util.TokenUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -51,6 +64,18 @@ @Autowired private PostCourseVideoService pcvService; @Autowired private CoursePackageStudentService cpsService; @Autowired private CancelledClassesService cacService; @Autowired private TCoursePackageTypeService coursePackageTypeService; @Autowired private TokenUtil tokenUtil; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); /** @@ -61,7 +86,10 @@ @PostMapping("/base/coursePack/queryPayment") public List<StuCourseResp> getStuCoursePackagePayment(@RequestParam("stuId") Integer stuId,@RequestParam("appUserId") Integer appUserId){ List<StuCourseResp> resps = new ArrayList<>(); List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(null,null,null,stuId,appUserId); List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId",appUserId) .eq("studentId",stuId)); if (byUserId.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : byUserId) { TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); @@ -106,7 +134,10 @@ @PostMapping("/base/coursePack/sessionNames") public List<StuSessionDetailsVo> getStuSessionList(@RequestBody CourseDetailRequest request){ List<StuSessionDetailsVo> detailsVos = new ArrayList<>(); List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(request.getStartTime(),request.getEndTime(),null,request.getStuId(),request.getAppUserId()); List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .between("insertTime", request.getStartTime(),request.getEndTime()) .eq("appUserId",request.getAppUserId()) .eq("studentId",request.getStuId())); if (byUserId.size() > 0){ List<Integer> collect = byUserId.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); List<TCoursePackage> list = tcpService.list(new QueryWrapper<TCoursePackage>() @@ -126,7 +157,11 @@ @PostMapping("/base/coursePack/paymentCourse") public List<PurchaseRecordVo> queryCourseDetails(@RequestParam("startTime") Date startTime, @RequestParam("endTime") Date endTime,@RequestParam("stuId") Integer stuId, @RequestParam("appUserId") Integer appUserId) { List<PurchaseRecordVo> purchaseRecordVos = new ArrayList<>(); List<TCoursePackagePayment> coursePackage = packagePaymentService.queryAllCoursePackage(startTime,endTime,null,stuId, appUserId); List<TCoursePackagePayment> coursePackage = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .between("insertTime", startTime,endTime) .eq("appUserId",appUserId) .eq("studentId",stuId)); if (coursePackage.size() > 0 ){ coursePackage.forEach( cspackage -> { PurchaseRecordVo recordVo = new PurchaseRecordVo(); @@ -147,7 +182,9 @@ Integer totalNu = 0; Integer dedutNu = 0; Integer remainNu = 0; List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(null,null,null,getStuOfCoursesDetails.getStuId(),getStuOfCoursesDetails.getAppUserId()); List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId",getStuOfCoursesDetails.getAppUserId()) .eq("studentId",getStuOfCoursesDetails.getStuId())); if (byUserId.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : byUserId) { totalNu = totalNu + tCoursePackagePayment.getTotalClassHours(); @@ -166,7 +203,10 @@ @PostMapping("/base/coursePack/continuingCourse") public StudentOfCourseVo getStudentCourse(@RequestBody GetStudentCourse getStudentCourse){ StudentOfCourseVo courseVo = new StudentOfCourseVo(); List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,getStudentCourse.getCourseId(),getStudentCourse.getStuId(),getStudentCourse.getAppUserId()); List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId", getStudentCourse.getAppUserId()) .eq("coursePackageId", getStudentCourse.getCourseId()) .eq("studentId", getStudentCourse.getStuId())); if (tCoursePackagePayments.size() > 0 ){ List<CourseHoursType> typeList = new ArrayList<>(); @@ -242,10 +282,6 @@ } switch (payType) { case 1: courseVo.setAmount(cashPaymentValue); courseVo.setVipAmount(discountMember); courseVo.setWpGold(playPaiCoin); break; case 2: courseVo.setAmount(cashPaymentValue); courseVo.setVipAmount(discountMember); @@ -264,14 +300,207 @@ @PostMapping("/base/coursePack/afterCourseTwos") public List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId){ List<AfterVideoVo> videoVos = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId); List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId", appUserId)); List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); // List<PostCourseVideo> videoList = pcvService.queryAllVideoNoneShow(coursePackageIds); // TODO: 2023/7/6 两个课后视频 return videoVos; } @ResponseBody @PostMapping("/api/course/queryArrangeCourseList") @ApiOperation(value = "获取布置课程列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ }) public ResultUtil<List<BaseVo>> queryArrangePackageType(){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId",appUserId)); List<BaseVo> list = new ArrayList<>(); tCoursePackagePayments.forEach(c -> { BaseVo baseVo = new BaseVo(); baseVo.setId(c.getCoursePackageId()); TCoursePackage coursePackage = tcpService.getById(c.getCoursePackageId()); baseVo.setName(coursePackage.getName()); list.add(baseVo); }); return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 课后视频课表 */ @ResponseBody @PostMapping("/api/startCource/afterSourceList") @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<List<AppUserVideoResponse>> queryAfterSourceList( CourseOfAfterRequest search){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } List<Integer> courseIds = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("coursePackageId",search.getCourseTypeId()) .eq("appUserId",appUserId)); if (tCoursePackagePayments.size() > 0 ){ courseIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); } return ResultUtil.success(packagePaymentService.queryAfterVideo(search,courseIds)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 课后视频详情 */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetail") @ApiOperation(value = "课后视频详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<CourseOfVideoResponse> queryAfterSourceDetails( CourseWithDetailsRequest detailsRequest){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryVideoDetails(detailsRequest,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 更新课后视频学习状态 */ @ResponseBody @PostMapping("/api/startCource/updateVideoStatus") @ApiOperation(value = "更新课后视频学习状态", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil updateVideoStatus( UpdateCourseVideoStatusRequest detailsRequest){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.updateVideoStatus(detailsRequest,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/course/getCourseAppUserDetails") @ApiOperation(value = "已报名课程-获取课程类型列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ }) public ResultUtil<List<BaseVo>> queryCoursePackageType(){ try { List<TCoursePackageType> coursePackageTypes = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("state", 1)); List<BaseVo> list = new ArrayList<>(); coursePackageTypes.forEach(c -> { BaseVo baseVo = new BaseVo(); BeanUtils.copyProperties(c, baseVo); list.add(baseVo); }); return ResultUtil.success(list); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 已报名课程列表 */ @ResponseBody @PostMapping("/api/startCource/registeredCourses") @ApiOperation(value = "已报名课程-课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails( CourseOfAfterRequest courseTypeId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryRegisteredCourseList(courseTypeId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 已报名课程详情 */ @ResponseBody @PostMapping("/api/startCource/RegisteredData") @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePackageId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePackageId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 已报名课程-支付 */ @ResponseBody @PostMapping("/api/startCource/payment") @ApiOperation(value = "已报名课程-支付", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil continuationOperation( ClasspaymentRequest request){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } return packagePaymentService.ContinuationOrpaymentCourse(userIdFormRedis,request); }catch (Exception e){ return ResultUtil.runErr(); } } cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java
@@ -38,7 +38,12 @@ Integer sult = 0; TCoursePackage coursePackage = tcpService.getById(course.getCourseId()); if (null != coursePackage && coursePackage.getStatus() == 3){ List<CoursePackageStudent> coursePackageStudents = cosService.queryStuDeduClassHourNums(course.getCourseId(), course.getStuId(), course.getAppUserId()); List<CoursePackageStudent> coursePackageStudents = cosService.list(new QueryWrapper<CoursePackageStudent>() .eq("coursePackageId",course.getCourseId() ) .eq("studentId",course.getStuId() ) .eq("appUserId", course.getAppUserId()) .eq("signInOrNot",1)); if (coursePackageStudents.size() > 0){ List<CancelledClasses> list = caccService.list(new QueryWrapper<CancelledClasses>() .eq("coursePackageId",course.getCourseId() )); cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java
New file @@ -0,0 +1,63 @@ package com.dsh.course.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 用户观看视频记录 * </p> * * @author jqs * @since 2023-07-06 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_user_video_details") public class UserVideoDetails extends Model<UserVideoDetails> { private static final long serialVersionUID = 1L; /** * 主键id */ private Integer id; /** * 用户id */ private Integer appUserId; /** * 课包id */ private Integer coursePackageId; /** * 课后视频id */ private Integer courseId; /** * 状态(1未学习 2已学习) */ private Integer state; /** * 添加时间 */ private Date insertTime; /** * 更新时间 */ private Date updateTime; @Override protected Serializable pkVal() { return this.id; } } cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -28,4 +28,8 @@ @PostMapping("/base/coursePack/afterCourseTwos") List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId); @PostMapping("/base/coursePack/courseOfPurchased") public List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId); } cloud-server-course/src/main/java/com/dsh/course/feignclient/account/CoachClient.java
New file @@ -0,0 +1,15 @@ package com.dsh.course.feignclient.account; import com.dsh.course.feignclient.account.model.Coach; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-account") public interface CoachClient { @PostMapping("/coach/queryCoachById") Coach queryCoachById(@RequestBody Integer id); } cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Coach.java
New file @@ -0,0 +1,104 @@ package com.dsh.course.feignclient.account.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.util.Date; /** * <p> * 教练 * </p> * * @author jqs * @since 2023-07-05 */ @Data public class Coach { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 省 */ private String province; /** * 省编号 */ private String provinceCode; /** * 市 */ private String city; /** * 市编号 */ private String cityCode; /** * 城市管理员id */ private Integer cityManagerId; /** * 教练类型id */ private Integer coachTypeId; /** * 姓名 */ private String name; /** * 生日 */ private Date birthday; /** * 性别(1=男,2=女) */ private Integer gender; /** * 电话 */ private String phone; /** * 身份证号码 */ private String idcard; /** * 身高(厘米) */ private Double height; /** * 体重(KG) */ private Double weight; /** * 毕业院校 */ private String graduateSchool; /** * 毕业证照片 */ private String diploma; /** * 资格证书(多个逗号分隔) */ private String certificate; /** * 证书照片 */ private String certificateImg; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ private Date insertTime; } cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java
New file @@ -0,0 +1,16 @@ package com.dsh.course.feignclient.activity; import com.dsh.course.feignclient.activity.model.BenefitsVideos; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-activity") public interface BenefitVideoClient { @PostMapping("base/benefitVideo/getList") BenefitsVideos getVideosWithIds(@RequestBody Integer id); } cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java
New file @@ -0,0 +1,61 @@ package com.dsh.course.feignclient.activity.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.util.Date; /** * <p> * 福利视频 * </p> * * @author jqs * @since 2023-07-06 */ @Data public class BenefitsVideos { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 分类id */ private Integer benefitsVideoClassificationId; /** * 视频名称 */ private String name; /** * 视频封面 */ private String cover; /** * 视频简介 */ private String introduction; /** * 视频地址 */ private String videos; /** * 可得积分 */ private String integral; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ private Date insertTime; } cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java
New file @@ -0,0 +1,37 @@ package com.dsh.course.feignclient.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class PurchaseVo { @ApiModelProperty(value = "课包id") private Integer courseId; @ApiModelProperty(value = "课包封面图") private String packageImg; @ApiModelProperty(value = "课包名称") private String courseName; @ApiModelProperty(value = "上课时间段") private String courseTime; @ApiModelProperty(value = "授课老师id") private Integer teacherId; @ApiModelProperty(value = "门店id") private Integer storeId; @ApiModelProperty(value = "已上课时数") private Integer courseNums; @ApiModelProperty(value = "课包状态 1=待支付 2=已购买") private Integer courseStatus; @ApiModelProperty(value = "课包类型id") private Integer courseTypeId; } cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java
@@ -2,9 +2,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.course.entity.CoursePackageStudent; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -16,8 +13,5 @@ */ public interface CoursePackageStudentMapper extends BaseMapper<CoursePackageStudent> { List<CoursePackageStudent> queryStuDeduClassHourNums(@Param("courseId") Integer courseId, @Param("stuId") Integer stuId, @Param("appUserId") Integer appUserId); } cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java
@@ -13,4 +13,5 @@ */ public interface PostCourseVideoMapper extends BaseMapper<PostCourseVideo> { } cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -1,11 +1,8 @@ package com.dsh.course.mapper; import com.dsh.course.entity.TCoursePackagePayment; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.course.entity.TCoursePackagePayment; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; /** * <p> @@ -17,11 +14,6 @@ */ public interface TCoursePackagePaymentMapper extends BaseMapper<TCoursePackagePayment> { List<TCoursePackagePayment> queryAllCoursePackage(@Param("startTime")Date startTime, @Param("endTime")Date endTime , @Param("coursePackId") Integer coursePackId, @Param("stuId") Integer stuId, @Param("appUserId") Integer appUserId); /** cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java
New file @@ -0,0 +1,17 @@ package com.dsh.course.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.course.entity.UserVideoDetails; /** * <p> * 用户观看视频记录 Mapper 接口 * </p> * * @author jqs * @since 2023-07-06 */ public interface UserVideoDetailsMapper extends BaseMapper<UserVideoDetails> { } cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java
New file @@ -0,0 +1,31 @@ package com.dsh.course.model.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class RegisterCourseVo { @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "课包封面图") private String packageImg; @ApiModelProperty(value = "课包名称+门店名称") private String courseNameStore; @ApiModelProperty(value = "上课时间段") private String courseTime; @ApiModelProperty(value = "授课老师") private String courseTeacher; @ApiModelProperty(value = "已上课时数") private Integer courseNums; @ApiModelProperty(value = "支付状态 1未支付 2已支付") private Integer payStatus; } cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java
File was deleted cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java
New file @@ -0,0 +1,29 @@ package com.dsh.course.model.vo.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ClasspaymentRequest { @ApiModelProperty(value = "课包id") private Integer lessonId; @ApiModelProperty(value = "学员id") private Integer stuId; @ApiModelProperty(value = "支付方式(1=微信 2=支付宝 3=玩湃币)") private Integer payType; @ApiModelProperty(value = "是否使用优惠券 1是 2否") private Integer useConpon; @ApiModelProperty(value = "优惠券Id") private Integer conponId; @ApiModelProperty(value = "课时id") private Long courseConfigId; } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java
New file @@ -0,0 +1,17 @@ package com.dsh.course.model.vo.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CourseOfAfterRequest { @ApiModelProperty(value = "课程类型id",dataType = "int",required = false) private Integer courseTypeId; @ApiModelProperty(value = "课程名称/门店名称",dataType = "string",required = false) private String search; } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java
New file @@ -0,0 +1,16 @@ package com.dsh.course.model.vo.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CourseWithDetailsRequest { @ApiModelProperty(value = "视频id") private Integer videoId; @ApiModelProperty(value = "课包id") private Integer coursePackageId; } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java
New file @@ -0,0 +1,20 @@ package com.dsh.course.model.vo.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class UpdateCourseVideoStatusRequest { @ApiModelProperty(value = "视频id") private Integer videoId; @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "是否看完 1是 2否") private Integer isOver; } cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java
New file @@ -0,0 +1,34 @@ package com.dsh.course.model.vo.response; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class AppUserVideoResponse { @ApiModelProperty(value = "视频id") private Integer videoId; @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "封面图") private String coverImage; @ApiModelProperty(value = "视频名称") private String videoName; @ApiModelProperty(value = "布置课程名称") private String packageName; @ApiModelProperty(value = "简介") private String synopsis; @ApiModelProperty(value = "可得积分") private String integral; @ApiModelProperty(value = "学习状态 1未学习 2已学习") private Integer studyStatus; } cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
New file @@ -0,0 +1,41 @@ package com.dsh.course.model.vo.response; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CourseDetailsResponse { @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "课包封面图") private String coverDrawing; @ApiModelProperty(value = "课包名称") private String coursePackageName; @ApiModelProperty(value = "上课周 (每周一、周二 )") private String weeks; @ApiModelProperty(value = "上课时间范围") private String courseTimeFrame; @ApiModelProperty(value = "课包介绍图片") private String introduceDrawing; @ApiModelProperty(value = "支付价格") private double amount; @ApiModelProperty(value = "会员价") private double vipAmount; @ApiModelProperty(value = "玩湃币") private double wpGold; @ApiModelProperty(value = "支付状态 1未支付 2续课") private Integer payStatus; } cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java
New file @@ -0,0 +1,37 @@ package com.dsh.course.model.vo.response; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class CourseOfVideoResponse { @ApiModelProperty(value = "视频id") private Integer videoId; @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "视频url") private String videoURL; @ApiModelProperty(value = "视频名称") private String videoName; @ApiModelProperty(value = "可得积分") private String integral; @ApiModelProperty(value = "学习状态 1未学习 2已学习") private Integer studyStatus; @ApiModelProperty(value = "布置课程名称") private String packageName; @ApiModelProperty(value = "视频简介") private String synopsis; @ApiModelProperty(value = "课程介绍图片") private String detailedDiagram; } cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java
@@ -3,8 +3,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.CoursePackageStudent; import java.util.List; /** * <p> * 学员上课记录 服务类 @@ -15,6 +13,6 @@ */ public interface CoursePackageStudentService extends IService<CoursePackageStudent> { List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId); } cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -2,8 +2,16 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; import com.dsh.course.model.vo.request.CourseOfAfterRequest; import com.dsh.course.model.vo.request.CourseWithDetailsRequest; import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; import com.dsh.course.model.vo.response.AppUserVideoResponse; import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.util.ResultUtil; import java.util.Date; import java.util.List; /** @@ -16,7 +24,6 @@ */ public interface TCoursePackagePaymentService extends IService<TCoursePackagePayment> { List<TCoursePackagePayment> queryAllCoursePackage(Date startTime, Date endTime ,Integer lessionId,Integer stuId, Integer appUserId); /** @@ -25,4 +32,49 @@ * @return */ Integer queryCountNumber(Integer coursePackageId); /** * 查询课包发布的课后视频列表 * @param search * @param courseIds * @return */ List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds); /** * 获取课后视频详情 * @param detailsRequest * @param appUserId * @return */ CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId); /** * 更新视频学习状态 * @param detailsRequest * @param appUserId * @return */ String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId); /** * 获取用户已报名课程 * @param courseTypeId * @param appUserId * @return */ List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId); /** * 获取已报名课包详情 * @param coursePackageId * @param appUserId * @return */ CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId); ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request); } cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java
New file @@ -0,0 +1,16 @@ package com.dsh.course.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.UserVideoDetails; /** * <p> * 用户观看视频记录 服务类 * </p> * * @author jqs * @since 2023-07-06 */ public interface UserVideoDetailsService extends IService<UserVideoDetails> { } cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java
@@ -6,8 +6,6 @@ import com.dsh.course.service.CoursePackageStudentService; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * 学员上课记录 服务实现类 @@ -19,8 +17,5 @@ @Service public class CoursePackageStudentServiceImpl extends ServiceImpl<CoursePackageStudentMapper, CoursePackageStudent> implements CoursePackageStudentService { @Override public List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId) { return this.baseMapper.queryStuDeduClassHourNums(courseId,stuId,appUserId); } } cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -1,13 +1,37 @@ package com.dsh.course.service.impl; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.mapper.TCoursePackagePaymentMapper; import com.dsh.course.service.TCoursePackagePaymentService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.CoachClient; import com.dsh.course.feignclient.account.model.Coach; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.*; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; import com.dsh.course.model.vo.request.CourseOfAfterRequest; import com.dsh.course.model.vo.request.CourseWithDetailsRequest; import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; import com.dsh.course.model.vo.response.AppUserVideoResponse; import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.math.BigDecimal; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * <p> @@ -20,10 +44,36 @@ @Service public class TCoursePackagePaymentServiceImpl extends ServiceImpl<TCoursePackagePaymentMapper, TCoursePackagePayment> implements TCoursePackagePaymentService { @Override public List<TCoursePackagePayment> queryAllCoursePackage(Date startTime, Date endTime , Integer coursePackId, Integer stuId, Integer appUserId) { return this.baseMapper.queryAllCoursePackage(startTime,endTime,coursePackId,stuId,appUserId); } @Autowired private BenefitVideoClient bfvoClient; @Autowired private UserVideoDetailsMapper uvdmapper; @Autowired private PostCourseVideoMapper pcvMapper; @Autowired private TCoursePackageMapper tcpmapper; @Autowired private StoreClient stoClient; @Autowired private CoachClient coachClient; @Autowired private CoursePackageStudentMapper cpsMapper; @Autowired private CancelledClassesMapper cacMapper; @Autowired private TCoursePackageDiscountMapper tcpdMapper; /** * 获取课包购买人数 @@ -34,4 +84,231 @@ public Integer queryCountNumber(Integer coursePackageId) { return this.baseMapper.queryCountNumber(coursePackageId); } @Override public List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds) { List<AppUserVideoResponse> responses = new ArrayList<>(); List<PostCourseVideo> videoList = pcvMapper.selectList(new QueryWrapper<PostCourseVideo>() .eq("coursePackageId", courseIds)); if (videoList.size() > 0){ List<Integer> videoIds = videoList.stream().map(PostCourseVideo::getCourseId).collect(Collectors.toList()); List<UserVideoDetails> userVideoDetails = uvdmapper.selectList(new QueryWrapper<UserVideoDetails>() .in("courseId", videoIds)); if (userVideoDetails.size() > 0){ for (UserVideoDetails userVideoDetail : userVideoDetails) { AppUserVideoResponse response = new AppUserVideoResponse(); TCoursePackage coursePackage = tcpmapper.selectById(userVideoDetail.getCoursePackageId()); response.setPackageName(coursePackage.getName()); response.setCoursePackageId(userVideoDetail.getCoursePackageId()); BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(userVideoDetail.getCourseId()); response.setVideoId(userVideoDetail.getCourseId()); response.setCoverImage(videosWithIds.getCover()); if (null != search.getSearch()){ // 根据正则模糊匹配 String pattern = ".*" + search.getSearch() + ".*"; Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(videosWithIds.getName()); if (matcher.matches()) { response.setVideoName(videosWithIds.getName()); } }else { response.setVideoName(videosWithIds.getName()); } response.setSynopsis(videosWithIds.getIntroduction()); response.setIntegral(videosWithIds.getIntegral()); response.setStudyStatus(userVideoDetail.getState()); responses.add(response); } Collections.sort(responses, Comparator.comparing(AppUserVideoResponse::getStudyStatus)); } } return responses; } @Override public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId) { CourseOfVideoResponse response = new CourseOfVideoResponse(); BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId()); TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); if (null != videosWithIds && null != coursePackage){ response.setCoursePackageId(coursePackage.getId()); response.setVideoId(videosWithIds.getId()); response.setVideoURL(videosWithIds.getVideos()); response.setVideoName(videosWithIds.getName()); response.setIntegral(videosWithIds.getIntegral()); UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() .eq("appUserId",appUserId ) .eq("coursePackageId",coursePackage.getId()) .eq("courseId",videosWithIds.getId())); response.setStudyStatus(userVideoDetails.getState()); response.setPackageName(coursePackage.getName()); response.setSynopsis(videosWithIds.getIntroduction()); response.setDetailedDiagram(coursePackage.getIntroduceDrawing()); } return response; } @Override public String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId) { UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>() .eq("appUserId",appUserId ) .eq("coursePackageId",detailsRequest.getCoursePackageId()) .eq("courseId",detailsRequest.getVideoId()) ); if (null != userVideoDetails && userVideoDetails.getState() ==1 && detailsRequest.getIsOver() == 1){ userVideoDetails.setState(2); userVideoDetails.setUpdateTime(new Date()); uvdmapper.updateById(userVideoDetails); return "SUCCESS"; } return null; } @Override public List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId) { List<RegisterCourseVo> courseVos = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId",appUserId )); if (tCoursePackagePayments.size() > 0){ for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); Store store = stoClient.queryStoreById(coursePackage.getStoreId()); RegisterCourseVo registerCourseVo = new RegisterCourseVo(); registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); registerCourseVo.setPackageImg(coursePackage.getCoverDrawing()); String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")"; registerCourseVo.setCourseNameStore(storeAndCourse); registerCourseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); Coach coach = coachClient.queryCoachById(coursePackage.getCoachId()); registerCourseVo.setCourseTeacher(coach.getName()); List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>() .eq("coursePackageId",coursePackage.getId()) .eq("studentId",appUserId )); registerCourseVo.setCourseNums(coursePackageStudents.size() * 2); registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus()); courseVos.add(registerCourseVo); } } return courseVos; } @Override public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId) { CourseDetailsResponse response = new CourseDetailsResponse(); List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() .eq("coursePackageId",coursePackageId ) .eq("appUserId",appUserId)); if (tCoursePackagePayments.size() > 0){ TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0); TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); response.setCoverDrawing(coursePackage.getCoverDrawing()); response.setCoursePackageName(coursePackage.getName()); List<Integer> integers = StrUtils.dealStrToList(coursePackage.getClassWeeks()); if (integers.size() > 0){ StringBuilder courWeeks = new StringBuilder("每"); for (Integer integer : integers) { switch (integer){ case 1: courWeeks.append("周一、"); break; case 2: courWeeks.append("周二、"); break; case 3: courWeeks.append("周三、"); break; case 4: courWeeks.append("周四、"); break; case 5: courWeeks.append("周五、"); break; case 6: courWeeks.append("周六、"); break; case 7: courWeeks.append("周末、"); break; default: break; } } if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == ','){ courWeeks.deleteCharAt(courWeeks.length() - 1); } response.setWeeks(courWeeks.toString()); } response.setCourseTimeFrame(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); response.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); Integer payType = tCoursePackagePayment.getPayType(); BigDecimal cashPayment = tCoursePackagePayment.getCashPayment(); double cashPaymentValue = cashPayment.doubleValue(); Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin(); TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() .eq("coursePackageId",coursePackage.getId() ) .eq("type",1) .eq("auditStatus",2)); ObjectMapper objectMapper = new ObjectMapper(); String content = coursePackageDiscount.getContent(); double discountMember = 0.0; DiscountJsonDto discountJsonDto = null; try { discountJsonDto = objectMapper.readValue(content, DiscountJsonDto.class); discountMember = discountJsonDto.getDiscountMember(); } catch (JsonProcessingException e) { throw new RuntimeException(e); } switch (payType) { case 1: case 2: response.setAmount(cashPaymentValue); response.setVipAmount(discountMember); break; case 3: response.setWpGold(playPaiCoin); break; } response.setPayStatus(tCoursePackagePayment.getPayStatus()); } return response; } @Override public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) { // TODO: 2023/7/5 报名课程支付 switch (request.getPayType()){ case 1: WeChatPayment(); break; case 2: AlipayPayment(); break; case 3: PlaypaiGoldPayment(); break; default: break; } return ResultUtil.success(); } public void WeChatPayment(){ } public void AlipayPayment(){ } public void PlaypaiGoldPayment(){ } } cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.dsh.course.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.UserVideoDetails; import com.dsh.course.mapper.UserVideoDetailsMapper; import com.dsh.course.service.UserVideoDetailsService; import org.springframework.stereotype.Service; /** * <p> * 用户观看视频记录 服务实现类 * </p> * * @author jqs * @since 2023-07-06 */ @Service public class UserVideoDetailsServiceImpl extends ServiceImpl<UserVideoDetailsMapper, UserVideoDetails> implements UserVideoDetailsService { } cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
@@ -3,33 +3,4 @@ <mapper namespace="com.dsh.course.mapper.CoursePackageStudentMapper"> <select id="queryStuDeduClassHourNums" resultType="com.dsh.course.entity.CoursePackageStudent"> SELECT * FROM t_course_package_student UNION ALL SELECT * FROM t_course_package_student1 UNION ALL SELECT * FROM t_course_package_student2 UNION ALL SELECT * FROM t_course_package_student3 UNION ALL SELECT * FROM t_course_package_student4 UNION ALL SELECT * FROM t_course_package_student5 WHERE signInOrNot = 1 <if test="courseId != null"> and coursePackageId = #{courseId} </if> <if test="stuId != null "> and studentId = #{stuId} </if> <if test="appUserId != null"> and appUserId = #{appUserId} </if> </select> </mapper> cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -25,38 +25,6 @@ <result column="state" property="state" /> <result column="insertTime" property="insertTime" /> </resultMap> <select id="queryAllCoursePackage" resultType="com.dsh.course.entity.TCoursePackagePayment"> SELECT * FROM t_course_package_payment UNION ALL SELECT * FROM t_course_package_payment1 UNION ALL SELECT * FROM t_course_package_payment2 UNION ALL SELECT * FROM t_course_package_payment3 UNION ALL SELECT * FROM t_course_package_payment4 UNION ALL SELECT * FROM t_course_package_payment5 WHERE 1=1 <if test=" stuId != null"> and studentId = #{stuId} </if> <if test="appUserId != null"> and appUserId = #{appUserId} </if> <if test="startTime != null and endTime != null"> and (insertTime between #{startTime} and #{endTime}) </if> <if test="coursePackId != null "> and coursePackageId = #{coursePackId} </if> </select> <select id="queryCountNumber" resultType="int"> cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.course.mapper.UserVideoDetailsMapper"> </mapper> cloud-server-other/src/main/java/com/dsh/other/controller/UserLoginLogController.java
New file @@ -0,0 +1,44 @@ package com.dsh.other.controller; import com.dsh.other.entity.SysLoginLog; import com.dsh.other.service.SysLoginLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Date; @RestController @RequestMapping("") public class UserLoginLogController { @Autowired private SysLoginLogService ssllService; @PostMapping("/appUser/logOut") public void logOut(@RequestBody Integer appUserId){ SysLoginLog sysLoginLog = new SysLoginLog(); sysLoginLog.setCreatetime(new Date()); sysLoginLog.setUserid(appUserId); sysLoginLog.setSucceed("执行成功"); sysLoginLog.setMessage("退出成功"); sysLoginLog.setLogname("APP用户退出账号"); ssllService.save(sysLoginLog); } @PostMapping("/appUser/cancellation") public void cancellation(@RequestBody Integer appUserId){ SysLoginLog sysLoginLog = new SysLoginLog(); sysLoginLog.setCreatetime(new Date()); sysLoginLog.setUserid(appUserId); sysLoginLog.setSucceed("执行成功"); sysLoginLog.setMessage("注销成功"); sysLoginLog.setLogname("APP用户注销账号"); ssllService.save(sysLoginLog); } } cloud-server-other/src/main/java/com/dsh/other/entity/SysLoginLog.java
New file @@ -0,0 +1,66 @@ package com.dsh.other.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 登录记录 * </p> * * @author jqs * @since 2023-07-07 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sys_login_log") public class SysLoginLog extends Model<SysLoginLog> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 日志名称 */ private String logname; /** * 管理员id */ private Integer userid; /** * 创建时间 */ private Date createtime; /** * 是否执行成功 */ private String succeed; /** * 具体消息 */ private String message; /** * 登录ip */ private String ip; @Override protected Serializable pkVal() { return this.id; } } cloud-server-other/src/main/java/com/dsh/other/feignclient/SysLogClient.java
New file @@ -0,0 +1,16 @@ package com.dsh.other.feignclient; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "mb-cloud-other") public interface SysLogClient { @PostMapping("/appUser/logOut") void logOut(@RequestBody Integer appUserId); @PostMapping("/appUser/cancellation") void cancellation(@RequestBody Integer appUserId); } cloud-server-other/src/main/java/com/dsh/other/mapper/SysLoginLogMapper.java
New file @@ -0,0 +1,16 @@ package com.dsh.other.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.other.entity.SysLoginLog; /** * <p> * 登录记录 Mapper 接口 * </p> * * @author jqs * @since 2023-07-07 */ public interface SysLoginLogMapper extends BaseMapper<SysLoginLog> { } cloud-server-other/src/main/java/com/dsh/other/service/SysLoginLogService.java
New file @@ -0,0 +1,16 @@ package com.dsh.other.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.other.entity.SysLoginLog; /** * <p> * 登录记录 服务类 * </p> * * @author jqs * @since 2023-07-07 */ public interface SysLoginLogService extends IService<SysLoginLog> { } cloud-server-other/src/main/java/com/dsh/other/service/impl/SysLoginLogServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.dsh.other.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.other.entity.SysLoginLog; import com.dsh.other.mapper.SysLoginLogMapper; import com.dsh.other.service.SysLoginLogService; import org.springframework.stereotype.Service; /** * <p> * 登录记录 服务实现类 * </p> * * @author jqs * @since 2023-07-07 */ @Service public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLoginLog> implements SysLoginLogService { } cloud-server-other/src/main/resources/mapper/SysLoginLogMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.other.mapper.SysLoginLogMapper"> </mapper>