From 4ea102e9177923f091412bd0c261d651c51725b9 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 14 一月 2025 18:21:12 +0800 Subject: [PATCH] bug修改 --- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java | 6 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java | 8 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppCourseController.java | 11 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeCourseQueryDto.java | 4 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveDetailVOV2.java | 181 +++++++++++++++ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java | 82 +++--- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java | 20 + ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveVoV2.java | 182 +++++++++++++++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java | 2 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java | 11 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeCourseService.java | 9 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerCourseController.java | 11 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java | 3 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java | 8 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java | 122 ++++++++- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java | 7 16 files changed, 592 insertions(+), 75 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java index ed91abb..92890a1 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java @@ -295,7 +295,7 @@ /** * 小鹅通讲师id */ - @TableField("xiaoe_guest_id") + @TableField("xiaoe_user_id") private String xiaoeUserId; diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java index dee9fc5..71ea2c8 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java @@ -222,4 +222,15 @@ } return sb.toString(); } + + public static Date getTodayStartTime() { + // 获取今天的日期 + LocalDate today = LocalDate.now(); + + // 获取当天的开始时间(00:00:00) + LocalDateTime startOfDay = today.atStartOfDay(); + + // 转换为 Date 类型 + return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerCourseController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerCourseController.java index 8302029..931550f 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerCourseController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerCourseController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; +import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; import com.ruoyi.goods.domain.vo.XiaoeCourseVO; import com.ruoyi.goods.service.biz.XiaoeCourseService; import io.swagger.annotations.Api; @@ -54,4 +55,14 @@ public R<List<XiaoeCourseChapterVO>> detail(@ApiParam(name = "id",value = "课程id",required = true)@PathVariable("id") String id) { return R.ok(xiaoeCourseService.getCourseDetail(id)); } + + /** + * 获取课程分组列表 + * @return + */ + @ApiOperation("获取课程分组列表") + @GetMapping("/group") + public R<List<XiaoeCourseGroupVO>> getCourseGroupList() { + return R.ok(xiaoeCourseService.getCourseGroupList()); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java index 428ab64..cb6fe5e 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeLiveDto; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; +import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; @@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -52,7 +52,7 @@ */ @ApiOperation("直播详情") @GetMapping("/detail/{id}") - public R<XiaoeLiveVo> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { + public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { return R.ok(xiaoeLiveService.getLiveDetail(id)); } @@ -105,7 +105,7 @@ * @return */ @ApiOperation("编辑直播") - @PutMapping + @PostMapping public R<Boolean> edit(@Valid @RequestBody XiaoeLiveDto dto) { return R.ok(xiaoeLiveService.edit(dto)); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java index 278fa26..17bc223 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java @@ -4,7 +4,8 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeLiveDto; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; -import com.ruoyi.goods.domain.vo.XiaoeLiveVo; +import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; +import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -39,7 +40,7 @@ */ @ApiOperation("直播分页列表") @PostMapping("/page") - public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { + public R<Page<XiaoeLiveVoV2>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getMgtLivePage(dto)); } /** @@ -49,7 +50,7 @@ */ @ApiOperation("直播详情") @GetMapping("/detail/{id}") - public R<XiaoeLiveVo> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { + public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { return R.ok(xiaoeLiveService.getLiveDetail(id)); } /** diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppCourseController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppCourseController.java index aa86dd2..d624487 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppCourseController.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppCourseController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; +import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; import com.ruoyi.goods.domain.vo.XiaoeCourseVO; import com.ruoyi.goods.service.biz.XiaoeCourseService; import io.swagger.annotations.Api; @@ -54,4 +55,14 @@ public R<List<XiaoeCourseChapterVO>> detail(@ApiParam(name = "id",value = "课程id",required = true)@PathVariable("id") String id) { return R.ok(xiaoeCourseService.getCourseDetail(id)); } + + /** + * 获取课程分组列表 + * @return + */ + @ApiOperation("获取课程分组列表") + @GetMapping("/group") + public R<List<XiaoeCourseGroupVO>> getCourseGroupList() { + return R.ok(xiaoeCourseService.getCourseGroupList()); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeCourseQueryDto.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeCourseQueryDto.java index 8bae0c9..ccb16f3 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeCourseQueryDto.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeCourseQueryDto.java @@ -1,7 +1,6 @@ package com.ruoyi.goods.domain.dto; import com.alibaba.fastjson2.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -21,7 +20,7 @@ @JSONField(name = "search_content") private String searchContent; - @ApiModelProperty(value = "课程创建来源") + @ApiModelProperty(value = "课程创建来源 0:全部,1:课程,2:圈子") @JSONField(name = "created_source") private Integer createdSource; @@ -39,7 +38,6 @@ @ApiModelProperty("排序类型 1:创建时间倒序 2:开始时间升序") @NotNull(message = "排序类型不能为空") - @JsonIgnore private Integer sortBy; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java index c321af8..70b255d 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java @@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.hibernate.validator.constraints.Length; -import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -24,7 +24,7 @@ @ApiModelProperty(value = "直播简介", notes = "字符长度必须小于256,默认为空") @NotBlank(message = "直播简介不能为空") - @Max(value = 256, message = "直播简介长度不能超过256") + @Length(max = 256, message = "直播简介长度不能超过256") @JSONField(name = "summary") private String summary; @@ -37,7 +37,7 @@ @JSONField(name = "zb_stop_at") private Integer zbStopAt; - @ApiModelProperty(value = "直播类型", notes = "0-语音,1-录播直播,2-推流直播,默认为0-语音直播") + @ApiModelProperty(value = "直播类型 0-语音,1-录播直播,2-推流直播,默认为0-语音直播") @NotNull(message = "直播类型不能为空") @JSONField(name = "alive_type") private Integer aliveType; @@ -63,7 +63,7 @@ @ApiModelProperty(value = "直播详情", notes = "仅允许纯文本,不得超过5000个字符,默认为空") @NotBlank(message = "直播详情不能为空") - @Max(value = 5000, message = "直播详情长度不能超过5000") + @Length(max = 5000, message = "直播详情长度不能超过5000") @JSONField(name = "descrb") private String descrb; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java index 7f4bd6d..c8d2a67 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java @@ -35,4 +35,7 @@ @ApiModelProperty("门店id") private Long shopId; + + @ApiModelProperty("直播类型 1:平台直播 2:商家直播") + private Integer liveType; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveDetailVOV2.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveDetailVOV2.java new file mode 100644 index 0000000..5d58758 --- /dev/null +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveDetailVOV2.java @@ -0,0 +1,181 @@ +package com.ruoyi.goods.domain.vo; + +import com.alibaba.fastjson2.annotation.JSONField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author mitao + * @date 2025/1/14 + */ +@Data +@ApiModel("直播详情2.0视图对象") +public class XiaoeLiveDetailVOV2 { + @ApiModelProperty(value = "资源信息") + @JSONField(name = "resource_info") + private ResourceInfo resourceInfo; + @ApiModelProperty(value = "配置信息") + @JSONField(name = "module_info") + private ModuleInfo moduleInfo; + @ApiModelProperty(value = "商品信息") + @JSONField(name = "goods_info") + private GoodsInfo goodsInfo; + @ApiModelProperty(value = "关联信息") + @JSONField(name = "relation_info") + private RelationInfo relationInfo; + @ApiModelProperty(value = "讲师信息") + @JSONField(name = "role_info") + private List<RelationInfo.RoleInfo> roleInfo; + + @Data + @ApiModel(description = "资源信息") + public static class ResourceInfo { + @ApiModelProperty(value = "店铺id", example = "app_id") + @JSONField(name = "app_id") + private String appId; + @ApiModelProperty(value = "直播ID", example = "id") + @JSONField(name = "id") + private String id; + @ApiModelProperty(value = "直播标题", example = "title") + @JSONField(name = "title") + private String title; + @ApiModelProperty(value = "直播简介", example = "summary") + @JSONField(name = "summary") + private String summary; + @ApiModelProperty(value = "直播详情(仅允许纯文本)", example = "descrb") + @JSONField(name = "descrb") + private String descrb; + @ApiModelProperty(value = "直播类型:0-语音,1-录播直播,2-推流直播", example = "2") + @JSONField(name = "alive_type") + private Integer aliveType; + @ApiModelProperty(value = "预设直播开始时间", example = "2023-05-31 18:00:00") + @JSONField(name = "zb_start_at") + private String zbStartAt; + @ApiModelProperty(value = "预设直播时长,单位:秒", example = "3600") + @JSONField(name = "zb_stop_at") + private Integer zbStopAt; + @ApiModelProperty(value = "详情封面图素材ID", example = "img_material_id") + @JSONField(name = "img_material_id") + private String imgMaterialId; + @ApiModelProperty(value = "宣传封面图素材ID", example = "alive_img_material_id") + @JSONField(name = "alive_img_material_id") + private String aliveImgMaterialId; + @ApiModelProperty(value = "暖场封面图素材ID", example = "aliveroom_img_material_id") + @JSONField(name = "aliveroom_img_material_id") + private String aliveroomImgMaterialId; + @ApiModelProperty(value = "暖场视频封面图素材ID", example = "warm_up_video_cover_material_id") + @JSONField(name = "warm_up_video_cover_material_id") + private String warmUpVideoCoverMaterialId; + @ApiModelProperty(value = "暖场视频素材ID", example = "warm_up_video_material_id") + @JSONField(name = "warm_up_video_material_id") + private String warmUpVideoMaterialId; + @ApiModelProperty(value = "录播视频素材ID", example = "alive_video_material_id") + @JSONField(name = "alive_video_material_id") + private String aliveVideoMaterialId; + + } + + @Data + @ApiModel(description = "配置信息") + public static class ModuleInfo { + @ApiModelProperty(value = "是否开启回放:0-开启,1-关闭", example = "0") + @JSONField(name = "is_lookback") + private Integer isLookback; + @ApiModelProperty(value = "回放是否允许倍速播放或快进:0-允许,1-禁止", example = "0") + @JSONField(name = "play_fast_state_switch") + private Integer playFastStateSwitch; + @ApiModelProperty(value = "直播模式:0-横屏直播,1-竖屏直播", example = "0") + @JSONField(name = "alive_mode") + private Integer aliveMode; + @ApiModelProperty(value = "回放有效期设置:1-永久,2-限时", example = "1") + @JSONField(name = "expire_type") + private Integer expireType; + @ApiModelProperty(value = "回放过期时间", example = "2023-06-30") + @JSONField(name = "expire") + private String expire; + @ApiModelProperty(value = "暖场设置:1-暖场图,2-暖场视频", example = "1") + @JSONField(name = "warm_up") + private Integer warmUp; + @ApiModelProperty(value = "是否开启完成条件:0-关闭,1-开启", example = "0") + @JSONField(name = "is_open_complete_time") + private Integer isOpenCompleteTime; + @ApiModelProperty(value = "设置最短学习时间(单位:分钟)", example = "0") + @JSONField(name = "complete_time") + private Integer completeTime; + @ApiModelProperty(value = "是否开启联系学员:0-关闭,1-开启", example = "0") + @JSONField(name = "is_contact_on") + private Integer isContactOn; + } + + @Data + @ApiModel(description = "商品信息") + public static class GoodsInfo { + @ApiModelProperty(value = "售卖类型:1-单独售卖、2-关联售卖", example = "1") + @JSONField(name = "sale_type") + private Integer saleType; + @ApiModelProperty(value = "支付类型:1-免费,2-收费,3-加密,4-指定学员可用,5-仅关联上级资源", example = "1") + @JSONField(name = "payment_type") + private Integer paymentType; + @ApiModelProperty(value = "价格(单位:分)", example = "0") + @JSONField(name = "piece_price") + private Integer piecePrice; + @ApiModelProperty(value = "划线价格(单位:分)", example = "0") + @JSONField(name = "line_price") + private Integer linePrice; + @ApiModelProperty(value = "密码", example = "resource_password") + @JSONField(name = "resource_password") + private String resourcePassword; + @ApiModelProperty(value = "上下架:1-下架,0-上架", example = "0") + @JSONField(name = "recycle_bin_state") + private Integer recycleBinState; + @ApiModelProperty(value = "定时上架时间", example = "2023-05-31 17:19:26") + @JSONField(name = "start_at") + private String startAt; + @ApiModelProperty(value = "是否停售:0-否,1-是", example = "0") + @JSONField(name = "is_stop_sell") + private Integer isStopSell; + @ApiModelProperty(value = "商品编码", example = "goods_sn") + @JSONField(name = "goods_sn") + private String goodsSn; + @ApiModelProperty(value = "商品状态:0-可见,1-隐藏,2-删除", example = "0") + @JSONField(name = "state") + private Integer state; + } + + @Data + @ApiModel(description = "关联信息") + public static class RelationInfo { + @ApiModelProperty(value = "资源id") + @JSONField(name = "package") + private List<String> packageIds; + @ApiModelProperty(value = "预留字段,暂未支持") + @JSONField(name = "attach_goods") + private List<String> attachGoods; + @ApiModelProperty(value = "预留字段,暂未支持") + @JSONField(name = "tags") + private List<String> tags; + + @Data + @ApiModel(description = "讲师信息列表") + public static class RoleInfo { + @ApiModelProperty(value = "自定义身份标签", example = "讲师") + @JSONField(name = "role_name") + private String roleName; + @ApiModelProperty(value = "用户id", example = "u_6688888888889999999") + @JSONField(name = "user_id") + private String userId; + @ApiModelProperty(value = "用户昵称", example = "测试") + @JSONField(name = "nickname") + private String nickname; + @ApiModelProperty(value = "用户头像", example = "avator") + @JSONField(name = "avator") + private String avator; + @ApiModelProperty(value = "是否接受打赏:1-接受打赏,0-不接受打赏", example = "1") + @JSONField(name = "is_can_exceptional") + private Integer isCanExceptional; + } + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveVoV2.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveVoV2.java new file mode 100644 index 0000000..6b8a1c4 --- /dev/null +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeLiveVoV2.java @@ -0,0 +1,182 @@ +package com.ruoyi.goods.domain.vo; + +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.alibaba.fastjson2.annotation.JSONField; + +@Data +@ApiModel(description = "小鹅通直播视图对象2.0") +public class XiaoeLiveVoV2 { + + @ApiModelProperty(value = "店铺ID", example = "app_id") + @JSONField(name = "app_id") + private String appId; + + @ApiModelProperty(value = "直播ID", example = "id") + @JSONField(name = "id") + private String id; + + @ApiModelProperty(value = "房间ID", example = "room_id") + @JSONField(name = "room_id") + private String roomId; + + @ApiModelProperty(value = "直播标题", example = "title") + @JSONField(name = "title") + private String title; + + @ApiModelProperty(value = "直播封面图", example = "img_url") + @JSONField(name = "img_url") + private String imgUrl; + + @ApiModelProperty(value = "页面url", example = "page_url") + @JSONField(name = "page_url") + private String pageUrl; + + @ApiModelProperty(value = "封面压缩后的路径", example = "img_url_compressed") + @JSONField(name = "img_url_compressed") + private String imgUrlCompressed; + + @ApiModelProperty(value = "评论数量", example = "comment_count") + @JSONField(name = "comment_count") + private Integer commentCount; + + @ApiModelProperty(value = "带货开关:1=开,0=关", example = "1") + @JSONField(name = "is_takegoods") + private Integer isTakegoods; + + @ApiModelProperty(value = "带货商品分组ID", example = "takegoods") + @JSONField(name = "takegoods") + private String takegoods; + + @ApiModelProperty(value = "付费类型:1-免费、2-单笔、3-付费产品包", example = "1") + @JSONField(name = "payment_type") + private Integer paymentType; + + @ApiModelProperty(value = "是否公开售卖,1公开,0不公开", example = "1") + @JSONField(name = "is_public") + private Integer isPublic; + + @ApiModelProperty(value = "是否停售,0-否、1-是", example = "0") + @JSONField(name = "is_stop_sell") + private Integer isStopSell; + + @ApiModelProperty(value = "视频是否转码,0-表示未转码,1-表示已转码,2-转码失败", example = "0") + @JSONField(name = "is_transcode") + private Integer isTranscode; + + @ApiModelProperty(value = "payment_type为2时,单笔价格(分);payment_type为3时,专栏价格(分)", example = "0") + @JSONField(name = "piece_price") + private Integer piecePrice; + + @ApiModelProperty(value = "划线价", example = "0") + @JSONField(name = "line_price") + private Integer linePrice; + + @ApiModelProperty(value = "该资源是否需要密码", example = "0") + @JSONField(name = "have_password") + private Integer havePassword; + + @ApiModelProperty(value = "直播类型:0-语音直播,1-视频直播,2-推流直播,3-ppt直播", example = "1") + @JSONField(name = "alive_type") + private Integer aliveType; + + @ApiModelProperty(value = "订阅量", example = "0") + @JSONField(name = "purchase_count") + private Integer purchaseCount; + + @ApiModelProperty(value = "打赏金额", example = "0") + @JSONField(name = "reward_sum") + private Integer rewardSum; + + @ApiModelProperty(value = "强制封禁:0-否 1-是", example = "0") + @JSONField(name = "is_ban") + private Integer isBan; + + @ApiModelProperty(value = "强制下架:0-否 1-是", example = "0") + @JSONField(name = "on_shelf") + private Integer onShelf; + + @ApiModelProperty(value = "上下架状态:0-上架,1-下架", example = "0") + @JSONField(name = "recycle_bin_state") + private Integer recycleBinState; + + @ApiModelProperty(value = "推流状态,0断流,1推流中,2推流未开始", example = "0") + @JSONField(name = "push_state") + private Integer pushState; + + @ApiModelProperty(value = "直播状态:0-可见,1-关闭,2-删除", example = "0") + @JSONField(name = "state") + private Integer state; + + @ApiModelProperty(value = "上架时间", example = "2023-05-31 17:19:26") + @JSONField(name = "start_at") + private String startAt; + + @ApiModelProperty(value = "直播开始时间", example = "2023-05-31 17:19:26") + @JSONField(name = "zb_start_at") + private String zbStartAt; + + @ApiModelProperty(value = "手动结束直播时间", example = "2023-05-31 17:19:26") + @JSONField(name = "manual_stop_at") + private String manualStopAt; + + @ApiModelProperty(value = "转播店铺名称", example = "source_shop_name") + @JSONField(name = "source_shop_name") + private String sourceShopName; + + @ApiModelProperty(value = "素材状态", example = "0") + @JSONField(name = "material_state") + private Integer materialState; + + @ApiModelProperty(value = "视频时长(s)", example = "0") + @JSONField(name = "video_length") + private Integer videoLength; + + @ApiModelProperty(value = "直播状态", example = "0") + @JSONField(name = "alive_state") + private Integer aliveState; + + @ApiModelProperty(value = "直播模式:0.无;1竖屏直播", example = "0") + @JSONField(name = "alive_mode") + private Integer aliveMode; + + @ApiModelProperty(value = "创建类型:0-自创建,1-转播创建", example = "0") + @JSONField(name = "create_mode") + private Integer createMode; + + @ApiModelProperty(value = "圆桌会议功能是否开启", example = "0") + @JSONField(name = "is_round_table_on") + private Integer isRoundTableOn; + + @ApiModelProperty(value = "关联商品", example = "query_package_list") + @JSONField(name = "query_package_list") + private String queryPackageList; + + @ApiModelProperty(value = "售卖有效期", example = "course_expire") + @JSONField(name = "course_expire") + private CourseExpire courseExpire; + + @ApiModelProperty("预约状态 1:已预约 0:未预约") + private Integer appointmentState=0; + + @ApiModelProperty("创建门店") + private String shopName; + + @Data + @ApiModel(description = "Course Expire Information") + public static class CourseExpire { + + @ApiModelProperty(value = "有效期类型:0=永久有效,1=固定有效期,2=自定义有效期", example = "0") + @JSONField(name = "period_type") + private Integer periodType; + + @ApiModelProperty(value = "自定义有效时长", example = "period_value") + @JSONField(name = "period_value") + private String periodValue; + + @ApiModelProperty(value = "是否允许重复购买:1=是,0=否", example = "0") + @JSONField(name = "is_allow_repeat_purchase") + private Integer isAllowRepeatPurchase; + } +} diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeCourseService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeCourseService.java index cf72f59..87b8e5b 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeCourseService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeCourseService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; +import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; import com.ruoyi.goods.domain.vo.XiaoeCourseVO; import com.ruoyi.goods.utils.XiaoeUtils; import lombok.RequiredArgsConstructor; @@ -36,4 +37,12 @@ public List<XiaoeCourseChapterVO> getCourseDetail(String id) { return xiaoeUtils.getCourseChapterDetail(id); } + + /** + * 获取课程分组列表 + * @return + */ + public List<XiaoeCourseGroupVO> getCourseGroupList() { + return xiaoeUtils.getCourseGroupList(); + } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java index 43fe15b..bb1426b 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java @@ -14,7 +14,9 @@ import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.pojo.live.XiaoeLiveAppointment; import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; +import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; +import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.live.IXiaoeLiveAppointmentService; import com.ruoyi.goods.service.live.IXiaoeLiveRecordService; import com.ruoyi.goods.utils.XiaoeUtils; @@ -32,6 +34,7 @@ import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -67,17 +70,29 @@ //已预约的记录 List<XiaoeLiveAppointment> appointments = xiaoeLiveAppointmentService.lambdaQuery() .gt(XiaoeLiveAppointment::getAliveStartAt, DateUtils.getNowDate()).eq(XiaoeLiveAppointment::getUserId, userId).list(); - //处理获取到的直播数据 + Map<String, XiaoeLiveAppointment> appointmentMap = appointments.stream().collect(Collectors.toMap(XiaoeLiveAppointment::getLiveId, appointment -> appointment)); + // 处理直播数据 List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream() - .filter(item -> !item.getAliveState().equals(2)) - .flatMap(item -> appointments.stream().map(appointment -> { - //直播状态为未开始 且 预约记录存在 设置状态为已预约 - if (item.getAliveState().equals(0) && appointment.getLiveId().equals(item.getId())) { - item.setAppointmentState(1); + .filter(item -> !item.getAliveState().equals(2)) // 过滤直播状态为已结束的记录 + .peek(item -> { + // 查找对应的预约记录 + XiaoeLiveAppointment appointment = appointmentMap.get(item.getId()); + + // 如果预约记录存在且直播状态为未开始,则设置状态为已预约 + if (item.getAliveState().equals(0) && appointment != null) { + item.setAppointmentState(1); // 设置为已预约 } - return item; - })).sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()) + }) + .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()) // 按照直播状态排序 .collect(Collectors.toList()); + //根据直播类型过滤平台和店铺直播 + if (Objects.nonNull(dto.getLiveType())) { + List<XiaoeLiveRecord> liveRecordList = xiaoeLiveRecordService.lambdaQuery().eq(XiaoeLiveRecord::getType, dto.getLiveType()).list(); + if (CollUtil.isNotEmpty(liveRecordList)) { + List<String> liveIdList = liveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toList()); + filteredRecords = filteredRecords.stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); + } + } livePageList.setRecords(filteredRecords); return livePageList; } @@ -87,8 +102,8 @@ * @param id * @return */ - public XiaoeLiveVo getLiveDetail(String id) { - return xiaoeUtils.getLiveDetail(id); + public XiaoeLiveDetailVOV2 getLiveDetail(String id) { + return xiaoeUtils.getLiveDetailV2(id); } /** * 预约直播 @@ -117,8 +132,6 @@ xiaoeLiveAppointmentService.save(xiaoeLiveAppointment); /// 若为C端用户向 redis 添加预约记录 if (sysUser.getUserType().equals("03")) { - // 如果活动在1小时内生成自动开始任务的延时任务 - Date checkTime = DateUtils.addMinutes(new Date(), 61); // 获取当前时间 Date nowTime = new Date(); @@ -126,28 +139,25 @@ long startTimeDifference = aliveStartAt.getTime() - nowTime.getTime(); startTimeDifference = Math.max(startTimeDifference, 3000L); // 确保差值至少为3秒 - // 根据条件判断是否创建延时任务 - if (checkTime.compareTo(aliveStartAt) > 0 || nowTime.compareTo(aliveStartAt) > 0) { - // 获取延时任务 - DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()).getData(); - // 创建或者更新延时任务 - if (startDelayTask == null || !startDelayTask.getEndTime().equals(aliveStartAt)) { - // 删除旧的延时任务及缓存 - if (startDelayTask != null) { - remoteConfigService.deleteDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); - redisService.deleteObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); - } - // 设置新的延时任务 - redisService.setCacheObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId(), aliveStartAt, startTimeDifference, TimeUnit.MILLISECONDS); - startDelayTask = new DelayTask(); - startDelayTask.setDelFlag(0); - startDelayTask.setCreateTime(new Date()); - startDelayTask.setEndTime(aliveStartAt); - startDelayTask.setRedisKey(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); - - // 添加新的延时任务 - remoteConfigService.addDelayTask(startDelayTask); + // 获取延时任务 + DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()).getData(); + // 创建或者更新延时任务 + if (startDelayTask == null || !startDelayTask.getEndTime().equals(aliveStartAt)) { + // 删除旧的延时任务及缓存 + if (startDelayTask != null) { + remoteConfigService.deleteDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); + redisService.deleteObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); } + // 设置新的延时任务 + redisService.setCacheObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId(), aliveStartAt, startTimeDifference, TimeUnit.MILLISECONDS); + startDelayTask = new DelayTask(); + startDelayTask.setDelFlag(0); + startDelayTask.setCreateTime(new Date()); + startDelayTask.setEndTime(aliveStartAt); + startDelayTask.setRedisKey(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); + + // 添加新的延时任务 + remoteConfigService.addDelayTask(startDelayTask); } } return true; @@ -259,14 +269,14 @@ * @param dto * @return */ - public Page<XiaoeLiveVo> getMgtLivePage(XiaoeLiveQueryDto dto) { - Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); + public Page<XiaoeLiveVoV2> getMgtLivePage(XiaoeLiveQueryDto dto) { + Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto); Long shopId = dto.getShopId(); if (Objects.nonNull(shopId)) { List<XiaoeLiveRecord> xiaoeLiveRecords = xiaoeLiveRecordService.getListByShopId(shopId); if (CollUtil.isNotEmpty(xiaoeLiveRecords)) { List<String> liveIdList = xiaoeLiveRecords.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toList()); - List<XiaoeLiveVo> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); + List<XiaoeLiveVoV2> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); livePageList.setRecords(filteredList); } } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java index a1db5cf..32e5c0f 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java @@ -28,6 +28,12 @@ * @return */ List<XiaoeLiveRecord> getListByShopId(Long shopId); - + /** + * 添加直播创建记录 + * @param shopId + * @param type + * @param shopName + * @param liveId + */ void add(Long shopId, Integer type, String shopName, String liveId); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java index b34b7b4..d6f9a23 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java @@ -1,9 +1,13 @@ package com.ruoyi.goods.utils; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; @@ -12,7 +16,9 @@ import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; import com.ruoyi.goods.domain.vo.XiaoeCourseVO; +import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; +import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -27,6 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * 小鹅通工具类 @@ -48,9 +55,11 @@ //固定填写client_credential private String grant_type = "client_credential"; //获取直播列表 - private static final String LIVE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0"; + private static final String LIVE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.alive.list.get/1.0.0"; + private static final String LIVE_PAGE_LIST_V2 = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0"; //获取直播详情 private static final String LIVE_DETAIL = "https://api.xiaoe-tech.com/xe.alive.detail.get/1.0.0"; + private static final String LIVE_DETAIL_V2 = "https://api.xiaoe-tech.com/xe.alive.detail.get/2.0.0"; //创建直播 private static final String LIVE_ADD = "https://api.xiaoe-tech.com/xe.alive.live.create/1.0.0"; //编辑直播 @@ -63,6 +72,7 @@ private static final String COURSE_CHAPTER = "https://api.xiaoe-tech.com/xe.course.course.chapter.get/1.0.0"; //获取店铺商品分组列表 private static final String COURSE_GROUP_LIST = "https://api.xiaoe-tech.com/xe.resource_tags.list/1.0.0"; + /** * 获取小鹅通access_token @@ -98,7 +108,9 @@ } JSONObject jsonObject = JSONObject.parseObject(result); Map data = (Map) jsonObject.get("data"); - accessToken = (String) data.get("access_token"); + accessToken = (String)data.get("access_token"); + Integer expiresIn = (int) data.get("expires_in"); + redisService.setCacheObject("xiaoe:access_token", accessToken,Long.parseLong(expiresIn.toString()), TimeUnit.SECONDS); } return accessToken; } @@ -121,15 +133,17 @@ String post = HttpUtil.post(LIVE_PAGE_LIST, JSONObject.toJSONString(postParams)); Page<XiaoeLiveVo> xiaoeLiveVOPage = new Page<>(); if (StringUtils.isNotBlank(post)) { + log.info("获取直播列表返回结果:{}", post); JSONObject jsonObject = JSONObject.parseObject(post); - if (jsonObject.get("code").equals(0)) { + if (jsonObject.get("code").equals(0) ) { JSONObject data = jsonObject.getJSONObject("data"); JSONArray list = data.getJSONArray("list"); - List<XiaoeLiveVo> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVo.class); - xiaoeLiveVOPage.setRecords(xiaoeLiveVos); - xiaoeLiveVOPage.setCurrent(data.getLong("page")); - xiaoeLiveVOPage.setTotal(data.getLong("total")); - xiaoeLiveVOPage.setPages(data.getLong("page_count")); + if (CollectionUtil.isNotEmpty(list)) { + List<XiaoeLiveVo> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVo.class); + xiaoeLiveVOPage.setRecords(xiaoeLiveVos); + xiaoeLiveVOPage.setCurrent(dto.getPage()); + xiaoeLiveVOPage.setPages(data.getLong("page_count")); + } } } return xiaoeLiveVOPage; @@ -157,6 +171,61 @@ } /** + * 获取直播列表2.0 + * @param dto + * @return + */ + public Page<XiaoeLiveVoV2> getLivePageListV2(XiaoeLiveQueryDto dto) { + Map<String,Object> postParams = new HashMap<>(); + postParams.put("search_content", dto.getSearchContent()); + postParams.put("create_mode", dto.getCreateMode()); + postParams.put("state", 0); + postParams.put("search_alive_type", dto.getSearchAliveType()); + postParams.put("alive_play_state", dto.getAlivePlayState()); + postParams.put("page", dto.getPage()); + postParams.put("page_size", dto.getPageSize()); + postParams.put("access_token", getAccessToken()); + postParams.put("zb_start_at_min", DateUtil.format(DateUtils.getTodayStartTime(), DatePattern.NORM_DATETIME_PATTERN)); + String post = HttpUtil.post(LIVE_PAGE_LIST_V2, JSONObject.toJSONString(postParams)); + Page<XiaoeLiveVoV2> xiaoeLiveVOPage = new Page<>(); + if (StringUtils.isNotBlank(post)) { + log.info("获取直播详情2.0返回结果:{}", post); + JSONObject jsonObject = JSONObject.parseObject(post); + if (jsonObject.get("code").equals(0)) { + JSONObject data = jsonObject.getJSONObject("data"); + JSONArray list = data.getJSONArray("live_list"); + if (!list.isEmpty()){ + List<XiaoeLiveVoV2> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVoV2.class); + xiaoeLiveVOPage.setRecords(xiaoeLiveVos); + xiaoeLiveVOPage.setCurrent(dto.getPage()); + xiaoeLiveVOPage.setTotal(data.getLong("total_count")); + } + } + } + return xiaoeLiveVOPage; + } + + /** + *获取直播详情 + * @param id 直播ID + * @return + */ + public XiaoeLiveDetailVOV2 getLiveDetailV2(String id) { + Map<String, Object> postParams = new HashMap<>(); + postParams.put("id", id); + postParams.put("access_token", getAccessToken()); + String post = HttpUtil.post(LIVE_DETAIL_V2, JSONObject.toJSONString(postParams)); + XiaoeLiveDetailVOV2 vo = null; + if (StringUtils.isNotBlank(post)) { + JSONObject jsonObject = JSONObject.parseObject(post); + if (jsonObject.get("code").equals(0)) { + JSONObject data = jsonObject.getJSONObject("data"); + vo = JSONObject.parseObject(data.toJSONString(), XiaoeLiveDetailVOV2.class); + } + } + return vo; + } + /** * 创建直播 * @param dto * @return @@ -176,18 +245,22 @@ moudleInfoMap.put("alive_mode", dto.getAliveMode()); requestParams.put("module_info", moudleInfoMap); //讲师信息 + List<Map<String, Object>> roleList = new ArrayList<>(); Map<String, Object> roleInfoMap = new HashMap<>(); + roleInfoMap.put("role_name", "讲师"); roleInfoMap.put("user_id", dto.getUserId()); - requestParams.put("role_info", roleInfoMap); + roleList.add(roleInfoMap); + requestParams.put("role_info", roleList); //商品信息 Map<String, Object> goodsInfoMap = new HashMap<>(); - goodsInfoMap.put("sale_type", 2);//售卖类型:1-单独售卖、2-关联售卖 + goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖 goodsInfoMap.put("payment_type", dto.getPaymentType()); if (dto.getPaymentType().equals(3)) { goodsInfoMap.put("resource_password", dto.getResourcePassword()); } requestParams.put("goods_info", goodsInfoMap); requestParams.put("access_token", getAccessToken()); + log.info("创建直播参数:{}" ,JSONObject.toJSONString(requestParams)); String post = HttpUtil.post(LIVE_ADD, JSONObject.toJSONString(requestParams)); if (StringUtils.isNotBlank(post)) { JSONObject jsonObject = JSONObject.parseObject(post); @@ -200,7 +273,7 @@ return null; } /** - * 创建直播 + * 编辑直播 * @param dto * @return */ @@ -221,18 +294,22 @@ moudleInfoMap.put("alive_mode", dto.getAliveMode()); requestParams.put("module_info", moudleInfoMap); //讲师信息 + List<Map<String, Object>> roleList = new ArrayList<>(); Map<String, Object> roleInfoMap = new HashMap<>(); + roleInfoMap.put("role_name", "讲师"); roleInfoMap.put("user_id", dto.getUserId()); - requestParams.put("role_info", roleInfoMap); + roleList.add(roleInfoMap); + requestParams.put("role_info", roleList); //商品信息 Map<String, Object> goodsInfoMap = new HashMap<>(); - goodsInfoMap.put("sale_type", 2);//售卖类型:1-单独售卖、2-关联售卖 + goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖 goodsInfoMap.put("payment_type", dto.getPaymentType()); if (dto.getPaymentType().equals(3)) { goodsInfoMap.put("resource_password", dto.getResourcePassword()); } requestParams.put("goods_info", goodsInfoMap); requestParams.put("access_token", getAccessToken()); + log.info("编辑直播参数:{}" ,JSONObject.toJSONString(requestParams)); String post = HttpUtil.post(LIVE_EDIT, JSONObject.toJSONString(requestParams)); if (StringUtils.isNotBlank(post)) { JSONObject jsonObject = JSONObject.parseObject(post); @@ -294,15 +371,20 @@ * @return */ public Page<XiaoeCourseVO> getCoursePageList(XiaoeCourseQueryDto dto) { - JSONObject requestParams = JSONObject.parseObject(JSONObject.toJSONString(dto)); + Map<String, Object> requestParams = new HashMap<>(); + requestParams.put("search_content", dto.getSearchContent()); + requestParams.put("page", dto.getPageNo()); + requestParams.put("page_size", dto.getPageSize()); + requestParams.put("created_source", dto.getCreatedSource()); + requestParams.put("tags", dto.getTags()); if (dto.getSortBy().equals(1)) { requestParams.put("order_by", "modify");//根据创建时间排序 - requestParams.put("order_type", "降序"); + requestParams.put("order_type",1); } requestParams.put("sale_status", 1); requestParams.put("access_token", getAccessToken()); - String post = HttpUtil.post(COURSE_PAGE_LIST, requestParams.toJSONString()); + String post = HttpUtil.post(COURSE_PAGE_LIST, JSONObject.toJSONString(requestParams)); Page<XiaoeCourseVO> page = new Page<>(); if (StringUtils.isNotBlank(post)) { log.info("获取课程列表返回结果:{}" ,post); @@ -331,16 +413,16 @@ requestParams.put("course_id", id); requestParams.put("access_token", getAccessToken()); String post = HttpUtil.post(COURSE_CHAPTER, JSONObject.toJSONString(requestParams)); - List<XiaoeCourseChapterVO> xiaoeCourseChapterVO = new ArrayList<>(); + List<XiaoeCourseChapterVO> courseChapterVOList = new ArrayList<>(); if (StringUtils.isNotBlank(post)) { log.info("查询课程目录小节返回结果:{}" ,post); JSONObject jsonObject = JSONObject.parseObject(post); if (jsonObject.get("code").equals(0)) { - String data = jsonObject.getString("data"); - xiaoeCourseChapterVO = JSONArray.parseArray(data, XiaoeCourseChapterVO.class); + JSONObject data = jsonObject.getJSONObject("data"); + courseChapterVOList = JSONArray.parseArray(data.getString("list"), XiaoeCourseChapterVO.class); } } - return xiaoeCourseChapterVO; + return courseChapterVOList; } public static void main(String[] args) { String urlString = BASE_URL + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java index 57776ec..54c0ff6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java @@ -1,6 +1,5 @@ package com.ruoyi.system.controller.sys; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; @@ -18,19 +17,31 @@ import com.ruoyi.system.api.domain.dto.MgtFrozenMemberDto; import com.ruoyi.system.api.domain.poji.sys.SysDept; import com.ruoyi.system.api.domain.poji.sys.SysRole; +import com.ruoyi.system.api.domain.poji.sys.SysStaff; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.QwH5LoginVo; import com.ruoyi.system.api.model.QwUserDetailDto; import com.ruoyi.system.domain.dto.UserMenuEditDto; -import com.ruoyi.system.api.domain.poji.sys.SysStaff; import com.ruoyi.system.service.staff.SysStaffService; -import com.ruoyi.system.service.sys.*; +import com.ruoyi.system.service.sys.ISysConfigService; +import com.ruoyi.system.service.sys.ISysDeptService; +import com.ruoyi.system.service.sys.ISysPermissionService; +import com.ruoyi.system.service.sys.ISysPostService; +import com.ruoyi.system.service.sys.ISysRoleService; +import com.ruoyi.system.service.sys.ISysUserService; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -459,6 +470,7 @@ * @return R<QwH5LoginVo> */ @PostMapping("/qwH5StaffLogin") + @ApiOperation(value = "员工端登录") public R<QwH5LoginVo> qwH5StaffLogin(@RequestBody QwUserDetailDto qwUserDetail) { String mobile = qwUserDetail.getMobile(); -- Gitblit v1.7.1