feat(host-info): 添加主播AI操作状态更新功能

- 新增 `/update_ai_operation` 接口,支持根据主播ID和租户ID更新AI操作状态
- 添加请求参数校验和幂等性检查逻辑
- 删除旧日志文件并添加新日志文件
This commit is contained in:
2026-03-26 10:56:38 +08:00
parent 3f0014c9b4
commit dae4696224
4 changed files with 73 additions and 7 deletions

View File

@@ -3,6 +3,7 @@ package com.yupi.springbootinit.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yupi.springbootinit.common.BaseResponse;
import com.yupi.springbootinit.common.ResultUtils;
import com.yupi.springbootinit.model.dto.host.HostAiOperationUpdateRequest;
import com.yupi.springbootinit.model.dto.host.HostInfoDTO;
import com.yupi.springbootinit.model.dto.host.ServerLiveHostDetailDTO;
import com.yupi.springbootinit.model.entity.NewHosts;
@@ -58,6 +59,14 @@ public class HostInfoController {
}
@PostMapping("/update_ai_operation")
public BaseResponse<Boolean> updateAiOperation(@RequestBody HostAiOperationUpdateRequest request) {
String hostsId = request == null ? null : request.getHostsId();
Long tenantId = request == null ? null : request.getTenantId();
log.info("更新主播AI操作状态hostsId: {}, tenantId: {}", hostsId, tenantId);
return ResultUtils.success(hostInfoService.updateAiOperation(request));
}
/**
* 根据主播ID和租户ID查询直播明细
* @param detailDTO 查询条件包含hostsId和tenantId

View File

@@ -0,0 +1,23 @@
package com.yupi.springbootinit.model.dto.host;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 主播 AI 操作状态更新请求
*/
@Data
@ApiModel("主播 AI 操作状态更新请求")
public class HostAiOperationUpdateRequest implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主播ID", required = true, example = "host123")
private String hostsId;
@ApiModelProperty(value = "租户ID", required = true, example = "1001")
private Long tenantId;
}

View File

@@ -3,14 +3,10 @@ package com.yupi.springbootinit.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yupi.springbootinit.model.dto.host.HistoryDataDTO;
import com.yupi.springbootinit.model.dto.host.HostAiOperationUpdateRequest;
import com.yupi.springbootinit.model.dto.host.HostInfoDTO;
import com.yupi.springbootinit.model.entity.NewHosts;
import com.yupi.springbootinit.model.vo.hosts.NewHostsVO;
import com.yupi.springbootinit.model.vo.hosts.SevenDaysData;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/*
* @author: ziin
@@ -21,4 +17,6 @@ public interface HostInfoService extends IService<NewHosts> {
Page<NewHostsVO> getConditionHosts(HostInfoDTO hostInfoDTO);
boolean updateAiOperation(HostAiOperationUpdateRequest request);
}

View File

@@ -1,27 +1,34 @@
package com.yupi.springbootinit.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yupi.springbootinit.common.ErrorCode;
import com.yupi.springbootinit.exception.BusinessException;
import com.yupi.springbootinit.mapper.NewHostsMapper;
import com.yupi.springbootinit.model.dto.host.HostAiOperationUpdateRequest;
import com.yupi.springbootinit.model.dto.host.HostInfoDTO;
import com.yupi.springbootinit.model.entity.NewHosts;
import com.yupi.springbootinit.model.vo.hosts.NewHostsVO;
import com.yupi.springbootinit.service.HostInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/*
* @author: ziin
* @date: 2025/6/10 19:04
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class HostInfoServiceImpl extends ServiceImpl<NewHostsMapper, NewHosts> implements HostInfoService {
private static final byte AI_OPERATION_ENABLED = 1;
private static final byte NOT_DELETED = 0;
@Resource
private NewHostsMapper newHostsMapper;
@@ -31,5 +38,34 @@ public class HostInfoServiceImpl extends ServiceImpl<NewHostsMapper, NewHosts> i
return newHostsMapper.selectPageByCondition(page, hostInfoDTO);
}
@Override
public boolean updateAiOperation(HostAiOperationUpdateRequest request) {
validateAiOperationUpdateRequest(request);
List<NewHosts> matchedHosts = lambdaQuery()
.eq(NewHosts::getHostsId, request.getHostsId())
.eq(NewHosts::getTenantId, request.getTenantId())
.eq(NewHosts::getDeleted, NOT_DELETED)
.list();
if (matchedHosts.isEmpty()) {
return false;
}
boolean allAiOperationEnabled = matchedHosts.stream()
.allMatch(host -> Objects.equals(host.getAiOperation(), AI_OPERATION_ENABLED));
if (allAiOperationEnabled) {
return true;
}
return lambdaUpdate()
.eq(NewHosts::getHostsId, request.getHostsId())
.eq(NewHosts::getTenantId, request.getTenantId())
.eq(NewHosts::getDeleted, NOT_DELETED)
.set(NewHosts::getAiOperation, AI_OPERATION_ENABLED)
.update();
}
private void validateAiOperationUpdateRequest(HostAiOperationUpdateRequest request) {
if (request == null || StrUtil.isBlank(request.getHostsId()) || request.getTenantId() == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "hostsId和tenantId不能为空");
}
}
}