mitao
2025-01-15 508c33e2a1652aba452464476957778b3d244597
bug修改
7个文件已修改
1个文件已添加
144 ■■■■ 已修改文件
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/staff/StaffLiveController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeCourseVO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/live/XiaoeLiveRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/WeChatSubscribeMessageSender.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java
@@ -5,7 +5,7 @@
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.XiaoeLiveVoV2;
import com.ruoyi.goods.domain.vo.XiaoeLiveVo;
import com.ruoyi.goods.service.biz.XiaoeLiveService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -40,7 +40,7 @@
     */
    @ApiOperation("直播分页列表")
    @PostMapping("/page")
    public R<Page<XiaoeLiveVoV2>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) {
    public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) {
        return R.ok(xiaoeLiveService.getMgtLivePage(dto));
    }
    /**
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/staff/StaffLiveController.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.goods.controller.staff;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto;
import com.ruoyi.goods.domain.vo.XiaoeLiveVo;
import com.ruoyi.goods.service.biz.XiaoeLiveService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
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;
import javax.validation.Valid;
/**
 * @author mitao
 * @date 2025/1/15
 */
@Api(tags = {"员工端直播相关接口"})
@RestController
@RequestMapping("/staff/live")
@RequiredArgsConstructor
public class StaffLiveController {
    private final XiaoeLiveService xiaoeLiveService;
    /**
     * 员工端直播列表
     * @param dto
     * @return
     */
    @ApiOperation("直播列表")
    @PostMapping("/page")
    public R<Page<XiaoeLiveVo>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) {
        return R.ok(xiaoeLiveService.getStaffLivePage(dto));
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveDto.java
@@ -53,7 +53,7 @@
    private String userId;
    @ApiModelProperty(value = "支付类型:1-免费,3-加密,仅当goods_info.sale_type=2时才可用", example = "1")
    @NotNull(message = "支付类型不能为空")
    @NotNull(message = "直播类型不能为空")
    @JSONField(name = "payment_type")
    private Integer paymentType;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/XiaoeCourseVO.java
@@ -18,6 +18,10 @@
    @JSONField(name = "resource_id")
    private String resourceId;
    @ApiModelProperty("课程id")
    @JSONField(name = "resource_type")
    private Integer resourceType;
    @ApiModelProperty("课程名称")
    @JSONField(name = "title")
    private String title;
@@ -38,6 +42,10 @@
    @JSONField(name = "curriculum_time")
    private Date curriculumTime;
    @ApiModelProperty("更新时间")
    @JSONField(name = "last_updated_at")
    private Date lastUpdatedAt;
    @ApiModelProperty("开课结束时间")
    @JSONField(name = "curriculum_end_time")
    private Date curriculumEndTime;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java
@@ -16,7 +16,6 @@
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;
@@ -88,11 +87,13 @@
        //根据直播类型过滤平台和店铺直播
        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());
            if (CollUtil.isEmpty(liveRecordList)) {
                return new Page<>();
            }
            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;
    }
@@ -129,6 +130,7 @@
        Date aliveStartAt = DateUtil.parse(liveDetail.getAliveStartAt(), DatePattern.NORM_DATETIME_PATTERN);
        xiaoeLiveAppointment.setAliveStartAt(aliveStartAt);
        xiaoeLiveAppointment.setCreateTime(DateUtils.getNowDate());
        xiaoeLiveAppointment.setTitle(liveDetail.getTitle());
        xiaoeLiveAppointmentService.save(xiaoeLiveAppointment);
        /// 若为C端用户向 redis 添加预约记录
        if (sysUser.getUserType().equals("03")) {
@@ -186,7 +188,10 @@
        //当前商家创建的直播
        Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet());
        //过滤数据
        List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream().filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)).collect(Collectors.toList());
        List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream()
                .filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2))
                // 按照直播状态排序
                .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()).collect(Collectors.toList());
        livePageList.setRecords(filteredRecords);
        return livePageList;
    }
