Browse Source

创建对讲平台的语音同步表

master^2
fbw 2 days ago
parent
commit
d873dca786
  1. 89
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/RecordAudioController.java
  2. 66
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioPageReqVO.java
  3. 59
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioRespVO.java
  4. 12
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioSaveReqVO.java
  5. 93
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/dal/dataobject/recordaudio/RecordAudioDO.java
  6. 41
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/dal/mysql/recordaudio/RecordAudioMapper.java
  7. 7
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/enums/ErrorCodeConstants.java
  8. 62
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/service/recordaudio/RecordAudioService.java
  9. 81
      cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/service/recordaudio/RecordAudioServiceImpl.java
  10. 12
      cc-admin-master/yudao-module-interphone/src/main/resources/mapper/recordaudio/RecordAudioMapper.xml

89
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/RecordAudioController.java

@ -0,0 +1,89 @@
package cn.iocoder.yudao.module.interphone.controller.admin.recordaudio;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo.*;
import cn.iocoder.yudao.module.interphone.dal.dataobject.recordaudio.RecordAudioDO;
import cn.iocoder.yudao.module.interphone.service.recordaudio.RecordAudioService;
@Tag(name = "管理后台 - 实时录音记录")
@RestController
@RequestMapping("/interphone/record-audio")
@Validated
public class RecordAudioController {
@Resource
private RecordAudioService recordAudioService;
@PostMapping("/create")
@Operation(summary = "创建实时录音记录")
@PreAuthorize("@ss.hasPermission('interphone:record-audio:create')")
public CommonResult<Long> createRecordAudio(@Valid @RequestBody RecordAudioSaveReqVO createReqVO) {
return success(recordAudioService.createRecordAudio(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新实时录音记录")
@PreAuthorize("@ss.hasPermission('interphone:record-audio:update')")
public CommonResult<Boolean> updateRecordAudio(@Valid @RequestBody RecordAudioSaveReqVO updateReqVO) {
recordAudioService.updateRecordAudio(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除实时录音记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('interphone:record-audio:delete')")
public CommonResult<Boolean> deleteRecordAudio(@RequestParam("id") Long id) {
recordAudioService.deleteRecordAudio(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除实时录音记录")
@PreAuthorize("@ss.hasPermission('interphone:record-audio:delete')")
public CommonResult<Boolean> deleteRecordAudioList(@RequestParam("ids") List<Long> ids) {
recordAudioService.deleteRecordAudioListByIds(ids);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得实时录音记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('interphone:record-audio:query')")
public CommonResult<RecordAudioRespVO> getRecordAudio(@RequestParam("id") Long id) {
RecordAudioDO recordAudio = recordAudioService.getRecordAudio(id);
return success(BeanUtils.toBean(recordAudio, RecordAudioRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得实时录音记录分页")
@PreAuthorize("@ss.hasPermission('interphone:record-audio:query')")
public CommonResult<PageResult<RecordAudioRespVO>> getRecordAudioPage(@Valid RecordAudioPageReqVO pageReqVO) {
PageResult<RecordAudioDO> pageResult = recordAudioService.getRecordAudioPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, RecordAudioRespVO.class));
}
}

66
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioPageReqVO.java

@ -0,0 +1,66 @@
package cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 实时录音记录分页 Request VO")
@Data
public class RecordAudioPageReqVO extends PageParam {
@Schema(description = "第三方录音ID", example = "29527")
private String thirdId;
@Schema(description = "终端ID", example = "13888")
private Integer tId;
@Schema(description = "用户ID", example = "5926")
private Long userId;
@Schema(description = "用户名", example = "芋艿")
private String userName;
@Schema(description = "群组ID", example = "4378")
private Long groupId;
@Schema(description = "群组名称", example = "张三")
private String groupName;
@Schema(description = "群组类型", example = "2")
private Integer groupType;
@Schema(description = "组织ID", example = "12968")
private Long orgId;
@Schema(description = "录音时长毫秒")
private Integer durationMs;
@Schema(description = "音频路径")
private String audioPath;
@Schema(description = "完整音频OSS URL", example = "https://www.iocoder.cn")
private String audioOssUrl;
@Schema(description = "编码格式")
private String codeFormat;
@Schema(description = "录音时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] audioTime;
@Schema(description = "ASR状态 0未处理 1处理中 2完成 3失败", example = "2")
private Integer asrStatus;
@Schema(description = "语音识别结果")
private String asrText;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

59
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioRespVO.java

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 实时录音记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class RecordAudioRespVO {
@Schema(description = "用户名", example = "芋艿")
@ExcelProperty("用户名")
private String userName;
@Schema(description = "群组名称", example = "张三")
@ExcelProperty("群组名称")
private String groupName;
@Schema(description = "群组类型", example = "2")
@ExcelProperty("群组类型")
private Integer groupType;
@Schema(description = "录音时长毫秒")
@ExcelProperty("录音时长毫秒")
private Integer durationMs;
@Schema(description = "音频路径")
@ExcelProperty("音频路径")
private String audioPath;
@Schema(description = "完整音频OSS URL", example = "https://www.iocoder.cn")
@ExcelProperty("完整音频OSS URL")
private String audioOssUrl;
@Schema(description = "编码格式")
@ExcelProperty("编码格式")
private String codeFormat;
@Schema(description = "录音时间")
@ExcelProperty("录音时间")
private LocalDateTime audioTime;
@Schema(description = "ASR状态 0未处理 1处理中 2完成 3失败", example = "2")
@ExcelProperty("ASR状态 0未处理 1处理中 2完成 3失败")
private Integer asrStatus;
@Schema(description = "语音识别结果")
@ExcelProperty("语音识别结果")
private String asrText;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

12
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/controller/admin/recordaudio/vo/RecordAudioSaveReqVO.java

@ -0,0 +1,12 @@
package cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
@Schema(description = "管理后台 - 实时录音记录新增/修改 Request VO")
@Data
public class RecordAudioSaveReqVO {
}

93
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/dal/dataobject/recordaudio/RecordAudioDO.java

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.interphone.dal.dataobject.recordaudio;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 实时录音记录 DO
*
* @author 超级管理员
*/
@TableName("interphone_record_audio")
@KeySequence("interphone_record_audio_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RecordAudioDO extends BaseDO {
/**
* 本地ID
*/
@TableId
private Long id;
/**
* 第三方录音ID
*/
private String thirdId;
/**
* 终端ID
*/
private Integer tId;
/**
* 用户ID
*/
private Long userId;
/**
* 用户名
*/
private String userName;
/**
* 群组ID
*/
private Long groupId;
/**
* 群组名称
*/
private String groupName;
/**
* 群组类型
*/
private Integer groupType;
/**
* 组织ID
*/
private Long orgId;
/**
* 录音时长毫秒
*/
private Integer durationMs;
/**
* 音频路径
*/
private String audioPath;
/**
* 完整音频OSS URL
*/
private String audioOssUrl;
/**
* 编码格式
*/
private String codeFormat;
/**
* 录音时间
*/
private LocalDateTime audioTime;
/**
* ASR状态 0未处理 1处理中 2完成 3失败
*/
private Integer asrStatus;
/**
* 语音识别结果
*/
private String asrText;
}

41
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/dal/mysql/recordaudio/RecordAudioMapper.java

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.interphone.dal.mysql.recordaudio;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.interphone.dal.dataobject.recordaudio.RecordAudioDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo.*;
/**
* 实时录音记录 Mapper
*
* @author 超级管理员
*/
@Mapper
public interface RecordAudioMapper extends BaseMapperX<RecordAudioDO> {
default PageResult<RecordAudioDO> selectPage(RecordAudioPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RecordAudioDO>()
.eqIfPresent(RecordAudioDO::getThirdId, reqVO.getThirdId())
.eqIfPresent(RecordAudioDO::getTId, reqVO.getTId())
.eqIfPresent(RecordAudioDO::getUserId, reqVO.getUserId())
.likeIfPresent(RecordAudioDO::getUserName, reqVO.getUserName())
.eqIfPresent(RecordAudioDO::getGroupId, reqVO.getGroupId())
.likeIfPresent(RecordAudioDO::getGroupName, reqVO.getGroupName())
.eqIfPresent(RecordAudioDO::getGroupType, reqVO.getGroupType())
.eqIfPresent(RecordAudioDO::getOrgId, reqVO.getOrgId())
.eqIfPresent(RecordAudioDO::getDurationMs, reqVO.getDurationMs())
.eqIfPresent(RecordAudioDO::getAudioPath, reqVO.getAudioPath())
.eqIfPresent(RecordAudioDO::getAudioOssUrl, reqVO.getAudioOssUrl())
.eqIfPresent(RecordAudioDO::getCodeFormat, reqVO.getCodeFormat())
.betweenIfPresent(RecordAudioDO::getAudioTime, reqVO.getAudioTime())
.eqIfPresent(RecordAudioDO::getAsrStatus, reqVO.getAsrStatus())
.eqIfPresent(RecordAudioDO::getAsrText, reqVO.getAsrText())
.betweenIfPresent(RecordAudioDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(RecordAudioDO::getId));
}
}

7
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/enums/ErrorCodeConstants.java

@ -0,0 +1,7 @@
package cn.iocoder.yudao.module.interphone.enums;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
public interface ErrorCodeConstants {
ErrorCode RECORD_AUDIO_NOT_EXISTS = new ErrorCode(1000101, "实时录音记录不存在");
}

62
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/service/recordaudio/RecordAudioService.java

@ -0,0 +1,62 @@
package cn.iocoder.yudao.module.interphone.service.recordaudio;
import java.util.*;
import jakarta.validation.*;
import cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo.*;
import cn.iocoder.yudao.module.interphone.dal.dataobject.recordaudio.RecordAudioDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 实时录音记录 Service 接口
*
* @author 超级管理员
*/
public interface RecordAudioService {
/**
* 创建实时录音记录
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createRecordAudio(@Valid RecordAudioSaveReqVO createReqVO);
/**
* 更新实时录音记录
*
* @param updateReqVO 更新信息
*/
void updateRecordAudio(@Valid RecordAudioSaveReqVO updateReqVO);
/**
* 删除实时录音记录
*
* @param id 编号
*/
void deleteRecordAudio(Long id);
/**
* 批量删除实时录音记录
*
* @param ids 编号
*/
void deleteRecordAudioListByIds(List<Long> ids);
/**
* 获得实时录音记录
*
* @param id 编号
* @return 实时录音记录
*/
RecordAudioDO getRecordAudio(Long id);
/**
* 获得实时录音记录分页
*
* @param pageReqVO 分页查询
* @return 实时录音记录分页
*/
PageResult<RecordAudioDO> getRecordAudioPage(RecordAudioPageReqVO pageReqVO);
}

81
cc-admin-master/yudao-module-interphone/src/main/java/cn/iocoder/yudao/module/interphone/service/recordaudio/RecordAudioServiceImpl.java

@ -0,0 +1,81 @@
package cn.iocoder.yudao.module.interphone.service.recordaudio;
import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.interphone.controller.admin.recordaudio.vo.*;
import cn.iocoder.yudao.module.interphone.dal.dataobject.recordaudio.RecordAudioDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.interphone.dal.mysql.recordaudio.RecordAudioMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
import static cn.iocoder.yudao.module.interphone.enums.ErrorCodeConstants.*;
/**
* 实时录音记录 Service 实现类
*
* @author 超级管理员
*/
@Service
@Validated
public class RecordAudioServiceImpl implements RecordAudioService {
@Resource
private RecordAudioMapper recordAudioMapper;
@Override
public Long createRecordAudio(RecordAudioSaveReqVO createReqVO) {
// 插入
RecordAudioDO recordAudio = BeanUtils.toBean(createReqVO, RecordAudioDO.class);
recordAudioMapper.insert(recordAudio);
// 返回
return recordAudio.getId();
}
@Override
public void updateRecordAudio(RecordAudioSaveReqVO updateReqVO) {
}
@Override
public void deleteRecordAudio(Long id) {
// 校验存在
validateRecordAudioExists(id);
// 删除
recordAudioMapper.deleteById(id);
}
@Override
public void deleteRecordAudioListByIds(List<Long> ids) {
// 删除
recordAudioMapper.deleteByIds(ids);
}
private void validateRecordAudioExists(Long id) {
if (recordAudioMapper.selectById(id) == null) {
throw exception(RECORD_AUDIO_NOT_EXISTS);
}
}
@Override
public RecordAudioDO getRecordAudio(Long id) {
return recordAudioMapper.selectById(id);
}
@Override
public PageResult<RecordAudioDO> getRecordAudioPage(RecordAudioPageReqVO pageReqVO) {
return recordAudioMapper.selectPage(pageReqVO);
}
}

12
cc-admin-master/yudao-module-interphone/src/main/resources/mapper/recordaudio/RecordAudioMapper.xml

@ -0,0 +1,12 @@
<?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="cn.iocoder.yudao.module.interphone.dal.mysql.recordaudio.RecordAudioMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>
Loading…
Cancel
Save