批量修改具体规则信息(并生成对应语音包)
<p>//2.批量修改具体规则信息(同时生成对应语音包)
@PostMapping("/updateSpecificRegulars")
public Result<Object> updateSpecificRegulars(@RequestBody Map<String, Object> params, HttpServletRequest request) {</p>
<pre><code>//权限验证
String token = (String) request.getAttribute("claims_admin");
if (token == null || "".equals(token)) {
throw new RuntimeException("权限不足!");
}
log.info("updateSpecificRegulars的请求报文:" + params);
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(params));
JSONArray jsonArray = jsonObject.getJSONArray("specificRegular");
List<SpecificRegular> specificRegulars = JSONObject.parseArray(jsonArray.toJSONString(), SpecificRegular.class);//集合(前端传递的要修改的对象集合)
List<SpecificRegular> specificRegularList = new ArrayList<>(); //存放所有修改过的对象
String phone = (String) params.get("phone");
String userCode = (String) params.get("code");
String specificRegularUpdate_uuid = redisTemplate.opsForValue().get("specificRegularUpdate_uuid" + phone);
String myCode = redisTemplate.opsForValue().get("sRegularUpdate_" + specificRegularUpdate_uuid + phone);
if (!userCode.equals(myCode)) {
log.error("验证码错误!");
return new Result<>(ResultCode.CODE_FALSE);
}
log.info("验证码正确!");
//判断集合不为空
if (!CollectionUtils.isEmpty(specificRegulars)) {
//遍历前端发来的要修改信息的对象集合
for (SpecificRegular specificRegular : specificRegulars) {
//通过前端传递的具体规则id在数据库找到对应的具体规则
SpecificRegular specificRegularMy = specificRegularService.queryOneSpecificRegularByID(specificRegular.getSpecificRegularId());
if (specificRegularMy != null) {
//语音播报文字不为空,扣分情况不为0
if (StringUtils.hasText(specificRegular.getVoiceBroadcastText()) && specificRegular.getDemeritState() != 0) {
log.info("语音播报文字不为空,扣分情况不为0");
//判断前端传来的参数与数据库里的参数是否相等
if (!specificRegular.getVoiceBroadcastText().equals(specificRegularMy.getVoiceBroadcastText()) || !specificRegular.getDemeritState().equals(specificRegularMy.getDemeritState())) {
log.info("前端传来的参数与数据库里的参数不相等!");
//生成语音包
String audioText = specificRegular.getVoiceBroadcastText() + ',扣' + specificRegular.getDemeritState() + '分';
//拿到当前项目类型(语音包名称需要)
Project project = projectService.queryOneProjectByID(specificRegularMy.getProjectId());
//名称(2(科目)-1(倒车入库的编号)-10(所有项目扣分参考编号))
String audioFileFirstName = project.getProjectTypeId().toString() + '-' + specificRegularMy.getProjectId().toString() + '-' + specificRegularMy.getAllPrDemeritInfoId().toString();
//文件名(当前时间.音频格式)
String audioFileSecondName = System.currentTimeMillis() + '.wma';
//路径D:/new_audio/2(科目)-1(倒车入库的编号)-10(所有项目扣分参考编号)_yyyy-MM-dd-HH-mm-ss.wma
String pathName = audioPath + audioFileFirstName + '_' + audioFileSecondName;
//生成语音包前先去D:/new_audio/看有没有存在语音包,存在了删除
File folder = new File(audioPath);
File[] files = folder.listFiles();
if (files != null) {
log.info("D:/new_audio/不为空!");
for (File file : files) {
String fileName = file.getName();
if (fileName.contains('_')) {
String[] fileNames = fileName.split('_');
if (fileNames.length > 1 && fileNames[0].equals(audioFileFirstName)) {
boolean b = file.delete();
if (b) {
log.info("文件删除成功!");
if (specificRegularMy.getAudioFileId() != null) {
AudioFile audioFile = audioFileService.queryOneAudioFileByID(specificRegularMy.getAudioFileId());
if (audioFile == null) {
log.error("文件查找不到!");
return new Result<>(ResultCode.FAIL);
}
int ret = audioFileService.deleteOneAudioFileByIdAndName(specificRegularMy.getAudioFileId(), fileNames[1]);
if (ret > 0) {
log.info("数据库语音数据删除成功!");
//通知游戏端删除语音包
log.info("需要删除的语音包:" + audioFile);
springToGameService.reloadDeleteAudioFile(audioFile);
} else {
log.info("找不到id:" + specificRegularMy.getAudioFileId() + "文件名:" + fileNames[1] + "的数据库语音数据!");
}
}
} else {
log.error("文件删除失败!");
return new Result<>(ResultCode.FAIL);
}
}
}
}
}
//调用语音合成方法合成语音
boolean b = SpeechUtil.SpeechSynthesizer(audioText, pathName);
if (b) {
log.info("语音包合成成功!");
//新增一个语音包
AudioFile audioFile = new AudioFile();
audioFile.setAudioFileFirstName(audioFileFirstName);
audioFile.setAudioFileSecondName(audioFileSecondName);
audioFile.setAudioFilePath(pathName);
int ret = audioFileService.addOneAudioFile(audioFile);
if (ret > 0) {
log.info("新增语音包成功!");
springToGameService.reloadAddAudioFile(audioFile);
//将前端传过来需要修改的信息赋值给上面查出的对象
specificRegularMy.setJudgeState(specificRegular.getJudgeState());//评判状态
specificRegularMy.setSpecificJudgeParam(specificRegular.getSpecificJudgeParam());//评判参数
specificRegularMy.setVoiceBroadcastText(specificRegular.getVoiceBroadcastText());//语音播报文字
specificRegularMy.setDemeritState(specificRegular.getDemeritState());//扣分情况
specificRegularMy.setAudioFileId(audioFile.getAudioFileId());//语音文件id
//把修改的对象放入集合
specificRegularList.add(specificRegularMy);
} else {
log.error("新增语音包失败!");
return new Result<>(ResultCode.FAIL);
}
} else {
log.error("语音包合成失败");
return new Result<>(ResultCode.FAIL);
}
}
}
}
}
//for循环结束开始操作数据库
//调用方法批量修改具体规则
boolean batchUpdate = specificRegularService.updateBatchById(specificRegularList);
if (batchUpdate) {
log.info("具体规则批量修改成功!");
//通知游戏端修改的具体规则
for (SpecificRegular specificRegular : specificRegularList) {
List<DeviceEntity> deviceEntities = deviceEntityService.queryDevicesByRegularId(specificRegular.getRegularId());
//此具体规则的总规则绑定了设备才去通知游戏端修改了具体规则
if (!CollectionUtils.isEmpty(deviceEntities)) {
springToGameService.reloadUpdateSpecificRegular(specificRegularList);
}
}
return new Result<>(ResultCode.SUCCESS);
} else {
log.error("具体规则批量修改失败!");
return new Result<>(ResultCode.FAIL);
}
} else {
log.error("前端传回集合为空");
return new Result<>(ResultCode.FAIL);
}
</code></pre>
<p>}</p>
原文地址: https://www.cveoy.top/t/topic/qqUk 著作权归作者所有。请勿转载和采集!