@@ -269,17 +274,26 @@
     * @param dto
     * @return
     */
    public Page<XiaoeLiveVoV2> getMgtLivePage(XiaoeLiveQueryDto dto) {
        Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto);
    public Page<XiaoeLiveVo> getMgtLivePage(XiaoeLiveQueryDto dto) {
        Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(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<XiaoeLiveVoV2> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList());
                livePageList.setRecords(filteredList);
            if (CollUtil.isEmpty(xiaoeLiveRecords)) {
                return new Page<>();
            }
            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());
            livePageList.setRecords(filteredList);
        }
        List<XiaoeLiveRecord> shopRecordList = xiaoeLiveRecordService.lambdaQuery().eq(XiaoeLiveRecord::getType, 2).list();
        Map<String, String> shopNameMap = shopRecordList.stream().collect(Collectors.toMap(XiaoeLiveRecord::getLiveId, XiaoeLiveRecord::getShopName));
        livePageList.setRecords(livePageList.getRecords().stream().peek(item -> {
            String name = shopNameMap.get(item.getId());
            if (StringUtils.isNotBlank(name)) {
                item.setShopName(name);
            }
        }).collect(Collectors.toList()));
        return livePageList;
    }
@@ -294,4 +308,27 @@
            xiaoeLiveRecordService.lambdaUpdate().eq(XiaoeLiveRecord::getLiveId, id).remove();
        }
    }
    /**
     * 员工端直播列表
     * @param dto
     * @return
     */
    public Page<XiaoeLiveVo> getStaffLivePage(XiaoeLiveQueryDto dto) {
        Page<XiaoeLiveVo> page = new Page<>();
        List<XiaoeLiveRecord> xiaoeLiveRecordList = xiaoeLiveRecordService.getMgtRecord();
        if (CollectionUtil.isEmpty(xiaoeLiveRecordList)) {
            return page;
        }
        Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto);
        if (CollectionUtil.isEmpty(livePageList.getRecords())) {
            return page;
        }
        //筛选平台创建的直播
        Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet());
        //过滤数据
        List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream().filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)).collect(Collectors.toList());
        livePageList.setRecords(filteredRecords);
        return livePageList;
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/live/XiaoeLiveRecordServiceImpl.java
@@ -58,4 +58,13 @@
        xiaoeLiveRecord.setCreateTime(DateUtils.getNowDate());
        save(xiaoeLiveRecord);
    }
    /**
     * 平台直播哦添加记录
     * @return
     */
    @Override
    public List<XiaoeLiveRecord> getMgtRecord() {
        return lambdaQuery().eq(XiaoeLiveRecord::getType, 1).list();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/live/IXiaoeLiveRecordService.java
@@ -36,4 +36,6 @@
     * @param liveId
     */
    void add(Long shopId, Integer type, String shopName, String liveId);
    List<XiaoeLiveRecord> getMgtRecord();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/WeChatSubscribeMessageSender.java
@@ -16,6 +16,7 @@
@Slf4j
public class WeChatSubscribeMessageSender {
    private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token";
    private static final String STABLE_ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/stable_token";
    private static final String API_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send";
    private static final String WX_APPID = "wxb7f0ea286fc4e535";
@@ -41,13 +42,14 @@
        params.put("touser", touser);
        // 构建订阅消息内容的JSON对象
        JSONObject messageData = new JSONObject();
        messageData.put("thing1", createDataItem("直播主题", title));
        messageData.put("thing4", createDataItem("直播间名称", shopName));
        messageData.put("time5", createDataItem("直播时间", DateUtil.format(aliveStartAt, "MM-dd HH:mm:ss")));
        params.put("data", messageData.toJSONString());
        messageData.put("thing4", createDataItem("直播间名称", shopName));
        messageData.put("thing1", createDataItem("直播主题", title));
        params.put("data", messageData);
        params.put("miniprogram_state", "trial");
        params.put("lang", "zh_CN");
        try {
            log.info("发送消息参数:{}", JSONObject.toJSONString(params));
            String post = HttpUtil.post(url, JSONObject.toJSONString(params));
            log.info("发送消息返回结果:{}", post);
        } catch (Exception e) {
@@ -59,10 +61,15 @@
     * 获取access_token
     * @return
     */
    public static String getAccessTokenByWX() {
        String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
        log.info("host:{}", host);
        return HttpUtil.get(host);
    private static String getAccessTokenByWX() {
        Map<String, Object> params = new HashMap<>();
        params.put("appid", WX_APPID);
        params.put("secret", WX_SECRET);
        params.put("grant_type", "client_credential");
        String token = HttpUtil.post(STABLE_ACCESS_TOKEN_HOST,JSONObject.toJSONString(params));
        log.info("token:{}", token);
        JSONObject jsonObject = JSONObject.parseObject(token);
        return jsonObject.getString("access_token");
    }
    private static Map<String, Object> createDataItem(String name, String value) {
        Map<String, Object> item = new HashMap<>();