@@ -6,11 +6,10 @@ import com.iformall.annotation.AuthIgnore; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.base.BaseEntity; | |||
import com.iformall.domain.po.sm.MusicInfo; | |||
import com.iformall.domain.po.sm.PhotoSpeakVideo; | |||
import com.iformall.domain.po.sm.UserMouldVideo; | |||
import com.iformall.domain.po.sm.VoiceInfo; | |||
import com.iformall.domain.po.sm.*; | |||
import com.iformall.enums.EnumMouldSendType; | |||
import com.iformall.enums.EnumVideoStatus; | |||
import com.iformall.enums.EnumaMouldPatchStatus; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.service.sm.*; | |||
import com.iformall.video.VideoFactory; | |||
@@ -301,10 +300,34 @@ public class PhotoSpeakVideoController extends BaseController { | |||
@AuthIgnore | |||
@GetMapping(value = "/music") | |||
@ApiImplicitParams({ | |||
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||
@ApiOperation("获取默认音乐") | |||
public ResultData music() { | |||
List<MusicInfo> music = musicInfoService.music(); | |||
public ResultData music(@ModelAttribute MusicInfo record, Integer pageNum, Integer pageSize) { | |||
logger.debug("[" + getIpAddr() + "] UserMouldVideoController::userList"); | |||
if (record == null) record = new MusicInfo(); | |||
record.setUserId(getMemberId()); | |||
record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||
PageInfo<MusicInfo> music = musicInfoService.music(pageNum, pageSize, record); | |||
return new ResultData(music); | |||
} | |||
@ApiOperation("新增接口") | |||
@PostMapping("save") | |||
public ResultData save(@RequestBody MusicInfo record) { | |||
logger.debug("[" + getIpAddr() + "] UserMouldVideoController::save"); | |||
if (record == null) record = new MusicInfo(); | |||
record.setType(EnumMouldSendType.build.getCode()); | |||
record.setUserId(getMemberId()); | |||
record.setUrl(record.getUrl()); | |||
if (StringUtils.isBlank(record.getUrl())) { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); | |||
} | |||
if (record.getTitle() == null) { | |||
record.setTitle("用户自建"); | |||
} | |||
return musicInfoService.saveOrUpdate(record); | |||
} | |||
} |
@@ -365,10 +365,12 @@ public class WxUserGrantController extends BaseController { | |||
// } | |||
// if(isValidCode) { | |||
basicInfo = wxCUserBasicInfoService.register(getTenantInfo(),phone,password); | |||
Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId()); | |||
if (!aBoolean){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败"); | |||
} | |||
//TODO 用户 | |||
// Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId()); | |||
// if (!aBoolean){ | |||
// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败"); | |||
// } | |||
return new ResultData(); | |||
// } else { | |||
// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); | |||
@@ -413,10 +415,12 @@ public class WxUserGrantController extends BaseController { | |||
// } | |||
// if(isValidCode) { | |||
basicInfo = wxCUserBasicInfoService.registerEmail(getTenantInfo(),email,password); | |||
Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId()); | |||
if (!aBoolean){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败"); | |||
} | |||
//TODO 用户 | |||
// Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId()); | |||
// if (!aBoolean){ | |||
// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败"); | |||
// } | |||
return new ResultData(); | |||
// } else { | |||
// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); | |||
@@ -4,31 +4,32 @@ import com.baomidou.mybatisplus.annotation.TableId; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import java.util.Date; | |||
import java.io.Serializable; | |||
import com.iformall.domain.po.base.TenantEntity; | |||
import lombok.Data; | |||
/** | |||
* @Description | |||
* @Author LRH | |||
* @Date 2023-06-13 | |||
*/ | |||
@Data | |||
@TableName("music_info" ) | |||
public class MusicInfo implements Serializable { | |||
private static final long serialVersionUID = 6934358084213154592L; | |||
public class MusicInfo extends TenantEntity { | |||
/** | |||
* 主键ID | |||
*/ | |||
@TableId | |||
private Integer id; | |||
private Long id; | |||
/** | |||
* 音乐名称 | |||
*/ | |||
private String name; | |||
private Long userId; | |||
/** | |||
* 类型(1、系统音乐,2、用户上传) | |||
*/ | |||
private Integer type; | |||
/** | |||
* 音乐链接 | |||
*/ | |||
@@ -59,4 +60,6 @@ public class MusicInfo implements Serializable { | |||
*/ | |||
private Integer isDel; | |||
private String title; | |||
} |
@@ -3,6 +3,10 @@ package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.MallPermission; | |||
import com.iformall.domain.po.sm.MusicInfo; | |||
import com.iformall.domain.po.sm.PersonPhoto; | |||
import java.util.List; | |||
public interface MusicInfoServiceMapper extends CommonMapper<MusicInfo, String> { | |||
List<MusicInfo> findList(MusicInfo record); | |||
} |
@@ -1,13 +1,15 @@ | |||
package com.iformall.service.sm; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.MusicInfo; | |||
import com.iformall.domain.po.sm.VoiceMaterial; | |||
import java.util.List; | |||
public interface MusicInfoService { | |||
List<MusicInfo> music(); | |||
MusicInfo getById(Long voiceMaterialId); | |||
PageInfo<MusicInfo> music(Integer pageNum, Integer pageSize, MusicInfo record); | |||
ResultData saveOrUpdate(MusicInfo record); | |||
} |
@@ -1,15 +1,23 @@ | |||
package com.iformall.service.sm.impl; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.github.pagehelper.PageHelper; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.MusicInfo; | |||
import com.iformall.domain.po.sm.VoiceMaterial; | |||
import com.iformall.enums.EnumaMouldPatchStatus; | |||
import com.iformall.mapper.MusicInfoServiceMapper; | |||
import com.iformall.service.sm.MusicInfoService; | |||
import com.iformall.video.VideoFactory; | |||
import com.iformall.video.entity.VideUploadResult; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.util.Date; | |||
import java.util.List; | |||
@Service | |||
@@ -19,13 +27,40 @@ public class MusicInfoServiceImpl implements MusicInfoService { | |||
@Autowired | |||
private MusicInfoServiceMapper musicInfoServiceMapper; | |||
@Override | |||
public List<MusicInfo> music() { | |||
return musicInfoServiceMapper.selectList(new LambdaQueryWrapper<MusicInfo>().eq(MusicInfo::getIsDel, 0)); | |||
} | |||
@Autowired | |||
VideoFactory videoFactory; | |||
@Autowired | |||
String videoType; | |||
@Override | |||
public MusicInfo getById(Long voiceMaterialId) { | |||
return musicInfoServiceMapper.selectById(voiceMaterialId); | |||
} | |||
@Override | |||
public PageInfo<MusicInfo> music(Integer pageNum, Integer pageSize, MusicInfo record) { | |||
return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> musicInfoServiceMapper.findList(record)); | |||
} | |||
@Override | |||
public ResultData saveOrUpdate(MusicInfo record) { | |||
VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(record.getUrl()); | |||
if (videoDetail.isSuccess() && StringUtils.isNotBlank(videoDetail.getDuration()) && !"0.0".equals(videoDetail.getDuration())) { | |||
record.setTime(Long.valueOf(videoDetail.getDuration())); | |||
record.setSize(videoDetail.getSize()); | |||
} | |||
Date now = new Date(); | |||
if (record.getId() == null) { | |||
record.setId(IdWorker.get().nextId()); | |||
record.setCreateDate(now); | |||
record.setUpdateDate(now); | |||
musicInfoServiceMapper.insert(record); | |||
} else { | |||
record.setUpdateDate(now); | |||
musicInfoServiceMapper.updateById(record); | |||
} | |||
return new ResultData(record); | |||
} | |||
} |
@@ -219,20 +219,21 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
Integer sex = 1; | |||
Double videoTime = null;//用户创建视频的时长 | |||
//TODO 关闭用户相关流程 | |||
UserCreateVideoNum videoNum = userCreateVideoNumService.queryInfoByUserId(photoSpeakVideo.getUserId()); | |||
if (videoNum == null) { | |||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUpd.setVideoMsg("用户没有创建视频时长"); | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} else { | |||
if (DateUtils.isDateAfter(String.valueOf(videoNum.getEffectiveDate()))) { | |||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUpd.setVideoMsg("有效期已到期"); | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} | |||
} | |||
// if (videoNum == null) { | |||
// videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
// videoUpd.setVideoMsg("用户没有创建视频时长"); | |||
// this.saveOrUpdate(videoUpd); | |||
// return new AsyncResult<>(0); | |||
// } else { | |||
// if (DateUtils.isDateAfter(String.valueOf(videoNum.getEffectiveDate()))) { | |||
// videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
// videoUpd.setVideoMsg("有效期已到期"); | |||
// this.saveOrUpdate(videoUpd); | |||
// return new AsyncResult<>(0); | |||
// } | |||
// } | |||
String voiceMaterialUrl = null; | |||
if(EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)){ | |||
@@ -253,7 +254,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
msg = "参数错误,未找到声音模板数据"; | |||
} | |||
//判断用户时长是否够创建该视频 | |||
//获取视频时长 | |||
AiPreviewParam param = new AiPreviewParam(); | |||
if (StringUtils.isBlank(photoSpeakVideo.getPaperwork())){ | |||
msg = "未填写视频文案数据"; | |||
@@ -306,21 +307,23 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} | |||
//TODO 关闭用户相关流程 | |||
//获取套餐信息 | |||
UserConsumptionPackage infoById = userConsumptionPackageService.getPackageInfoById(videoNum.getPackageId()); | |||
if (infoById == null){ | |||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUpd.setVideoMsg("套餐信息不存在"); | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} | |||
//生成视频时长不能超过对应套餐的时长 | |||
if (infoById.getChargeTime() < videoTime) { | |||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUpd.setVideoMsg("视频时长不能超过" + infoById.getChargeTime() + "s"); | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} | |||
// UserConsumptionPackage infoById = userConsumptionPackageService.getPackageInfoById(videoNum.getPackageId()); | |||
// if (infoById == null){ | |||
// videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
// videoUpd.setVideoMsg("套餐信息不存在"); | |||
// this.saveOrUpdate(videoUpd); | |||
// return new AsyncResult<>(0); | |||
// } | |||
// //生成视频时长不能超过对应套餐的时长 | |||
// if (infoById.getChargeTime() < videoTime) { | |||
// videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
// videoUpd.setVideoMsg("视频时长不能超过" + infoById.getChargeTime() + "s"); | |||
// this.saveOrUpdate(videoUpd); | |||
// return new AsyncResult<>(0); | |||
// } | |||
videoUpd.setVideoTime(String.valueOf(videoTime)); | |||
if(StringUtils.isBlank(voiceMouldSmId) && StringUtils.isBlank(voiceMaterialUrl)){ | |||
@@ -341,19 +344,19 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
double useCredit = 0; | |||
//修改用户创建视频时间表 | |||
if (flag) { | |||
//每秒消耗的积分 | |||
double i = (double)( videoNum.getVideoPrice() / 60); | |||
i = i < 1 ? 1.0 : i; //如果小于1 就直接取1 | |||
//用户创建视频需要时积分 | |||
useCredit = (videoTime * i); | |||
//判断用户积分是否足够 | |||
if (videoNum.getResidueCredits() < useCredit) { | |||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUpd.setVideoMsg("创建视频时长不足,请充值"); | |||
this.saveOrUpdate(videoUpd); | |||
return new AsyncResult<>(0); | |||
} | |||
useCredit = Math.round(useCredit); | |||
// //每秒消耗的积分 | |||
// double i = (double)( videoNum.getVideoPrice() / 60); | |||
// i = i < 1 ? 1.0 : i; //如果小于1 就直接取1 | |||
// //用户创建视频需要时积分 | |||
// useCredit = (videoTime * i); | |||
// //判断用户积分是否足够 | |||
// if (videoNum.getResidueCredits() < useCredit) { | |||
// videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
// videoUpd.setVideoMsg("创建视频时长不足,请充值"); | |||
// this.saveOrUpdate(videoUpd); | |||
// return new AsyncResult<>(0); | |||
// } | |||
// useCredit = Math.round(useCredit); | |||
//如果时间够,就去减去相对应的数据 | |||
userCreateVideoNumService.addOrSubtractNumberOfTimes(1, videoNum, useCredit, videoTime); | |||
} | |||
@@ -398,14 +401,14 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
videoUpd.setTitle(photoSpeakVideo.getTitle()); | |||
UserCreditLog log = new UserCreditLog(); | |||
log.setId(IdWorker.get().nextId()); | |||
log.setUserId(photoSpeakVideo.getUserId()); | |||
log.setCredits(-(float)useCredit); | |||
log.setType(EnumLogType.PHOTO_SPEAK.getCode()); | |||
log.setRemark(EnumLogType.PHOTO_SPEAK.getMessage()); | |||
log.setVideoOrPhotoOrTalkId(videoUpd.getId()); | |||
userCreditLogService.insertLog(log); | |||
// UserCreditLog log = new UserCreditLog(); | |||
// log.setId(IdWorker.get().nextId()); | |||
// log.setUserId(photoSpeakVideo.getUserId()); | |||
// log.setCredits(-(float)useCredit); | |||
// log.setType(EnumLogType.PHOTO_SPEAK.getCode()); | |||
// log.setRemark(EnumLogType.PHOTO_SPEAK.getMessage()); | |||
// log.setVideoOrPhotoOrTalkId(videoUpd.getId()); | |||
// userCreditLogService.insertLog(log); | |||
this.uploadVideo(videoUpd); | |||
@@ -0,0 +1,16 @@ | |||
<?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="com.iformall.mapper.MusicInfoServiceMapper"> | |||
<select id="findList" resultType="com.iformall.domain.po.sm.MusicInfo"> | |||
SELECT id, update_date, size, name, time, is_del, url, create_date, user_id, type | |||
FROM music_info | |||
WHERE is_del = 0 | |||
<if test="type == 1"> | |||
and type = #{type} and userId = 0 | |||
</if> | |||
<if test="type == 2"> | |||
and type = #{type} userId = #{userId} | |||
</if> | |||
</select> | |||
</mapper> |
@@ -7,12 +7,12 @@ | |||
UPDATE user_create_video_num | |||
<set> | |||
<if test="type == 1"> | |||
residue_credits = #{createVideoNum.residueCredits} - #{useCredit}, | |||
-- residue_credits = #{createVideoNum.residueCredits} - #{useCredit}, | |||
create_num = #{createVideoNum.createNum} + 1, | |||
create_all_time = #{createVideoNum.createAllTime} + #{time} | |||
</if> | |||
<if test="type == 2"> | |||
residue_credits = #{createVideoNum.residueCredits} + #{useCredit}, | |||
-- residue_credits = #{createVideoNum.residueCredits} + #{useCredit}, | |||
create_num = #{createVideoNum.createNum} - 1, | |||
create_all_time = #{createVideoNum.createAllTime} - #{time} | |||
</if> | |||